【发布时间】:2020-04-25 20:04:50
【问题描述】:
最近,我的一位同事向我提出了一个问题,是否可以对 XML 文档进行扩展验证。我建议为此使用 XML 模式,因为它可以正常工作。他离开了,但几周后回复我说,他对使用简单和复杂属性表达大量数据限定的选项非常满意,但他仍然遇到的事情是链接。我说过,在 XSD 中表达链接需求的常用方法是应用 Xlink。不知何故,这对他来说是令人满意的,但当他回来时,他只花了一点时间就发现它确实解决了他的一些问题,但并不完全如此。
他遇到的事情是,从数据质量的角度来看,没有办法检查输入的 ID 的实际存在。让我们提出以下 XML:
<S123:RadioStation xml:id="JS.RDOSTA.01">
<featureName><name>JUSSLAND MRCC</name></featureName>
</S123:RadioStation>
现在有另一个 XML 元素引用了这个 XML 元素,让我们说:
<S123:RadioServiceArea xml:id="JS.RDOSVC.01">
<featureName><name>JUSSLAND MRCC service area></name></featureName>
<serviceProvider xlink:href="#JS.RDOSTA.01" xlink:role="http://www.iho.int/S-123/gml/1.0/roles/serviceProvider" xlink:title="serviceProviderArea"/>
</S123:RadioServiceArea>
现在我可以想出一个 XSD,它可以完美地验证对象和 serviceProvider XML 元素的存在,但是对于我来说,我无法想出一些东西来指示模式验证器检查实际存在指定链接的 (#JS.RDOSTA.01)。我在 XML Schema 规范和 Xlink 规范中都找不到任何东西。是否有什么我遗漏或忽略的东西,或者只是我想要的太多而无法指示任何架构验证器这样做?
【问题讨论】: