XML Schema union忽略whiteSpace属性

时间:2014-12-05 02:39:17

标签: xml xsd xsd-validation

根据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(因为空白应该被折叠并且模式应该被满足)。 ¿你怎么想?

1 个答案:

答案 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

和撒克逊通常做对了; - )