1

古いバージョンの 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>

ありがとう!

4

2 に答える 2

0

古いバージョンのJAXPを使用します。多分1.6

于 2010-11-04T20:50:02.970 に答える
0

したがって、1999 年のスキーマ仕様を使用するのは良くないという結論に達しました。1999 スキーマ仕様をサポートする以前のバージョンの Xerces パーサーは、ディスク上のどこにスキーマを配置できるかについて柔軟ではないようです。クライアントが新しいバージョンのスキーマを使用できるようになるまで、スキーマをアプリ サーバーのルート ディレクトリに配置することにおそらく行き詰っています。

Xerces のそれ以降のバージョン (Xerces 2 より前でも) は、2001 スキーマ仕様を支持して 1999 スキーマ仕様のサポートを放棄したようです。ただし、Xerces の新しいバージョンでは、スキーマ ファイルの場所をより柔軟に指定できるようになっているようです。

于 2010-11-08T04:02:27.277 に答える