239 DBMS_XMLSCHEMA_UTIL

DBMS_XMLSCHEMA_UTILパッケージは、XMLスキーマを検証するためのインタフェースを提供します。

この章のトピックは、次のとおりです:

DBMS_XMLSCHEMA_UTILセキュリティ・モデル

アプリケーションでは、DBMS_XMLSCHEMA_UTILパッケージのEXECUTE権限が必要です

DBMS_XMLSCHEMA_UTILサブプログラムの要約

このトピックは、DBMS_XMLSCHEMA_UTILサブプログラムをアルファベット順に示し、簡単に説明しています。

表239-1 DBMS_XMLSCHEMA_UTILパッケージ・サブプログラム

サブプログラム 説明

CONFORMINGファンクション

XML文書を単一のスキーマまたはスキーマの配列に対して検証します。 このファンクションはオーバーロードされています。

VALIDATEプロシージャ

XML文書を単一のスキーマまたはスキーマの配列に対して検証します。 このprocudereはオーバーロードされています。

CONFORMINGファンクション

このファンクションはオーバーロードされています。 複数の機能を構文形式ごとに、定義とともに示します

構文

このファンクションは、スキーマに対してXML文書を検証するために使用します:

DBMS_XMLSCHEMA_UTIL.CONFORMING (
   doc             IN XMLTYPE,
   sch             IN XMLTYPE)
RETURN NUMBER;

ノート:

このファンクションは、xmlデータ・インスタンスとxmlスキーマ・インスタンスを指定します。 ユーザーはスキーマを登録する必要はありません。

構文

このファンクションは、複数のXMLスキーマ・ドキュメントに対してXMLドキュメントを検証するために使用します。XMLスキーマの配列として、それぞれが配列URIの一致するスキーマURIで識別されます :

DBMS_XMLSCHEMA_UTIL.CONFORMING (
   doc             IN XMLTYPE,
   uris            IN XDB.XDB$STRING_LIST_T,
   schemas         IN sys.XMLSequenceType)
RETURN NUMBER;

パラメータ

表239-2 CONFORMINGファンクションのパラメータ

パラメータ 説明

doc

XMLインスタンス

sch

XMLスキーマ

schemas

XMLスキーマ配列

uris

スキーマURI

ファンクションの例外

DBMS_XMLSCHEMA_UTIL.CONFORMINGファンクションの例外は次のとおりです。

  • このファンクションは、スキーマが有効で、文書がスキーマに準拠している場合はゼロを返します。それ以外の場合は、スキーマ検証からLSXエラー・コードを返します。

  • docNULLの場合、URIまたはスキーマがnullまたは空の場合、またはURIとスキーマのサイズが異なる場合、このファンクションはORA-31093を発生させます。

例: 文書がスキーマに準拠している

