gpt4 book ai didi

xml - 如何为 XML 片段编写此 Schematron 验证测试?

转载 作者:行者123 更新时间:2023-12-03 17:27:49 27 4
gpt4 key购买 nike

我有一个这样的 XML 片段:

<AAA>
<Field name="a"/>
<Field name="b"/>
<Field name="x"/>
<User id="x" id2="f"/>
<User id="y"/>
</AAA>
<AAA>
<Field name="r"/>
<Field name="z"/>
</AAA>

我需要这样的规则,如果用户标签存在,它应该检查 的属性值是否id id2 存在于字段的名称属性下。

所以在第一个 AAA 标签,它将验证并给出 2 个错误,因为 "f" 不作为字段名存在, 也不存在"y" .

AAA 标签并不总是有用户标签,用户标签也不总是同时有 id id2 .

我一直在搞乱一些 XPath 表达式,但无济于事。

最佳答案

如果您不能使用 XPath 2.0,那么您可以编写以下 Schematron 规则:

ISO Schematron

<?xml version="1.0" encoding="UTF-8"?>
<sch:schema xmlns:sch="http://purl.oclc.org/dsdl/schematron" queryBinding="xslt2">

<sch:pattern>
<sch:rule context="User[@id]">
<sch:assert test="@id = ../Field/@name">User ID does not exist as a field!</sch:assert>
</sch:rule>

<sch:rule context="User[@id2]">
<sch:assert test="@id2 = ../Field/@name">User ID2 does not exist as a field!</sch:assert>
</sch:rule>
</sch:pattern>

</sch:schema>

我假设一个没有命名空间的输入 XML 文档。如果 User 则断言不会失败元素一开始就没有这些属性之一,或者如果 AAA元素没有 User元素。

你没有说得很清楚,为什么 Martin Honnen 的建议对你不起作用,所以我还是把它列在这里。规则如下所示:
<sch:pattern>
<sch:rule context="AAA">
<sch:report test="some $user in User satisfies not($user/(@id, @id2) = Field/@name)">User ID does not exist as a field!</sch:report>
</sch:rule>
</sch:pattern>

关于xml - 如何为 XML 片段编写此 Schematron 验证测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41902578/

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