user234
user234

Reputation: 61

reference an xsd file in xml

I am new to xml language, I have one xml file and I created xsd schema for that file, but my problem is how to reference this schema in xml file. My xml schema look like this

<?xml version="1.0" encoding="utf-8"?>
 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wmh="http://www.wmhelp.com/2003/eGenerator"
    elementFormDefault="qualified"
    targetNamespace="http://axis.com/service"
    xmlns="http://axis.com/service"
    version="1.0">

  <xs:element name="SWService" type="SWServiceType"/>
  <xs:element name="HWService" type="HWServiceType"/>


 <xs:complexType name="SWServiceType">
<xs:sequence>
  <xs:element name="Service" type="ServiceType" minOccurs="0" maxOccurs="unbounded"/>
  </xs:sequence>
  </xs:complexType>

 <xs:complexType name="ServiceType">
 <xs:complexContent>
 <xs:extension base="IdType">
  <xs:sequence>
    <xs:element name="Description" type="xs:string" maxOccurs="1" minOccurs="0"/>
    <xs:element name="ServiceCustomers" type="ServiceCustomersType" maxOccurs="1" 
 minOccurs="0"/>
    <xs:element name="ServiceSuppliers" type="ServiceSuppliersType" maxOccurs="1" 
 minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="Name" type="xs:string" use="required"/>
  </xs:extension>
  </xs:complexContent>
   </xs:complexType>

    <xs:complexType name="HWServiceType">
  <xs:sequence>
    <xs:element name="element" type="elementGroupType" maxOccurs="1" minOccurs="0"/>
  </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ServiceCustomersType">
  <xs:sequence>
    <xs:element name="SoftWare" type="SoftWareType" maxOccurs="unbounded" 
  minOccurs="0"/>
  </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ServiceSuppliersType">
  <xs:sequence>
    <xs:element name="SoftWare" type="SoftWareType" maxOccurs="unbounded" 
 minOccurs="0"/>
    <xs:element name="HardWare" type="HardWareType" maxOccurs="unbounded" 
  minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="SoftWareType">
 <xs:complexContent>
 <xs:extension base="PathType">
  <xs:attribute name="Service" type="xs:string" use="required"/>
    </xs:extension>
     </xs:complexContent>
 </xs:complexType>

 <xs:complexType name="HardWareType">
 <xs:complexContent>
 <xs:extension base="PathType">
  <xs:attribute name="Type" type="xs:string" use="required"/>
  <xs:attribute name="Nr" type="xs:string" use="required"/>
  <xs:attribute name="Service" type="xs:string" use="required"/>
    </xs:extension>
     </xs:complexContent>
 </xs:complexType>

<xs:complexType name="PathType">
  <xs:attribute name="Path" type="xs:string" use="required"/>
</xs:complexType>


   <xs:complexType name="elementGroupType">
 <xs:sequence>
       <xs:element name="element" type="elementType" maxOccurs="unbounded" 
 minOccurs="1"/>
  </xs:sequence>
 </xs:complexType>


 <xs:complexType name="elementType">
  <xs:sequence>
    <xs:element name="LM" type="LMType2" maxOccurs="1" minOccurs="1"/>
    <xs:element name="Service" type="ServiceType" maxOccurs="unbounded" minOccurs="0"/>
  </xs:sequence>
  <xs:attribute name="Type" type="xs:string" use="required"/>
  <xs:attribute name="Nr" type="xs:string" use="required"/>
  <xs:attribute name="Name" type="xs:string" use="required"/>
 </xs:complexType>


  <xs:complexType name="LMType2">
  <xs:sequence>
    <xs:element name="LowerMode" type="LowerModeType2" maxOccurs="unbounded" 
 minOccurs="0"/>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="LowerModeType2">
 <xs:complexContent>
  <xs:extension base="IdType">
    <xs:attribute name="Probability" type="xs:double" use="required"/>
  </xs:extension>
  </xs:complexContent>
  </xs:complexType>


 <xs:complexType name="IdType">
  <xs:attribute name="Id" type="xs:string" use="required"/>
 </xs:complexType>

  </xs:schema>

I saved this file as as service.xsd. I need to reference this schema in my xml file, i tried like this but it not validating.

<?xml version="1.0" encoding="UTF-8"?>
<Service xsi:schemaLocation="file:///C:/main/newfolder/service.xsd"       
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://axis.com/service"        
 Version="1.0">
--------Xml data-------
 </Service>

I cant under what is the problem. It gives error like this

  No DTD of the document found 

I tried like this

<?xml version="1.0" encoding="UTF-8"?>
<Service xsi:schemaLocation=""http://axis.com/service"       
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://axis.com/service"        
 Version="1.0">
--------Xml data-------
 </Service>

but still same problem. when I validate xml file using xmlpad. Can any one fix my problem.any help appreciated

Thanks in advance.

Upvotes: 6

Views: 1563

Answers (1)

tom redfern
tom redfern

Reputation: 31780

The use of schemaLocation is entirely optional and the Version attribute is incorrect in your instance (unless you have defined an attribute called Version in your schema)

The following instance

<Service xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://axis.com/service">
any string
</Service>

Validates fine against the schema:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:wmh="http://www.wmhelp.com/2003/eGenerator"
    elementFormDefault="qualified"
    targetNamespace="http://axis.com/service"
    xmlns="http://axis.com/service"
    version="1.0">
  <xs:element name="Service" type="xs:string"/>
</xs:schema>

All I did was replace your type AxisServiceType with a string.

In order to determine the exact cause of the failure you are having I would need to see your entire schema and instance document.

Upvotes: 1

Related Questions