2012-03-21 20 views
7

tengo un XML (first.xml) que se parece ::cómo manejar varios espacios de nombres con diferentes URI en XSD

<?xml version="1.0" encoding="utf-8"?> 
<saw:jobInfo xmlns:saw="com.analytics.web/report/v1.1">  
     <saw:jobStats>...........</saw:jobStats>  
     <saw:detailedInfo> .....</saw:detailedInfo>  
     <saw:fileInfo>..........</saw:fileInfo> 
</saw:jobInfo> 

La continuación XML (second.xml) es igual que el anterior pero con una espacio de nombres diferente

<?xml version="1.0" encoding="utf-8"?> 
<soap:jobInfo xmlns:soap="urn://bi.webservices/v6"> 
    <soap:jobStats>...........</saw:jobStats> 
    <soap:detailedInfo> .....</saw:detailedInfo>  
    <soap:fileInfo>..........</saw:fileInfo> 
</soap:jobInfo> 

Como tengo el mismo elemento y nombres de atributo, tanto en el xml de que estoy usando el mismo archivo xsd para validar ambos.

archivo XSD ::

<?xml version="1.0" encoding="utf-8" ?> 
<xs:schema targetNamespace="com.analytics.web/report/v1.1"  
    xmlns="com.analytics.web/report/v1.1" 
    xmlns:saw="com.analytics.web/report/v1.1" 
    xmlns:soap="urn://bi.webservices/v6" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified"> 

Después de incluir xmlns: Jabón = "urn: //bi.webservices/v6" la validación del esquema fracasó por second.xml diciendo elemento desconocido "jabón: jobinfo". Busqué y encontré que el valor targetNamespace debe ser el mismo que el URI del espacio de nombres. Por favor, hágame saber cómo usar el mismo XSD para dos espacios de nombres diferentes que tengan diferentes URI.

Respuesta

14

Respuesta corta es que no puede. Podría, sin embargo, si estuviera usando tres XSD. Te permitiría tener todo el XSD que importa en un archivo (Chameleon.XSD), y tener dos más que simplemente compongan Chameleon.XSD, esos dos tienen los espacios de nombres que deseas.

Chameleon.XSD

<?xml version="1.0" encoding="utf-8"?> 
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> 
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="jobInfo"> 
    <xsd:complexType> 
     <xsd:sequence> 
     <xsd:element name="jobStats" type="xsd:string" /> 
     <xsd:element name="detailedInfo" type="xsd:string" /> 
     <xsd:element name="fileInfo" type="xsd:string" /> 
     </xsd:sequence> 
    </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

JobInfo1.xsd

<?xml version="1.0" encoding="utf-8"?> 
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> 
<xsd:schema xmlns="com.analytics.web/report/v1.1" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="com.analytics.web/report/v1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:include schemaLocation="Chameleon.xsd"/> 
</xsd:schema> 

JobInfo2.xsd

<?xml version="1.0" encoding="utf-8"?> 
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)--> 
<xsd:schema xmlns="urn://bi.webservices/v6" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn://bi.webservices/v6" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:include schemaLocation="Chameleon.xsd"/> 
</xsd:schema> 

Relaciones:

Chameleon relationships

Si quiere un XSD para validarlos todos, puede ir y construir un cuarto, que importe estos dos.

OneAll.XSD

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com)--> 
<xsd:schema xmlns="urn:tempuri-org:XSD:1" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:tempuri-org:XSD:1" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:import namespace="com.analytics.web/report/v1.1" schemaLocation="JobInfo1.xsd"/> 
    <xsd:import namespace="urn://bi.webservices/v6" schemaLocation="JobInfo2.xsd"/> 
</xsd:schema> 

relaciones Actualizado:

One all

+0

@@ Petru: Muchas gracias por la respuesta. No puedo hacer un Chameleon.XSD, ya que hay muchos XSD. Por favor explícalo con un diagrama o con un ejemplo para que pueda entenderlo mejor. – prathima

+1

@prathima, ya he actualizado mi respuesta, solo el tiempo ... Si tienes esquemas realmente complejos que incluyen otros espacios de nombres, entonces no puedes lograr lo que quieres, camaleón o no. La idea de un camaleón es asumir el espacio de nombres del esquema que lo compone. Por lo tanto, podría tener las mismas estructuras en diferentes espacios de nombres, sin tener duplicaciones. Una cosa para recordar es que un XSD = un espacio de nombres. –

Cuestiones relacionadas