1 00:00:00,700 --> 00:00:07,000 Vamos a ver ahora los DTDs o la definición de tipo de documento. 2 00:00:07,940 --> 00:00:12,080 Entonces, lo primero es cómo lo referenciamos en un documento XML. 3 00:00:12,660 --> 00:00:14,179 Puede incluirse dentro del documento. 4 00:00:14,419 --> 00:00:24,140 Dentro del documento XML indicamos DOCTYPE, el nombre que le queramos poner al DTD y las declaraciones, y lo cerramos de esta manera. 5 00:00:24,140 --> 00:00:42,500 O podemos referenciarlo de forma externa, es decir, ponemos dentro de nuestros XML quién va a ser el DTD de referencia, ponemos su dirección, su identificador, su URI o cuál es su localizador de recurso y ya está. 6 00:00:42,500 --> 00:00:46,320 ¿De acuerdo? Cualquiera de estas dos opciones nos vale. 7 00:00:46,600 --> 00:00:58,820 Si queremos ver un poco el ejemplo en una referencia externa, aquí tenemos un fichero que se llama marcadores.dtd, esta es la definición, el dtd del documento XML, 8 00:00:58,820 --> 00:01:05,159 y dentro del documento XML definimos su etiqueta para indicar que es un documento XML 9 00:01:05,159 --> 00:01:13,280 y después llamamos a doctype, marcadores, con el system y el nombre del fichero donde se almacena ese documento. 10 00:01:13,280 --> 00:01:19,500 Y aquí escribiríamos el documento. Es la manera de poderlo hacer sin ningún problema. 11 00:01:20,599 --> 00:01:28,680 Bueno, en el caso de que esté dentro, simplemente detrás de esto escribiríamos las etiquetas XML. 12 00:01:28,819 --> 00:01:41,760 Vamos a ir viendo qué elementos tenemos. Vamos a ir viendo primero lo que son las declaraciones de entidades, que simplemente podemos definir una entidad con su nombre y su valor. 13 00:01:43,799 --> 00:01:54,799 Pueden ser entidades de sistema, con lo cual iría la palabra System o Públicas, Public, ¿de acuerdo? Y esa es la parte más importante. 14 00:01:54,799 --> 00:01:56,719 Vamos a ir definiendo elementos. 15 00:01:58,019 --> 00:02:02,840 Por ejemplo, tenemos una etiqueta que se llama empty. 16 00:02:02,840 --> 00:02:11,580 En este caso, nuestro documento, que llamamos ejemplo, tiene que tener un elemento ejemplo que no tenga nada, que esté vacío, que sea empty. 17 00:02:12,240 --> 00:02:20,620 Con lo cual nos valdría tanto esta definición como esta de aquí, en el cual se abre y se cierra la etiqueta directamente. 18 00:02:20,620 --> 00:02:31,300 Este nos daría error y este que dentro tiene esta información, que no corresponde, que también es información al fin y al cabo, también daría error. 19 00:02:31,879 --> 00:02:42,099 Vamos a utilizar para comprobarlo nuestro Visual Studio Code y vamos a crear aquí nuestro ficherito. 20 00:02:42,099 --> 00:02:45,259 voy a ponerlo más grande para que lo veamos mejor 21 00:02:45,259 --> 00:02:47,020 y entonces pues nada 22 00:02:47,020 --> 00:02:48,960 hemos definido nuestro DTD 23 00:02:48,960 --> 00:02:51,180 y tenemos aquí nuestro ejemplo 24 00:02:51,180 --> 00:02:53,400 a este Visual Studio Code 25 00:02:53,400 --> 00:02:55,020 le he añadido una extensión 26 00:02:55,020 --> 00:02:57,379 que es la extensión XML 27 00:02:57,379 --> 00:02:58,539 esta de aquí 28 00:02:58,539 --> 00:03:01,300 esta XML, que esta extensión 29 00:03:01,300 --> 00:03:02,039 nos permite 30 00:03:02,039 --> 00:03:05,719 comprobar que un documento 31 00:03:05,719 --> 00:03:07,479 es válido, es decir, se corresponde 32 00:03:07,479 --> 00:03:08,939 a una gramática determinada 33 00:03:08,939 --> 00:03:11,259 bueno, pues 34 00:03:11,259 --> 00:03:13,139 en este caso no da ningún error 35 00:03:13,139 --> 00:03:15,280 imaginemos que ponemos ahora 36 00:03:15,280 --> 00:03:17,400 ejemplo 37 00:03:17,400 --> 00:03:19,879 sabemos que lo cierra automáticamente 38 00:03:19,879 --> 00:03:21,259 y tampoco 39 00:03:21,259 --> 00:03:23,439 aparece ningún error, pero vamos a 40 00:03:23,439 --> 00:03:25,419 incluir algo de información dentro 41 00:03:25,419 --> 00:03:26,719 inform 42 00:03:26,719 --> 00:03:29,759 y vemos como ya automáticamente 43 00:03:29,759 --> 00:03:31,520 nos ha marcado esto 44 00:03:31,520 --> 00:03:33,300 en rojo, y nos dice 45 00:03:33,300 --> 00:03:35,300 que el contenido 46 00:03:35,300 --> 00:03:37,419 de ejemplo 47 00:03:37,419 --> 00:03:39,819 debe ser, debe corresponderse 48 00:03:39,819 --> 00:03:40,879 a empty 49 00:03:40,879 --> 00:03:50,439 ¿De acuerdo? Con lo cual, él se enfada inmediatamente y nos dice que esto es erróneo, tal y como habíamos mostrado ya en la página que estábamos viendo. 50 00:03:51,319 --> 00:03:55,020 Bueno, así vamos a seguir con más etiquetas, vamos a por más ejemplos. 51 00:03:58,770 --> 00:04:11,770 PCData, así entre paréntesis, PCData, indica que podemos escribir cualquier información dentro, cualquier texto dentro. 52 00:04:12,770 --> 00:04:22,569 Entonces puede estar vacío, como es este caso, puede tener información, pero lo que no puede tener en ningún caso es dentro otras etiquetas. 53 00:04:23,089 --> 00:04:23,449 ¿De acuerdo? 54 00:04:24,110 --> 00:04:27,209 Entonces PCData se dice texto, simplemente texto. 55 00:04:28,370 --> 00:04:35,250 Any, lo que me dice Any es que puedo tener dentro lo que sea, cualquier tipo de información. 56 00:04:35,250 --> 00:04:42,689 Puede estar vacía, puede haber texto o incluso puedo tener dentro etiquetas, ya las vemos aquí. 57 00:04:42,769 --> 00:04:45,470 Etiqueta A, que empieza y finaliza. 58 00:04:47,230 --> 00:04:54,389 La diferencia, por tanto, entre PCData y ENI es que PCData no permite etiquetar dentro y ENI sí. 59 00:04:55,410 --> 00:05:07,110 Cuando tenemos una serie de elementos separados por comas, lo que quieren indicar es que vamos a tener estos elementos y además en el orden indicado. 60 00:05:07,110 --> 00:05:09,250 este documento 61 00:05:09,250 --> 00:05:11,069 vamos a pasarlo aquí arriba 62 00:05:11,069 --> 00:05:13,490 vamos a llevarlo a nuestro fichero 63 00:05:13,490 --> 00:05:15,910 para jugar con él y verlo 64 00:05:15,910 --> 00:05:17,589 lo vamos a llevar aquí 65 00:05:17,589 --> 00:05:19,129 vamos a cambiar esto de aquí 66 00:05:19,129 --> 00:05:22,389 y ejemplo tiene que tener 67 00:05:22,389 --> 00:05:23,750 tanto 68 00:05:23,750 --> 00:05:25,689 el elemento A 69 00:05:25,689 --> 00:05:26,529 como el B 70 00:05:26,529 --> 00:05:28,670 y en ese orden primero el A y el B 71 00:05:28,670 --> 00:05:30,649 y lo que si pueden estar es vacíos 72 00:05:30,649 --> 00:05:32,970 en este momento ya vemos que no está dando errores 73 00:05:32,970 --> 00:05:34,970 porque no hay ni A ni B 74 00:05:34,970 --> 00:05:37,089 voy a cambiar de línea 75 00:05:37,089 --> 00:05:38,930 para que lo veamos y voy a introducir 76 00:05:38,930 --> 00:05:39,730 A 77 00:05:39,730 --> 00:05:43,089 y como es vacío, pues ya directamente lo incluyo 78 00:05:43,089 --> 00:05:44,350 sigue dándome error 79 00:05:44,350 --> 00:05:46,350 y ahora voy a poner B 80 00:05:46,350 --> 00:05:48,889 y vemos que inmediatamente 81 00:05:48,889 --> 00:05:50,829 ya deja de tener errores porque están 82 00:05:50,829 --> 00:05:52,389 los documentos y vacíos 83 00:05:52,389 --> 00:05:54,829 por supuesto, podría intentar poner 84 00:05:54,829 --> 00:05:56,829 algo en B y tal y daría error, ¿de acuerdo? 85 00:05:57,110 --> 00:05:58,290 pero esto es lo que nos dice 86 00:05:58,290 --> 00:06:00,870 si le cambiara el orden, si yo quitara 87 00:06:00,870 --> 00:06:01,769 A 88 00:06:01,769 --> 00:06:04,649 y lo pusiera así, también 89 00:06:04,649 --> 00:06:06,689 nos daría problema porque no se mantiene 90 00:06:06,689 --> 00:06:20,389 el orden estricto que nos dice el DTD correspondiente. Podemos indicar la barra O. Y en este caso 91 00:06:20,389 --> 00:06:26,230 lo que dice es que tiene que contener uno de los dos elementos. O contiene A o contiene 92 00:06:26,230 --> 00:06:32,129 B. Pero no puede contener los dos a la vez. O contiene A o contiene B. En este caso que 93 00:06:32,129 --> 00:06:36,750 contiene los dos nos da error. Y en el caso de que no contenga a ninguno, pues también 94 00:06:36,750 --> 00:06:38,069 nos da error 95 00:06:38,069 --> 00:06:40,810 mucho interés tiene 96 00:06:40,810 --> 00:06:42,129 cuando aparece 97 00:06:42,129 --> 00:06:44,930 una interrogación detrás de uno de los elementos 98 00:06:44,930 --> 00:06:46,790 porque indica que ese elemento 99 00:06:46,790 --> 00:06:49,009 puede aparecer o no 100 00:06:49,009 --> 00:06:50,389 pero solo una vez 101 00:06:50,389 --> 00:06:52,189 es decir, en este caso 102 00:06:52,189 --> 00:06:54,110 vamos a ir a nuestro ejemplo anterior 103 00:06:54,110 --> 00:06:56,889 si yo pusiera en la B un interrogante 104 00:06:56,889 --> 00:06:58,769 primero 105 00:06:58,769 --> 00:07:00,430 vamos a ponerlo en el orden para que 106 00:07:00,430 --> 00:07:02,370 esto 107 00:07:02,370 --> 00:07:03,569 funcionaría 108 00:07:03,569 --> 00:07:07,170 Esto, quitado b, funcionaría 109 00:07:07,170 --> 00:07:09,529 Porque permite que no haya b 110 00:07:09,529 --> 00:07:12,350 La interrupción es 0 o 1 111 00:07:12,350 --> 00:07:17,649 Y por supuesto, si pongo dos veces b 112 00:07:17,649 --> 00:07:20,449 Por ejemplo, esto daría error 113 00:07:20,449 --> 00:07:21,790 Igual que si pongo dos veces a 114 00:07:21,790 --> 00:07:22,750 ¿De acuerdo? 115 00:07:23,649 --> 00:07:27,350 Entonces, esto indica que hay que poner a 116 00:07:27,350 --> 00:07:30,089 Y b se puede poner o no 117 00:07:30,089 --> 00:07:35,600 Si aparece un asterisco 118 00:07:35,600 --> 00:07:41,639 lo que indica es que puede no aparecer o aparecer tantas veces como se quiera 119 00:07:41,639 --> 00:07:44,480 entonces entre 0 y n veces 120 00:07:44,480 --> 00:07:48,279 aquí en este caso tengo a asterisco b 121 00:07:48,279 --> 00:07:52,600 con lo cual a puede desde no aparecer hasta aparecer multitud de veces 122 00:07:52,600 --> 00:07:56,180 y b tiene que aparecer obligatoriamente después de todas ellas 123 00:07:56,180 --> 00:07:59,759 entonces bueno, pues aquí vemos varios ejemplos donde funciona 124 00:07:59,759 --> 00:08:02,759 y uno que no funciona porque la b está delante de la a 125 00:08:02,759 --> 00:08:09,720 más dice que tiene que aparecer ese elemento al menos una vez 126 00:08:09,720 --> 00:08:11,319 pero puede aparecer muchas más 127 00:08:11,319 --> 00:08:17,459 entonces en este caso A tiene que aparecer obligatoriamente una o varias veces 128 00:08:17,459 --> 00:08:19,899 pero si no aparece, pues de error 129 00:08:19,899 --> 00:08:21,800 por supuesto siempre en ese orden 130 00:08:21,800 --> 00:08:25,480 y con paréntesis podemos hacer agrupaciones de este tipo 131 00:08:25,480 --> 00:08:27,740 en este caso primero tiene que aparecer la A 132 00:08:27,740 --> 00:08:31,279 y después puede aparecer o la A o la B 133 00:08:31,279 --> 00:08:34,320 entonces en este caso 134 00:08:34,320 --> 00:08:35,179 que es el que da error 135 00:08:35,179 --> 00:08:36,740 pues nos está diciendo claramente 136 00:08:36,740 --> 00:08:38,460 que aquí no A está la B 137 00:08:38,460 --> 00:08:40,299 o en este caso 138 00:08:40,299 --> 00:08:41,639 es un caso curioso 139 00:08:41,639 --> 00:08:43,500 para poder poner en cualquier orden las cosas 140 00:08:43,500 --> 00:08:44,000 le decimos 141 00:08:44,000 --> 00:08:45,779 tiene que aparecer la A o la B 142 00:08:45,779 --> 00:08:47,720 y después la B o la A 143 00:08:47,720 --> 00:08:48,139 ¿de acuerdo? 144 00:08:48,419 --> 00:08:49,919 pues nos va a permitir 145 00:08:49,919 --> 00:08:52,600 poner o una u otra 146 00:08:52,600 --> 00:08:53,659 en cada caso 147 00:08:53,659 --> 00:08:54,539 entonces 148 00:08:54,539 --> 00:08:58,039 cualquiera de las dos no valdría 149 00:08:58,039 --> 00:08:59,820 bueno 150 00:08:59,820 --> 00:09:01,940 pues después continuamos 151 00:09:01,940 --> 00:09:06,320 bueno, finalmente nos quedan los atributos 152 00:09:06,320 --> 00:09:08,700 y los atributos 153 00:09:08,700 --> 00:09:09,759 pues se definen 154 00:09:09,759 --> 00:09:11,480 con esta sintaxis 155 00:09:11,480 --> 00:09:13,940 en la cual ponemos menor admiración 156 00:09:13,940 --> 00:09:14,659 hacia abajo 157 00:09:14,659 --> 00:09:17,500 add list o lista de atributos 158 00:09:17,500 --> 00:09:19,460 el nombre del elemento 159 00:09:19,460 --> 00:09:21,019 el nombre del atributo 160 00:09:21,019 --> 00:09:23,840 en el que está incluido 161 00:09:23,840 --> 00:09:24,840 lo que vamos a definir 162 00:09:24,840 --> 00:09:26,279 el tipo de atributo 163 00:09:26,279 --> 00:09:27,820 y el valor inicial del atributo 164 00:09:27,820 --> 00:09:28,759 si hubiera 165 00:09:28,759 --> 00:09:33,919 Bueno, vamos a ir viendo ejemplos de las posibilidades que tenemos 166 00:09:33,919 --> 00:09:35,259 ¿Qué tipo de atributos tenemos? 167 00:09:35,580 --> 00:09:37,399 Pues la primera de ellas es CDATA 168 00:09:37,399 --> 00:09:41,340 Que en general significa que tiene caracteres, sin ningún tipo de restricción 169 00:09:41,340 --> 00:09:44,679 En este caso tenemos un documento que se llama Ejemplo 170 00:09:44,679 --> 00:09:48,360 Tiene un elemento Ejemplo que es empty, es decir, no tiene información dentro 171 00:09:48,360 --> 00:09:53,379 Y una de esas atributos, el primer elemento de Ejemplo es Color 172 00:09:53,379 --> 00:09:57,919 Que es CDATA y que es obligatorio, requerido 173 00:09:57,919 --> 00:10:03,419 Ceata, por tanto, puede ser color, aunque no tenga información 174 00:10:03,419 --> 00:10:09,419 O color amarillo, o color, en este caso, varios elementos dentro 175 00:10:09,419 --> 00:10:13,179 Lo que no puede ser es ejemplo sin color 176 00:10:13,179 --> 00:10:17,600 O ejemplo sabor dulce, pero sigue estando sin color 177 00:10:17,600 --> 00:10:19,080 Esto daría error 178 00:10:19,080 --> 00:10:22,740 Otra posibilidad que tenemos es NMToken 179 00:10:22,740 --> 00:10:27,659 En el cual pueden ser atributos que solo contienen letras dígitas 180 00:10:27,659 --> 00:10:32,419 y los caracteres, o punto, o guión, o subrayado, o dos puntos. 181 00:10:33,139 --> 00:10:38,379 Entonces es similar al anterior, pero no admite, sobre todo, lo más importante es que no admite espacios. 182 00:10:38,679 --> 00:10:45,059 Por tanto, esta podría ser válida, azul-guión marino podría ser válida, un número puede ser válido, 183 00:10:45,539 --> 00:10:52,059 pero no podemos tener azul-espacio marino, o carácter del tipo de almohadilla. 184 00:10:52,059 --> 00:10:55,779 nmtokens es lo mismo que nmtoken 185 00:10:55,779 --> 00:10:57,460 pero varios de ellos 186 00:10:57,460 --> 00:10:58,960 separados por espacios 187 00:10:58,960 --> 00:11:01,460 por lo cual ahora si azul marino 188 00:11:01,460 --> 00:11:03,500 separado por espacio 189 00:11:03,500 --> 00:11:04,379 podría valer 190 00:11:04,379 --> 00:11:06,919 también podemos tener un conjunto de valores 191 00:11:06,919 --> 00:11:09,000 entonces podemos decir por ejemplo 192 00:11:09,000 --> 00:11:12,120 que en la etiqueta 193 00:11:12,120 --> 00:11:13,879 o en el elemento ejemplo 194 00:11:13,879 --> 00:11:15,659 hay un atributo color 195 00:11:15,659 --> 00:11:17,840 que puede tomar los valores azul 196 00:11:17,840 --> 00:11:19,940 blanco o rojo 197 00:11:19,940 --> 00:11:21,919 y que es obligatorio 198 00:11:21,919 --> 00:11:29,340 Por ejemplo, en este caso, color o nada, o azul, lo que no podemos poner verde, puesto que no está en este grupo que hay aquí. 199 00:11:30,559 --> 00:11:41,000 O puede ser de tipo ID, es decir, de tipo identificador, que debe ser único, es decir, no se puede repetir entre otros elementos o atributos. 200 00:11:41,220 --> 00:11:46,179 Y además de ser único, tiene que empezar al menos con un valor alfabético. 201 00:11:46,179 --> 00:11:57,019 Entonces, por ejemplo, aquí tenemos el libro cuyo código es L1, que es poema de Gil Gámez, o L2, que son los preceptos de TAP-HOP-DEP. 202 00:11:57,899 --> 00:12:10,039 Si pusiéramos código igual a 1, pues esto daría error porque tiene que empezar con un número, no puede empezar con un número, tiene que empezar con una letra, o aquí donde se repite el identificador. 203 00:12:10,039 --> 00:12:16,899 También podemos tener un valor atributo que sea una referencia a un ID ya existente de otro elemento 204 00:12:16,899 --> 00:12:19,980 id ref, referencia a un ID 205 00:12:19,980 --> 00:12:25,679 Por ejemplo, tenemos un libro que tiene códigos y un préstamo de esos libros 206 00:12:25,679 --> 00:12:30,399 Ya tenemos el código L1 que corresponde a este poema 207 00:12:30,399 --> 00:12:38,220 Y el libro L1 que lo ha prestado Numan Nigerio de este libro que existe 208 00:12:38,220 --> 00:12:43,379 Si pusiéramos algo que no estuviera identificado, pues daría error 209 00:12:43,379 --> 00:12:50,539 O referencia de varios ides, entonces L1, L2, o solo L1 210 00:12:50,539 --> 00:12:54,200 Lo que no podemos poner es una referencia, algo que no existe 211 00:12:54,200 --> 00:13:00,460 Además tenemos entity, que es un valor atributo de alguna entidad que ya estuviera definida en el DTD 212 00:13:00,460 --> 00:13:03,980 Entities, de alguna de las entidades 213 00:13:03,980 --> 00:13:07,539 Orientation, de alguna de las notaciones ya definidas 214 00:13:07,539 --> 00:13:12,039 En cuanto a los valores iniciales de los atributos, pues pueden ser los siguientes 215 00:13:12,039 --> 00:13:15,620 Required, que ya lo hemos visto, que simplemente significa que es obligatorio 216 00:13:15,620 --> 00:13:20,539 En este caso la etiqueta color dentro de ejemplo tiene que existir 217 00:13:20,539 --> 00:13:23,740 En este caso daría error 218 00:13:23,740 --> 00:13:31,620 Implied, en el cual el atributo no es obligatorio y no se especifica ningún valor por defecto predeterminado 219 00:13:31,620 --> 00:13:34,399 Con lo cual todos estos casos son válidos 220 00:13:34,399 --> 00:13:39,019 Fix en el cual lo que ponemos es un valor fijo 221 00:13:39,019 --> 00:13:42,200 El color siempre va a tener el color verde 222 00:13:42,200 --> 00:13:45,799 Y entonces este sería válido y el color valdría verde 223 00:13:45,799 --> 00:13:47,600 Y este el color valdría verde 224 00:13:47,600 --> 00:13:49,779 Cualquier otra combinación fallaría 225 00:13:49,779 --> 00:13:59,139 Y valor correspondiente en el cual definimos que color va a tener de momento el color verde 226 00:13:59,139 --> 00:14:01,460 Si no lo ponemos tendrá el color verde 227 00:14:01,460 --> 00:14:05,519 Si lo ponemos podemos cambiarlo por cualquier otro valor 228 00:14:05,519 --> 00:14:08,919 Y con esto hemos visto todas las posibilidades que tenemos en DTD 229 00:14:08,919 --> 00:14:11,600 En cuanto a definición de la estructura de un documento XML 230 00:14:11,600 --> 00:14:16,879 Viendo sus entidades, sus notaciones, sus elementos y sus atributos