Зацикленные схемы XML

actual
Дата: 06.06.2006 13:09:55
Столкнулся с проблемой. Есть ряд схем xml. Пытаюсь зарегистрировать их через пакет dbms_xmlschema. Схемы ссылаются друг на друга. Итак регистрирую первую:

dbms_xmlschema.registerschema('office.xsd', getDocument('offise.xsd'));

getDocument() - функция, возвращающая CLOB схемы.

Получаю ошибку: ресурс 'vml.xsd' не является документом схемы XDB. Ошибка возникает из-за того, что в схеме есть строка:

<xsd:import namespace="bla-bla-bla" schemaLocation="vml.xsd"/>

Но если я попытаюсь зарегистрировать схему vml.xsd, то получу ошибку:
ресурс 'office.xsd' не является документом схемы XDB, т.к. в схеме vml.xsd есть строка:

<xsd:import namespace="bla-bla-bla" schemaLocation="office.xsd"/>

Короче замкнутый круг. Схемы курочить и переносить все пространства имен в одну схему не хочется, т.к. их очень много (около десятка) - они все загружены с microsoft для разбора офисных документов в формате xml.

Подскажите как можно обойти.
Ловец Стрекоз
Дата: 06.06.2006 13:42:35
actual
Столкнулся с проблемой. Есть ряд схем xml. Пытаюсь зарегистрировать их через пакет dbms_xmlschema. Схемы ссылаются друг на друга. Итак регистрирую первую:

dbms_xmlschema.registerschema('office.xsd', getDocument('offise.xsd'));

getDocument() - функция, возвращающая CLOB схемы.

Получаю ошибку: ресурс 'vml.xsd' не является документом схемы XDB.

Естественно, схема vml.xsd не зарегистрированна.

actual

Ошибка возникает из-за того, что в схеме есть строка:

<xsd:import namespace="bla-bla-bla" schemaLocation="vml.xsd"/>

Но если я попытаюсь зарегистрировать схему vml.xsd, то получу ошибку:
ресурс 'office.xsd' не является документом схемы XDB, т.к. в схеме vml.xsd есть строка:

<xsd:import namespace="bla-bla-bla" schemaLocation="office.xsd"/>

Короче замкнутый круг.

Совершенно верно, зарегистрировать подобные схемы не получится.
actual

Схемы курочить и переносить все пространства имен в одну схему не хочется, т.к. их очень много (около десятка) - они все загружены с microsoft для разбора офисных документов в формате xml.

Подскажите как можно обойти.

Хранить документы как CLOB. И спать спокойно.
actual
Дата: 06.06.2006 14:09:42
Ловец Стрекоз
Дата: 06.06.2006 14:26:05
Какая удача! Вы нашли раритетный документ. Но укажите, или процитируйте строчку в которой сказано что схемы могут ссылаться друг на друга. Просто интересно, какие структуры данных сформирует Oracle при таких схемах.
actual
Дата: 06.06.2006 15:26:35
Ловец Стрекоз
Какая удача! Вы нашли раритетный документ. Но укажите, или процитируйте строчку в которой сказано что схемы могут ссылаться друг на друга. Просто интересно, какие структуры данных сформирует Oracle при таких схемах.


Строчки о том, что схемы могут ссылаться друг на друга можно увидеть здесь.
actual
Дата: 06.06.2006 23:05:38
И все-таки целый день проковырялся - не выходит!!! Делаю все как в мануале, несмотря на замечание выше, что мол документ раритеный - тоже самое пишут и на otn. Итак, используя параметр force, регистрирую схему vml.xsd

dbms_xmlschema.registerSchema('vml.xsd', getDocument('vml.xsd'), true, true, false, false, true, 'test');

и схему office.xsd:

dbms_xmlschema.registerSchema('office.xsd', getDocument('office.xsd'), true, true, false, false, true, 'еуые');

Все проходит ОК. Теперь пытаюсь привести зарегистрированные схемы в чуство:

dbms_xmlschema.compileSchema('office.xsd');

Получаю:

ORA-04068: существующее состояние пакетов было сброшено
ORA-04063: schema 'vml.xsd' имеет ошибки

dbms_xmlschema.compileSchema('vml.xsd');

Получаю:

ORA-04068: существующее состояние пакетов было сброшено
ORA-04063: schema 'office.xsd' имеет ошибки

Все схемы скачаны с официального сайта Microsoft. Если там даже и есть ошибки, то как хотя бы их посмотреть??? Или может быть я где-то в другом месте ошибаюсь???