239 DBMS_XMLSCHEMA_UTIL
DBMS_XMLSCHEMA_UTILパッケージは、XMLスキーマを検証するためのインタフェースを提供します。
この章のトピックは、次のとおりです:
239.2 DBMS_XMLSCHEMA_UTILサブプログラムの要約
このトピックは、DBMS_XMLSCHEMA_UTILサブプログラムをアルファベット順に示し、簡単に説明しています。
表239-1 DBMS_XMLSCHEMA_UTILパッケージ・サブプログラム
| サブプログラム | 説明 |
|---|---|
|
XML文書を単一のスキーマまたはスキーマの配列に対して検証します。 このファンクションはオーバーロードされています。 |
|
|
XML文書を単一のスキーマまたはスキーマの配列に対して検証します。 このprocudereはオーバーロードされています。 |
239.2.1 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ファンクションのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
XMLインスタンス |
|
|
XMLスキーマ |
|
|
XMLスキーマ配列 |
|
|
スキーマURI |
ファンクションの例外
DBMS_XMLSCHEMA_UTIL.CONFORMINGファンクションの例外は次のとおりです。
-
このファンクションは、スキーマが有効で、文書がスキーマに準拠している場合はゼロを返します。それ以外の場合は、スキーマ検証からLSXエラー・コードを返します。
-
docがNULLの場合、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.
239.2.2 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プロシージャのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
XMLインスタンス |
|
|
XMLスキーマ |
|
|
XMLスキーマ配列 |
|
|
スキーマ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.