# data[].attributes.body
DEFINICIÓN

XML es un lenguaje de marcado de propósito general especificado por la W3C que puede definir etiquetas propias. Su objetivo principal es definir un estándar para estructurar, almacenar e intercambiar información.

CARACTERÍSTICAS

Permite estructurar datos

Es un lenguaje de marcado

Basado en texto plano

Es estricto (No es tolerable)

Es verboso (Muy grandes)

Familia de tecnologías (Usos de varias)

Comenzó en 1996

Lleva HTML a XHTML

Es modular (permite definir un formato de documento combinando y reusando otros

formatos).

Base de RDF (Framework) y de la Web Semántica.

Gratuito

ESTRUCTURA

Un documento XML está formado por dos partes:

Prólogo: Parte opcional que incluye información sobre su características. Define XML (<?xml version...) y declara el tipo de elemento (<!DOCTYPE>)

Ejemplar: Documento XML. Está formado por

Etiqueta de inicio.

Contenido.

Etiqueta final.

SINTAXIS DE UN DOCUMENTO XML

Podemos seguir que un documento está bien formado si sigue las siguientes características:

Debe tener nodo raíz | SC

Debe tener etiqueta de cierre | SC

Deben estar correctamente anidades | SC

es SENSIBLE a mayúsculas y minúsculas | SC

Los atributos deben ser entrecomillados | SC

Se usa entidades para referenciar algunos caracteres especiales:

&lt; <

&gt; >

&amp; &

&apos; '

&quot; "

Los espacios en blanco no se truncan

Comentarios igual que HTML

Los elementos deben de seguir:

No pueden empezar con número o carácter de puntuación

No pueden empezar con "xml"

No contienen espacios en blanco

ATRIBUTOS

Se pueden utilizar para detallar información dentro de un elemento. Para aplicar correctamente un atributo debe de seguir:

No contienen valores múltiples

No contienen una estructura de árbol

Son difíciles de extender

Difíciles de leer y mantener

Solo para información no relevante

# data[].attributes.body
Conjunto de especificaciones que válida un documento XML. La definición del DTD puede incluirse dentro de un documento XML o en uno aparte actuando con extensión .dtd

DECLARACIÓN INTERNA

Para realizar una declaración interna solo basta añadir la siguiente línea:

<!DOCTYPE elemento-raiz [declaraciones]>

DECLARACIÓN EXTERNA

Puede ser:

Declaración Privada:

<!DOCTYPE elemento-raiz SYSTEM "URI">

Declaración Pública:

<!DOCTYPE elemento-raiz PUBLIC "Id-público" "URI">

DECLARACIONES

En un documento DTD se puede declarar:

Elementos

Atributos

Entidades

Notaciones

ELEMENTOS

Se utiliza para definir una etiqueta XML.

<!ELEMENT nombre-del-elemento tipo-de-contenido>

El tipo de contenido puede ser

