【发布时间】:2014-12-05 02:39:16
【问题描述】:
根据XML Schema specification of whitespace:
对于所有数据类型·派生·由·联合·空白不直接应用;但是,·union· 类型的规范化行为由成功验证·union· 所依据的·memberTypes 之一上的 whiteSpace 值控制。
和
对于字符串,保留空格的值
基于此,以下示例应该无效,因为应该保留字符串的空格,并且不应该满足模式。然而它是有效的。所以,我的问题是 ¿为什么这个 XML 对这个架构有效?
XML(注意空格):
<?xml version="1.0" encoding="UTF-8" ?>
<elem> Hello world</elem>
XML Schema(注意模式限制):
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="myUnion">
<xs:union memberTypes="xs:string">
</xs:union>
</xs:simpleType>
<xs:element name="elem">
<xs:simpleType>
<xs:restriction base="myUnion">
<xs:pattern value="Hello world" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
编辑: Xerces 说它有效,Saxon 说它无效。这似乎是一个 Xerces 错误。
但是,如果我们这样定义联合:
<xs:simpleType name="myUnion">
<xs:union>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:union>
</xs:simpleType>
再次,Xerces 说它有效,Saxon 说它无效。但是这次它似乎是一个撒克逊错误(因为应该折叠空格并且应该满足模式)。 ¿ 你怎么看?
【问题讨论】:
标签: xml xsd xsd-validation