XML架构1.1中xs:redefine和xs:override之间的区别

时间:2014-02-03 10:54:29

标签: xml xsd redefinition xsd-1.1

XML架构1.1中<xs::redefine><xs::override>之间的区别是什么?我面前有两本关于XML Schema的书籍,我仍然无法区分它们。我唯一确定的是,普遍并且<xs::redefine>已被弃用。

2 个答案:

答案 0 :(得分:4)

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

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

您可以在此处详细了解覆盖: 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的书:“确定的XML Schema,第2版 版“

此致 屋大维

答案 1 :(得分:3)

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

  

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

     

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

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