Curso202223/LMSGI/ApuntesXML/readme.md

98 lines
3.7 KiB
Markdown

## 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
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<?xml-stylesheet type="text/css" href="estilo.css"?>
<!-- comentario: fin del prologo -->
<raiz>
<elemento1>
<etiquetas>
<etiqueta1 atributo="valor">contenido</etiqueta1>
<etiqueta2 atributo="">contenido</etiqueta2>
<etiqueta3>contenido</etiqueta3>
</etiquetas><!-- comentario -->
<etiqueta_vacia/>
</elemento1>
</raiz>
```
- 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 <raiz>
- 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
<![CDATA[#include <stdio.h>]]>
```
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) | `&lt;` |
| > (mayor que) | `&gt;` |
| " (comilla doble) | `&quot;` |
| ' (comilla simple) | `&apos;` |
| & (ampersand) | `&amp;` |
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
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Definición en raiz, necesario prefijo -->
<ejemplo xmlns:papel="https://url.es/papel"
xmlns:naipe="https://url.es/naipe">
<papel:carta>
<papel:destinatario>Tomás Alonso</papel:destinatario>
</papel:carta>
<naipe:carta>
<naipe:palo>Corazones</naipe:palo>
</naipe:carta>
<!-- Definición en elemento, no es obligatorio el prefijo -->
<carta xmlns:bares="https://url.es/bares">
<bebidas>
<refresco precio="2">Coca-Cola</refresco>
</bebidas>
</carta>
</ejemplo>
```
- 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/