2017-10-10 15 views
1

J'essaye de reconstruire un fichier TEI-XML avec lxml.Ecriture d'un attribut xml: id avec lxml

Le début de mon dossier ressemble à ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-model href="https://www.ssrq-sds-fds.ch/tei/TEI_Schema_SSRQ.rng" 
      type="application/xml" 
      schematypens="http://relaxng.org/ns/structure/1.0"?> 
<?xml-model href="https://www.ssrq-sds-fds.ch/tei/TEI_Schema_SSRQ.rng" 
      type="application/xml" 
      schematypens="http://purl.oclc.org/dsdl/schematron"?> 
<?xml-stylesheet type="text/css" 
       href="https://www.ssrq-sds-fds.ch/tei/Textkritik_Version_tei-ssrq.css"?> 

<TEI xmlns:xi="http://www.w3.org/2001/XInclude" 
    xmlns="http://www.tei-c.org/ns/1.0" n="" 
    xml:id="[To be generated]" <!-- e.g. StAAG_U-17_0007a --> > 

Les quatre premières lignes ne devraient pas trop d'importance à mon avis, mais je les ai inclus pour être complet. Mon problème commence avec le TEI-Element. donc mon code pour copier cela ressemble à ceci:

NSMAP = {"xml":"http://www.tei-c.org/ns/1.0", 
     "xi":"http://www.w3.org/2001/XInclude"} 
root = et.Element('TEI', n="", nsmap=NSMAP) 
root.attrib["id"] = xml_id 
root.attrib["xmlns"] = "http://www.tei-c.org/ns/1.0" 

La chaîne xml_id est affecté à un moment donné avant et n'a pas d'importance pour ma question. Donc, mes codes me retourne cette ligne:

<TEI xmlns:xi="http://www.w3.org/2001/XInclude" 
    n="" 
    id="StAAG_U-17_0006" 
    xmlns="http://www.tei-c.org/ns/1.0"> 

La seule chose qui manque est cet attribut xml:id. J'ai trouvé cette page de spécification: https://www.w3.org/TR/xml-id/ et je sais qu'il est mentionné pour être pris en charge dans lxml dans son FAQ.

Btw, root.attrib["xml:id"] ne fonctionne pas, car il ne s'agit pas d'un nom d'attribut viable. Donc, est-ce que quelqu'un sait comment je peux attribuer mon identifiant à l'attribut xml:id d'elemnt?

Répondre

2

Vous devez spécifier que id fait partie de l'espace de noms par défaut xml. Essayez ceci:

root.attrib["{http://www.w3.org/XML/1998/namespace}id"] = xml_id 

Référence: https://www.w3.org/TR/xml-names/#ns-decl