XML Schema - 包含多个可接受类型的maxOccurs =“unbounded”元素

时间:2014-05-17 14:39:17

标签: xml xsd uml

是否可以为具有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”以前被称为“数组元素”

2 个答案:

答案 0 :(得分:0)

XSD不会将任何类别的元素标识为“数组元素”,因此您的问题的含义并不完全清楚。 XSD中没有要求元素的所有子元素具有相同的名称或相同的类型。

XSD确实需要通过“元素声明一致性”约束,任何两个具有相同名称的兄弟姐妹具有相同的类型(或兼容类型,其中“兼容性”由一些相当密集和复杂的散文定义)。

由于异构数组在某些编程语言中会造成困难,我可以想象一些程序员想要设计他们的XML以避免构造会映射到异构数组。但是XHTML的设计绝不是非标准的。

答案 1 :(得分:0)

好吧,我通过使用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>