xsl:function a undeclared prefix

marek_rd marek_rd na yahoo.co.uk
Středa Únor 17 11:19:20 CET 2010


> marek_rd wrote:
>> Dobrý den,
>> 
>> na tomto fóru mi pan Kosek jednou poradil následující funkci na
>> generování nedělitelných mezer za jednoslovné předložky:
>> 
>> <xsl:function name="f:tildify">
>>         <xsl:param name="text"/>
>>         <xsl:value-of select="replace($text,
>>             '(\s|\p{Z}|\p{P})([AIKOSUVZikosuvz])([ \t]+|[ \t]*\n[ \t]*)(\w)', 
>>             '$1$2 $4', 's')"/>
>>     </xsl:function>
>>     <xsl:template match="text()">
>>         <xsl:value-of select="f:tildify(.)"/>
>>     </xsl:template>
>> 
>> Pokud ji však chci použít, saxon mi nahlásí chybu syntaxe "undeclared
>> namespace prefix". Podle dokumentace XSL má mít skutečně atribut name
>> pro xsl:function vždy prefix. Nenašel jsem však, jak to pak zařídit,
>> aby byl dokument validní. To mám deklarovat nějaký vlastní namespace?
>> Ale jak? Můžete mi prosím poradit?

> Stačí k xsl:stylesheet přidat atribut (deklraci jmenného prostoru) ve tvaru:
> xmlns:f="http://example.com/jede_traktor_jede_do_hor"

Velice děkuji! Přesto mi to nějak nejede. Xsl:stylesheet jsem upravil
takto:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                            xmlns:xs="http://www.w3.org/2001/XMLSchema"
                            xmlns:fo="http://www.w3.org/1999/XSL/Format"
                            xmlns:f="http://example.com/jede_traktor_jede_do_hor"
                            version="2.0"
                            exclude-result-prefixes="xs">

A háže mi to tuto chybu:

[error] The URI http://example.com/jede_traktor_jede_do_hor does not
identify an external Java class; SystemID:
file:/W:/work/individualni-planovani/indivplan-pdf.xsl; Line#: 18;
Column#: -1
  [error] javax.xml.transform.TransformerException: The URI
http://example.com/jede_traktor_jede_do_hor does not identify an
external Java class
error: formatting failed: javax.xml.transform.TransformerException:
The URI http://example.com/jede_traktor_jede_do_hor does not identify
an external Java class

Poznámka: Onen řádek 18 je kupodivu až druhý výskyt prefixu "f". Zde
je část číslované šablony:

9 <xsl:function name="f:tildify">
10        <xsl:param name="text"/>
11
12        <xsl:value-of select="replace($text,
13            '(\s|\p{Z}|\p{P})([AIKOSUVZikosuvz])([ \t]+|[ \t]*\n[ \t]*)(\w)',
14            '$1$2 $4', 's')"/>
15    </xsl:function>
16
17    <xsl:template match="text()">
18        <xsl:value-of select="f:tildify(.)"/>
19    </xsl:template>

Pro upřesnění: pro transformaci používám XEP4 free personal edition.

Díky, Marek Rada




Další informace o konferenci Docbook