【问题标题】:lxml xsi:schemaLocation namespace URI validation issuelxml xsi:schemaLocation 命名空间 URI 验证问题
【发布时间】:2016-09-21 14:11:21
【问题描述】:

我正在尝试使用lxml.etree 来重现CDA QuickStart Guide found here 中的CDA 示例。

特别是,我在尝试重新创建此元素时遇到了命名空间问题。

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

问题在于nsmap 中的schemaLocation 条目。 lxml 似乎正在尝试验证该值并给出错误

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

我是否错误地指定了 schemaLocation 值?有没有办法强制lxml 接受任何字符串值?还是示例中的值只是为了成为我应该用其他东西替换的占位符?

【问题讨论】:

    标签: python xml lxml xml-namespaces cda


    【解决方案1】:

    nsmap 是前缀到命名空间 URI 的映射。 urn:hl7-org:v3 CDA.xsdxsi:schemaLocationattribute 的有效值,但它不是有效的命名空间 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',
                                })
    

    【讨论】:

    • 感谢您挖掘这个,我已经放弃寻找答案了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多