0

XML ドキュメント内で属性を強制的に一意にしたいと考えています。私はXMLを始めたばかりです。一人一人にユニークなIDを持たせたい。xs:unique を見てきましたが、どこに行くのかよくわかりません。試行するたびに解析されません。スキーマは次のとおりです。

<?xml version='1.0' encoding='utf-8'?>
<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
    <xs:element name='people' type='peopleType' /><!-- Root Element -->

    <xs:complexType name='peopleType'>
        <xs:sequence>
            <xs:element name='person' type='personType' maxOccurs='unbounded'/>
        </xs:sequence>
    </xs:complexType><!-- End peopleType-->

    <xs:complexType name='personType'>

        <xs:sequence>
            <xs:element name='name' type='nameType' maxOccurs='unbounded' />
            <xs:element name='email' minOccurs='1'>
                <xs:simpleType>
                    <xs:restriction base='xs:string'>
                        <xs:pattern value='([a-zA-Z0-9_-])*([.])?([a-zA-Z0-9_-])*([.])?([a-zA-Z0-9_-])*[@]([a-zA-Z0-9_-])*([.])?([a-zA-Z0-9_-])*([.])?([a-zA-Z0-9_-])*' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name='favColour' type='colourType' minOccurs='0' />

        </xs:sequence>

        <xs:attribute name='id' type='xs:integer' />

    </xs:complexType><!--End personType -->

    <xs:complexType name='nameType'>
        <xs:sequence>
            <xs:element name='given' minOccurs='1'>
                <xs:simpleType>
                    <xs:restriction base='xs:string'>
                        <xs:pattern value='[A-Z]([a-z])*' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name='family' minOccurs='1'>
                <xs:simpleType>
                    <xs:restriction base='xs:string'>
                        <xs:pattern value='[A-Z]([a-z])*' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType><!-- End nameType -->

    <xs:complexType name='colourType'>
        <xs:sequence>
            <xs:element name='red' minOccurs='1' >
                <xs:simpleType>
                    <xs:restriction base='xs:integer'>
                        <xs:minInclusive value='0' />
                        <xs:maxInclusive value='255' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name='green' minOccurs='1' >
                <xs:simpleType>
                    <xs:restriction base='xs:integer'>
                        <xs:minInclusive value='0' />
                        <xs:maxInclusive value='255' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name='blue' minOccurs='1'>
                <xs:simpleType>
                    <xs:restriction base='xs:integer'>
                        <xs:minInclusive value='0' />
                        <xs:maxInclusive value='255' />
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
        </xs:sequence>
    </xs:complexType><!-- End colourType -->
</xs:schema>

[編集] アドバイスを受けた後、次の変更を行いました。問題なく解析されますが、一意の属性は適用されません。

<xs:complexType name='peopleType'>
        <xs:sequence>
            <xs:element name='person'  type='personType' maxOccurs='unbounded'>
                <xs:unique name="MyUserNameUniqueKey">
            <xs:selector xpath="person" />
            <xs:field xpath="@id" />
            </xs:unique>
            </xs:element>
        </xs:sequence>
    </xs:complexType><!-- End peopleType--> 
4

1 に答える 1

2

In the element declaration for people, add an xs:unique declaration with selector xpath="person", field xpath="@id". If it doesn't work, show us what you tried.

于 2013-01-25T08:49:00.267 に答える