0

我有一个原型 XML 架构 - 请参阅文章末尾的摘录。如果只有 1 个“输入”元素,我想做的是使“行”和“列”属性可选,但如果有多个“输入”元素则需要。如何在 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>
4

1 回答 1

0

在 XML 模式 1.0 中,您的建议不可能的。

另外,关于本节:

此外,这个模式是从一​​个工具生成的,它似乎过于复杂。有什么办法可以删除“xs:extension”/“xs:simpleContent”/“xs:complexType”元素?

没有更简单的方法。您的元素复杂,因为它基于已扩展的简单数据类型。xs:integer您可以通过直接为元素指定类型来使其更简单,但是由于xs:integer数据类型没有任何属性,因此您将丢失rowandcolumn属性。

于 2013-10-31T22:56:24.330 回答