Texto (#PCDATA)

Elementos XML (lista_hijos): Estos deben estar separados por comas y en el mismo orden que en el documento.

Vacio (EMPTY)

OCURRENCIAS

Las ocurrencias en un archivo DTD establece el número de veces que puede aparecer un elemento. Estos son:

+: Aparecen uno o más ocurrencias.

*: Aparecen cero o más ocurrencias.

?: Aparece cero o una ocurrencia.

|: Declara uno u otro. (zurdo|diestro).

ATRIBUTOS

Se añade un atributo a los elementos mediante la línea

<!ATTLIST nombre_elemento nombre_atributo tipo_atributo valor_defecto>

Los tipos de atributo pueden ser:

CDATA: Texto

(en1|en2): Debe ser uno de los establecidos.

ID: ID único.

IDREF: Referencia de un ID de otro elemento

IDREFS: Lista de referencias de otros IDs

NMTOKEN: Nombre XML válido.

NMTOKENS: Lista de nombres XML válidos.

ENTITY: Entidad.

ENTITIES: Lista de entidades.

NOTATION: Nombre de una notación.

XML: Valor XML predefinido.

Los valores por defecto pueden ser:

value: Valor por defecto (español)

#REQUIRED: Obligatorio ponerle valor.

#IMPLIED: Es opcional ponerle valor

#FIXED value: Valor fijo, no puede cambiar (#FIXED VALUE)

ENTIDADES

Las entidades son variables papra definir un acceso rápido a a texto que se utilice seguidamente.

Se puede realizar una declaración Interna o Externa.

Declaración Interna: <!ENTITY nombre_entidad "valor_entidad">

Declaración Externa: <!ENTITY nombre_entidad SYSTEM "URI/URL">

NOTACIONES

Las notaciones se utilizan para establecer el formato de una entidad externa cómo una imagen.

Se puede realizar una declaración Interna o Externa.

Declaración Interna: <!ENTITY nombre_entidad SYSTEM "identificador-sistema">

Declaración Externa <!ENTITY nombre_entidad PUBLIC "identificador-sistema" "identificador-del-sistema">

# data[].attributes.body
La sindicación de contenidos es el mecanismo el cuál el usuario recibe las últimas novedades de un sitio web mediante suscripciones. Basado en XML

ESTÁNDARES

RSS:

Atom:

AGREGADORES

Software que lee contenido RSS o Atom.

Tipos:

Agregadores en Línea

Agregadores en Clientes web: Actúa como extensión del navegador

Agregadores de Escritorio: Aplicaciones instaladas en el equipo

Si no se dispone de agregador se leerá un fichero XML

# data[].attributes.attachment_link.title
genera una imagen con las palabras Sindicación de Contenidos

# data[].attributes.body
Es un fichero XML. Se debe linkear cómo un documento externo.

Se define un esquema.

Elemento= xs:element | Se diferencian los espacios de nombres que son unívocos vinculados a un URL

ESTRUCTURA

Nodo Raíz --> Schema (xs:schema)

Atributos targetNamespace (Espacio de nombres propio)

Atributo: elementFormDefault | attributeFormDefault: Si los elementos deben estar certificados (No entraremos).

ELEMENTOS

Elemento simple: Aquel que no puede contener ningún otro elemento ni atributo. Solo tienen texto. Se definen <xs:element name="nombre" type="tipo"/>

Tipos de types:

xs:string

xs:integer

xs:boolean

xs:date

También existen elementos simples que no debe establecerse mediante "type". <xs:simpleType>

Elementos complejos: contienen otros elementos y/o atributos. Existen 4 tipos: Elementos vacíos, Elementos que contienen solo otros elementos, Elementos con atributos que contienen solo texto y Elementos que contienen tanto otros elementos como texto (mixtos).

Se puede realizar una declaración del elemento en el mismo elemento o declarando el tipo y utilizándolo como valor del atributo type.

Es importante en el examen realizar agrupaciones declarando el tipo ya que es una buena práctica

ATRIBUTOS

<xs:attribute name="lang" type="xs:string">

Se puede establecer:

Default: Por defecto

Fixed: Fijar valor (no puede ser cambiado)

Use: Obligatoriedad (Required or Optional).

RESTRICCIONES

Qué valores cumplen determinadas reglas (Facetas). Por ejemplo se puede establecer un intervalo de números mínimos y máximos. Es una función que no se puede realizar mediante DTD.

Puedo crear un tipo de dato y llamarlo cómo quiera donde le daré las bases que tenga. Esto viene bien para evitar añadir líneas de código extras y optimizar lo mayor posible evitando la repetición de código, es una buena práctica para no tener errores.

Existen:

xs:enumeration con value

xs:positiveInteger

xs:fractionDigit

xs:lenght

xs:pattern

xs:whitespace

xs:minInclusive

xs:maxInclusive

EXTENSIONES

Utilizamos las extensiones para extender elementos simples y complejos. Existen extensiones bases aquellas que empiezan la extensión a partir de ella.

xs:extension. con simpleType o complexType

xs:simpleContent: Definir extensiones o restricciones a un tio simple

xs:complexContent: Definir extensiones o restricciones a un tio complejos.

INDICADORES

Se utilizan para establecer cómo van a utilizar los elementos en un documento XML. Hay un total de 7 indicadores.

xs:sequence: Especifica el orden en el que deben aparecer los elementos hijos.

xs:all: Pueden aparecer en cualquier orden.

xs:choice: Especifican que solamente se permite escribir uno de los elementos hijo.

Se puede determinar el máximo o mínimo de ocurrencias con el indicador maxOccurs y minOccurs (inclusive esos datos), si no hay límite se usa unbounded.

Los indicadores de grupo sirve para agrupar un conjunto de declaraciones

xs:group: Se utiliza para definir un grupo de elementos

xs:attributeGroup: Se utiliza para definir un grupo de atributos.

Ejemplo de uso de indicadores de grupo

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >

  <xs:element name="personas">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="persona" type="datosDePersona" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="datosDePersona">
    <xs:sequence>
      <xs:group ref="datosBasicos"/>
      <xs:element name="telefono" type="xs:string"/>
      </xs:sequence>
  </xs:complexType>

<xs:group name="datosBasicos" >
  <xs:sequence>
    <xs:element name="nombre"  type="xs:string"  />
    <xs:element name="edad" type="xs:positiveInteger"/>
    <xs:element name="pais" type="xs:string"/>
    </xs:sequence>
    </xs:group>

</xs:schema>

# data[].attributes.body
Formato abierto de gráficos vectoriales bidimensionales tanto estáticos cómo animados incorporado de forma nativa en los navegadores.

VENTAJAS

Ampliable sin perder calidad

Poco espacio

Facilmente combinables y reutilizables

Se puede modificar de forma dinámica en web

Se puede incluir en HTML

INCONVENIENTES

Su implementación no es muy rápida

Riesgos a nivel de seguridad

Su elemento raíz es <svg>

ESTILOS

Se les puede aplicar estilos dentro de una regla CSS o con atributos de elemento cómo:

Fill: Color de relleno.

Stroke: Color de trazo

Stroke-width: Tamaño de trazo

Opacity: Opacidad

# data[].attributes.body
Lenguaje para la representación de información geográfica adoptada por el OGC (Open Geospatial Consortium)

ESTRUCTURA

Debe de ser linkeado con una página compatible como google earth.

Marcas de posición

Placemark: Chincheta amarilla

Point: Elemento de punto.

SUPERPOSICIONES DEL SUELO.

Icon: Colocar imagen sobre el relieve de la tierra

# data[].attributes.body
Protocolo que poprciona sindicación abierta y agregación de contenido web. Está basado en XML.

RSS CÓMO SUSCRIPTOR

Se necesita tener un agregador para gestionar nuestras suscripciones.

Los sitios con RSS suele ir indicado mediante iconos y enlaces.

ELEMENTOS DE CHANNEL

title: Establece el título del canal [OBLIGATORIO]

link: Enlace a la web del cana [OBLIGATORIO]

description: Breve descripción del canal [OBLIGATORIO]

language: Idioma del canal.

copyright: Aviso de derechos de autor

managingEditor: Mail del responsable del contenido.

webMaster: Maul del responsable de problemas técnicos del canal

pubDate: Fecha de publicación del contenido.

lastBuildDate: Última vez que cambió el contenido del canal.

Category: Categoría del canal

Generator: Cadena que indica el programa utilizado para generar el canal.

Docs: UTL a la documentación para el formato del archivo RSS

ttl: Minutos que se puede almacenar en la caché.

image: Imagen, GIFT, JPEG ó PNG que se puede mostrar en el canal.

textInput: Entrada de texto.

skipHours: Sugerencia para los agregadores que índica que horas pueden omitir.

skipDays: Sugerencia para los agregadores que índica que días pueden omitir.

ELEMENTOS DE ITEM (NOTICIAS)

title: Establece el título de la noticia[RECOMENDADO]

link: Enlace a la web de la noticia [RECOMENDADO]

description: Resumen del artículo [RECOMENDADO]

author: Mail del autor del artículo.

category: Categoría(s) del artículo.

comments: URL de la sección de comentarios relacionados con el artículo.

enclosure: Describe multimedia que se adjunta en el elemento.

guild: Cadena identificadora del artículo.

pubDate: Indica cuándo se publicó el artículo.

Source: canal RSS que proviene el artículo.

# data[].attributes.body
Para realizar un documento ATOM, se construirá con un elemento raíz feed y la definición de nombres utilizando xmlns con el valor "http://www.w3.org/2005/Atom" para que sea válido

ESTRUCTURA

<?xml version="1.0" encoding="UTF-8"?>

<feed xmlns="http://www.w3.org/2005/Atom">

<!--Propiedades del canal-->

<entry>

<!--Contenido entrada -->

</entry>

<!--Contenido entrada -->

</entry>

</feed>

ELEMENTOS DE FEED

id: Identifica el feed mediante un URI [OBLIGATORIO]

title: Título para el feed [OBLIGATORIO]

updated: Última vez que se modificó el feed [OBLIGATORIO]

author: Autor [RECOMENDADO]

link: web relacionada [RECOMENDADO]

category: Categoría(s) que pertenece el feed.

contributor: Nombra contribuyente al feed.

generator: Identifica el software para generar el feed.

icon: Imagen pequeñita que identifica visualmente el feed

logo: Imagen que identifica dde manera visual el feed.

rights: Información sobre derechos.

subtitle: Descripción o subtítulo para el feed.

ELEMENTOS DE ENTRY

id: Identifica la entrada mediante un URI [OBLIGATORIO].

title: Título de la entrada [OBLIGATORIO]

updated: Ultima modificación [OBLIGATORIO]

link: Web relacionada [RECOMENDADO].

content: Enlaza contenido de la entrada [RECOMENDADO]

summary: Resumen del contenido

rights: Se especifican derechos de autor.

Contributor: Indica el nombre de los colaboradores.

published: Se índica la fecha de creación de la entrada.

source: Indica metadatos

category: Categoría(s) que pertenece la entrada.

# data[].attributes.body
Elemento clave para otras tecnologías cómo XSLT (De transformación) actuando cómo un paso previo.

NODOS (7)

Raíz: Elemento padre del árbol (no es elemento raíz).

Cualquier elemento: Tienen elemento padre.

Atributo: Compuesto por nombre y valor.

Texto: Cómo hoja, no tiene hijos.

Espacio de nombres

Instrucciones de procesamiento

Comentarios

EXPRESIONES

Cadena de texto (no confundir con comando) que representa el recorrido del árbol. Devuelve un conjunto de nodos (puede estar vacío)

Se pueden expresar de manera absoluta (desde el nodo raíz, son válidas da independientemente del directorio actual) o relativa (a partir del contexto)

SINTAXIS

Abreviada: Compacta

Se omite: Hijo

@: Atributo

//: Descendiente del nodo

. : Referencial al nodo

.. : parent::node()

Completa: Permite mayor flexibilidad con un conjunto de opciones más completo.

child:: Elemento hijo

attribute:: Atributo

descendant-or-self::node(): Descendiente del nodo

self::node(): Referencia al nodo

parent::node():

EJES

Manera de marcar un conjunto del documento (recorridos)

Los nodos elemento se indican mediante el nombre del elemento.

Los nodos atributo se indican mediante @ y el nombre del atributo.

Los ejes definen las relaciones del parentesco:

Compacto

Self: Nodo de Contexto

Child: Hijo

Descendant: Todos los defendientes

Descendant-or-self: Todos los descendientes o él

Parent: Todos por encima

Ancestor: Ancestros del nodo de contexto.

Ancestor-or-self: Nodo de contexto y sus acestros.

Preceding: Todos los nodos que aparecen antes del nodo de contexto,excluyendo los ancestros.

Following: Nodos que aparecen después del nodo de contexto, excluyendo los descendientes.

Preceding-sibling: Hermanos precedentes del nodo de contexto.

Following-sibling: Hermanos situados detrás del nodo de contexto.

Abreviado

nombre_nodo: Nodos con el nombre nombre_nodo.

@nombreatributo: @ Se utiliza para referenciar nodos atributo.

/: Si está al principio de la expresión, indica el nodo raíz, si no, indica "hijo". Debe ir seguida del nombre de un elemento.

//: Descendientes.

..: Nodo padre.

.: Nodo hijo.

|: Varios recorridos.

PREDICADOS

Sirven para establecer condiciones

[@atributo]: Aquellos que tienen ese atributo

[n]: Elementos de la posición n

[condición]: Condición que puede tener operadores lógicos, aritméticos y relacionales. Ejemplo: [perro or gato]

SELECCIÓN DE NODOS

*: Cualquier elemento

@*: Cualquier atributo

node(): Cualquier nodo

/node(): Nodos hijos

//node(): Descendientes del nodo

/text(): Contenido en el nodo

/text(): Contenido en el nodo y sus descendientes

/*: Elemenntos hijos del nodo.

//*: Elementos descendientes del nodo

/@*: Atributos del nodo

//@* Atributos de los descendientes del nodo

|: Operador que permite seleccionar varios caminos (And)

Estas expresiones pueden anidarse: //libro[autor=//libro[titulo="Pantaleón y las visitadoras"]/autor/text()]/titulo

FUNCIONES

Elementos que devuelven determinados grupos

boolean(): Si un conjunto de nados no es vacío

not(): Un predicado devuelve true si el predicado es

falso , y falso si el predicado es true.

true(): Devuelve el valor True

false: Devuelve el valor false

count(): Devuelve el número de nodos que forman.

name(): Devuelve un nombre de un nodo.

local-name(): Devuelve el nombre del nodo actual

namespace-uri(): Devuelve el URI del nodo actual.

position(): Devuelve la posición de un nodo en su contexto.

last(): Devuelve el último elemento del conjunto dado.

normalize-space(): Normaliza los espacios de una cadena de texto (quita espacios consecutivos).

string(): Convierte un objeto en una cadena.

concat(): Concatena.

string-lenght(): Cantidad de caracteres.

sum(): Suma

# data[].attributes.attachment_link.title
Genera una imagen que ponga las letras XPATH

# data[].attributes.body
Es equivalente al SQL en las base de datos pero en XML.

SINTAXIS BÁSICA

Las expresiones XPATH es una consulta XQUERY válida.

Es sensible con las mayúsculas

Deben ser normbres XML válidos

Las variables se representan en $

Se comenta con (: :)

Se utiliza doc() para abrir el documento xml

Se utiliza el acrónimo FLWOR para seguir una orden

FOR: Secuencia de nodos (especifica el número de iteraciones del bucle)

LET: Secuencia de nodos cargados en una variable (no iterenables)

WHERE: Condición

ORDER BY: Ordenar los resultados

RETURN: Devolver

EXPRESIONES CONDICIONALES

if-then-else: si la condición es "true" se dará "then" y si es falso se dará "else"

FUNCIONES XQUERY

1. Funciones numéricas:

2. Funciones de cadena de texto:

3. Funciones de uso general:

4. Cuantificadores existenciales:

Además se puede usar las funciones de XPATH y XSLT o crear nuestras propias funciones (condeclare function nombre)

# data[].attributes.body
Lenguaje que aplica estilos a un documento XML

Para declarar un documento XSLT se utiliza xsl:stylesheet con

ELEMENTOS

xsl:template

<xsl:template match="expresion_Xpath">

Definición de plantilla para el documento

xsl:value-of

<xsl:value-of select=expresion_Xpath"/>

Muestra el valor del nodo seleccionado

xsl:for-each

<xsl:for-each select="expresion_Xpath">

Procesa un conjunto de nodos en bucle (perfecto para varios elementos)

xsl:sort select

<xsl:sort select ="expresison_Xpath">

Ordena los resultados

xsl:if

<xsl:if test = "expresion_condicional">

Condicional que se aplica en el caso de que sea correcta

xsl:choose

<xsl:choose>

Selección de multiples condiciones incluyendo

xsl:when test="expresion_condicional" (cuando)

xsl:otherwise (equivalente al else en otros lenguajes)