## Apuntes XML
#### Definición
Es una especificación de W3C, que significa eXtensible Markup Language, y es derivado de SGML. Permite definir la gramática de lenguajes específicos para estructurar documentos grandes.
#### Ventajas
- Es extensible: Después de diseñado y puesto en producción, es posible extender XML con la adición de nuevas etiquetas.
- El analizador es un componente estándar, no es necesario crear un analizador específico para cada versión de lenguaje XML.
- Es sencillo entender su estructura y procesarla, tanto por humanos como por maquinas
#### Estructura y elementos:
```xml
contenido
contenido
contenido
```
- Se compone de un prologo (opcional) y un cuerpo
- El prologo contiene:
- Declaración xml
- Declaración del tipo de documento
- Enlace al documento DTD asociado, o el propio DTD insertado
- Comentarios e instrucciones de procesamiento
- En el cuerpo solo puede existir un elemento
- Los elementos pueden anidarse, pero hay que cerrar siempre los inferiores primero
- Atributos, sirven para proporcionar información extra sobre el elemento que lo contiene. **Todos los atributos de un elemento tienen que ser únicos**
#### Secciones CDATA
Es una construcción XML se pueden introducir elementos que no se analicen como código XML, siendo útil para textos con caracteres especiales. Ejemplo:
```xml
]]>
```
Dentro de una sección CDATA no se puede escribir la cadena "]]>". En consecuencia, no se pueden anidar secciones CDATA.
#### Caracteres reservados y unicode
| Carácter | Código |
| ------------------ | -------- |
| < (menor que) | `<` |
| > (mayor que) | `>` |
| " (comilla doble) | `"` |
| ' (comilla simple) | `'` |
| & (ampersand) | `&` |
Para unicode se introduce el código decimal o hexadecimal mediante los caracteres reservados ` DEC_HEX_CODE ;`. Para hexadecimal es necesario anteponer una x al código.
#### Namespaces
Es un método para evitar conflictos entre los nombres de los elementos, al convertir éstos en nombres únicos.
```xml
Tomás Alonso
Corazones
Coca-Cola
```
- Los namespaces se pueden definir en el elemento raíz, o en los elementos que lo vayan a utilizar
- Se puede definir un namespace por defecto, evitando tener que usar prefijos en las etiquetas de los elementos
- Para indicar que un elemento no pertenece a ningun namespace se incluye el atributo xmlns vacío en la etiqueta del mismo
Listado unicode: https://en.wikipedia.org/wiki/List_of_Unicode_characters
Playlist: https://www.youtube.com/playlist?list=PLqu7Q-jp3eAPhrfYbS-RcTNZn7L2LMzpp
XMLCopyEditor: https://xml-copy-editor.sourceforge.io/
Tutorial XML (Abrirllave.com): https://www.abrirllave.com/xml/