Как улучшить XML-схему с помощью подэлементов или ссылок? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть XML-схема, подобная той, что показана ниже, но я заметил, что ее будет очень сложно поддерживать.

Я хочу улучшить текущую схему одним из следующих способов, но я не уверен, что они будут наилучшим / правильным маршрутом:

Вариант 1: Использованиессылка на все элементы movieDetails в movies.

Опция 2: Добавить movieDetails в качестве подэлемента movies (чего я, честно говоря, изо всех сил пытаюсь достичь)

Какой маршрут будет наилучшим и как будет лучше его структурировать?

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                    targetNamespace="http://xml.netbeans.org/schema/AmazingMovies"
                    xmlns:tns="http://xml.netbeans.org/schema/AmazingMovies"
                    elementFormDefault="qualified">

    <xsd:complexType name="movies">
        <xsd:sequence>
            <xsd:element name="Title" type="xsd:string"/>
            <xsd:element name="Director" type="xsd:string"></xsd:element>
            <xsd:element name="Year" type="xsd:int"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="movieDetails">
        <xsd:sequence>
            <xsd:element name="Actor" type="xsd:string"/>
            <xsd:element name="numberOfCast" type="xsd:int"></xsd:element>
            <xsd:element name="releaseDate" type="xsd:date"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="OnDisplay">
        <xsd:complexType>
            <xsd:sequence >
                <xsd:element name="collectionOfMovies" type="tns:movies" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

Дополнительная информация

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

Пробовал следующие методы, но не прошел проверку XML

Метод 1

<xsd:element name="MoviesAndDetails">
    <xsd:complexType name="movies">
        <xsd:sequence>
            <xsd:element name="Title" type="xsd:string"/>
            <xsd:element name="Director" type="xsd:string"></xsd:element>
            <xsd:element name="Year" type="xsd:int"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="movieDetails">
        <xsd:sequence>
            <xsd:element name="Actor" type="xsd:string"/>
            <xsd:element name="numberOfCast" type="xsd:int">     </xsd:element>
            <xsd:element name="releaseDate" type="xsd:date"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

Метод 2

<xsd:complexType name="MoviesAndDetails">
    <xsd:complexType name="movies">
        <xsd:sequence>
            <xsd:element name="Title" type="xsd:string"/>
            <xsd:element name="Director" type="xsd:string"></xsd:element>
            <xsd:element name="Year" type="xsd:int"/>
            <xsd:element ref="Actor"/>
            <xsd:element ref="numberOfCast"/>
            <xsd:element ref="releaseDate"/>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="movieDetails">
        <xsd:sequence>
            <xsd:element name="Actor" type="xsd:string"/>
            <xsd:element name="numberOfCast" type="xsd:int">     </xsd:element>
            <xsd:element name="releaseDate" type="xsd:date"/>
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

1 Ответ

0 голосов
/ 29 ноября 2018

Если вы хотите, чтобы элемент movieDetails был дочерним по отношению к collectionOfMovies, то вы можете добавить элемент movieDetails типа tns:movieDetails к последовательности movies элементов.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://xml.netbeans.org/schema/AmazingMovies"
  xmlns:tns="http://xml.netbeans.org/schema/AmazingMovies"
  elementFormDefault="qualified">

  <xsd:complexType name="movies">
    <xsd:sequence>
        <xsd:element name="Title" type="xsd:string"/>
        <xsd:element name="Director" type="xsd:string"></xsd:element>
        <xsd:element name="Year" type="xsd:int"/>
        <xsd:element name="movieDetails" type="tns:movieDetails"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="movieDetails">
    <xsd:sequence>
        <xsd:element name="Actor" type="xsd:string"/>
        <xsd:element name="numberOfCast" type="xsd:int"></xsd:element>
        <xsd:element name="releaseDate" type="xsd:date"/>
    </xsd:sequence>
  </xsd:complexType>

  <xsd:element name="OnDisplay">
    <xsd:complexType>
        <xsd:sequence >
            <xsd:element name="collectionOfMovies" type="tns:movies" minOccurs="0" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
...