0

我有一个如下所示的 xml 架构,但我注意到维护起来会非常复杂。

我想通过以下方式之一改进当前架构,但我不确定它们是否是最佳/正确的路线:

选项 1:使用movieDetailswithin的所有元素的引用movies

选项2:添加movieDetailsmovies(坦率地说,我正在努力实现)的子元素

哪条路线最好,什么是构建它的最佳方式?

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

额外的信息

OnDisplayelement 会将 的所有元素添加movies到列表中,以便在解组时使用它们。但是,我还想添加movieDetails到 上,因此,将它们作为参考、子元素或其他形式OnDisplay包含在其中会很方便。movies

尝试了以下方法,但 XML 验证失败

方法一

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

方法二

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

1 回答 1

0

如果你想让一个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>
于 2018-11-29T01:32:00.853 回答