2012-03-21 56 views
7

我有一個XML(first.xml)看起來像::如何處理多個名稱空間具有不同的URI在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(second.xml)的與上述相同但具有一個不同的命名空間。

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

正如我有相同的元素和屬性的XML兩種的我使用的是相同的XSD文件來驗證這兩個名字。

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

包括的xmlns後:肥皂= 「甕://bi.webservices/v6」 模式驗證失敗second.xml說未知元素 「肥皂:JOBINFO」。我戳了一下,發現targetNamespace的值應該和命名空間的URI相同。 請讓我知道如何爲具有不同URI的兩個不同名稱空間使用相同的XSD。

回答

14

簡答題是你不能。但是,如果您要使用三個XSD,則可以。它將允許您將所有重要的XSD合併爲一個文件(Chameleon.XSD),並且還有另外兩個合成Chameleon.XSD,這兩個文件具有您想要的名稱空間。

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> 

關係:

Chameleon relationships

如果你想讓一個XSD驗證它們全部,那麼你可以去建立第四個,導入這兩個。

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> 

更新的關係:

One all

+0

@@彼得魯杜米特:非常感謝您的答覆。由於有許多XSD,我無法制作Chameleon.XSD。請用圖表或示例來解釋它,以便我能更好地理解它。 – prathima 2012-03-21 13:34:04

+1

@prathima,我已經更新了我的回覆,只是時機...如果你有非常複雜的包含其他命名空間的模式,那麼你無法達到你想要的,變色龍與否。變色龍的想法是假定構成它的模式的名稱空間。所以你可以在不同的名字空間中有相同的結構,而不會有重複。有一點要記住,一個XSD =一個名稱空間。 – 2012-03-21 13:39:13

相關問題