我有一个架构xsd文件。在那个xsd文件中,我对“选择”感到困惑。
例如 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 - 例如1
编辑:根元素员工已添加。
<?xml version="1.0" encoding="utf-8"?>
<Employee>
<Emp>
<E1></E1>
<E2></E2>
</Emp>
</Employee>
myxmlfile2.xml - 例如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 :(得分:2)
考虑xs:选择maxOccurs = unbounded意味着你可以拥有任意数量的元素,每个元素必须是foo或bar或baz(或xs中的任何列表:选择恰好发生在定)。
答案 1 :(得分:1)
首先,第二个示例既不有效也不well-formed xml(XML不能包含多个根元素)。
第一个很好,因为 xs:choice 和 maxOccurs =“unbounded”一起使用。
xs:choice 会强制您选择只提供一个元素,而 maxOccurs =“unbounded”允许您根据需要多次执行此操作。
在这种情况下,订单无关紧要,例如这样的文件也是有效的:
<?xml version="1.0" encoding="utf-8"?>
<Emp>
<E4></E4>
<E4></E4>
<E2></E2>
<E3></E3>
</Emp>