如何使枚举内容的xml元素不可重复

问题描述 投票:0回答:1

我想有几个元素视频游戏的实例,每个都需要有一个或几个元素控制台,但没有在每个元素视频游戏中重复。元素控制台内容来自枚举。

我的视频游戏示例如下:

<xs:complexType name="tVideojuego">
        <xs:complexContent>
            <xs:extension base="a:tSoftware">
                <xs:sequence>
                    <xs:element name="consola" maxOccurs="unbounded">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="XBox"/>
                                <xs:enumeration value="Play 4"/>
                                <xs:enumeration value="Nintendo Switch"/>
                                <xs:enumeration value="PC"/>
                            </xs:restriction>
                        </xs:simpleType>
                        <xs:unique name="consolaUnica">
                            <xs:selector xpath="consola"></xs:selector>
                            <xs:field xpath="."></xs:field>
                        </xs:unique>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

然而,在每个元素视频游戏中,我可以拥有多个PC,我不想允许它。

例如,不允许使用下一个视频游戏元素,因为pc出现3次,其中2次内容相同:

<ar:videojuego>
        <id>videojuegoTheDivision2</id>
        <nombre>The Division 2</nombre>
        <cantidadArticulo>879</cantidadArticulo>
        <empresa>Ubisoft</empresa>
        <consola>PC</consola>
        <consola>PC</consola>
        <consola>Nintendo Switch</consola>
    </ar:videojuego>
xml xsd
1个回答
0
投票

你在右边的行,但是xs:unique只能引用子项,并且只能与一个元素相关联。因此约束需要继续包含consola元素的元素。

这意味着您需要在使用tVideojuego的地方应用约束,而不是在其定义中(这不是理想的)。

<?xml version="1.0" encoding="utf-8" ?>
<!--Created with Liquid Studio 2019 (https://www.liquid-technologies.com)-->
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:complexType name="tSoftware" />
    <xs:complexType name="tVideojuego">
        <xs:complexContent>
            <xs:extension base="tSoftware">
                <xs:sequence>
                    <xs:element name="consola" maxOccurs="unbounded">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="XBox" />
                                <xs:enumeration value="Play 4" />
                                <xs:enumeration value="Nintendo Switch" />
                                <xs:enumeration value="PC" />
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:element name="Sample">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="VideoGame" type="tVideojuego">
                    <xs:unique name="consolaUnica">
                        <xs:selector xpath="consola"></xs:selector>
                        <xs:field xpath="."></xs:field>
                    </xs:unique>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.