【问题标题】:Difference between xs:redefine and xs:override in XML schema 1.1XML 模式 1.1 中 xs:redefine 和 xs:override 之间的区别
【发布时间】:2014-02-26 19:48:06
【问题描述】:

在 XML 模式 1.1 中 <xs::redefine><xs::override> 有什么区别。我面前有两本关于 XML Schema 的书,但我仍然无法区分。我唯一确定的是,两者都是普遍存在的,而<xs::redefine> 已被弃用。

【问题讨论】:

标签: xml xsd redefinition xsd-1.1


【解决方案1】:

使用重新定义,您可以扩展或限制组件(复杂类型, 简单类型、模型组和属性组)。所以,你重用 组件的原始定义,您可以扩展或限制它。

覆盖允许您替换组件的定义。所以, 您创建一个具有相同名称的新组件来替换原始组件 定义。您可以覆盖任何顶级命名组件(复杂 类型,简单类型,元素声明,属性声明, 模型组、属性组和符号)。

您可以在此处阅读有关覆盖的更多信息: http://www.w3.org/TR/xmlschema11-1/#override-schema 或者您可以阅读 Roger Costello XML Schema 1.1 教程: http://www.xfront.com/xml-schema-1-1/index.html

我还推荐 Priscilla Walmsley 的书:“Definitive XML Schema, 2nd 版”

问候, 屋大维

【讨论】:

    【解决方案2】:

    摘自http://www.w3.org/TR/xmlschema11-1/#override-schema

    在包含修改的组件定义 () (§4.2.4) 中定义的 构造在模式演变和版本控制中很有用,当希望在旧组件和重新定义的组件之间有一些保证的限制或扩展关系时.但是有时模式作者只是想用新组件替换旧组件而没有任何约束。此外,现有的 XSD 处理器已经实现了对 的冲突和不可互操作的解释,并且 构造已被弃用。本节中定义的 构造允许这种无约束的替换。

    注意:本节其余部分中描述的重新定义功能已被弃用,并且可能会从本规范的未来版本中删除。鼓励模式作者避免在与本规范更高版本的互操作性或兼容性很重要的情况下使用它。

    <xs:redefine> 对与某些 xml 解析器不兼容的已定义元素施加约束。 <xs:override> 基本上做了<xs:redefine> 一直在做的事情,但在更改整个元素定义方面更加灵活,而不考虑已经定义的元素。 XML 解析器不必担心检查使用<xs:override> 的先前定义的元素,但<xs:redefine> 的情况则不然。

    【讨论】:

    • 所以<xs::override> 只是<xs::redefine> 的明确替代品。
    • 更新了我的回复。希望你觉得它有用。
    • 是的,我做到了。但出于好奇,<xs:redefine> 施加了什么样的约束?
    • 类型必须从其基本类型扩展或限制。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2016-03-01
    • 2023-03-17
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    相关资源
    最近更新 更多