从我到目前为止所看到的,我的问题可能无法在给定的限制内解决,但我会在这里给它一个机会。
我正在尝试编写一个与非常简单的 XML 匹配的 XSD(1.1) 文件。问题是 XML 标记中存在属性,这迫使我使用 xs:extension。一个元素的例子:
<xs:element name="Index">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="int1TO10">
<xs:attribute name="comment" fixed="Attribute in XML Tag"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
而我创建的名为“int1TO10”的类型如下所示:
<xs:simpleType name="int1TO10">
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"/>
<xs:maxInclusive value="10"/>
</xs:restriction>
</xs:simpleType>
这确实有效,问题在于它需要大量编写,如果您想更改某些内容,则需要更改引用名称以保持一致以及定义类型中的值。如果这是一个小文件,这将是可行的;但是这里有很多元素,它们几乎可以有最小和最大整数的任意组合。因此,对于每个新元素,有人必须检查一个类型是否已经存在,或者必须创建它。这一切都让人感到难以置信的多余。
我正在寻找的是一个简单的解决方案:
<xs:element>...
<xs:extension base="xs:integer" minInclusive="1" maxInclusive="10">
<xs:attribute name="comment" fixed="Attribute in XML Tag"/>
</xs:extension>...
</xs:element>
尽管从我的发现来看,这似乎是不可能的。例如,在这个 Stackoverflow 帖子中,接受的答案表明我目前正在做的事情就是要走的路;虽然那个帖子已经有点老了,所以也许我错过了一些最近的突破?
我能想到的唯一其他选择是重组 XML 文件本身,从 (current)
<Index comment="Attribute in XML Tag">(some value between 1 and 10)</Index>
到
<Index>
<value>(some value between 1 and 10)</value>
<comment>Attribute now in its own tag</comment>
</Index>
这还需要相当多的工作和更改与 XML 一起使用的其他一些东西(脚本等),所以我宁愿避免这种情况。
所以总结一下:有没有办法不为我的元素可以拥有的每个新 Integer 组合编写新的 simpleType ?欢迎提出任何建议,也许还有完全不同的方法或 XSD 结构?