XML Schema:限制来自另一个名称空间的元素

时间:2013-05-22 23:17:45

标签: xml xsd xml-namespaces

我正在为包含来自其他命名空间的标记的文档类型编写XML Schema。 (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属性的值。也就是说,我需要声明命名空间中的标记我正在编写包含<atom:link rel="self" href="..." />而不是<atom:link rel="somethingelse" />的模式。

我知道如何使用我自己定义的complexType上的<xs:attribute />标记来执行此操作,但我不知道如何在另一个命名空间中的标记上执行此操作。我可以根据需要编辑atom.xsd,但请注意,在我的架构中的不同位置,我需要断言不同的rel值,因此我不能在每次出现时添加一个rel限制atom:link

这可行吗?谢谢!

1 个答案:

答案 0 :(得分:0)

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