0

xml ファイルの制限タグでタグの重複を禁止するにはどうすればよいですか? たとえば、私のxmlファイルには2つのロケールタグがありますが、タグは1つだけにする必要があります

これは私のxmlファイルです:

    <app:string name="firstName">
        <app:restriction>
            <app:regex>^\w*$</app:regex>
            <app:type/>
            <app:locale/>
            <app:locale/>
        </app:restriction>
    </app:string>

これは、文字列タグの xsd です。

<xs:element name="string">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="main:BaseType">
                <xs:sequence>
                    <xs:element name="restriction" type="main:StringRestriction" minOccurs="0"
                                maxOccurs="1"/>
                </xs:sequence>
                <xs:attribute name="lang" type="main:LocaleTypes"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>

<xs:complexType name="BaseType">
    <xs:attribute name="name" type="main:nameType" use="required"/>
    <xs:attribute name="readonly" type="xs:boolean" use="optional" default="true"/>
</xs:complexType>

<xs:complexType name="StringRestriction">
    <xs:complexContent>
        <xs:extension base="main:RestrictionBase">
            <xs:sequence>
                <xs:choice maxOccurs="1">
                    <xs:element type="xs:string" name="locale"/>
                    <xs:element type="xs:string" name="type"/>
                    <xs:element type="xs:string" name="regex"/>
                    <xs:element type="xs:string" name="maxLen"/>
                    <xs:element type="xs:string" name="minLen"/>
                </xs:choice>
            </xs:sequence>
        </xs:extension>
    </xs:complexContent>
</xs:complexType>
4

1 に答える 1

1

私が正しく理解していれば、restrictionタグに繰り返しのないタグを強制的に含めるスキーマが必要です。

これを置き換える場合:

<xs:sequence>
    <xs:choice maxOccurs="1">
        <xs:element type="xs:string" name="locale"/>
        <xs:element type="xs:string" name="type"/>
        <xs:element type="xs:string" name="regex"/>
        <xs:element type="xs:string" name="maxLen"/>
        <xs:element type="xs:string" name="minLen"/>
    </xs:choice>
</xs:sequence>

これとともに:

<xs:all minOccurs="0">
    <xs:element type="xs:string" name="locale"/>
    <xs:element type="xs:string" name="type"/>
    <xs:element type="xs:string" name="regex"/>
    <xs:element type="xs:string" name="maxLen"/>
    <xs:element type="xs:string" name="minLen"/>
</xs:all>

スキーマでは、タグlocale内での要素の重複は許可されません。restrictionここで要約を見ることができます: http://www.w3schools.com/schema/el_all.asp これに加えて、いくつかの要素を常に表示し、他の要素をオプションとして表示するように強制することができますminOccursmaxOccurs

于 2012-07-09T15:48:28.643 に答える