SELECT DBMS_XMLSCHEMA_UTIL.CONFORMING(
     XMLType('<A/>'),
     XMLType(
         '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
          <xs:element name="A" type="xs:string"/>
          </xs:schema>')) "LSX CODE"
    FROM DUAL;

例: ドキュメントはスキーマに準拠し、適合ファンクションはゼロを返します

SQL> select
  2    dbms_xmlschema_util.conforming(
  3      xmltype(
  4       '<Company xmlns="http://www.oracle.com/company.xsd"
  5                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6                 xsi:schemaLocation="http://www.oracle.com/company.xsd company">
  7          <Name>Oracle</Name>
  8          <Employee>
  9            <EmployeeId>1001</EmployeeId>
 10            <Name>John Doe</Name>
 11          </Employee>
 12        </Company>'),
 13      XDB$STRING_LIST_T(
 14        'employee',
 15        'company'),
 16      XMLSequenceType(
 17        xmltype(
 18         '<schema xmlns="http://www.w3.org/2001/XMLSchema"
 19                  xmlns:my="http://www.oracle.com/company.xsd"
 20                  targetNamespace="http://www.oracle.com/company.xsd"
 21                  elementFormDefault="qualified">
 22            <complexType name = "EmployeeType">
 23             <sequence>
 24              <element name = "EmployeeId" type = "positiveInteger"/>
 25              <element name = "Name" type = "string"/>
 26             </sequence>
 27            </complexType>
 28          </schema>'),
 29        xmltype(
 30         '<schema xmlns="http://www.w3.org/2001/XMLSchema"
 31                  xmlns:my="http://www.oracle.com/company.xsd"
 32                  targetNamespace="http://www.oracle.com/company.xsd"
 33                  elementFormDefault="qualified">
 34            <include schemaLocation="employee"/>
 35            <element name = "Company">
 36              <complexType>
 37                <sequence>
 38                  <element name = "Name" type = "string"/>
 39                  <element name = "Employee" type = "my:EmployeeType"
 40                      maxOccurs = "unbounded"/>
 41                </sequence>
 42              </complexType>
 43            </element>
 44          </schema>'))) "LSX CODE"
 45  from dual;

  LSX CODE
----------
         0

1 row selected.

 

VALIDATEプロシージャ

このプロシージャはオーバーロードされています。 複数の機能を構文形式ごとに、定義とともに示します。

構文

このプロシージャは、スキーマに対してXML文書を検証するために使用します:

DBMS_XMLSCHEMA_UTIL.VALIDATE (
   doc             IN XMLTYPE,
   sch             IN XMLTYPE);

ノート:

このプロシージャは、xmlデータ・インスタンスとxmlスキーマ・インスタンスを指定します。 ユーザーはスキーマを登録する必要はありません。

構文

このプロシージャは、XMLドキュメントを複数のXMLスキーマ・ドキュメントに対して検証するために使用します。XMLスキーマの配列として、それぞれが配列URIの一致するスキーマURIで識別されます:

DBMS_XMLSCHEMA_UTIL.VALIDATE (
   doc             IN XMLTYPE,
   uris            IN XDB.XDB$STRING_LIST_T,
   schemas         IN sys.XMLSequenceType);

パラメータ

表239-3 VALIDATEプロシージャのパラメータ

パラメータ 説明

doc

XMLインスタンス

sch

XMLスキーマ

schemas

XMLスキーマ配列

uris

スキーマURI

プロシージャの例外

DBMS_XMLSCHEMA_UTIL.VALIDATEプロシージャの例外は次のとおりです。

  • このプロシージャは、スキーマが有効でないか、文書がスキーマに準拠していない場合にORA-31154を生成します。

例: 文書がスキーマに準拠している

BEGIN
      DBMS_XMLSCHEMA_UTIL.VALIDATE(
         XMLType('<A/>'),
         XMLType(
                 '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
                  <xs:element name="A" type="xs:string"/>
                  </xs:schema>'));
END;
/

例: ドキュメントはスキーマに準拠しています

SQL> begin
  2    dbms_xmlschema_util.validate(
  3      xmltype(
  4       '<Company xmlns="http://www.oracle.com/company.xsd"
  5                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  6                 xsi:schemaLocation="http://www.oracle.com/company.xsd company">
  7          <Name>Oracle</Name>
  8          <Employee>
  9            <EmployeeId>1001</EmployeeId>
 10            <Name>John Doe</Name>
 11          </Employee>
 12        </Company>'),
 13      XDB$STRING_LIST_T(
 14        'employee',
 15        'company'),
 16      XMLSequenceType(
 17        xmltype(
 18         '<schema xmlns="http://www.w3.org/2001/XMLSchema"
 19                  xmlns:my="http://www.oracle.com/company.xsd"
 20                  targetNamespace="http://www.oracle.com/company.xsd"
 21                  elementFormDefault="qualified">
 22            <complexType name = "EmployeeType">
 23             <sequence>
 24              <element name = "EmployeeId" type = "positiveInteger"/>
 25              <element name = "Name" type = "string"/>
 26             </sequence>
 27            </complexType>
 28          </schema>'),
 29        xmltype(
 30         '<schema xmlns="http://www.w3.org/2001/XMLSchema"
 31                  xmlns:my="http://www.oracle.com/company.xsd"
 32                  targetNamespace="http://www.oracle.com/company.xsd"
 33                  elementFormDefault="qualified">
 34            <include schemaLocation="employee"/>
 35            <element name = "Company">
 36              <complexType>
 37                <sequence>
 38                  <element name = "Name" type = "string"/>
 39                  <element name = "Employee" type = "my:EmployeeType"
 40                      maxOccurs = "unbounded"/>
 41                </sequence>
 42              </complexType>
 43            </element>
 44          </schema>')));
 45  end;
 46  /

PL/SQL procedure successfully completed.