限制/枚举XSD中的xml:lang值

限制/枚举XSD中的xml:lang值,xml,xsd,Xml,Xsd,我的xml文档包含几个元素,这些元素的属性为xml:lang 我想限制属性值允许的值;i、 e.只允许“en-US,en-CA” 我已尝试添加限制,但由于引用的值似乎无效: <xs:element name="translation"> <xs:complexType> <xs:sequence> <xs:element ref="name" /> </xs:sequence> <xs:attrib

我的xml文档包含几个元素,这些元素的属性为xml:lang

我想限制属性值允许的值;i、 e.只允许“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>


要导入名称空间非常困难,我似乎找不到任何好的资源来为其添加限制/枚举=(

不幸的是,没有简单的方法来实现它。您拥有的选项肯定没有被使用

一种快速(且不干净)的方法是在本地计算机上复制原始xml.xsd;编辑xml.xsd文件以获得xml:lang属性所需的定义;并通过一些通用机制(例如,如果要使用悬挂类型,请使用目录),或者简单地将xsd:import导入到修改后的文件中,指示堆栈/工具使用修改后的定义。在某些情况下,它甚至可能不起作用,因为某些工具可能非常顽固,无法使用xml的内部缓存副本。xsd;无法注释,因为您尚未指明所使用的堆栈

在XSD 1.0中没有干净的方法可以做到这一点,因为XSD:redefinite仅适用于类型、粒子组和属性。由于xml:lang属于XSD:language类型,因此无法重新定义它以仅将其约束到所需的枚举


xsd:xsd 1.1中的覆盖将允许无约束的替换;不幸的是,我会惊讶地看到新xsd版本的主流实现。

我正在做的是将xml.xsd复制到本地机器上,但我认为这似乎不合适(或者至少很奇怪).这很不幸,我无法列举它的类型,但感谢您的解释非常有用!目前正在使用xmllint进行验证。