Как я могу сделать элемент XML с содержимым перечисления не повторяется - PullRequest
0 голосов
/ 05 апреля 2019

Я хотел бы иметь несколько экземпляров видеоигры с элементами, каждый из которых должен иметь один или несколько элементов консоли, но без повторения внутри каждой видеоигры с элементами.Содержимое консоли элемента получается из перечисления.

Мой пример видеоигры выглядит следующим образом:

<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>

Однако внутри каждой видеоигры элемента у меня может быть несколько компьютеров, и я не хочуразрешить это.

Например, следующий элемент видеоигры не разрешен, поскольку компьютер появляется 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>

1 Ответ

0 голосов
/ 15 апреля 2019

Вы находитесь в правильных строках, но 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...