XML - Herencia entre DTD's

 
Vista:

Herencia entre DTD's

Publicado por David C. (4 intervenciones) el 03/10/2005 23:25:57
Herencia entre DTD's ¿Es posible o tengo que utilizar necesariamente Schemas? El problema es que quiero crear un DTD generico, con una etiqueta "Descripcion" que cada DTD hija defina como quiera, aportando sus propias etiquetas. ¿Es esto posible usando DTD's?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Herencia y modularidad en DTD: Reutilización de definiciones con entidades y notaciones externas

Publicado por Alejandro (258 intervenciones) el 12/07/2023 16:12:36
En DTD, no hay soporte directo para la herencia de definiciones entre DTDs. Los DTDs se definen de forma independiente y no pueden heredar o extender definiciones de otros DTDs.

Sin embargo, puedes lograr cierto nivel de reutilización y modularidad en DTD utilizando entidades y notaciones externas. Aquí hay una posible solución para tu caso:

1. Crea un DTD genérico llamado "generic.dtd" que define la etiqueta "Descripcion" de forma genérica, sin detalles específicos. Por ejemplo:

1
<!ELEMENT Descripcion (#PCDATA)>

2. Luego, crea un DTD específico para cada tipo de documento que herede del DTD genérico y defina sus propias etiquetas adicionales. Por ejemplo, crea un DTD llamado "specific1.dtd" que extienda el DTD genérico y añada etiquetas adicionales:

1
2
3
4
5
6
<!ENTITY % generic SYSTEM "generic.dtd">
%generic;
 
<!ELEMENT Specific1 (Descripcion, EtiquetaEspecifica1, EtiquetaEspecifica2)>
<!ELEMENT EtiquetaEspecifica1 (#PCDATA)>
<!ELEMENT EtiquetaEspecifica2 (#PCDATA)>

3. Repite el paso 2 para cada DTD específico adicional que necesites, utilizando la entidad %generic para incluir el DTD genérico y luego añadiendo las definiciones específicas.

4. Al utilizar los DTDs específicos en tus documentos XML, simplemente incluye el DTD genérico en cada uno de ellos mediante la entidad %generic y luego agrega las definiciones específicas necesarias. Por ejemplo:

1
2
3
4
5
6
<!DOCTYPE Specific1 SYSTEM "specific1.dtd">
<Specific1>
    <Descripcion>Texto de descripción</Descripcion>
    <EtiquetaEspecifica1>Contenido 1</EtiquetaEspecifica1>
    <EtiquetaEspecifica2>Contenido 2</EtiquetaEspecifica2>
</Specific1>

Esta técnica te permite tener un DTD genérico con la etiqueta "Descripcion" y luego definir etiquetas adicionales específicas en cada DTD hijo. Sin embargo, ten en cuenta que esto no es una herencia real en el sentido de la programación orientada a objetos, sino más bien una forma de reutilización y modularidad a través de la inclusión de entidades y notaciones externas. Si necesitas un enfoque más avanzado de herencia y extensibilidad, puede ser necesario considerar el uso de Schemas XML (como XSD) que ofrecen más flexibilidad en este sentido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar