我有一个原型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>
答案 0 :(得分:0)
在XML架构1.0中,您建议的不是。
此外,关于本节:
此外,此架构是从工具生成的,看起来过于复杂。有什么办法可以删除“xs:extension”/“xs:simpleContent”/“xs:complexType”元素吗?
没有更简单的方法。您的元素是复杂的,因为它基于一个已扩展的简单数据类型。您可以通过直接为xs:integer
类型提供元素来简化,但,因为xs:integer
数据类型没有任何属性,您将失去{{1 }和row
属性。