2012-05-16 2 views
2

Я хочу использовать сортировки в преобразовании xslt на основе саксона. Исходный файл:XSL/Saxon collations/command line

<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> 

Это работает почти нормально в кислороде, выход:

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

(А должен быть второй вход, но это еще один вопрос, я думаю)

Но когда я использую командную строку, я получаю ошибку:

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. 

Похоже, что саксон теперь хочет использовать german в качестве файла. Этого не существует.


Вопрос: как использовать эту таблицу стилей в командной строке.

Если это уместно, я также спрошу, как получить «Ä», отсортированный между двумя «A.», но я могу задать это в другом вопросе.

ответ

3

Самое простое решение не использовать атрибут сортировки на всех, но использовать

<xsl:sort lang="de"/> 

который запрашивает систему, чтобы найти подходящую для сортировки текста на немецком языке, и переносим на процессорах XSLT.

Если вы хотите получить более точные параметры сортировки, есть руководство по строительству саксонских сортировки URIs здесь: http://www.saxonica.com/documentation/extensibility/collation.xml

причина вашей ошибки в том, что, когда указанное значение является относительным URI ссылки, он интерпретируется как относительно базового URI таблицы стилей. С саксоном это почти неизбежно создает URI сопоставления, которого не существует. Непонятно, почему спецификация допускает относительные коллизионные URI; они потенциально могут быть полезны с некоторыми продуктами, но они не делают ничего полезного с Саксоном.