2016-09-21 6 views
3

J'essaie d'utiliser lxml.etree pour reproduire l'exemple CDA trouvé dans le CDA QuickStart Guide found here.lxml xsi: espace de noms schemaLocation problème de validation URI

En particulier, je rencontre des problèmes avec les espaces de noms qui tentent de recréer cet élément.

<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:mif="urn:hl7-org:v3/mif" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:hl7-org:v3 CDA.xsd"> 

Le code J'utilise est la suivante

root = etree.Element('ClinicalDocument', 
        nsmap={None: 'urn:hl7-org:v3', 
          'mif': 'urn:hl7-org:v3/mif', 
          'xsi': 'http://www.w3.org/2001/XMLSchema-instance', 
          '{http://www.w3.org/2001/XMLSchema-instance}schemaLocation': 'urn:hl7-org:v3 CDA.xsd'}) 

Le problème est avec l'entrée en schemaLocationnsmap. lxml semble essayer de valider la valeur et donne l'erreur

ValueError: Invalid namespace URI u'urn:hl7-org:v3 CDA.xsd' 

Suis-je spécifiant la valeur schemaLocation mal? Existe-t-il un moyen de forcer lxml à accepter n'importe quelle valeur de chaîne? Ou la valeur dans l'exemple est-elle simplement destinée à être un espace réservé que je suis supposé remplacer par quelque chose d'autre?

Répondre

2

nsmap est un mappage des préfixes aux URI d'espaces de noms. urn:hl7-org:v3 CDA.xsd est une valeur valide pour l'attribut xsi:schemaLocation, mais ce n'est pas un URI d'espace de noms valide.

La solution à une question similaire, How to include the namespaces into a xml file using lxmf?, fonctionne ici aussi. Utilisez QName pour créer l'attribut xsi:schemaLocation.

from lxml import etree 

attr_qname = etree.QName("http://www.w3.org/2001/XMLSchema-instance", "schemaLocation") 

root = etree.Element('ClinicalDocument', 
        {attr_qname: 'urn:hl7-org:v3 CDA.xsd'}, 
        nsmap={None: 'urn:hl7-org:v3', 
          'mif': 'urn:hl7-org:v3/mif', 
          'xsi': 'http://www.w3.org/2001/XMLSchema-instance', 
          }) 
+0

Merci d'avoir creusé cela, j'avais renoncé à trouver la réponse. – user3419537