How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?
Asked Answered
R

1

12

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?

Romain answered 15/2, 2016 at 14:25 Comment(0)
B
21

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>
    
Biddle answered 15/2, 2016 at 17:0 Comment(4)
without namespace, is it the same syntax to specify an xsd on the local file system?Ceramics
Yes, XSD syntax is the same for local or remote; both are URLs. If you're having trouble specifying a local URL, see How to reference a local XML Schema file correctly?Biddle
@Biddle in practice you can use xsi:noNamespaceSchemaLocation attribute to reference an XML Schema document that does have a target namespace.Decennary
@user7233170: What more are you trying to say beyond that which this answer already says?Biddle

© 2022 - 2024 — McMap. All rights reserved.