1

我的 XML(简化)是这样的:

<Actions>
    <Action Id="1">
    </Action>
    <Action Id="2">
        <DoSomething>
            <ActionRef ActionId="1" /> <!-- valid -->
        </DoSomething>
    </Action>
</Actions>

ActionId属性值引用元素的Id属性值。Action我已经在 XSD 中设置了外键约束,它可以正常工作。

我想防止外部字段中的自引用值,如下所示:

<Actions>
    <Action Id="1">
    </Action>
    <Action Id="2">
        <DoSomething>
            <ActionRef ActionId="2" /> <!-- invalid -->
        </DoSomething>
    </Action>
</Actions>

当然,这可以很容易地在处理 XML 的应用程序中完成,如果我所要求的不可行,我会依靠它,但我更希望通过验证过程自动完成.

我尝试添加[not(@ActionId = ../@Id)]到外键选择器 XPath 查询中,但这在该上下文中无效(我也不确定它是否正确)。除此之外,我不知道还能尝试什么,而且看起来网上很多人甚至在他们的 XSD 中设置了外键关系,更不用说防止这种情况了(我没有找到关于这个确切主题的内容)。

4

1 回答 1

1

这是不可能的——XSD 约束的选择器语法非常有限。其他替代方案可能包括 Schematron,假设您的运行时可以访问 XSLT 处理器,它应该是合理的集成。如果您决定添加与处理 XML 的应用程序代码分开的更多验证规则,那么您的努力可能会得到回报。

于 2012-11-23T17:50:04.813 回答