我正在嘗試創建一個XML模式,以便在XML中的多個子元素內部存在一個元素。這種情況下的元素是「actor」,它位於「actors」內部,而「actors」又位於「cast」元素的內部。向位於XML模式中的多個子元素內的元素添加一個唯一的ID
我希望每個電影ID都是唯一的,並且每個演員ID在該電影ID中都是唯一的。我不知道我需要爲位於「演員」和「演員」子元素內的「演員」元素添加「獨特」。
XML:
<?xml version="1.0" encoding="UTF-8"?>
<movie_database
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
<movie movieID="1">
<title>Movie 1</title>
<cast>
<directors>Bob</directors>
<writers>Tom</writers>
<actors>
<actor actorID="1">
<name>Jack</name>
</actor>
<actor actorID="2">
<name>James</name>
</actor>
</actors>
</cast>
</movie>
</movie_database>
XML模式:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:element name="movie_database">
<xs:complexType>
<xs:sequence>
<xs:element name="movie" type="movietype" minOccurs="1" maxOccurs="unbounded">
<xs:unique name="unique_actorid">
<xs:selector xpath="actor"/>
<xs:field xpath="@actorID"/>
</xs:unique>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:unique name="unique_movieid">
<xs:selector xpath="movie"/>
<xs:field xpath="@movieID"/>
</xs:unique>
</xs:element>
<xs:complexType name="movietype">
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="cast" type="casttype"/>
</xs:sequence>
<xs:attribute name="movieID" type="xs:integer"/>
</xs:complexType>
<xs:complexType name="casttype">
<xs:sequence>
<xs:element name="directors" type="xs:string"/>
<xs:element name="writers" type="xs:string"/>
<xs:element name="actors" type="actorsAll"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="actorsAll">
<xs:sequence>
<xs:element name="actor" type="actorType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="actorType" mixed="true">
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
<xs:attribute name="actorID" type="xs:integer"/>
</xs:complexType>
</xs:schema>
這工作完美!我實際上試圖用cast/actors/actor選擇器來限制電影,但是因爲我忘記了maxOccurs =「unbounded」,我一直在獲取「這個元素不是期望的」錯誤,所以我永遠不知道是否該約束起作用。現在這一切都有道理。非常感謝! – Alex 2013-02-21 00:13:19