DTD XML Flashcards

1
Q

¿Qué es un DTD?

A
  • 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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Por qué usar un DTD?

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Una declaración interna de DTD

A
  • 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”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Una declaración de DTD externa

A
  • 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)>
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

DTD: bloques de construcción XML

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Elementos

A
  • 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>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Atributos

A
  • 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 “/”.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Entidades

A
  • Algunos caracteres tienen un significado especial en XML, como el signo menor que <
    & // &
    “ // “
    ‘ // ‘
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

PCDATA

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

CDATA

A
  • 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.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

DTD - Elementos

A
  • 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”.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

DTD - Atributos

A
  • En una DTD, los atributos se declaran con una declaración ATTLIST.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Declarando atributos

A
  • 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
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Un valor de atributo predeterminado

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

NECESARIO

A

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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

IMPLÍCITO

A

Sintaxis
>!ATTLIST element-name attribute-name attribute-type #IMPLIED>

Ejemplo
DTD:
>!ATTLIST contact fax CDATA #IMPLIED>

Valid XML:
>contact fax=”555-667788” />

Valid XML:
>contact />
Use la palabra clave #IMPLIED si no desea obligar al autor a incluir un atributo y no tiene una opción para un valor predeterminado.

17
Q

FIJO

A

Sintaxis
>!ATTLIST element-name attribute-name attribute-type #FIXED “value”>

Ejemplo
DTD:
>!ATTLIST sender company CDATA #FIXED “Microsoft”>

Valid XML:
>sender company=”Microsoft” />

Invalid XML:
>sender company=”W3Schools” />
Use la palabra clave #FIXED cuando desee que un atributo tenga un valor fijo sin permitir que el autor lo cambie. Si un autor incluye otro valor, el analizador XML devolverá un error.

18
Q

Valores de atributos enumerados

A

Sintaxis
>!ATTLIST element-name attribute-name (en1|en2|..) default-value>

Ejemplo
DTD:
>!ATTLIST payment type (check|cash) “cash”>

XML example:
>payment type="check" />
or
>payment type="cash" />
Utilice valores de atributo enumerados cuando desee que el valor de atributo sea uno de un conjunto fijo de valores legales.
19
Q

Elementos XML vs. Atributos

A

En XML, no hay reglas sobre cuándo usar atributos y cuándo usar elementos secundarios.
____________________
1) Uso de elementos contra atributos
Los datos se pueden almacenar en elementos secundarios o en atributos.

Eche un vistazo a estos ejemplos:

> person sex=”female”>
firstname>Anna>/firstname>
lastname>Smith>/lastname>
/person>

>person>
  >sex>female>/sex>
  >firstname>Anna>/firstname>
  >lastname>Smith(/lastname>
>/person>
En el primer ejemplo, el sexo es un atributo. En el último, el sexo es un elemento hijo. Ambos ejemplos proporcionan la misma información.

No hay reglas sobre cuándo usar atributos y cuándo usar elementos secundarios. Mi experiencia es que los atributos son útiles en HTML, pero en XML debes tratar de evitarlos. Use elementos secundarios si la información se siente como datos.
____________________
2) Mi manera favorita
Me gusta almacenar datos en elementos secundarios.

Los siguientes tres documentos XML contienen exactamente la misma información:

Se utiliza un atributo de fecha en el primer ejemplo:

> note date=”12/11/2002”>
to>Tove>(/to>
from>Jani>/from>
heading>Reminder>/heading>
body>Don’t forget me this weekend!>/body>
/note>
Se utiliza un elemento de fecha en el segundo ejemplo:

>note>
  >date>12/11/2002>/date>
  >to>Tove
  >from>Jani>/from>
  >heading>Reminder>/heading>
  >body>Don't forget me this weekend!>/body>
>/note>
Se utiliza un el(mento de fecha expandida en el tercero: (ESTE ES MI FAVORITO):
>note>
  >date>
    >day>12>/day>
    >month>11>/month>
    >year>2002>/year>
  >/date>
  >to>Tove>/to>
  >from>Jani>/from>
  >heading>Reminder>/heading>
  >body>Don't forget me this weekend!>/body>
>/note>
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
3) ¿Evitar el uso de atributos?
¿Deberías evitar usar atributos?

Algunos de los problemas con los atributos son:

los atributos no pueden contener múltiples valores (los elementos secundarios pueden)
los atributos no son fácilmente expandibles (para futuros cambios)
los atributos no pueden describir estructuras (los elementos secundarios sí pueden)
los atributos son más difíciles de manipular por código de programa
los valores de los atributos no son fáciles de probar contra un DTD
Si usa atributos como contenedores para datos, terminará con documentos que son difíciles de leer y mantener. Intenta usar elementos para describir datos. Use atributos solo para proporcionar información que no sea relevante para los datos.

No termines así (no es así como se debe usar XML):

>note day="12" month="11" year="2002"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
>/note>
\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_
4) Una excepción a mi regla de atributo
Las reglas siempre tienen excepciones.

