DTD XML Flashcards
¿Qué es un DTD?
- Un DTD es una definición de tipo de documento.
- Un DTD define la estructura y los elementos y atributos legales de un documento XML.
¿Por qué usar un DTD?
- Con una DTD, grupos independientes de personas pueden acordar una DTD estándar para intercambiar datos.
- Una aplicación puede usar una DTD para verificar que los datos XML sean válidos.
Una declaración interna de DTD
- Si la DTD se declara dentro del archivo XML, debe estar envuelta dentro de la definición :
- Documento XML con una DTD interna >?xml version="1.0"?> >!DOCTYPE note [ >!ELEMENT note (to,from,heading,body)> >!ELEMENT to (#PCDATA)> >!ELEMENT from (#PCDATA)> >!ELEMENT heading (#PCDATA)> >!ELEMENT body (#PCDATA)> ]> >note> >to>Tove(/to> >from>Jani(/from> >heading>Reminder(/heading> >body>Don't forget me this weekend(/body> >/note>
- El DTD anterior se interpreta así:
! DOCTYPE note define que el elemento raíz de este documento es note
! ELEMENT note define que el elemento note debe contener cuatro elementos: “to, from, header, body”
! ELEMENT to to define que el elemento to sea del tipo “#PCDATA”
! ELEMENTO from define el elemento from como del tipo “#PCDATA”
El encabezado ELEMENT define que el elemento del encabezado debe ser del tipo “#PCDATA”
! ELEMENT body define que el elemento del cuerpo debe ser del tipo “#PCDATA”
Una declaración de DTD externa
- Si la DTD se declara en un archivo externo, la definición debe contener una referencia al archivo DTD:
- Documento XML con una referencia a un DTD externo >?xml version="1.0"?> >!DOCTYPE note SYSTEM "note.dtd"> >note> >to>Tove>/to> >from>Jani>/from> >heading>Reminder>/heading> >body>Don't forget me this weekend!>/body> >/note>
- Y aquí está el archivo “note.dtd”, que contiene el DTD:
>!ELEMENT note (to,from,heading,body)> >!ELEMENT to (#PCDATA)> >!ELEMENT from (#PCDATA)> >!ELEMENT heading (#PCDATA)> >!ELEMENT body (#PCDATA)>
DTD: bloques de construcción XML
- Los bloques de construcción principales de los documentos XML y HTML son elementos.
- Los bloques de construcción de documentos XML
Visto desde un punto de vista DTD, todos los documentos XML están formados por los siguientes bloques de construcción:
> Elementos > Atributos > Entidades > PCDATA > CDATA
Elementos
- Los elementos son los bloques de construcción principales de los documentos XML y HTML.
- Ejemplos de elementos HTML son “cuerpo” y “tabla”. Ejemplos de elementos XML podrían ser “nota” y “mensaje”. Los elementos pueden contener texto, otros elementos o estar vacíos. Ejemplos de elementos HTML vacíos son “hr”, “br” e “img”.
Ejemplos:
> body>some text>/body>
> message>some text>/message>
Atributos
- Los atributos proporcionan información adicional sobre los elementos .
- Los atributos siempre se colocan dentro de la etiqueta de apertura de un elemento. Los atributos siempre vienen en pares de nombre / valor. El siguiente elemento “img” tiene información adicional sobre un archivo fuente:
> img src=”computer.gif” />
- El nombre del elemento es “img”. El nombre del atributo es “src”. El valor del atributo es “computer.gif”.
- Como el elemento en sí está vacío, se cierra con un “/”.
Entidades
- Algunos caracteres tienen un significado especial en XML, como el signo menor que <
& // &
“ // “
‘ // ‘
PCDATA
- PCDATA significa datos de caracteres analizados.
- Piense en los datos de caracteres como el texto que se encuentra entre la etiqueta de inicio y la etiqueta final de un elemento XML.
- PCDATA es un texto que será analizado por un analizador . El analizador examinará el texto en busca de entidades y marcas .
- Las etiquetas dentro del texto se tratarán como marcas y las entidades se expandirán.
- Sin embargo, los datos de caracteres analizados no deben contener ningún carácter &, ; estos deben estar representados por & amp; & lt; y & gt; entidades, respectivamente.
CDATA
- CDATA significa datos de caracteres.
- CDATA es texto que NO será analizado por un analizador . Las etiquetas dentro del texto NO serán tratadas como marcas y las entidades no serán expandidas.
DTD - Elementos
- En una DTD, los elementos se declaran con una declaración ELEMENT.
____________________
1) Declarando elementos
En una DTD, los elementos XML se declaran con la siguiente sintaxis:
> !ELEMENT element-name category>
or
!ELEMENT element-name (element-content)>
____________________
2) Elementos vacíos
- Los elementos vacíos se declaran con la palabra clave de categoría EMPTY:
> !ELEMENT element-name EMPTY>
Example:
>!ELEMENT br EMPTY>
XML example:
> br />
____________________
3) Elementos con datos de caracteres analizados
- Los elementos con solo datos de caracteres analizados se declaran con #PCDATA entre paréntesis:
> !ELEMENT element-name (#PCDATA)>
Example: >!ELEMENT from (#PCDATA)> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 4) Elementos con cualquier contenido - Los elementos declarados con la palabra clave de categoría ANY, pueden contener cualquier combinación de datos analizables:
> !ELEMENT element-name ANY>
Example: >!ELEMENT note ANY> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 5) Elementos con niños (secuencias) - Los elementos con uno o más elementos secundarios se declaran con el nombre de los elementos secundarios entre paréntesis:
> !ELEMENT element-name (child1)>
or
!ELEMENT element-name (child1,child2,…)>
Example:
>!ELEMENT note (to,from,heading,body)>
- Cuando los niños se declaran en una secuencia separada por comas, los niños deben aparecer en la misma secuencia en el documento. En una declaración completa, los niños también deben ser declarados, y los niños también pueden tener hijos. La declaración completa del elemento “nota” es:
>!ELEMENT note (to,from,heading,body)> >!ELEMENT to (#PCDATA)> >!ELEMENT from (#PCDATA)> >!ELEMENT heading (#PCDATA)> >!ELEMENT body (#PCDATA)> \_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_ 6) Declarando solo una ocurrencia de un elemento >!ELEMENT element-name (child-name)>
Example:
>!ELEMENT note (message)>
El ejemplo anterior declara que el elemento “mensaje” del elemento hijo debe aparecer una vez, y solo una vez dentro del elemento “nota”.
____________________
7) Declaración de una ocurrencia mínima de un elemento
>!ELEMENT element-name (child-name+)>
Example:
>!ELEMENT note (message+)>
- El signo + en el ejemplo anterior declara que el “mensaje” del elemento hijo debe aparecer una o más veces dentro del elemento “nota”.
____________________
8) Declarar cero o más ocurrencias de un elemento
>!ELEMENT element-name (child-name*)>
Example:
>!ELEMENT note (message*)>
- El signo * en el ejemplo anterior declara que el elemento “mensaje” del elemento secundario puede aparecer cero o más veces dentro del elemento “nota”.
____________________
9) Declarar cero o una ocurrencia de un elemento
>!ELEMENT element-name (child-name?)>
Example:
>!ELEMENT note (message?)>
- Los ? firmar en el ejemplo anterior declara que el elemento “mensaje” del elemento secundario puede aparecer cero o una vez dentro del elemento “nota”.
____________________
10) Declaración de contenido o
>!ELEMENT note (to,from,header,(message|body))> - El ejemplo anterior declara que el elemento “note” debe contener un elemento “to”, un elemento “from”, un elemento “header” y un elemento “message” o “body”.
____________________
11) Declarando contenido mixto
>!ELEMENT note (#PCDATA|to|from|header|message)*> - El ejemplo anterior declara que el elemento “nota” puede contener cero o más apariciones de datos de caracteres analizados, elementos “a”, “desde”, “encabezado” o “mensaje”.
DTD - Atributos
- En una DTD, los atributos se declaran con una declaración ATTLIST.
Declarando atributos
- Una declaración de atributo tiene la siguiente sintaxis:
> !ATTLIST element-name attribute-name attribute-type attribute-value>
DTD example:
>!ATTLIST payment type CDATA “check”>
XML example:
>payment type=”check” />
- El tipo de atributo puede ser uno de los siguientes:
((Type // Description)) - CDATA // The value is character data
- (en1|en2|..) // The value must be one from an enumerated list
- ID // The value is a unique id
- IDREF // The value is the id of another element
- IDREFS // The value is a list of other ids
- NMTOKEN // The value is a valid XML name
- NMTOKENS // The value is a list of valid XML names
- ENTITY // The value is an entity
- ENTITIES // The value is a list of entities
- NOTATION // The value is a name of a notation
- xml: The value is a predefined xml value
- El valor del atributo puede ser uno de los siguientes:
((Value // Explanation)) - value // The default value of the attribute
- # REQUIRED // The attribute is required
- # IMPLIED // The attribute is optional
- # FIXED value // The attribute value is fixed
Un valor de atributo predeterminado
DTD:
>!ELEMENT square EMPTY>
>!ATTLIST square width CDATA “0”>
Valid XML:
>square width=”100” />
En el ejemplo anterior, el elemento “cuadrado” se define como un elemento vacío con un atributo “ancho” de tipo CDATA. Si no se especifica ancho, tiene un valor predeterminado de 0.
NECESARIO
Sintaxis
>!ATTLIST element-name attribute-name attribute-type #REQUIRED>
Ejemplo
DTD:
>!ATTLIST person number CDATA #REQUIRED>
Valid XML:
>person number=”5677” />
Invalid XML:
>person />
Use la palabra clave #REQUIRED si no tiene una opción para un valor predeterminado, pero aún así quiere forzar que el atributo esté presente.