2011-12-13 14 views
6

Soy nuevo en el lenguaje xml, tengo un archivo xml y creé el esquema xsd para ese archivo, pero mi problema es cómo hacer referencia a este esquema en el archivo xml. Mi mirada esquema XML como estoreferencia un archivo xsd en xml

<?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> 

que guarda este archivo como como service.xsd. Necesito hacer referencia a este esquema en mi archivo xml, lo intenté así pero no lo validé.

<?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> 

No puedo bajo cuál es el problema. Se da error como este

No DTD of the document found 

traté como esto

<?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> 

pero todavía mismo problema. cuando valido el archivo xml usando xmlpad. Puede alguien solucionar mi problema. Cualquier ayuda apreciada

Gracias de antemano.

+1

+1: ¡Una de las mejores primeras publicaciones que he visto por un tiempo! –

+0

¿Podría describir cómo está validando el XML? ¿Utiliza algún programa externo o tal vez con alguna biblioteca? – bbaja42

+0

@ bbaja42 Estoy validando con XMLPAD. – user234

Respuesta

1

El uso de schemaLocation es totalmente opcional y el atributo de versión es incorrecta en su caso (a menos que se haya definido un atributo llamado Versión en el esquema)

El siguiente ejemplo

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

Valida bien contra el esquema:

<?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> 

Todo lo que hice fue reemplazar su tipo AxisServiceType con una cadena.

Para determinar la causa exacta de la falla que está teniendo, necesitaría ver todo el documento de esquema y instancia.

+0

Gracias por su respuesta, estoy escribiendo un archivo xsd para diferentes formatos de archivo xml, SWService, HWService, ModuleSpecification se refiere a diferentes archivos xml y SWService xml file xsd se hace referencia bajo SWServiceType.like wise para tres archivos xml diferentes. Edité mi publicación y puedo echar un vistazo a mi publicación editada. Necesito hacer referencia a esta xsd en tres formatos de archivo xml diferentes. ¿Me puede ayudar de esa manera? Si hago referencia a esta xsd sin espacio de nombres, es validada, pero con espacio de nombre da error. – user234

+0

Lo siento, pero deberá proporcionarme todo el esquema XSD para que pueda ayudarlo a compilar un documento XML de instancia. –

+0

Puedes echar un vistazo a mi xsd, proporcioné todo el esquema xsd. – user234

Cuestiones relacionadas