我是XML Schema的初学者,我正试图解决(在我看来)相当简单的问题:我想匹配表单中的标签
<foo bar="123">some text</foo>
即。包含text和property的标记。基本上,我知道如何使用extension
工具完成此操作。这似乎相当不直观,但有效。这是基本的习语:
<xs:element name="option">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" type="xs:string">
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
但是,我还想对文本和属性施加限制!文本不应超过一定长度,属性应在某个范围内的整数。我怎样才能做到这一点?当我使用扩展时,似乎我不能对文本使用限制。
答案 0 :(得分:2)
使用<xs:restriction>
代替扩展程序。您可能希望单独声明这些简单类型,并在其他结构中引用它们。
但是现在我很清醒,即使在这种状态下,这也是我设法提出的最佳状态:
<xs:element name="option">
<xs:complexType>
<xs:simpleContent>
<xs:restriction base="optionType">
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:complexType name="optionType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="10" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
哦,我的傻瓜。所以显然你应该限制扩展。以上内容将元素option
的内容限制为最大长度为10的字符串,将属性value
限制为[0,10]范围内的整数。
是的,那肯定不是太冗长......
答案 1 :(得分:0)
我遇到了类似的问题,我宁愿定义2个simpleTypes。一个用于属性,另一个用于内容。
helper