2012-04-16 57 views
2

郎值I具有含有具有属性的XML几个元素我的XML文档:朗。限制/枚举的xml:在XSD

我想限制哪些是允许的属性值的值;即只允许“en-US,en-CA”。

我试着加入了限制,但由于该值引用似乎并不为有效:

<xs:element name="translation"> 
<xs:complexType> 
    <xs:sequence> 
    <xs:element ref="name" /> 
    </xs:sequence> 
    <xs:attribute ref="xml:lang" use="required"/> 
</xs:complexType> 
</xs:element> 

获取命名空间的进口已经非常困难,似乎我无法找到在加入限制/枚举它的任何好的资源=(

回答

1

不幸的是,有没有简单的方法来实现它。你的选择肯定不是使用。

快速(和肮脏)的方法是复制本地机器上的原始xml.xsd;编辑xml.xsd文件以获得xml:lang属性所需的定义;并通过一些通用机制(例如,如果您想使用悬挂类型的目录),或者简单地使用xsd:import到您的修改过的文件,指示您的堆栈/工具使用修改后的定义。它在某些情况下甚至可能不起作用,因为某些工具可能会固执地使用xml.xsd的内部缓存副本;不能发表评论,因为你没有注明你正在使用的堆栈。

有没有干净的方式做到这一点的XSD 1.0,仅仅是因为XSD:重新定义仅适用于类型和质点组和属性。由于xml:lang是xsd:language类型,因此无法将其重新定义为仅将其限制为所需的枚举。

的xsd:覆盖在XSD 1.1将允许无约束更换;不幸的是,我会惊讶地发现新的XSD版本的主流实现。

+0

复制在xml.xsd到我的本地机器是我在做什么,但我认为它似乎不正确(或至少是很奇怪)。 这是不幸的我不能枚举它的类型,但谢谢你的解释非常有帮助! 当前使用xmllint进行验证。 – Jimmerz28 2012-04-17 19:15:51