0

我正在为包含来自其他名称空间的标签的文档类型编写 XML 模式。(具体来说,Atom 和 GML:众所周知的标准。)从另一个命名空间请求特定标签似乎很容易:

<xs:import namespace="http://www.w3.org/2005/Atom" schemaLocation="atom.xsd" />
<!-- and then, within a complex type definition: -->
<xs:element ref="atom:link" />

但在某些情况下,我需要限制此标签上的属性。例如,我需要能够指定标签的rel属性值。atom:link也就是说,我需要断言命名空间中的一个标签我正在为 contains<atom:link rel="self" href="..." />和 not编写模式<atom:link rel="somethingelse" />

我知道如何使用<xs:attribute />我自己定义的 complexType 上的标签来执行此操作,但我不知道如何在位于另一个名称空间中的标签上执行此操作。如有必要,我可以进行编辑atom.xsd,但请注意,在我的架构中的不同位置,我需要断言不同的rel值,因此我不能只rel对每次出现的atom:link.

这是可行的吗?谢谢!

4

1 回答 1

0

是的,这是个问题。为了解决这个问题,XSD 1.1 允许在本地元素和属性声明上指定 targetNamespace(但仅当您在该命名空间中优化类型时)。如果您无权访问 XSD 1.1 处理器,则唯一的解决方案是“劫持”原始名称空间 - 定义一个架构文档,其目标名称空间与您定义限制的名称空间相同,并将您的受限类型在那个命名空间中。当然,您的元素声明仍然可以放在您自己的命名空间中。

于 2013-05-23T07:28:32.670 回答