tags:

views:

47

answers:

2

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?

+1  A: 

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)

Roland Bouman
+2  A: 

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.

peter_raven
I think this is an appropriate solution when changing major version. However, its not so good if you want to do a correction or new development iteration, because al XML documents would have to be migrated to a new namespace. The version attribute of the schema element like I point out in my seems more appropriate for those cases IMO.
Roland Bouman