2012-03-21 15 views
7

Mam XML (first.xml), który wygląda ::jak obsługiwać wiele nazw z innym URI w 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> 

Poniższa XML (second.xml) jest taka sama jak powyżej, ale z inna przestrzeń nazw.

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

Ponieważ mam te same nazwy elementów i atrybutów w obu xml, używam tego samego pliku xsd do sprawdzenia obu.

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

Po tym xmlns: Mydło = "urn: //bi.webservices/v6" walidacja schematu nie powiodło się dla second.xml mówiąc unkown elementu "mydło: jobinfo". Sprawdziłem i okazało się, że wartość targetNamespace powinna być taka sama jak identyfikator URI przestrzeni nazw. Proszę dać mi znać, jak używać tego samego XSD dla dwóch różnych przestrzeni nazw mających różne identyfikatory URI.

Odpowiedz

14

Krótka odpowiedź brzmi: nie możesz. Możesz jednak, gdybyś używał trzech XSD. Pozwoliłoby ci to mieć wszystkie XSD, które są ważne w jednym pliku (Chameleon.XSD), i mieć jeszcze dwa, które po prostu tworzą Chameleon.XSD, te dwa o obszarach nazw, które chcesz.

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> 

zależności:

Chameleon relationships

Jeśli chcesz, aby jeden XSD zatwierdził je wszystkie, możesz przejść do czwartej, która importuje te dwa.

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> 

Zaktualizowane relacji:

One all

+0

@@ Petru: Bardzo dziękuję za odpowiedź. Nie mogę zrobić Chameleon.XSD, ponieważ istnieje wiele XSD. Wyjaśnij to diagramem lub przykładem, aby lepiej to zrozumieć. – prathima

+1

@prathima, Already zaktualizowała moją odpowiedź, tylko czas ... Jeśli masz naprawdę skomplikowane schematy, które zawierają inne przestrzenie nazw, to nie możesz osiągnąć tego, czego chcesz, Chameleon czy nie. Ideą kameleona jest przyjęcie przestrzeni nazw schematu, który ją tworzy. Więc możesz mieć te same struktury w różnych przestrzeniach nazw, bez duplikowania. Należy pamiętać, że jeden XSD = jedna przestrzeń nazw. –

Powiązane problemy