是否可以为 maxOccurs="unbounded" 的元素创建 XSD 架构,该元素接受不同的值类型作为其项目?例如:
<myArray>
<A>first</A>
<A>second</A>
<A>third</A>
<B>fourth</B>
<B>fifth</B>
</myArray>
如果不是,是否是一种非标准类型的 XML 结构设计?
XHTML 中也类似:
<body>
<p></p>
<br />
<img />
</body>
这是否意味着xhtml不标准?
更新: maxOccurs="unbounded" 以前称为“数组元素”
嗯,我通过使用 xsd refs 找到了方法。 结论:这是可能的,XHTML 是标准。
“myArray”的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="A" type="xs:string" />
<xs:element name="B" type="xs:string" />
<xs:element name="myArray">
<xs:complexType>
<xs:sequence>
<xs:element ref="A" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="B" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
XSD 不会将任何元素类别识别为“数组元素”,因此并不完全清楚您的问题的含义。 XSD 中不要求元素的所有子元素具有相同的名称或相同的类型。
XSD 确实要求,通过“元素声明一致”约束,具有相同名称的任何两个同级具有相同的类型(或兼容类型,由一些相当密集和复杂的散文定义的“兼容性”)。
由于异构数组在某些编程语言中造成困难,我可以想象一些程序员希望设计他们的 XML 以避免映射到异构数组的构造。但 XHTML 的设计绝不是非标准的。
最好使用以下 xsd 解决方案。因为这样也可以混合元素和 的顺序。
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="myArray">
<xs:complexType>
<xs:sequence>
<xs:group ref="ElementGroup" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:group name="ElementGroup">
<xs:choice>
<xs:element name="A" type="xs:string"/>
<xs:element name="B" type="xs:string"/>
</xs:choice>
</xs:group>
</xs:schema>
以下 xml 也是可以的:
<myArray>
<A>first</A>
<A>second</A>
<A>third</A>
<B>fourth</B>
<B>fifth</B>
<A>sixth</A>
<B>seventh</B>
</myArray>