XSD 中的两个元素可以具有不同的名称但具有相同的类型吗?
Can two elements have different names but same type in XSD?
考虑两种情况:
我有一个 XML 看起来像:
<personinfo>
<info>
<option1>Coke</option1>
</info>
</personinfo>
我应该在 option1 和 option2 元素之间进行选择。
我还有一个 XML 看起来像:
<personinfo>
<info>
<firstname>Yair</firstname>
<lastname>Zaslavsky</lastname>
</info>
</personinfo>
名字和姓氏都应出现的位置(因此是一个序列)。
我尝试使用以下架构:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="optionsChoice">
<xs:choice>
<xs:element name="option1" type="xs:string"/>
<xs:element name="option2" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="optionsSequence">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="personinfo">
<xs:choice>
<xs:element name="info" type="optionsSequence"/>
<xs:element name="info" type="optionsChoice"/>
</xs:choice>
</xs:complexType>
</xs:schema>
运气不好。
请记住,在这两种情况下,我都必须将 "info" 作为元素名称。
我该如何解决这个问题?
内容模型中不能同时出现两个名称相同但类型不同的元素。
但是,您可以将选择向下推,这样 personinfo
可以是 option1
或 option2
的选择,也可以是 firstname
和 [= 的序列15=]:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="info">
<xs:complexType>
<xs:choice>
<xs:choice>
<xs:element name="option1" type="xs:string"/>
<xs:element name="option2" type="xs:string"/>
</xs:choice>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
此 XSD 将成功使您的两个 XML 文档有效。
考虑两种情况:
我有一个 XML 看起来像:
<personinfo>
<info>
<option1>Coke</option1>
</info>
</personinfo>
我应该在 option1 和 option2 元素之间进行选择。
我还有一个 XML 看起来像:
<personinfo>
<info>
<firstname>Yair</firstname>
<lastname>Zaslavsky</lastname>
</info>
</personinfo>
名字和姓氏都应出现的位置(因此是一个序列)。
我尝试使用以下架构:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="optionsChoice">
<xs:choice>
<xs:element name="option1" type="xs:string"/>
<xs:element name="option2" type="xs:string"/>
</xs:choice>
</xs:complexType>
<xs:complexType name="optionsSequence">
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="personinfo">
<xs:choice>
<xs:element name="info" type="optionsSequence"/>
<xs:element name="info" type="optionsChoice"/>
</xs:choice>
</xs:complexType>
</xs:schema>
运气不好。
请记住,在这两种情况下,我都必须将 "info" 作为元素名称。
我该如何解决这个问题?
内容模型中不能同时出现两个名称相同但类型不同的元素。
但是,您可以将选择向下推,这样 personinfo
可以是 option1
或 option2
的选择,也可以是 firstname
和 [= 的序列15=]:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="personinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="info">
<xs:complexType>
<xs:choice>
<xs:choice>
<xs:element name="option1" type="xs:string"/>
<xs:element name="option2" type="xs:string"/>
</xs:choice>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
此 XSD 将成功使您的两个 XML 文档有效。