0

如何在我的 xml 文件中的限制标签中禁止重复标签?例如在我的 xml 文件中,我有两个语言环境标签,但它应该只有一个标签

这是我的 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 回答