2016-09-21 12 views
3

CDA QuickStart Guide found hereにあるCDAの例を再現するためにlxml.etreeを使用しようとしています。lxml xsi:schemaLocation名前空間URI検証の問題

特に、この要素を再作成しようとする名前空間に関する問題が発生しています。問題はnsmapschemaLocationエントリである

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'}) 

を次のように

<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"> 

私が使用しているコードがあります。 lxmlが値を検証しようとしているように表示され、エラーに

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

を与え、私は間違ってschemaLocation値を指定するのですか? lxmlに任意の文字列値を受け入れる方法はありますか?または、この例の値は、単に私が別のものに置き換えるはずのプレースホルダであることを意図していますか?

答えて

2

nsmapは、名前空間URIへの接頭辞のマッピングです。 urn:hl7-org:v3 CDA.xsdxsi:schemaLocation属性の有効な値ですが、有効な名前空間URIではありません。

同様の質問への解決方法、How to include the namespaces into a xml file using lxmf?もここでも有効です。 xsi:schemaLocation属性を作成するには、QNameを使用します。

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

これを掘り下げてくれてありがとうございました。私は答えを見つけることをあきらめていました。 – user3419537

関連する問題