我的xml文档包含几个具有xml:lang属性的元素。
我想限制属性值允许的值;即只允许“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>
获取命名空间是很困难的,我似乎无法找到任何有关添加限制/枚举的好资源=(
答案 0 :(得分:1)
不幸的是,没有简单的方法来实现它。您拥有的选项绝对不是那么用的。
快速(和脏)方法是在本地计算机上复制原始xml.xsd;编辑xml.xsd文件以获得xml:lang属性所需的定义;并通过一些通用机制(例如目录,如果你想使用悬空类型),或只是xsd:import到你修改过的文件,指示你的堆栈/工具使用修改后的定义。它甚至可能在某些情况下不起作用,因为某些工具可能足够顽固以使用xml.xsd的内部缓存副本;无法发表评论,因为你没有表明你正在使用的堆栈。
在XSD 1.0中没有干净的方法,只是因为xsd:redefine仅适用于类型,粒子和属性组。由于xml:lang是xsd:language类型,因此无法重新定义它以仅将其约束到所需的枚举。
XSD 1.1中的xsd:override将允许无约束的替换;不幸的是,我会惊讶地看到新XSD版本的主流实现。