lxml XSD处理报告空字符串与应匹配的正则表达式不匹配。为什么?

时间:2012-01-19 10:56:48

标签: xml regex xsd lxml

我正在尝试验证给定xsd文件的文档,在Python中使用lxml:

from lxml import etree

xmlschema_doc = etree.parse('somefile.xsd')
xmlschema = etree.XMLSchema(xmlschema_doc)
xml_doc = etree.parse('somefile.xml')

xmlschema.assertValid(xml_doc)

我收到了一个错误:

lxml.etree.DocumentInvalid: Element 'someelement': [facet 'pattern'] The value '' is not accepted by the pattern '\s*.{0,10}\s*'., line 24

第24行是:

<someelement></somelement>

我的XSD文件中指定的内容如下:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
    <xs:simpleType name="someelement">
        <xs:restriction base="xs:string">
            <xs:pattern value="\s*.{0,10}\s*"/>
        </xs:restriction>
    </xs:simpleType>

这里奇怪的是空字符串应该对模式\s*.{0,10}\s*

有效

你有任何解释吗?

编辑:添加someelement的XSD定义并删除对python的引用

2 个答案:

答案 0 :(得分:0)

XSD是python的独立标准。您在XSD文件中的模式需要符合XSD语法。

XSD正则表达式的官方定义如下:http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#dt-regex

答案 1 :(得分:0)

在你的正则表达式中,删除\ s使其看起来像

<xs:pattern value="*.{0,10}*"/>

我用过

<xsd:pattern value="(Pattern|.{0})"/>

以匹配模式或空白。