porandddr
porandddr

Reputation: 139

How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?

I found some tips for this problem, but still didn't help me.

Here is my XML

<?xml version="1.0" encoding="UTF-8"?>
<work xmlns="http://www.w3.org/2001/XMLSchema"
      xmlns:tns="http://www.w3.org/2001/XMLSchema-instance"
      tns:schemaLocation="myXSDSchema.xsd">
  <tns:Objects>
    <tns:Object Name=":" Location=":">
    </tns:Object>
  </tns:Objects>
</work>

Here is my XSD file:

<schema xmlns="http://www.w3.org/2001/XMLSchema" 
        xmlns:tns = "http://www.w3.org/2001/XMLSchema" 
        elementFormDefault="qualified">
  (some checks)
</schema>

My XSD file is located in the same folder as the XML.

How to link these 2 files?

Upvotes: 12

Views: 28889

Answers (1)

kjhughes
kjhughes

Reputation: 111686

How to link an XSD to an XML document depends upon whether the XML document is using namespaces or not...

Without namespaces

Use xsi:noNamespaceSchemaLocation to provide a hint as to the XSD to be used:

  • document.xml:

     <root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:noNamespaceSchemaLocation="example.xsd">
       <!-- ... -->
     </root>
    
  • example.xsd:

     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       <xsd:element name="root">
         <!-- ... -->
       </xsd:element>
     </xsd:schema>
    

With namespaces

Use xsi:schemaLocation to provide a hint as to the XSD to be used:

  • document.xml:

     <ns:root xmlns:ns="http://example.com/ns"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://example.com/ns example-ns.xsd">
       <!-- ... -->
     </ns:root>
    
  • example-ns.xsd:

     <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                 targetNamespace="http://example.com/ns">
       <xsd:element name="root">
         <!-- ... -->
       </xsd:element>
     </xsd:schema>
    

Upvotes: 21

Related Questions