2012-03-21 13 views
7

Ho un XML (first.xml) che sembra ::come gestire più domini con differenti URI in 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> 

XML di seguito (second.xml) è lo stesso come sopra, ma con un spazio dei nomi diverso.

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

Come ho lo stesso elemento e nomi degli attributi in entrambe le XML di sto usando lo stesso file XSD per convalidare entrambi.

file 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"> 

Dopo aver incluso xmlns: soap = "urn: //bi.webservices/v6" la convalida dello schema non riuscita per second.xml dicendo elemento unkown "soap: jobinfo". Mi sono girato e ho trovato che il valore targetNamespace dovrebbe essere uguale all'URI dello spazio dei nomi. Per favore fatemi sapere come usare lo stesso XSD per due diversi namespace con URI diversi.

risposta

14

Risposta breve è impossibile. Potresti, tuttavia, se usassi tre XSD. Ti permetterebbe di avere tutto l'XSD che conta in un file (Chameleon.XSD), e ne hai altri due che compongono semplicemente Chameleon.XSD, quei due che hanno gli spazi dei nomi che vuoi.

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> 

Relazioni:

Chameleon relationships

Se vuoi che un XSD li convalidi tutti, puoi andare a costruirne uno quarto, che importa questi due.

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> 

relazioni Aggiornato:

One all

+0

@@ Petru: Grazie mille per la risposta. Non riesco a creare un Chameleon.XSD in quanto vi sono molti XSD. Per favore spiegalo con un diagramma o con un esempio in modo che io possa capirlo meglio. – prathima

+1

@prathima, ho aggiornato la mia risposta, solo il tempismo ... Se hai schemi davvero complessi che includono altri spazi dei nomi, allora non puoi ottenere ciò che vuoi, Camaleonte o no. L'idea di un camaleonte è di assumere lo spazio dei nomi dello schema che lo compone. Quindi potresti avere le stesse strutture in spazi dei nomi diversi, senza duplicazioni. Una cosa da ricordare è che uno XSD = uno spazio dei nomi. –

Problemi correlati