XML Schema:具有属性的元素和具有限制的文本

时间:2011-10-27 16:13:26

标签: xml xsd

我是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>

但是,我还想对文本和属性施加限制!文本不应超过一定长度,属性应在某个范围内的整数。我怎样才能做到这一点?当我使用扩展时,似乎我不能对文本使用限制。

2 个答案:

答案 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