Validating xml against an xsd can be achieved thorough JDeveloper, (which is available as a free
download).
As an example, if we have the following xsd saved in a file
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="userdetails">
<xs:complexType>
<xs:sequence>
<xs:element name="username" type="xs:string"/>
<xs:element name="password" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
and the following xml saved in another file
<userdetails>
<username>Fred</username>
<password>pass123</password>
</userdetails>
We can open both the files in JDeveloper. Once opened a reference to the XSD needs to be made in the xml file. Modify the xml file and add the following entry to the initial node
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="a.xsd">
so the file looks like
<userdetails
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="a.xsd">
<username>Fred</username>
<password>pass123</password>
</userdetails>
This adds a reference to the xsd file (a.xsd) which resides in the same file location as the xml.
The xml can be validated by right clicking the xml and choosing Validate XML.
If the xml validates against the xsd the following will be displayed in the messages log.
If the xml is modified by adding an element which is not defined in the xsd
<userdetails>
<username>Fred</username>
<password>pass123</password>
<newelement>dummy value</newelement>
</userdetails>
then when the validation is run an error is displayed
Validating xml with a namespace against an xsd
In the following example the xml is modified to have a default namespace of http://www.onsheld.co.uk/ns1
<?xml version="1.0"?>
<userdetails xmlns="http://www.onsheld.co.uk/ns1">
<username>Fred</username>
<password>pass123</password>
</userdetails>
The xsd to validate the xml is show below. Note the xsd has a reference to the namespace.
<xs:schema elementFormDefault="qualified"
targetNamespace="http://www.onsheld.co.uk/ns1"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="userdetails">
<xs:complexType>
<xs:sequence>
<xs:element type="xs:string" name="username"/>
<xs:element type="xs:string" name="password"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
The xml would require the following two tags to point the xml to the xsd and indicate validation was required
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
This indicates xml validation
xsi:schemaLocation="http://www.onsheld.co.uk/ns1 http://www.onsheld.co.uk/files/xml_files/a.xsd"
This has two parts, first the namespace followed by a space followed by the name and
location of the xsd file (in this case the file is called a.xsd which resides on the web at location
http://www.onsheld.co.uk/files/xml_files/a.xsd )
The revised xml would be:
<?xml version="1.0"?>
<userdetails xmlns="http://www.onsheld.co.uk/ns1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.onsheld.co.uk/ns1 http://www.onsheld.co.uk/files/xml_files/a.xsd">
<username>Fred</username>
<password>pass123</password>
</userdetails>
Further resources