El API JAXP

EntityResolver. El DTDHandler se invoca cuando el DTD encuentra una entidad no analizada o una declaraci�n de notaci�n. El EntityResolver entra en juego cuando debe resolverse una URN (ID p�blica) a una URL (ID de Sistema).

.�El API DTDHandler

En la secci�n Referenciar Entidades Binarias vimos un m�todo para referenciar un fichero que contiene datos binarios, como un fichero de imagen, usando tipos de datos MIME. Este es el mecanismo extensible m�s simple de usar. Por compatibilidad con viejos datos al estilo SGML, tambi�n es posible definir una entidad no analizada.

La palabra clave NDATA define una entidad de este tipo:

<!ENTITY myEntity SYSTEM "..URL.." NDATA gif>

El NDATA dice que los datos de esta unidad no son datos XML analizables, pero en su lugar son datos que usan otro tipo de notaci�n. En este caso, la notaci�n se llama "gif". El DTD debe entonces incluir una declaraci�n para esta notaci�n, que se parecer�a algo a esto:

<!NOTATION gif SYSTEM "..URL..">

Cuando el analizador ve una entidad sin analizar o una declaraci�n de notaci�n, no hace nada con la informaci�n excepto pasarla a la otra aplicaci�n usando el interface DTDHandler. Este interface define dos m�todos:

notationDecl(String name, String publicId, String systemId) 

unparsedEntityDecl(String name, String publicId, String systemId, 
                   String notationName) 

Al m�todo notationDecl se le pasa el nombre de la notaci�n y el identificador p�blico o del sistema, o �mbos, dependiendo de lo que se haya declarado en el DTD. Al m�todo unparsedEntityDecl se le pasa el nombre de la entidad, los identificadores apropiados, y el nombre de la notaci�n que usa.

Nota:

El interface DTDHandlet est� implementado por la clase Java XML: com.sun.xml.parser.DtdEventListener

Las notaciones tambi�n pueden usarse en declaraciones de atributos. Por ejemplo, la siguiente declaraci�n requiere notaciones para los formatos de ficheros de imagen GIF y PNG:

<!ENTITY image EMPTY>
<!ATTLIST image 
            ...
            type  NOTATION  (gif | png) "gif"
>

Aqu�, se declara el tipo como gif, o png. Por defecto, si ninguno se especifica, es gif.

Si la notaci�n se usa para describir una entidad sin analizar o un atributo, es enviada a la aplicaci�n para hacer el procesamiento adecuado. El analizador no conoce nada sobre la sem�ntica de las notaciones. S�lo las pasa sobre las declaraciones.

.�El API EnityResolver

El API EntityResolver nos permite convertir una ID p�blica (URN) en una ID del sistema (URL). Nuestra aplicaci�n podr�a necesitar hacer esto, por ejemplo, para convertir algo como href="urn:/someName" en "http://someURL".

El interface EntityResolver define un s�lo m�todo:

resolveEntity(String publicId, String systemId)

Este m�todo devuelve un objeto InputSource, que puede ser usado para acceder a contenidos de entidades. Convertir una URL en un InputSource es muy sencillo. Pero la URL que es pasada como el ID del sistema ser� la localizaci�n del documento original que es, como no, alg�n lugar en la Web. Para acceder a una copia local, si existe, debemos mantener un cat�logo en alg�n lugar en el sistema que mapea nombres (IDs p�blicas) en URLs locales.

La clase Java XML com.sun.xml.parser.Resolver ha sido dise�ada para este prop�sito. Creamos un ejemplar de Resolver y llamamos a su m�todo registerCatalogEntry para asociar una URL con una URN. Luego usamos el m�todo setEntityResolver del analizador SAX para configurar el analizador con nuestro ejemplar Resolver, lo que permite usar una versi�n local del recurso en lugar de un acceso a la Web siempre que la ID p�blica corresponda con la que se ha requerido.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR

SIGUIENTE ARTÍCULO