Инструменты пользователя

Инструменты сайта


integration:xsd_vs_namespaces

XSD vs Namespaces

Всем привет. У одного нашего коллеги была проблема следующего характера.

Создал он через EAI Siebel Wizard Integration Object. При помощи данного интеграционного объекта он должен был читать xml из файловой системы (EAI Message). После этого он сгенерировал XSD описание данного объекта при помощи кнопки Generate Schema. Получилось очень даже хорошо. Но после того, как он передал данный XSD файл коллегам, которые готовили XML – выяснилось, что XML-и генерировались с префиксом “xsdlocal” (оно же namespace). В последствии используя EAI стандартные сервисы прочитать он это не сумел (смотреть примеры ниже: XSD, XML, Namespace). Читал он стандартным сервисом: EAI XML Read from File, метод: ReadEAIMsg.

Получите такую ошибку:

По сему, мой совет такой: добавляйте следующий параметр при использовании данного метода, если имеете проблему выше: · StripNamespace = True.

И получается красота: в исходящем параметре SiebelMessage прочитанное сообщение (смотреть Out.xml).

PS: если вам глаза сильно режет этот namespace в элементах, можно установить elementFormDefault=«unqualified» (но в корневом элементе он не пропадает, смотреть: Unqualified).

XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsdLocal="http://www.siebel.com/xml/SUN%20Address" targetNamespace="http://www.siebel.com/xml/SUN%20Address" elementFormDefault="qualified" attributeFormDefault="unqualified">
   <xsd:annotation>
      <xsd:documentation>Copyright (C) 2001-2004 Siebel Systems, Inc. All rights reserved. Siebel XSD Generation</xsd:documentation>
   </xsd:annotation>
   <xsd:element name="SiebelMessage" type="xsdLocal:SiebelMessage" />
   <xsd:complexType name="SiebelMessage">
      <xsd:sequence>
         <xsd:element name="ListOfSunAddress" type="xsdLocal:ListOfSunAddress" minOccurs="0" maxOccurs="1" />
      </xsd:sequence>
      <xsd:attribute name="MessageId" type="xsd:string" />
      <xsd:attribute name="MessageType" type="xsd:string" />
      <xsd:attribute name="IntObjectName" type="xsd:string" />
      <xsd:attribute name="IntObjectFormat" type="xsd:string" />
      <xsd:attribute name="HeaderSource" type="xsd:string" />
      <xsd:attribute name="HeaderDataObject" type="xsd:string" />
      <xsd:attribute name="HeaderFileCreatedDateTime" type="xsdLocal:string30" />
      <xsd:attribute name="HeaderDataStartDateTime" type="xsdLocal:string30" />
      <xsd:attribute name="HeaderDataEndDateTime" type="xsdLocal:string30" />
   </xsd:complexType>
   <xsd:complexType name="ListOfSunAddress">
      <xsd:sequence>
         <xsd:element name="CutAddress" type="xsdLocal:CutAddress" minOccurs="1" maxOccurs="unbounded" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:complexType name="CutAddress">
      <xsd:sequence>
         <xsd:element name="AddressSourceId" type="xsdLocal:string50" minOccurs="1" maxOccurs="1" />
         <xsd:element name="Operation" type="xsdLocal:string10" minOccurs="1" maxOccurs="1" />
         <xsd:element name="AddressLine1" type="xsdLocal:string200" minOccurs="1" maxOccurs="1" />
         <xsd:element name="AddressLine2" type="xsdLocal:string100" minOccurs="0" maxOccurs="1" />
         <xsd:element name="AddressLine3" type="xsdLocal:string100" minOccurs="0" maxOccurs="1" />
         <xsd:element name="City" type="xsdLocal:string50" minOccurs="1" maxOccurs="1" />
         <xsd:element name="State" type="xsdLocal:string10" minOccurs="0" maxOccurs="1" />
         <xsd:element name="PostalCode" type="xsdLocal:string30" minOccurs="1" maxOccurs="1" />
         <xsd:element name="Country" type="xsdLocal:string30" minOccurs="0" maxOccurs="1" />
      </xsd:sequence>
   </xsd:complexType>
   <xsd:simpleType name="string50">
      <xsd:restriction base="xsd:string">
         <xsd:maxLength value="50" />
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="string10">
      <xsd:restriction base="xsd:string">
         <xsd:maxLength value="10" />
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="string30">
      <xsd:restriction base="xsd:string">
         <xsd:maxLength value="30" />
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="string100">
      <xsd:restriction base="xsd:string">
         <xsd:maxLength value="100" />
      </xsd:restriction>
   </xsd:simpleType>
   <xsd:simpleType name="string200">
      <xsd:restriction base="xsd:string">
         <xsd:maxLength value="200" />
      </xsd:restriction>
   </xsd:simpleType>
</xsd:schema>

XML:

<?xml version="1.0" encoding="UTF-8"?>
<xsdLocal:SiebelMessage xmlns:xsdLocal="http://www.siebel.com/xml/SUN%20Address" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.siebel.com/xml/SUN%20Address file:///C:/Users/syniohubvlad/Desktop/XSD.xsd" MessageId="string" MessageType="string" IntObjectName="string" IntObjectFormat="string" HeaderSource="string" HeaderDataObject="string" HeaderFileCreatedDateTime="string" HeaderDataStartDateTime="string" HeaderDataEndDateTime="string">
   <xsdLocal:ListOfSunAddress>
      <xsdLocal:CutAddress>
         <xsdLocal:AddressSourceId>string</xsdLocal:AddressSourceId>
         <xsdLocal:Operation>string</xsdLocal:Operation>
         <xsdLocal:AddressLine1>string</xsdLocal:AddressLine1>
         <xsdLocal:AddressLine2>string</xsdLocal:AddressLine2>
         <xsdLocal:AddressLine3>string</xsdLocal:AddressLine3>
         <xsdLocal:City>string</xsdLocal:City>
         <xsdLocal:State>string</xsdLocal:State>
         <xsdLocal:PostalCode>string</xsdLocal:PostalCode>
         <xsdLocal:Country>string</xsdLocal:Country>
      </xsdLocal:CutAddress>
   </xsdLocal:ListOfSunAddress>
</xsdLocal:SiebelMessage>

Что такое namespace:

Unqualified:

<?xml version="1.0" encoding="utf-8"?>
<xsdLocal:SiebelMessage xmlns:xsdLocal="http://www.siebel.com/xml/SUN%20Address" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.siebel.com/xml/SUN%20Address file:///C:/Users/syniohubvlad/Desktop/XSD.xsd" MessageId="string" MessageType="string" IntObjectName="string" IntObjectFormat="string" HeaderSource="string" HeaderDataObject="string" HeaderFileCreatedDateTime="string" HeaderDataStartDateTime="string" HeaderDataEndDateTime="string">
  <ListOfSunAddress>
    <CutAddress>
      <AddressSourceId>string</AddressSourceId>
      <Operation>string</Operation>
      <AddressLine1>string</AddressLine1>
      <AddressLine2>string</AddressLine2>
      <AddressLine3>string</AddressLine3>
      <City>string</City>
      <State>string</State>
      <PostalCode>string</PostalCode>
      <Country>string</Country>
    </CutAddress>
  </ListOfSunAddress>
</xsdLocal:SiebelMessage>

Владислав 2014/12/02 17:42

integration/xsd_vs_namespaces.txt · Последние изменения: 2016/11/04 14:05 (внешнее изменение)