powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по проверке XSD схемы в pl/sql
3 сообщений из 3, страница 1 из 1
Вопрос по проверке XSD схемы в pl/sql
    #39266215
Sergey_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день
Не могу понять почему не проходит в Oracle 10.2.0.5 проверка xsd (пример ниже). Данные XMLи проходят проверку схемы в XMLPad и VS2012. Так же странное поведение второго XMLя (xml_clob1), который проходит isschemavalid но не проходит schemaValidate.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
declare 
  xsdclob clob := '<?xml version="1.0" encoding="windows-1251"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="mynumber">
    <xs:restriction base="xs:decimal">
      <xs:pattern value="\-{0,1}[0-9]+\.[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="mymask">
    <xs:restriction base="xs:string">
      <xs:maxLength value="7"/>
      <xs:minLength value="4"/>
      <xs:pattern value="([0-9]{2})(\.)((([0-9])|([0-9]{2}))|([0-9]{2}))"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:element name="DATA" type="DATACONTENT"/>
  <xs:complexType name="DATACONTENT">
    <xs:sequence>
      <xs:element name="VALUE1" type="mynumber" nillable="true" minOccurs="0"/>
      <xs:element name="VALUE2" type="mymask" nillable="true" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>';
begin
  begin
    dbms_xmlschema.deleteschema('myxsd.xsd', 3); 
  exception
    when others then
      null;
  end;
  begin
    dbms_xmlschema.registerSchema('myxsd.xsd', xsdclob, local => true, genTypes => false, genbean => false, genTables => false);
  exception
    when others then
      null;
  end;
end;



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare 
  xml xmltype;
  xml_clob clob := '<?xml version="1.0" encoding="windows-1251"?>
<DATA>
  <VALUE1>12.34</VALUE1>
  <VALUE2>11.22</VALUE2>
</DATA>';
  xml_clob1 clob := '<?xml version="1.0" encoding="windows-1251"?>
<DATA>
  <VALUE1>2.10</VALUE1>
  <VALUE2>22.5</VALUE2>
</DATA>';
begin
  --execute immediate 'alter session set nls_numeric_characters = ''. ''';
  begin
    xml := xmltype(xml_clob);
    dbms_output.put_line('isschemavalid : ' ||case when xml.isschemavalid('myxsd.xsd') = 1 then 'OK' else 'ERROR' end);  
    xml := xml.createSchemaBasedXML('myxsd.xsd');
    xmltype.schemaValidate(xml);
  EXCEPTION
    when OTHERS then
      dbms_output.put_line('schemaValidate : ERROR ' ||sqlerrm);
  end;
  dbms_output.put_line('');
  begin
    xml := xmltype(xml_clob1);
    dbms_output.put_line('isschemavalid : ' ||case when xml.isschemavalid('myxsd.xsd') = 1 then 'OK' else 'ERROR' end);  
    xml := xml.createSchemaBasedXML('myxsd.xsd');
    xmltype.schemaValidate(xml);
  EXCEPTION
    when OTHERS then
      dbms_output.put_line('schemaValidate : ERROR ' ||sqlerrm);
  end;
end;



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
isschemavalid : ERROR
schemaValidate : ERROR ORA-31154: недопустимый документ XML
ORA-19202: Возникла ошибка при обработке XML 
LSX-00333: литерал "11.22" не является допустимым в отношении шаблона

isschemavalid : OK
schemaValidate : ERROR ORA-31154: недопустимый документ XML
ORA-19202: Возникла ошибка при обработке XML 
LSX-00333: литерал "2.1" не является допустимым в отношении шаблона

Можно ли заставить эти два XMLя проходить проверку схемы как это делают другие инструменты?
...
Рейтинг: 0 / 0
Вопрос по проверке XSD схемы в pl/sql
    #39266779
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эти хмл-и валидируются:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<DATA>
  <VALUE1>12.34</VALUE1>
  <VALUE2>11.2</VALUE2>
</DATA>

<DATA>
  <VALUE1>12.34</VALUE1>
</DATA>



значит проблема в регекспе (именно для оракла)

Код: javascript
1.
([0-9]{2})(\.)((([0-9])|([0-9]{2}))|([0-9]{2}))



отформатируем ...

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
([0-9]{2})
(\.)
(
  (
    ([0-9])
    |
    ([0-9]{2})
  )
  |
  ([0-9]{2})
)



я бы переформулировал эту регулярку так:
Код: javascript
1.
[0-9]{2}\.[0-9]{1,2}


или
Код: javascript
1.
\d{2}\.\d{1,2}
...
Рейтинг: 0 / 0
Вопрос по проверке XSD схемы в pl/sql
    #39267177
Sergey_123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry., Спасибо за ответ, наверно так и буду делать, просто очень неприятно когда регулярка по разному отрабатыват.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по проверке XSD схемы в pl/sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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