3
我需要搭建一個XSD模式來部分驗證文件。文件結構是:帶有未定義內容的XSD元素
<Root>
<Node name="core">
<ElementA>String</ElementA>
<ElementB>String</ElementB>
</Node>
<Node name="something unique">
(any number of elements, with unknown names and types)
</Node>
</Root>
我的XSD是一樣的東西:
<xs:element name="Root">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="Node">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="xs:string" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
這是不完整和不完全正確的,未命名的<xs:element>
是無效的。
有幾個節點是必需的,以及每個節點具有唯一的名稱屬性;這是我想驗證的。名稱列表和這些節點的內容是預定義的。
具有未知名稱的節點的內容也是未知的,並且可能包含具有任何名稱和類型的任意數量的元素,但它們本身不能具有屬性或值。
我遇到麻煩的部分是允許子元素不知道他們的名字。
是否有可能在XSD上做這樣的事情?有沒有辦法讓複雜類型的元素,或任何類型和屬性?
編輯:這將是可以被接受使用<Node>
name
S作爲元素類型,然後簡單地允許具有未知名稱的附加元件。無論哪種方式,我需要允許具有未知名稱和類型的節點。
因此,您建議區分必需元素和可選元素?在這種情況下,有兩個(或更多)名字? – ssube
是的。但是,如果這是您的意思,則不必將xsd:any放在包裝元素下;然而,這是一種相當普遍的模式。有一件事我會做不同的,但是爲Extensions元素定義一個全局複合類型,以允許某個使用你的模式的人做他們自己的重定義,以防他們想要「強類型化」它。我只是想盡快告訴你如何xsd:任何人都可以按照我理解他們的方式來滿足你的要求。 –