[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