2012-03-21 78 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

相关问题