(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から読み取るにはどうすればよいですか?