[Bulk] Re: xsl:function a undeclared prefix
marek_rd
marek_rd na yahoo.co.uk
Středa Únor 17 13:01:37 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
Tak už jsem to nastavil tak, že transformace proběhne v pořádku: je
nutné pohlídat, aby transformaci provedl novější Saxon (ne 6.x, ale
9.x). Transformace proběhne, ale zřejmě je stále někde chyba - pevné
mezery se mi za předložky nevloží. Zkusil jsem transformaci provést
pomocí všech tří verzí Saxonu 9.2.0.3 (EE, HE i PE) - se stejným
výsledkem. Nevíte, kde může být chyba?
Marek
----------------
marek_rd na yahoo.co.uk
Další informace o konferenci Docbook