我有一个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>
其他信息
OnDisplay
元素会将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>
答案 0 :(得分:0)
如果您希望将movieDetails
元素作为collectionOfMovies
的子元素,则可以将movieDetails
类型的tns:movieDetails
元素添加到{{1 }}元素。
movies