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