powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Валидация XML по нескольким вложенным XSD
3 сообщений из 3, страница 1 из 1
Валидация XML по нескольким вложенным XSD
    #39978225
MakeSure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброй пятницы всем,

Есть набор XSD:
1. Message.xsd - здесь есть элемент с типом dataType , который не определен (примеры схем ниже);
2. TypeMessage1.xsd - здесь include Message.xsd и определен свой тип с именем dataType
3. TypeMessage2.xsd - здесь include Message.xsd и определен свой тип с именем dataType

Потом нам прилетает XML, который нужно провалидировать по одной из схем TypeMessage1.xsd или TypeMessage2.xsd (мы знаем заранее по какой именно).
Проблема в том, что XDB при валидации уверенно шлет лесом, потому что при парсинге Message.xsd не понимает тип dataType .
Да и в целом, без форса зарегистрировать схему Message.xsd невозможно, что очевидно, ведь падает на неизвестном типе.

Очедивно, что алгоритмы последовательности действий при валидации могут быть разные, большинство успешно валидируют, ведь в конце получают большой набор и описания схем - и при обработке Message.xsd успешно находят тип, ведь их просят провалидировать через TypeMessage1.xsd или TypeMessage2.xsd .


Я давно не работал с ХМЛ в базе, поэтому вопрос - можно ли провернуть валидацию без дополнительных костылей как смерджить две схемы в одну и/или распилить входной ХМЛ и провалидировать частями?


В первой из них есть элемент и ссылка на тип dataType, который неопределен :
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<?xml version="1.0" encoding="ISO-8859-1"?>
  <xs:element name="Message" type="MessageType"/>
  <xs:complexType name="MessageType">
    <xs:sequence>
      <xs:element name="date" type="xs:date"/>
      <xs:element name="DATA" type="dataType"/>
    </xs:sequence>
  </xs:complexType>



Второй и третий выглядят например так:
Код: xml
1.
2.
3.
4.
5.
<xs:include schemaLocation="Message.xsd"/>
<xs:complexType name="dataType">
      <xs:element name="date" type="xs:date"/>
      <xs:element name="rate" type="xs:decimal"/>
</xs:complexType>



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<xs:include schemaLocation="Message.xsd"/>
<xs:complexType name="dataType">
   <xs:sequence>
      <xs:element name="factor1" type="xs:integer"/>
      <xs:element name="factor2" type="xs:integer"/>
      <xs:element name="factor3" type="xs:integer"/>
   </xs:sequence>
</xs:complexType>
...
Рейтинг: 0 / 0
Валидация XML по нескольким вложенным XSD
    #39978240
MakeSure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл накинуть примерчик ХМЛки:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<Message>
    <date>2020-12-12</date>
    <DATA>
        <date>2021-01-01</date>
        <rate>1.23</rate>
    </DATA>
</Message>
...
Рейтинг: 0 / 0
Валидация XML по нескольким вложенным XSD
    #39978256
MakeSure
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[Решено]

Попробовал все варианты валидации и один подошел ))
Кладем хмлку в XMLTYPE без указания схемы, потом используем эту функцию, которая не будет помечать, что хмлка валидирована, но проверит на указанную схему:
Код: plsql
1.
2.
l_xml.isSchemaValid('TypeMessage1.xsd');
-- 1 success / 0 fail



Ну и к слову не нужно забывать, что Оракл очень трепетно относится к ХМЛкам и даже не признает "--" в тексте коммента. Например,
Код: xml
1.
<!-- oops -- oops -->
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Валидация XML по нескольким вложенным XSD
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]