Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extend XSD with custom attributes? [duplicate]

Tags:

xml

xsd

Is there a way to extend XSD elements with custom attributes?

For example, I'd like to do the following in an XSD:

<xs:element name="myElement" type="xs:string" myCustomAttribute="true" />
like image 833
Jonathan Bailey Avatar asked Jan 06 '23 09:01

Jonathan Bailey


1 Answers

Extending XSD with custom attributes can be accomplished by first defining the custom attributes in your own namespace, as follows:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           targetNamespace="http://www.mycompany.com" 
           elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:attribute name="myAttribute" type="xs:boolean" default="true"/>
</xs:schema>

In this namespace, http://www.mycompany.com, a single attribute named myAttribute is defined, with a type of xs:boolean.

Next, use this namespace in your target schema, as follows:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
           xmlns:mc="http://www.mycompany.com" 
           xsi:schemaLocation="http://www.mycompany.com ./doc.xsd" 
           elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="element1" mc:myAttribute="false"/>
</xs:schema>

In this example, the <schema> element includes attributes that define the custom namespace (xmlns:mc="http://www.mycompany.com"), and the location for the custom schema file (xsi:schemaLocation="http://www.mycompany.com ./doc.xsd").

The target schema contains a single element, "element1", and has the custom attribute myAttribute defined above, with a value of "false". Note that the name of the custom attribute is prefixed with the custom namespace prefix. Also note that if a value of an invalid type is used (example: mc:myAttribute="invalid"), a validation error will be generated.

Credit to @GhislainFourny and @kjhughes for help with this answer.

like image 156
Jonathan Bailey Avatar answered Jan 16 '23 08:01

Jonathan Bailey