Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Два namespace в одной xsd в Oracle XDB  [new]
kontr
Member

Откуда: Нижний Новгород
Сообщений: 73
Доброго дня.
Есть схема 1 namespace "ipo":
DECLARE
    v_xml_clob  CLOB;
BEGIN

v_xml_clob :='
<xs:schema targetNamespace="http://www.example.com/IPO"
          xmlns:ipo="http://www.example.com/IPO"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          elementFormDefault="qualified">
  <xs:element name="TestData">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="ipo:Version"/>
    </xs:sequence>
  </xs:complexType>
  </xs:element>
  <xs:element name="Version" type="ipo:Version"/>
 <xs:simpleType name="Version">
  <xs:restriction base="xs:string">
   <xs:enumeration value="1"/>
   <xs:enumeration value="2"/>
  </xs:restriction>
 </xs:simpleType>
  </xs:schema>';

DBMS_XMLSCHEMA.REGISTERSCHEMA (
  schemaurl => 'http://localhost:8080/public/TestData.xsd', schemadoc => v_xml_clob);

end;

В тип Version добавляется новое значение - 3.
Необходимо сделать эволюцию этой схемы с помощью CopyEvolve таки образом, чтобы появилось новое поле из нового namespace "ipo1", но сохранилось и старое из "ipo" схема выглядела следующим образом:

declare
  newaddr    XMLType;
  transform  XMLType;
begin
 newaddr := xmltype(
   '<xs:schema targetNamespace="http://www.example.com/IPO.1"
          xmlns:ipo1="http://www.example.com/IPO.1"
          xmlns:ipo="http://www.example.com/IPO"
          xmlns:xs="http://www.w3.org/2001/XMLSchema"
          elementFormDefault="qualified">
  <xs:import namespace="http://www.example.com/IPO" schemaLocation="http://localhost:8080/public/TestData.xsd"/>
  <xs:element name="TestData">
  <xs:complexType>
    <xs:sequence>
      <xs:element ref="ipo:Version"/>
      <xs:element ref="ipo1:Version"/>
    </xs:sequence>
  </xs:complexType>
  </xs:element>
  <xs:element name="Version" type="ipo1:Version"/>
 <xs:simpleType name="Version">
  <xs:restriction base="xs:string">
   <xs:enumeration value="1"/>
   <xs:enumeration value="2"/>
   <xs:enumeration value="3"/>
  </xs:restriction>
 </xs:simpleType>
 </xs:schema>');
 
transform := xmltype(
  '<xsl:stylesheet  version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns="http://www.example.com/IPO.1.0" xmlns:ipo1="http://www.example.com/IPO.1" xmlns:ipo="http://www.example.com/IPO">
  <xsl:template match="/ipo:TestData/ipo:Version">
    <ipo:Version>
      <xsl:for-each select="@*|node()">
         <xsl:copy-of select="."/>
      </xsl:for-each>
    </ipo:Version>
  </xsl:template>
 </xsl:stylesheet>');
 
dbms_xmlschema.CopyEvolve(xdb$string_list_t('http://localhost:8080/public/TestData.xsd'), 
      XMLSequenceType(newaddr), XMLSequenceType(transform));
end;

т.е. получить новую схему, которая уже будет работать с элементом ipo:Version из нового namespace,
но при этом видеть элементы из старого namespace - ipo0:Version.

В настоящий момент при попытке сделать эволюцию возникает ошибка:
Error report:
ORA-31154: недопустимый документ XML
ORA-19202: Возникла ошибка при обработке XML 
LSX-00344: namespace values "http://www.example.com/IPO.1" and "http://www.example.com/IPO" differ
ORA-06512: на  "XDB.DBMS_XMLSCHEMA_INT", line 153
ORA-06512: на  "XDB.DBMS_XMLSCHEMA", line 221
ORA-06512: на  line 42
31154. 00000 -  "invalid XML document" 
*Cause:    The XML document is invalid with respect to its XML Schema.
*Action:   Fix the errors identified and try again.

Существует ли возможность в одной схеме указать несколько пространст имен?
11 июл 14, 15:15    [16292512]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить