Where to add a version to an XSD schema?

2019-02-06 06:00发布

The application I work on has XML output that conforms to an XSD schema. As features are added to the application, the XSD changes and I would like to note the version of the schema in the XSD file.

Perhaps I'm missing something, but I haven't found a built-in way to mark the version of the schema.

How do you do it?

标签: xml xsd version
2条回答
Deceive 欺骗
2楼-- · 2019-02-06 06:16

You can use the namespace of your xsd document

<xs:schema targetNamespace="http://yourcompany/yourapp/1.0" ... >
  ...
</xs:schema>

As an example look at the xsd's defined by w3.org, this is how they do it. Do note that changing the version number here would usually by definition be a breaking change for any consumers of your xsd (no matter how small the actual change was).

For less impacting versioning, there seems to be an agreement about putting a version attribute at your root element:

<xs:schema version="1.0.0" ...>
  ...
</xs:schema>
查看更多
叛逆
3楼-- · 2019-02-06 06:16

According to the schema element itself has a version attribute:

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

See http://www.w3.org/TR/xmlschema-1/#key-schema, "3.15.2 XML Representations of Schemas"

However, if you published the schema, then I think the best way to deal with it would be to use the target namespace. This would enforce the right version being used (but break compatibility)

查看更多
登录 后发表回答