我正在尝试验证给定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的引用
答案 0 :(得分:0)
XSD是python的独立标准。您在XSD文件中的模式需要符合XSD语法。
XSD正则表达式的官方定义如下:http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#dt-regex
答案 1 :(得分:0)
<xs:pattern value="*.{0,10}*"/>
我用过
<xsd:pattern value="(Pattern|.{0})"/>
以匹配模式或空白。