如何使用属性限制xsd:complexType的内容?

时间:2016-08-19 17:42:03

标签: xml xsd xsd-validation xml-validation

我在尝试为此复杂类型添加minLengthmaxLength限制时遇到问题。这是我的原始代码:

          <xs:element minOccurs="0" name="Division">
            <xs:complexType>
              <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" name="ID">
                  <xs:complexType>
                    <xs:simpleContent>
                      <xs:extension base="xs:string">
                        <xs:attribute ref="wd:type" use="optional" />
                      </xs:extension>
                    </xs:simpleContent>
                  </xs:complexType>
                </xs:element>
              </xs:sequence>
              <xs:attribute ref="wd:Descriptor" use="optional" />
            </xs:complexType>
          </xs:element>

我想添加此限制,但我不知道该怎么做。

<xs:restriction base="xs:string">
  <xs:minLength value="0"/>
  <xs:maxLength value="100"/>
</xs:restriction>                        

我知道如何为简单类型执行此操作,但在复杂类型中我不知道如何执行此操作。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您需要定义并命名xs:simpleType并将其扩展到xs:complexType

这是一个完整的,有效的示例(悬挂xs:attribute/@ref次出现被临时xs:attribute/@names替换,所以示例可以独立存在):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:element name="Division">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="unbounded" name="ID">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="IDType">
                <xs:attribute name="attr1" use="optional" />
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="attr2" use="optional" />
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="IDType">  
    <xs:restriction base="xs:string">
      <xs:minLength value="0"/>
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>