【问题标题】:Restrict/Enumerate xml:lang values in XSD限制/枚举 XSD 中的 xml:lang 值
【发布时间】:2012-04-17 07:26:17
【问题描述】:

我的 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>

导入命名空间已经够难的了,我似乎找不到任何好的资源来添加限制/枚举 =(

【问题讨论】:

    标签: xml xsd


    【解决方案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 版本的主流实现,我会感到惊讶。

    【讨论】:

    • 将 xml.xsd 复制到我的本地计算机是我正在做的事情,但我认为这似乎不合适(或者至少很奇怪)。不幸的是,我无法列举它的类型,但感谢您的解释非常有帮助!目前使用 xmllint 进行验证。
    猜你喜欢
    • 2012-03-26
    • 2012-11-19
    • 2011-01-16
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    相关资源
    最近更新 更多