如何根据兄弟元素的数量更改属性的必需/可选项?

时间:2013-10-30 11:20:17

标签: xml schema xsd

我有一个原型XML模式 - 请参阅文章末尾的摘录。我想做的是,如果只有1个“input”元素,则将“row”和“column”属性设置为可选,但如果有多个“input”元素则需要。如何在XSD语法中执行此操作?

此外,此架构是从工具生成的,看起来过于复杂。有什么办法可以删除“xs:extension”/“xs:simpleContent”/“xs:complexType”元素吗?

XML架构提取:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    elementFormDefault="qualified" targetNamespace="foobar"
    xmlns:f="foobar">
    <xs:element name="inspection">
        <xs:complexType>
            <xs:sequence minOccurs="1" maxOccurs="unbounded">
                <xs:element ref="f:input" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="input">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:integer">
                    <!--other attributes-->
                    <xs:attribute name="row" use="optional" type="xs:integer" />
                    <xs:attribute name="column" use="optional" type="xs:integer" />
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:0)

在XML架构1.0中,您建议的不是

此外,关于本节:

  

此外,此架构是从工具生成的,看起来过于复杂。有什么办法可以删除“xs:extension”/“xs:simpleContent”/“xs:complexType”元素吗?

没有更简单的方法。您的元素复杂的,因为它基于一个已扩展的简单数据类型。您可以通过直接为xs:integer类型提供元素来简化,,因为xs:integer数据类型没有任何属性,您将失去{{1 }和row属性。