対応する XML スキーマに対する XML ドキュメントの検証について質問したいのですが、ご協力いただければ幸いです。実は、私は XML スキーマについて学び始めたばかりです (まったくの初心者です)。Priscilla Walmsley 著の「Definitive XML Schema」(第 2 版) を購入しました。この本では、XML Schema 1.1 (これが最新バージョンだと思います) が紹介されています。
問題は、この本のすべての例と演習で、名前空間とスキーマ ファイルの場所が Web URL を使用して指定されていることです。
本の例は次のとおりです。
これがスキーマです
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://datypic.com/prod"
xmlns:prod="http://datypic.com/prod">
<xs:element name="product" type="prod:ProductType"/>
<xs:complexType name="ProductType">
<xs:sequence>
<xs:element name="number" type="xs:integer"/>
<xs:element name="size" type="prod:SizeType"/>
</xs:sequence>
<xs:attribute name="effDate" type="xs:date"/>
</xs:complexType>
<xs:simpleType name="SizeType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="2"/>
<xs:maxInclusive value="18"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
そして、上記に対して検証される XML コンテンツはこれです
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod prod.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
明らかに、[http://datypic.com/prod] は著者によって管理されているサイトであるため、この本を読んでいる間、演習のためにこのサイトのファイルを追加または削除することはできません。その結果、ローカル ハード ドライブに XML ドキュメントと XSD ドキュメントの両方を配置する必要があります (Linux Fedora Core 17 X86_64 を使用しています)。そこで私がしたことは、スキーマのコンテンツを「Example-01.xsd」という名前のファイルに入れ、XML コンテンツを「Example-01.xml」という名前のファイルに入れることでした。
次のリンクのように、Oracle PL/SQL パッケージ DBMS_XMLSCHEMA (Enterprise Edition 11.2.0.1.0) を使用して、最初にスキーマを登録し、次に XMLType オブジェクトの validate メソッドを呼び出してスキーマに対して XML ドキュメントを検証します。
https://forums.oracle.com/forums/thread.jspa?messageID=2462207
Oracle で (CREATE DIRECTORY によって) ステートメントでディレクトリを作成しました。
/home/train/Documents/myutl_file_dir/
XML ドキュメントと XSD ドキュメントの両方を配置した場所。XSD をローカルで参照するために、上記の XML コンテンツを正確に変更した方法を次に示します。
<prod:product xmlns:prod="http://datypic.com/prod"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://datypic.com/prod file:///home/train/Documents/myutl_file_dir/Example-01.xsd"
effDate="2011-04-12">
<number>557</number>
<size>10</size>
</prod:product>
したがって、新しい XML コンテンツを上記の例と比較すると、私が追加したのはfile:///home/train/Documents/myutl_file_dir/Example-01.xsd だけで、 xsi:schemaLocationの値の最後にあります。ローカル ハード ドライブを参照するようにします。ここでこの方法を見つけました:
http://lists.w3.org/Archives/Public/xmlschema-dev/2001Dec/0161.html
さて、問題はそれが機能しないことです。XMLType オブジェクトの schemaValidate() メソッドを呼び出してドキュメントを検証するためにスクリプトを実行すると、次の Oracle エラー メッセージが表示されます。
BEGIN
*
ERROR at line 1:
ORA-19030: Method invalid for non-schema based XML Documents.
ORA-06512: at "SYS.XMLTYPE", line 354
ORA-06512: at "TRAIN2012.ZXML_PKG", line 176
ORA-06512: at line 2
エラーメッセージ「メソッドが非スキーマベースの XML ドキュメントに対して無効です」から理解できることは、オラクルはスキーマファイルに定義したファイルパスを単純に無視し、この XML ドキュメントに対して宣言されたスキーマがないと見なしたことです。
何か案が?どうすればこの問題に対処できますか?
前もって感謝します、
ダリヨーシュ