古いバージョンの XML 仕様 (http://www.w3.org/1999/XMLSchema) で構築された XML スキーマがあります。スキーマを使用して XML メッセージを解析しようとしています (以下を参照)。デフォルトでは、Xerces 1.1 パーサーはアプリ ドメインのルート ディレクトリでスキーマを検索します。スキーマを Web ディレクトリのパブリックな場所に移動しようとしています。Xerces 1.1 ライブラリを使用する解析プログラムで、スキーマの場所として URL を指定できないようです。
そこで、JAXP DocumentBuilderFactory とその setSchema() メソッドを使用するようにプログラムをアップグレードしようとしました。これは、私が提供したスキーマ URL を使用してスキーマを見つけるようですが、スキーマが (おそらく) 仕様の新しいバージョンに準拠していないため、解析エラーが発生します (たとえば、Ticket 要素がないためエラーが発生します)。そのメンバーを xs:Sequence 内にラップします)。
現時点では、メッセージを送信するアプリを外部の顧客に強制的に書き直すことはできないため、スキーマをアップグレードできません。
JAXP を使用して、古い学校のバージョンのスキーマ仕様を使用して正常に解析/検証する方法を誰か教えてもらえますか? あるいは、Xerces 1.1 DOMParser に (ファイルの場所ではなく) URL で定義されたスキーマを使用するように指示する方法はありますか?
スキーマがどのように見えるかのサンプルを次に示します。
<?xml version="1.0" encoding="UTF-8" ?>
<schema>
<element name="Ticket">
<complexType>
<element ref="ID" />
<element ref="User" />
</complexType>
</element>
<element name="ID" type='string' />
<element name="UserID" type='string' />
</schema>
XML ドキュメントは次のようになります。
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Ticket xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xsi:noNamespaceSchemaLocation='TicketSubmission.xsd'>
<ID>2010:December2:Dec:12:05:33:245</ID>
<UserID>user123</UserID>
</Ticket>
ありがとう!