Archivos de clases definidos por el usuario
Si se accede a las clases por medio de un archivo de clases, entonces hay cuatro posibilidades:
•El archivo de clases está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el paquete Java. (ver ejemplo.)
•El archivo de clases no está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el archivo de clases. (ver ejemplo.)
•El archivo de clases está en un paquete. El archivo XSLT/XQuery está en una carpeta cualquiera. (ver ejemplo.)
•El archivo de clases no está en un paquete. El archivo XSLT/XQuery está una carpeta cualquiera. (ver ejemplo.)
Imaginemos que tenemos un archivo de clases que no está en un paquete y que está en la misma carpeta que el documento XSLT/XQuery. En este caso, puesto que en la carpeta se encuentran todas las clases, no es necesario especificar la ubicación del archivo. La sintaxis que se utiliza para identificar una clase es esta:
java:nombreClase
donde
java: indica que se está llamando a una función definida por el usuario (por defecto se cargan las clases Java del directorio actual) |
nombreClase es el nombre de la clase del método elegido
La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método.
El archivo de clases está en un paquete. El archivo XSLT/XQuery está en la misma carpeta que el paquete Java
El código que aparece a continuación llama al método getVehicleType() de la clase Car del paquete com.altova.extfunc. El paquete com.altova.extfunc está en la carpeta JavaProject. El archivo XSLT también está en la carpeta JavaProject.
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:com.altova.extfunc.Car" >
<xsl:output exclude-result-prefixes="fn car xsl fo xs"/>
<xsl:template match="/">
<a>
<xsl:value-of select="car:getVehicleType()"/>
</a>
</xsl:template>
</xsl:stylesheet>
El archivo de clases está referenciado. El archivo XSLT/XQuery está en la misma carpeta que el archivo de clases
El código que aparece a continuación llama al método getVehicleType() de la clase Car. Digamos que: (i) el archivo de clases Car está en esta carpeta: JavaProject/com/altova/extfunc y que (ii) esa carpeta es la del ejemplo siguiente. El archivo XSLT también está en la carpeta JavaProject/com/altova/extfunc.
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:Car" >
<xsl:output exclude-result-prefixes="fn car xsl fo xs"/>
<xsl:template match="/">
<a>
<xsl:value-of select="car:getVehicleType()"/>
</a>
</xsl:template>
</xsl:stylesheet>
El archivo de clases está en un paquete. El archivo XSLT/XQuery está en una carpeta cualquiera
El código que aparece a continuación llama al método getCarColor() de la clase Car del paquete com.altova.extfunc. El paquete com.altova.extfunc está en la carpeta JavaProject. El archivo XSLT está en otra carpeta cualquiera. En este caso debe especificarse la ubicación del paquete dentro del URI como una cadena de consulta. La sintaxis es esta:
java:nombreClase[?ruta=uri-del-paquete]
donde
java: indica que se está llamando a una función Java definida por el usuario
uri-del-paquete es el URI del paquete Java
nombreClase es el nombre de la clase del método elegido
La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método. El ejemplo de código que aparece a continuación explica cómo se accede a un archivo de clases que está ubicado en un directorio que no es el directorio actual. |
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:com.altova.extfunc.Car?path=file:///C:/JavaProject/" >
<xsl:output exclude-result-prefixes="fn car xsl xs"/>
<xsl:template match="/">
<xsl:variable name="myCar" select="car:new('red')" />
<a><xsl:value-of select="car:getCarColor(\$myCar)"/></a>
</xsl:template>
</xsl:stylesheet>
El archivo de clases no está en un paquete. El archivo XSLT/XQuery está una carpeta cualquiera
El código que aparece a continuación llama al método getCarColor()de la clase Car. Digamos que el archivo de clases Car está en la carpeta C:/JavaProject/com/altova/extfunc y que el archivo XSLT está en otra carpeta cualquiera. En este caso debe especificarse la ubicación del paquete dentro del URI como una cadena de consulta. La sintaxis es esta:
java:nombreClase[?ruta=<uri-del-archivoClases>]
donde
java: indica que se está llamando a una función Java definida por el usuario
uri-del-archivoClases es el URI de la carpeta donde se ubica el archivo de clases
nombreClase es el nombre de la clase del método elegido
La clase se identifica en un URI de espacio de nombres y el espacio de nombres se usa como prefijo para la llamada al método. El ejemplo de código que aparece a continuación explica cómo se accede a un archivo de clases que está ubicado en un directorio que no es el directorio actual. |
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:car="java:Car?path=file:///C:/JavaProject/com/altova/extfunc/" >
<xsl:output exclude-result-prefixes="fn car xsl xs"/>
<xsl:template match="/">
<xsl:variable name="myCar" select="car:new('red')" />
<a><xsl:value-of select="car:getCarColor(\$myCar)"/></a>
</xsl:template>
</xsl:stylesheet>
Nota: | cuando se presenta una ruta de acceso por medio de una función de extensión, la ruta de acceso se añade al ClassLoader. |