XML 1.0对复杂类型的限制

时间:2014-04-08 16:56:32

标签: xml xsd

我想对具有复杂类型的元素设置限制:

XML:

        <longName lang="eng_us">An example longName goes here! </longName>

我想在XSD longName和lang中添加限制。我可以为简单的元素执行此操作,但有问题验证这个。以下是我的XSD:

XSD:

<xs:element name="longName">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:attribute type="xs:string" name="lang" />
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>

这是我想要添加到longName和lang的限制:

    <xs:restriction base="xs:string">
                                <xs:minLength value="1" />
                                <xs:maxLength value="254" />
                            </xs:restriction>

1 个答案:

答案 0 :(得分:3)

你必须分两个阶段完成。首先使用您需要的限制声明顶级simpleType

<xs:simpleType name="longNameContent">
  <xs:restriction base="xs:string">
    <xs:minLength value="1" />
    <xs:maxLength value="254" />
  </xs:restriction>
</xs:simpleType>

然后将complexType扩展为:

<xs:element name="longName">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="longNameContent">
        <xs:attribute type="xs:string" name="lang" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

如果您的架构有targetNamespace,那么您需要在架构文档中将前缀绑定到该命名空间并使用该类型的前缀,即

<xs:schema ....
           targetNamespace="http://example.com"
           xmlns:tns="http://example.com">

然后

<xs:simpleContent>
  <xs:extension base="tns:longNameContent">