Mi regla sobre los atributos tiene una excepción:

A veces asigno referencias de ID a elementos. Estas referencias de ID se pueden usar para acceder a elementos XML de la misma manera que los atributos NAME o ID en HTML. Este ejemplo demuestra esto:

>messages>
>note id="p501">
  >to>Tove>/to>
  >from>Jani>/from>
  >heading>Reminder>/heading>
  >body>Don't forget me this weekend!>/body>
>/note>
>note id="p502">
  >to>Jani>/to>
  >from>Tove>/from>
  >heading>Re: Reminder>/heading>
  >body>I will not!>/body>
>/note>
>/messages>

La identificación en estos ejemplos es solo un contador, o un identificador único, para identificar las diferentes notas en el archivo XML, y no una parte de los datos de la nota.

Lo que estoy tratando de decir aquí es que los metadatos (datos sobre datos) deberían almacenarse como atributos, y que los datos en sí deberían almacenarse como elementos.

20
Q

DTD - Entidades

A

Las entidades se utilizan para definir accesos directos a caracteres especiales.

Las entidades pueden ser declaradas internas o externas.
___________________
1) Una declaración de entidad interna

Sintaxis
>!ENTITY entity-name “entity-value”>

Ejemplo
DTD Example:
>!ENTITY writer “Donald Duck.”>
>!ENTITY copyright “Copyright W3Schools.”>

XML example:
>author>&writer;&copyright;>/author>
Nota: Una entidad tiene tres partes: un ampersand (&), un nombre de entidad y un punto y coma (;).
_____________________
2) Una declaración de entidad externa

Sintaxis
>!ENTITY entity-name SYSTEM “URI/URL”>

Ejemplo
DTD Example:
>!ENTITY writer SYSTEM “https://www.w3schools.com/entities.dtd”>
>!ENTITY copyright SYSTEM “https://www.w3schools.com/entities.dtd”>

XML example:
>author>&writer;&copyright;>/author>

21
Q

Ejemplos de DTD

A

1) Horario de TV DTD
>!DOCTYPE TVSCHEDULE [

>!ELEMENT TVSCHEDULE (CHANNEL+)>
>!ELEMENT CHANNEL (BANNER,DAY+)>
>!ELEMENT BANNER (#PCDATA)>
>!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
>!ELEMENT HOLIDAY (#PCDATA)>
>!ELEMENT DATE (#PCDATA)>
>!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
>!ELEMENT TIME (#PCDATA)>
>!ELEMENT TITLE (#PCDATA)> 
>!ELEMENT DESCRIPTION (#PCDATA)>

> !ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
!ATTLIST TITLE RATING CDATA #IMPLIED>
!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>

____________________
2) Artículo periodístico DTD
>!DOCTYPE NEWSPAPER [

>!ELEMENT NEWSPAPER (ARTICLE+)>
>!ELEMENT ARTICLE >HEADLINE,BYLINE,LEAD,BODY,NOTES)>
>!ELEMENT HEADLINE (#PCDATA)>
>!ELEMENT BYLINE (#PCDATA)>
>!ELEMENT LEAD (#PCDATA)>
>!ELEMENT BODY (#PCDATA)>
>!ELEMENT NOTES (#PCDATA)>

> !ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
!ATTLIST ARTICLE DATE CDATA #IMPLIED>
!ATTLIST ARTICLE EDITION CDATA #IMPLIED>

> !ENTITY NEWSPAPER “Vervet Logic Times”>
!ENTITY PUBLISHER “Vervet Logic Press”>
!ENTITY COPYRIGHT “Copyright 1998 Vervet Logic Press”>

]>
____________________
3) Catálogo de productos DTD
>!DOCTYPE CATALOG [

> !ENTITY AUTHOR “John Doe”>
!ENTITY COMPANY “JD Power Tools, Inc.”>
!ENTITY EMAIL “jd@jd-tools.com”>

> !ELEMENT CATALOG (PRODUCT+)>

> !ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) “HandTool”
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) “Chicago”
INVENTORY (InStock|Backordered|Discontinued) “InStock”>

> !ELEMENT SPECIFICATIONS (#PCDATA)>
!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>

> !ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) “Matte”
ADAPTER (Included|Optional|NotApplicable) “Included”
CASE (HardShell|Soft|NotApplicable) “HardShell”>

>!ELEMENT PRICE (#PCDATA)>
>!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>

> !ELEMENT NOTES (#PCDATA)>

]>