How to define xsi:type as an attribute in XML-schema?

You don’t need to – just declare the element without a type at all.

<element name="SerializedData" />

The xsi:type attribute is used to indicate to the schema validator that the real type of a particular instance of an element is not the element’s declared type but rather a sub-type derived from the declared type. By declaring the element with no type you are saying it can have any type, and you will use xsi:type in the instance to specify which.

Strictly you’re declaring an element whose type is the “ur-type” which is the root of the XML Schema type hierarchy – all types, simple and complex, ultimately derive from the ur-type. If you want to restrict the SerializedData element to simple content only (no sub-elements or attributes) then declare it as

<element name="SerializedData" type="anySimpleType" />

Regarding the second part of your question, your designer tool is right that in isolation

<SerializedData xsi:type="xs:double">300.0</SerializedData>

is not correct XML, because the xsi namespace has not been declared. Try adding the namespace declarations:

<SerializedData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xsi:type="xs:double">300.0</SerializedData>

Leave a Comment