libxml2 / xmllint / lxml在验证xsd:int时不忽略空格

时间:2014-03-18 09:54:57

标签: python xml validation xsd

以下python脚本包含一个简单的XML模式,用于定义元素' a'整数类型和包含此类元素的XML文档。根据模式验证文档时,验证失败。

from lxml import etree
from StringIO import StringIO

xmlschema = etree.XMLSchema(etree.parse(StringIO('''\
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="a" type="xsd:int"/>
</xsd:schema>
''')))

xmldoc = etree.parse(StringIO("<a> 42</a>"))

print xmlschema.validate(xmldoc)

使用xmllint验证时会发生同样的故障:

$ xmllint --schema test_schema.xml test_doc.xml 
<?xml version="1.0"?>
<a> 42</a>
test_doc.xml:1: element a: Schemas validity error : Element 'a': ' 42' is not a valid value of the atomic type 'xs:int'.
test_doc.xml fails to validate

根据XML Schema Part 2: Datatypes Second Edition, section 4.3.6所有原子数据类型除了&#39; string&#39;拥有他们的“whiteSpace”&#39;约束设置为&#39;崩溃&#39;所以元素&#39; a&#39;应该是有效的。

修改架构以明确设置&#39; whiteSpace&#39;崩溃&#39;没有帮助:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:simpleType name="myint">
    <xsd:restriction base="xsd:int">
      <xsd:whiteSpace value="collapse"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:element name="a" type="myint"/>
</xsd:schema>

我在Stackoverflow上发现了与数据类型dateTime(dateTime complaining about whiteSpace in XSD validation (lxml))相关的类似问题,遗憾的是没有解决方案。

所以我的问题是:

  1. 文档是否真的要根据给定的架构进行验证,还是我误解了?
  2. 这是libxml2的已知问题吗?我搜查了他们的bugzilla但没找到任何东西。
  3. 有解决方法吗?

0 个答案:

没有答案