2012-05-16 5 views
2

Saxon 기반 xslt 변환에서 데이터 정렬을 사용하고 싶습니다. 소스 파일 : XSL/Saxon 데이터 정렬/명령 줄

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

(단, A는 두 번째 항목, 그러나한다 그게 또 다른 질문입니다.)

하지만 명령 줄을 사용하면 오류가 발생합니다.

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을 파일로 사용하려고합니다. 그것은 존재하지 않습니다.


질문 :이 스타일 시트를 명령 줄에서 어떻게 사용합니까?

적절한 경우 두 개의 "A"사이에 "Ä"정렬 방법을 묻습니다. 항목이 있지만 다른 질문에서이 질문을 할 수 있습니다.

답변

3

가장 간단한 솔루션은 모든 데이터 정렬 속성을 사용하는 것이 아니라 독일어 텍스트에 맞는 조합을 찾기 위해 시스템을 요구

<xsl:sort lang="de"/> 

을 사용하지 않고, XSLT 프로세서를 통해 휴대용입니다. http://www.saxonica.com/documentation/extensibility/collation.xml

이유를 당신의 오류에 대해 사용자가 지정하는 값이 상대 URI 참조 인 경우가로 해석한다는 것입니다 : 당신은보다 정확한 정렬을 원하는 경우

, 여기 색슨 정렬 URI를 구성에 대한 지침이있다 스타일 시트의 기본 URI를 기준으로합니다. Saxon을 사용하면 존재하지 않는 데이터 정렬 URI가 거의 필연적으로 생성됩니다. 스펙이 상대적인 조합 URI를 허용하는 이유는 명확하지 않습니다. 일부 제품에서는 유용 할 수 있지만 Saxon에서는 유용하지 않습니다.