gpt4 book ai didi

XMl 架构 : Unique key values within parent

转载 作者:数据小太阳 更新时间:2023-10-29 02:32:29 26 4
gpt4 key购买 nike

我有以下 XML:

    <enumTypes xmlns="tempURI">
<enumType id="1">
<enumValue id="1" value="Item1"/>
<enumValue id="2" value="Item2"/>
<enumValue id="3" value="Item3"/>
</enumType>
<enumType id="2">
<enumValue id="1" value="Item1"/>
<enumValue id="2" value="Item2"/>
</enumType>
</enumTypes>

我还有以下架构:

                <xs:element name="enumTypes">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="enumType">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="enumValue">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:key name="enumTypeKey">
<xs:selector xpath="enumTypes/enumType"/>
<xs:field xpath="@id"/>
</xs:key>
<xs:key name="enumValueKey">
<xs:selector xpath="enumTypes/enumType/enumValue"/>
<xs:field xpath="@id"/>
</xs:key>

我试图强制 enumValue ID 在一个 enumType 中是唯一的,但到目前为止我只能让它强制它们在所有 enumType 中是唯一的。

我猜我的选择器 XPath 有问题,但我似乎无法解决它。

如有任何帮助,我们将不胜感激!

最佳答案

我认为您只提供了 xsd 的一个片段?如果您可以提供工作片段,调试起来会更容易。我在周围加了一个<element name="root">使其生效。

问题似乎是 enumValueKey选择器组所有 enumValues ,跨越所有enumType的;但你只想将它们分组在一个 enumType 中.

我能看到的唯一修复方法是移动 <key>对于 enumValues进入enumType元素(并调整 xpath 选择器),所以整个事情变成了:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="enumTypes">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="enumType">
<xs:complexType>
<xs:sequence minOccurs="1" maxOccurs="unbounded">
<xs:element name="enumValue">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:string"/>
</xs:complexType>
<xs:key name="enumValueKey">
<xs:selector xpath="enumValue"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="enumTypeKey">
<xs:selector xpath="enumTypes/enumType"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
</xs:schema>

这是有效的,因为它允许您的 XML 示例,并且它应该禁止以下片段(带有两个 1 的片段):

...
<enumType id="2">
<enumValue id="1" value="Item1"/>
<enumValue id="1" value="Item2"/>
</enumType>
...

让我知道这是否适合您。我也很感兴趣是否有任何其他方式来表达这一点。

关于XMl 架构 : Unique key values within parent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380988/

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