gpt4 book ai didi

xml - 如何根据其他元素中的属性值限制 XML 属性的值?

转载 作者:行者123 更新时间:2023-12-03 01:59:04 26 4
gpt4 key购买 nike

我有这样的 XML 元素:

<characteristic name="Length"... />
<characteristic name="Width"... />
<!-- etc. -->

是否可以将另一个属性的值限制为(XPath)“//characteristic/@name”的值之一?

所以这是允许的:

<widget>
<characteristic name="Length">100</characteristic>
</widget>

但是这是不允许的:

<widget>
<characteristic name="Bananas">33</characteristic>
</widget>

(因为“Bananas”不是名字特征之一。)

我认为这可以使用“key”和“keyref”来完成,但我不确定当 key 和 ref 都是属性值时如何实现这一点。

此外,如果这些特征与小部件在不同的 XML 文档中列出,我该如何执行此操作? (这可能吗?)理想情况下,我想使用 XSD 1.0,但我有兴趣知道 XSD 1.1 是否添加了任何有用的内容。

最佳答案

这是一个示例架构:

<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="characteristics">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="characteristic">
<xs:complexType>
<xs:attribute name="name" type="xs:string"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="widgets">
<xs:complexType>
<xs:sequence maxOccurs="unbounded">
<xs:element name="widget">
<xs:complexType>
<xs:sequence>
<xs:element name="characteristic">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:integer">
<xs:attribute name="name" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="cname">
<xs:selector xpath="characteristics/characteristic"/>
<xs:field xpath="@name"/>
</xs:key>
<xs:keyref name="cname-ref" refer="cname">
<xs:selector xpath="widgets/widget/characteristic"/>
<xs:field xpath="@name"/>
</xs:keyref>
</xs:element>

</xs:schema>

应用于实例时

<root>
<characteristics>
<characteristic name="Length"/>
<characteristic name="Width"/>
</characteristics>
<widgets>
<widget>
<characteristic name="Length">100</characteristic>
</widget>

<widget>
<characteristic name="Bananas">33</characteristic>
</widget>
</widgets>
</root>

Xerces 报告您想要的错误:“test2014010301.xml:15:cvc-identity-constraint.4.3: 未找到元素“root”的身份约束,值为“Bananas”的键“cname-ref”。”

关于xml - 如何根据其他元素中的属性值限制 XML 属性的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904083/

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