4

(XSLを使用して)XML変換の一部として、変換の結果を検証できるように、スキーマの場所の属性を作成しています。ただし、これを自己完結型テストとして実行しようとしているので、スキーマの場所の適切な属性/値をCLASSPATHから外れるように設定できるようにしたいと思います。

グーグルを少し行った後、さまざまなschemaLocation属性を試しましたが、最新の試みは次のとおりです。

..
<xsl:attribute name="xsi:external-noNamespaceSchemaLocation">
  <xsl:value-of select="$schemaLocation"/>
</xsl:attribute>
..

変換後の結果は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<emrException 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:external-noNamespaceSchemaLocation="emrException_1_0.xsd">
    ..
    <!-- more well-formed XML -->
</emrException>

バリデーターの実行時に、emrException_1_0.xsdファイルが明らかにCLASSPATHにあることを再確認しました。これはDOMバリデーターであり、Xerces 2.9.1 / Xalan 2.7.1を使用しています。結果は、次のとおりです。

Caused by: org.xml.sax.SAXParseException: 
    cvc-elt.1: Cannot find the declaration of element 'emrException'.

ただし、XSDファイルがファイルシステムまたは外部URLから読み取られるスキーマの場所を使用するように切り替えると、バリデーターは楽しく動作します。

XSDをCLASSPATHから読み取るにはどうすればよいですか?

4

1 に答える 1

1

1 つの方法は、独自の LSResourceResolver と LSInput を実装して、渡された systemId を必要に応じて解決できるようにすることです。

于 2011-01-28T19:06:29.257 に答える