gpt4 book ai didi

xml - 向位于 XML 架构中多个子元素内的元素添加唯一 ID

转载 作者:行者123 更新时间:2023-12-04 05:10:09 24 4
gpt4 key购买 nike

我正在尝试创建一个 XML 架构,以便为位于 XML 中多个子元素内的元素提供唯一 ID。在这种情况下,一个元素是“actor”,它位于“actors”内,而“actors”又位于“cast”元素内。

我希望每个电影 ID 都是唯一的,并且每个 Actor ID 在该电影 ID 中都是唯一的。我不确定我需要在哪里为位于“actors”和“cast”子元素内的“actor”元素放置“unique”。

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>

最佳答案

一般规则是 <xs:unique>最上面的元素给出了你需要唯一性的范围,选择器给出了从这一点到应该唯一的元素的路径,并且字段是相对于所选元素的。

因此,对于电影中的独特 Actor ,您有几个选择。自各movie正好有一个 cast这反过来正好有一个 actors您可以使用 actor 的选择器将约束放在 actor 元素上。 , 使用 actors/actor 的选择器进行类型转换或在带有 cast/actors/actor 选择器的电影上.在所有情况下,字段 xpath 都是 @actorID因为这是相对于选定的 actor元素。

顺便说一句,你给出的模式只允许一部电影有一个 Actor ,我想你已经忘记了 maxOccurs="unbounded"actor里面的元素 actorsAll .

关于xml - 向位于 XML 架构中多个子元素内的元素添加唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991324/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com