2013-07-23 33 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