2013-07-23 61 views
0

我有一個模式xsd文件。在那個xsd文件中,我對「選擇」感到困惑。與xsd模式和xml文件元素混淆

對於e.g myschema.xsd

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="Emp"> 
    <xs:complexType mixed="true"> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element ref="E1" /> 
     <xs:element ref="E2" /> 
     <xs:element ref="E3" /> 
     <xs:element ref="E4" /> 
     </xs:choice> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 

myxmlfile1.xml - e.g 1

編輯:根元素僱員加入。

<?xml version="1.0" encoding="utf-8"?> 
<Employee> 
    <Emp> 
    <E1></E1> 
    <E2></E2> 
    </Emp> 
</Employee> 

myxmlfile2.xml - e.g 2

編輯:根元素僱員加入。

<?xml version="1.0" encoding="utf-8"?> 
<Employee> 
    <Emp> 
    <E1></E1> 
    </Emp> 
    <Emp> 
    <E2></E2> 
    </Emp> 
</Employee> 

在這2個XML文件,根據方案,myxmlfile1.xml是正確的其他myxmlfile2.xml是正確的?

清楚我解釋...

編輯:

Here i want to know, 
  • 的Emp元素可以以任意順序E1和E2的子元素(或)?

  • 可以有任何一個子元素,即E1或E2(不能同時擁有)。

+0

如果您不知道哪些示例有效,那隻能是因爲您沒有注意已經提供給此問題的答案。仔細閱讀它們。 –

回答

1

首先,第二個例子是有效既不也不well-formed xml(XML不能包含多於一個根元素)。

第一個是精細的,因爲的xs:選擇的maxOccurs = 「無限」一起使用。

XS:選擇強迫您選擇只是一個提供的元素,而 的maxOccurs =「無界」讓你只要你想這樣做盡可能多的時間。

在這種情況下順序並不重要,例如,該文件將是有效的,以及:

<?xml version="1.0" encoding="utf-8"?> 
<Emp> 
    <E4></E4> 
    <E4></E4> 
    <E2></E2> 
    <E3></E3> 
</Emp> 
+0

對不起老兄。我已更新我的查詢。這裏Emp不是根元素。 現在對我說,這個例子是正確的。? – cgsabari

2

XS的思考:選擇具有的maxOccurs =無限的意思是,你可以有很多的元素,只要你喜歡,每個元素必須是富或酒吧或巴茲(或者你的xs:choice中的列表恰好是)。

+0

我的查詢已更新。 Emp不是根本元素。員工是根本因素。現在說我的解決方案PLZ。 – cgsabari

+0

你對這個問題的改變對我對xs:choice的含義的解釋完全沒有影響。 –

+0

那麼,我的例子1是正確的? – cgsabari