как обрабатывать несколько пространств имен с разными URI в XSD - PullRequest
8 голосов
/ 21 марта 2012

У меня есть XML (first.xml), который выглядит следующим образом: *

 <?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: soap = "urn: //bi.webservices/v6" проверка схемы не удалась для файла second.xml с неизвестным элементом "soap: jobinfo".Я осмотрелся и обнаружил, что значение targetNamespace должно совпадать с URI пространства имен.Пожалуйста, дайте мне знать, как использовать один и тот же XSD для двух разных пространств имен, имеющих разные URI.

1 Ответ

15 голосов
/ 21 марта 2012

Короткий ответ: ты не можешь. Вы могли бы, однако, если бы вы использовали три 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...