Xml tiene una ventaja que se puede convertir en un inconveniente: cada persona/autor puede crear sus propias etiquetas.
Esto no trae problemas si trabajamos solos; pero, ¿y si trabajamos en equipo?,¿y si queremos exportar nuestros documentos?¿que estándar seguiremos?
Ej:
"A" puede escribir el nombre como sigue:
<nombre>Juan</nombre>
Sin embargo, "B" puede hacerlo así:
<nombre id="Juan"/>
Las 2 versiones son igual de correctas pero son diferentes; si extrapolamos esto a muchas marcas, entonces la lectura y/o modificación de documentos por diferentes personas puede ser un caos. (y como me enseñaron a mí en la universidad, "no es plan" que hagas una aplicación que sólo entiendas tú, de forma q si se quiere modificar, la empresa te tiene q pedir de rodillas a ti q lo hagas).
Para resolver estos problemas, proporcionando un pequeño estandar acerca de la sintaxis a utilizar, xml ofrece dos posibles soluciones:En las DTD's podemos hacer 4 tipos de declaraciones:
- Las DTD's.
- Los Xml Schemas.
Las trataré una a una en los siguientes apdos.
- Declaraciones de tipo de elemento (Element Type Declarations).
- Declaraciones de listas de atributos (Attribute List Declarations).
- Declaraciones de Entidades (Entity Declarations).
- Declaraciones de notación (Notation Declarations).
Declaraciones de tipo de elemento
Estas declaraciones establecen qué elementos pueden formar parte del documento y cuales pueden formar parte de su interior (los elementos se anidan unos dentro de otros).
Sintaxis:
Los elementos que puede contener cada elemento (valga la redundancia) van siempre encerrados entre paréntesis y precedidos de la etiqueta <!ELEMENT.
Dentro de las etiquetas, cada elemento (atributo) podrá llevar uno de los siguientes símbolos detrás de su nombre:
SÍMBOLO SIGNIFICADO (Indica...) ,Secuencia de elementos ? 0 ó 1 ocurrencias * 0 ó más ocurrencias + 1 ó más ocurrencias Empty que el elemento está vacío.
Estos elementos NO tienen etiqueta de cierre. Any Cualquier contenido es válido.
Yo no recomiendo su uso. #PCDATA que el contenido de la cadena puede ser una cadena de texto.
Ejs:
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT nombre EMPTY>
<!ELEMENT cliente (nombre,apellidos,nif?,tlf*,direccion+)>
Este último ej. quiere expresar lo siguiente:
El elemento cliente debe contener a nombre y apellidos, puede contener a nif y tlf - a este incluso más de una vez- y debe contener al menos una vez la dirección del cliente (para poder enviarle el pedido a casa).
NOTA: Luego podemos hacer una redefinición de los subelementos si queremos.
EJ:
<!ELEMENT cliente (nombre,apellidos,nif?,tlf*,direccion+)>
<!ELEMENT nombre (#PCDATA)>
<!ELEMENT apellidos(ape1,ape2?)>
.....
Además de esto, tambien podemos indicar que existen varias alternativas; para ello se usa el símbolo | (relción OR). Ej:
<!ELEMENT apellidos (#PCDATA|(ape1,ape2))>>
<!ELEMENT ape1 (#PCDATA)>
<!ELEMENT ape2 (#PCDATA)>
indica q se puede elejir entre teclear los 2 apellidos juntos ó por separado:
Declaraciones de listas de atributos
- <apellidos> Perez López </apellidos>
- <apellidos> <ape1> Perez </ape1> <ape2> López </ape2> </apellidos>
Ya hemos visto como denotar los elementos q puede tener el documento. Pero, ¿qué pasa con los atributos (si es q tienen) de todos y acada uno de los elementos?
Para definirlos se usan las declaraciones de listas de atributos, cuya sintaxis es la siguiente:
Sintaxis:
Todas las definiciones de atributos empezarán por: <!ATTLIST
Cada atributo está formado por 3 partes:
Nombre
Tipo del atributo
Valor por defecto
Las posibilidades para describir el tipo de un atributo(campo) y el valor por defecto del mismo las podeis ver en las siguientes tablas:
Tipo del atributo
VALOR SIGNIFICADO CDATAEl atributo será una cadena de caracteres.
No todos los caracteres son válidos.
Usaremos secciones PCDATA cuando queramos incluir los carácteres no válidos. IDEl atributo sirve para identificar al elemento dentro del documento.
Sólo puede haber un atributo de tipo ID por elemento. IDREF/SEste atributo se empleará para referenciar a otros elementos del documento a partir de su ID. ENTITY/S Contiene nombres de entidades. Ver siguiente apdo. NMTOKEN/SContiene una única cadena de texto (ed, una sóla palabra). (<<enumerados>>)Aquí especificamos EL conjunto de valores q puede tomar el atributo; esto lo hacemos separandolos con |.
NOTA: El valor para los atributos acabados en S (ej. IDEREFS) será una lista de valores separados por espacios en blanco.
Valores por defecto
VALOR SIGNIFICADO #REQUIREDCon esto indicamos que es obligatorio darle un valor al atributo. #IMPLIEDCon esto indicamos que es opcional darle un valor al atributo. <<valor>> Podemos poner un valor (NO lista de valores) opcional directamente; entonces, si no se le otorga un nuevo valor posteriormente, asumirá el dado (ed, es el valor x por defecto).
No es obligatorio darle un valor en el doc. #FIXED <<valor>>>Con esto obligamos a q el atributo tome necesariamente el valor especificado en <<valor>> EJ:
<!ATTLIST cliente
numcli ID #REQUIRED
edad ("Menos de 18" | "entre 18 y 65" | "Más de 65") #IMPLIED
>
Al ser numcli de tipo ID indicamos q no puede haber 2 clientes con idéntico numcli.
Edad es un atributo no obligatorio q sólo puede tomar los valores de la lista enumerada.
Facebook
LinkBack URL
About LinkBacks
Citar

