gpt4 book ai didi

xml - XML 模式如何要求元素按属性排序?

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:56 24 4
gpt4 key购买 nike

假设我有一个如下所示的 XML 文件:

<Transactions>
<Transaction OrderID="5"> ... </Transaction>
<Transaction OrderID="6"> ... </Transaction>
<Transaction OrderID="11"> ... </Transaction>
<Transaction OrderID="7"> ... </Transaction>
</Transactions>

使用 XML 架构,是否可以指示订单 #11 的顺序不正确?每个 Transaction 元素单独通过验证,但 OrderID 应按递增顺序排列。

还有一个相关问题:验证规则能否指示数字是否可以被跳过?例如,没有事务 #8、9 或 10。

最佳答案

如果您的验证器支持 XSD 1.1,您可以使用 xs:assert 来拒绝某些属性值,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
vc:minVersion="1.1">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

这应该可以回答您的第二个问题。

关于您的第一个问题,我认为无法进行订单验证。但是,您可以使用 XSLT 对 XML 文档进行排序。

-----添加了第一个问题的答案-----

谢谢你,迈克尔·凯。好吧……这是您第一个问题的答案。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Transactions">
<xs:complexType>
<xs:sequence>
<xs:element name="Transaction" maxOccurs="unbounded">
<xs:complexType mixed="true">
<xs:attribute name="OrderID" type="xs:integer"/>
<xs:assert test="empty(index-of((8,9,10),@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:assert test="every $x in Transaction satisfies
(empty($x/preceding-sibling::*) or
($x/@OrderID gt $x/preceding-sibling::*[1]/@OrderID))"/>
</xs:complexType>
</xs:element>
</xs:schema>

关于xml - XML 模式如何要求元素按属性排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25986536/

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