2011-12-30 32 views
0

我有一個XML模式,大部分是有道理的,但我遇到了一點,我不明白。下面是模式的快照:組元素如何在XML模式中工作?

<xs:complexType name="DATA-FIELD"> 
    <xs:sequence> 
     <xs:group ref="FIELD-CONTENT" /> 
     <xs:element name="Field" type="FIELD" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="FIELD"> 
    <xs:group ref="FIELD-CONTENT" /> 
    <xs:attribute name="att" type="xs:string" use="required" /> 
</xs:complexType> 

<xs:group name="FIELD-CONTENT"> 
    <xs:sequence> 
     <xs:element name="Elem" type="ELEM" minOccurs="0" /> 
    </xs:sequence> 
</xs:group> 

主要是我不知道如何使用是族的元素,並且堅持這個模式的樣本XML文件將是什麼樣子?將它看起來像這樣:

<DataField> 
    <Field att="test"> 
     <Elem>element</Elem> 
    </Field> 
</DataField> 

OR

<DataField> 
    <Elem>element</Elem> 
</DataField> 
+0

你失蹤了'DataField'一個元素定義和'ELEM'類型定義。 – DRH 2011-12-30 18:23:45

回答

1

組元素表示內容模型的一個片段,並且在很大程度上是用於表示多個元件的公用部分。在您的示例中,它用於封裝DATA-FIELDFIELD類型中的選項Elem字段。在大多數情況下,你可以代替組引用組元素的內容得到什麼的架構實現的一個想法:

<xs:complexType name="DATA-FIELD"> 
    <xs:sequence> 
     <xs:element name="Elem" type="xs:string" minOccurs="0" /> 
     <xs:element name="Field" type="FIELD" minOccurs="0" /> 
    </xs:sequence> 
</xs:complexType> 

<xs:complexType name="FIELD"> 
    <xs:element name="Elem" type="xs:string" minOccurs="0" /> 
    <xs:attribute name="att" type="xs:string" use="required" /> 
</xs:complexType> 

在驗證方面,無論你指定實例文檔是有效的給予模式,因爲這兩個元素都是可選的。在第一種情況下,組中的Elem字段被省略,而在第二種情況下,Field字段被省略。下面也將是法律文件中給出該模式:

<DataField> 
    <Elem>foo</Elem> 
    <Field att="test"> 
     <Elem>element</Elem> 
    </Field> 
</DataField> 

和:

<DataField/> 
+0

太好了,謝謝你清理那個。現在更有意義了。 – naivedeveloper 2011-12-30 18:33:45