带有属性id的元素字符串的XSD

时间:2014-06-16 12:06:18

标签: xsd

我想写一个允许这样的XSD元素:

<CustomFields>
    <CustomField id="1">some text data</CustomField>
    <CustomField id="2">some text data</CustomField>
</CustomFields>

但我有一些限制:我必须限制文本(maxLenght = 36)。而且我希望不可能有2个具有相同ID的CustomField。

到目前为止,我写了这个,但它不是我想要的:

<xs:element name="CustomFields" minOccurs="0">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="CustomField" minOccurs="0" maxOccurs="20">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:integer" use="required"></xs:attribute>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

感谢您的帮助。

问候。

1 个答案:

答案 0 :(得分:2)

您可以使用以下尝试

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

    <xs:simpleType name="restrictedString">
        <!-- Make a new type to be a "descendant" of string-->
        <xs:restriction base="xs:string">
            <xs:maxLength value="36"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:element name="CustomFields">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="CustomField" minOccurs="0" maxOccurs="20">
                    <xs:complexType>
                        <xs:simpleContent>
                            <!-- reference new type you declared above -->
                            <xs:extension base="restrictedString">
                                <xs:attribute name="id" type="xs:integer" use="required"/>
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <!-- Restrict @id to be unique-->
        <xs:unique name="id_uq">
            <xs:selector xpath="CustomField"/>
            <xs:field xpath="@id"/>
        </xs:unique>
    </xs:element>
</xs:schema>