根据XML Schema specification of whitespace:
对于所有数据类型·派生·通过·union·whiteSpace不直接应用;但是,
的类型的规范化行为由whiteSpace的值控制在·memberTypes·中的一个·unionTypes·成功验证了 。
和
表示字符串,whiteSpace的值为
基于,以下示例不应该有效,因为应该保留字符串的空白,并且不应该满足模式。但它有效。所以,我的问题是¿为什么这个XML对这个模式有效?
XML(注意whitesepaces):
<?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说它有效,撒克逊说它无效。那似乎是一个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说它无效。但这一次它似乎是一个撒克逊人的bug(因为空白应该被折叠并且模式应该被满足)。 ¿你怎么想?
答案 0 :(得分:1)
谁说它有效?
撒克逊说:Processing file:/Users/mike/Desktop/temp/test.xml
Validation error on line 2 of test.xml:
XSD: The content " Hello world" of element <elem> does not match the required
simple type. Value " Hello world" contravenes the pattern facet "Hello world"
of the type of element elem
Validating /elem[1]
See http://www.w3.org/TR/xmlschema11-2/#cvc-datatype-valid clause 1
Validation error on line 2 column 37 of test.xml:
XSD: One or more validation errors were reported
Validation unsuccessful
和撒克逊通常做对了; - )