2016-09-21 6 views
3

Я пытаюсь использовать lxml.etree для воспроизведения примера CDA, найденного в CDA QuickStart Guide found here.lxml xsi: schemaLocation namespace Ошибка проверки URI

В частности, у меня возникают проблемы с пространствами имен, которые пытаются воссоздать этот элемент.

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

код я использую следующие

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

Проблема заключается с schemaLocation записи в nsmap. lxml, кажется, пытается проверить значение и дает ошибку

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

Могу ли я, указав значение schemaLocation неправильно? Есть ли способ заставить lxml принять любое строковое значение? Или значение в примере просто предназначено для замены, которое я должен заменить чем-то другим?

ответ

2

nsmap - это отображение префиксов в URI пространства имен. urn:hl7-org:v3 CDA.xsd - допустимое значение для атрибута xsi:schemaLocation, но это недопустимый URI пространства имен.

Решение подобного вопроса, How to include the namespaces into a xml file using lxmf?, здесь тоже работает. Используйте QName, чтобы создать атрибут 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

Спасибо, что выкопали это, я отказался от поиска ответа. – user3419537

Смежные вопросы