2

Saxon ベースの xslt 変換で照合を使用したいと考えています。ソースファイル:

<root>
  <entry name="B" />
  <entry name="Aa" />
  <entry name="Ä" />
  <entry name="Az" />
</root>

そして私の変換:

<xsl:stylesheet version="2.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:saxon="http://saxon.sf.net/">
  <xsl:output indent="yes"/>

  <saxon:collation name="german" lang="de-DE"/>

    <xsl:template match="root">
      <root>
        <xsl:for-each select="entry">
          <xsl:sort select="@name" collation="german"/>
          <sorted entry="{@name}"/>
        </xsl:for-each>
      </root>
    </xsl:template>

</xsl:stylesheet>

これは Oxygen でほぼ問題なく動作し、出力は次のようになります。

<root xmlns:saxon="http://saxon.sf.net/">
   <sorted entry="Ä"/>
   <sorted entry="Aa"/>
   <sorted entry="Az"/>
   <sorted entry="B"/>
</root>

(Ä は 2 番目のエントリである必要がありますが、それは別の質問だと思います)

しかし、コマンド ラインを使用すると、エラーが発生します。

java -jar saxon9he.jar -s:source.xml -o:out.xml -xsl:transformation.xsl


  XTDE1035: Collation file:/Users/<mypath>/german has not been defined
Failed to compile stylesheet. 1 error detected.

saxon がgermanファイルとして使用したいようです。それは存在しない。


問題は、このスタイルシートをコマンド ラインでどのように使用するかです。

適切であれば、「Ä」を 2 つの「A」の間でソートする方法も尋ねます。エントリですが、別の質問でこれを尋ねることができます。

4

1 に答える 1

3

最も簡単な解決策は、照合属性をまったく使用せず、使用することです

<xsl:sort lang="de"/>

これは、ドイツ語のテキストに適した照合順序を見つけるようにシステムに要求し、XSLT プロセッサ間で移植可能です。

より正確な照合が必要な場合は、Saxon 照合 URI の作成に関するガイダンスがhttp://www.saxonica.com/documentation/extensibility/collat ​​ion.xml にあります。

エラーの理由は、指定した値が相対 URI 参照である場合、スタイルシートのベース URI に対して相対的であると解釈されるためです。Saxon では、これによりほぼ必然的に存在しない照合 URI が生成されます。仕様で相対照合 URI が許可されている理由は明らかではありません。一部の製品では役立つ可能性がありますが、Saxon では何も役に立ちません。

于 2012-05-16T13:46:52.483 に答える