我们一直在使用 RELAX NG 为我们的基于 Web 的 API 指定和验证 XML 消息,我正在做一些清理工作并开始使用该<external>
元素。
在我们的模式中,我们有一个<subscription>
元素,它有诸如 id 和句点之类的东西,还有一个<account>
. 这在 RELAX NG 中很容易指定:
<?xml version="1.0"?>
<element name="subscription" xmlns="http://relaxng.org/ns/structure/1.0">
<element name="id">
<text />
</element>
<zeroOrMore>
<externalRef href="./account.xml" />
</zeroOrMore>
</element>
然后,此模式将包含在特定请求的实际消息模式中。
问题是<account>
元素还可以<subscription>
根据请求有多个元素(例如,有时我们根据帐户信息搜索订阅数据,有时我们会根据订阅数据搜索帐户信息)。
我试过:
<?xml version="1.0"?>
<element name="account" xmlns="http://relaxng.org/ns/structure/1.0">
<element name="id">
<text />
</element>
<zeroOrMore>
<externalRef href="./subscription.xml" />
</zeroOrMore>
</element>
但是在加载架构时出现(并非意外)错误:Detected an externalRef recursion
有没有办法指定某种递归限制 - 某种方式知道我的当前<subscription>
是一个孩子,<account>
所以不应该有<account>
孩子本身?