2016-06-14 66 views
0

anyType類型的元素被允許具有任何屬性和任何值空間內容,包括子元素。 anySimpleType規定的限制在哪裏?我特別感興趣的是隻允許指定(通過給定的XSD文檔)屬性的限制。xsd:anyType中的xsd:anySimpleType的限制是什麼,它們在哪裏枚舉?

假設libxml2的模式驗證忠實於規格,以下示出的至少一個的anySimpleType限制:

foo.xsd

<?xml version="1.0" encoding="utf-8"?> 

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Foo"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Bar" type="xs:anyType" /> 
     <xs:element name="Baz" type="xs:anySimpleType" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

<?xml version="1.0" encoding="utf-8"?> 

<Foo> 
    <Bar abc="xyz" /> 
    <Baz abc="xyz" /> 
</Foo> 

驗證:

$ xmllint --noout foo.xml --schema foo.xsd 
foo.xml:5: element Baz: Schemas validity error : Element 'Baz', attribute 'abc': The attribute 'abc' is not allowed. 
foo.xml fails to validate 

回答

1

anySimpleType是一個抽象基礎簡單類型。它完全不受限制。

http://www.datypic.com/sc/xsd/t-xsd_anySimpleType.html

如果要指定僅屬性列表是允許的,那就是「複雜類型」,如simpleType的工作。 (?大命名這些,呵呵= /)

http://www.datypic.com/sc/xsd/t-xsd_simpleType.html

[編輯重新您的示例]:

嗯,好,我看你現在是問。

在XSD中,「簡單」類型不是通過限制,而是通過限制不能擁有屬性。 (一些解析器允許一些默認屬性,例如NS http://www.w3.org/2001/XMLSchema-instance中的{'type','nil','schemaLocation','noNamespaceSchemaLocation'};這些對於此基本類型的擴展是有用的。)它們旨在是原子,文字等等 - 任何可以是XML中屬性的值/值的任何東西。

anySimpleType正是顧名思義 - 一個完全不受限制的簡單類型。它不能取屬性'abc',因爲簡單類型不能有屬性 - 它們是屬性值。如果你想讓一個元素接受一個屬性列表,就像我上面說的那樣是「複雜」類型的工作,而不是「簡單」類型。

這是覆蓋在本說明書中:https://www.w3.org/TR/xmlschema11-1/#Type_Derivation

+0

感謝您的答覆;我剛剛更新了一個驗證失敗示例的問題。 –