如何防止在XSD架构中自引用外键值?

时间:2012-11-23 17:21:44

标签: xsd foreign-keys

我的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中建立外键关系,更不用说防止这种情况了(我在这个确切的主题上一无所获)。

1 个答案:

答案 0 :(得分:1)

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

相关问题