在XSD架构中添加版本的位置?

eli*_*ner 17 xml xsd version

我工作的应用程序具有符合XSD架构的XML输出.随着功能添加到应用程序,XSD发生了变化,我想要注意XSD文件中的模式版本.

也许我错过了一些东西,但我还没有找到标记模式版本的内置方法.

你怎么做呢?

pet*_*ven 20

您可以使用xsd文档的命名空间

<xs:schema targetNamespace="http://yourcompany/yourapp/1.0" ... >
  ...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

作为一个例子,看看w3.org定义的xsd,他们就是这样做的.请注意,通常,根据定义更改版本号对于xsd的任何使用者来说都是一个重大变化(无论实际变化有多小).

对于影响较小的版本控制,似乎就将一个版本属性放在根元素上达成了一致:

<xs:schema version="1.0.0" ...>
  ...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

  • 来自[xml-google-styleguide](http://google-styleguide.googlecode.com/svn/trunk/xmlstyle.html):`除非特定元素或属性的语义以完全不兼容的方式发生变化,否则不得更改命名空间.[基本原理:更改命名空间需要更改所有客户端代码.]` (6认同)
  • 我认为这是改变主要版本时的合适解决方案.但是,如果要进行更正或新的开发迭代,则不太好,因为必须将al XML文档迁移到新的命名空间.像我在我指出的架构元素的version属性似乎更适合IMO的那些情况. (2认同)
  • 有没有办法从根获取版本?即 &lt;xs:schema... version="1.0"/&gt; (2认同)

Rol*_*man 9

根据schema元素本身有一个version属性:

<schema
  attributeFormDefault = (qualified | unqualified) : unqualified
  blockDefault = (#all | List of (extension | restriction | substitution))  : ''
  elementFormDefault = (qualified | unqualified) : unqualified
  finalDefault = (#all | List of (extension | restriction | list | union))  : ''
  id = ID
  targetNamespace = anyURI
  version = token
  xml:lang = language
  {any attributes with non-schema namespace . . .}>
  Content: ((include | import | redefine | annotation)*, (((simpleType | complexType | group | attributeGroup) | element | attribute | notation), annotation*)*) 
</schema>
Run Code Online (Sandbox Code Playgroud)

请参阅http://www.w3.org/TR/xmlschema-1/#key-schema,"3.15.2模式的XML表示"

但是,如果您发布了架构,那么我认为处理它的最佳方法是使用目标命名空间.这将强制使用正确的版本(但破坏兼容性)