
El lenguaje XML es un estándar en el intercambio de información en Internet. De esta simple tecnología, se desprenden muchas otras que hacen a XML aún más poderoso. A parte de ver los fundamentos del lenguaje, analizaremos las herramientas para diseñar los archivos XML, como son los estilos en cascada tradicionales (CSS) y la poderosa herramienta XSLT.
También revisaremos las herramientas para recorrer un archivo XML como el XPath y la estructura DOM con JavaScript.
Por último veremos dos herramientas fundamentales para la validación de los documentos como el tradicional DTD y el poderoso XML Schema.
XML es uno de los estándares más populares para el intercambio de información y fuera de Internet.
Unas de las maravillas de XML es que es sencillo de crear, sencillo de entender y enormemente potente.
Para que los ejemplos del curso hay que ejecurarlos en un servidor local Apache.
La enorme semejanza con HTML lo hace fácil de entender, así como la flexibilidad de su sintaxis.
Las reglas para lograr un documento XML bien formados son muy sencillas y se pueden verificar en cualquier navegador moderno.
La declaración XML:
Reglas para crear nodos:
Son instrucciones que sólo le interesan a la aplicación que procesa el archivo XML, no al analizador XML.
<? target instruction ?>
El nombre del target no puede ser XML y tiene las mismas reglas del nombre que los nodos y atributos.
Se utiliza como el atributo xmlns y aparecen como las primeras instrucciones.
Tiene una especie de url.
Apuntes de la sección en PDF.
Ligar un archivo XML a un archivo CSS
Crear el archivo de estilos en cascada con las etiquetas generales
Crear los estilos en cascada para los subnodos de XML
Apuntes de la sección en PDF.
Por medio del objeto de JavaScript XMLHttpRequest podemos cargar datos a páginas HTML.
Por medio de las instrucciones de tipo DOM podemos recorrer un documento de muchas formas.
Por lo general la lectura de una parte del documento genera un objeto “NodeList” que en realidad forma otro pequeño documento XML.
Con el método getNamedItem() podremos extraer el nodo indicando el nombre del mismo. Con la propiedad attributes, a obtenemos un "nodelist" con atributos que contenga el elemento. Con ambas intrusiones, y nodeValue, podremos extraer el valor de cualquier atributo del nodo.
p = nodo.attributes.getNamedItem("atributo").nodeValue;
Algunas cosas a considerar al usar atributos son:
los atributos no pueden contener múltiples valores (los elementos sí)
los atributos no pueden contener estructuras de árbol (los elementos sí)
los atributos no son fácilmente expandibles (para futuros cambios)
Apuntes de la sección en PDF.
En este video cargaremos un archivo XML externo a una página HTML, pero utilizaremos un try.. catch para prever cualquier tipo de error en la misma.
Los arreglos de datos en XPath, a diferencia de otros lenguajes, inician en uno, no en cero
En este video utilizaremos un predicado para traer los textos de los nodos leídos.
Por medio de los criterios de XPath podemos hacer filtros para seleccionar la información dentro de un documento XML.
Apuntes de la sección PDF
Por medio de una etiqueta <xsl:sort> podemos ordenar una selección de datos.
Crear una sentencia condicional con <xsl: if>
Sentencias condicionales con <choose>
Apuntes de la sección en PDF
<!DOCTYPE libros[
<!ELEMENT libros (libro+)>
<!ELEMENT libro (nombre, autor, editorial, precio, fecha)>
<!ELEMENT nombre (#PCDATA)>
<!ATTLIST nombre paginas CDATA #REQUIRED>
<!ELEMENT autor (#PCDATA)>
<!ELEMENT editorial (#PCDATA)>
<!ELEMENT precio (#PCDATA)>
<!ELEMENT fecha (#PCDATA)>
]>
Apuntes de la sección en PDF
Indicadores de orden:
All
Choice
Sequence
Indicadores de repetición:
maxOccurs
minOccurs
Indicadores de agrupación:
Group name
attributeGroup name
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2000/10/XMLSchema">
<xs:annotation>
<xs:documentation>
Este archivo valida al archivo de libros04.xml
</xs:documentation>
</xs:annotation>
<xsd:element name="libro">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="nombre" type="xsd:string"/>
<xsd:element name="autor" type="xsd:string"/>
<xsd:element name="editorial" type="xsd:string"/>
<xsd:element name="precio" type="xsd:string"/>
<xsd:element name="fecha" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:annotation>
<xs:documentation>
Este archivo valida al archivo de libros04.xml
</xs:documentation>
</xs:annotation>
<xs:element name="libros">
<xs:complexType>
<xs:sequence>
<xs:element name="libro" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:sequence>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
En este video terminaremos los elementos secundarios del XSD y definiremos un atributo.
Apuntes de la sección en PDF
En general contamos con dos tipos de bases de datos que manejan XML. Existen bases de datos que contienen un campo del tipo XML y podemos almacenar en ellos un documento XML, como en IBM DB2 (XML), Microsoft SQL Server, Oracle Database, PostgreSQL. Se llaman bases de datos adaptadas.
Hay bases de datos nativas, que procesan todo en XML, como BaseX, eXist, MarkLogic Server, Sedna,
Para poder explotar la información utilizaremos XQuery, que es un lenguaje de consultas equivalente a SQL, pero para XML, estandarizado por la W3C.
XQuery utiliza expresiones XPath para acceder a determinadas partes del documento XML.
Añade, además, expresiones similares a las usadas en SQL, conocidas como expresiones FLWOR.
Las expresiones FLWOR toman su nombre de los 5 tipos de sentencias de las que pueden estar compuestas: FOR, LET, WHERE, ORDER BY y RETURN
Añade, además, expresiones similares a las usadas en SQL, conocidas como expresiones FLWOR.
Las expresiones FLWOR toman su nombre de los 5 tipos de sentencias de las que pueden estar compuestas: FOR, LET, WHERE, ORDER BY y RETURN
Por medio del comando let podemos agrupar todas las iteraciones en la variable.
Podemos añadir funciones como count().
Podemos añadir etiquetas HTML.
Xlink y Xpointer no son soportados por ningún navegador.
Algunas aplicaciones pueden soportar estos elementos.
Xlink maneja los enlaces dentro de un documento XML.
Xpointer nos permite acceder a un punto específico directamente dentro del documento.
Apuntes de la sección
DOM: Document Object Model
SimpleXML
XML Parser - Simple API for XML (SAX) Compatible con PHP4.
XMLReader y XMLWriter
XSL Reestructura los datos XML usando XSLT
Cuenta con dos clases:
SimpleXMLElement
SimpleXMLIterator
Tres funciones
Load XML de una cadena o archivo o importarlo del DOM.
Generalmente el proceso con SimpleXML es cargarlo y visualizarlo con un ciclo foreach().
Accedemos a los elementos con el operador flecha ->
Los atributos los accedemos con la notación de arreglos (corchetes).
Visualizamos con echo o print como una cadena.
Cuenta con dos clases:
SimpleXMLElement
SimpleXMLIterator
Tres funciones
Load XML de una cadena o archivo o importarlo del DOM.
Generalmente el proceso con SimpleXML es cargarlo y visualizarlo con un ciclo foreach().
Accedemos a los elementos con el operador flecha ->
Los atributos los accedemos con la notación de arreglos (corchetes).
Visualizamos con echo o print como una cadena.
Para convertir un elemento a una cadena podemos utilizar las funciones de PHP como strtoupper() o (string).
Los nombres de etiquetas de XML pueden recibir guiones, guiones bajos, acentos y eñes, pero PHP no los soporta en sus nombres de variables.
Para poder visualizarlos necesitamos llaves y el nombre entre comillas simples o dobles.
libxml_use_internal_errors(true);
foreach(libxml_get_errors() as $error){
}
Espacios de nombres múltiples pueden existir en el mismo documento.
Elementos y argumentos pueden pertenecer a un espacio de nombres.
Los prefijos distinguen entre diferentes espacio de nombres.
SimpleXML ignora los prefijos de elementos y atributos.
(PHP 5 >= 5.1.2, PHP 7)
SimpleXMLElement::getDocNamespaces — Regresa los namespaces declarados en el documento
Primero necesitamos identificar el espacio de nombres.
Podemos detectar el atributo por medio del mètodo attribute() pero necesitamos utilizar la url del ns.
También podemos utilizar el método children(); como parámetro del ns.
Podemos utilizar el método children() pero como la cadena del ns y el valor true.
XPath es una especificación de la W3C
XPath es similar al manejo de archivo en un disco duro.
Podemos utilizar los caminos y funciones.
Podemos encontrar y filtrar datos y luego navegar en ellos.
“nombre de nodo” selecciona todos los nodos con el nombre "nombre de nodo"
/ Selecciona desde el nodo raíz
// Selecciona los nodos en el documento del nodo actual que coinciden con la selección sin importar dónde estén
. Selecciona el nodo actual
.. Selecciona el padre del nodo actual
@ Selecciona atributos
Lo que determina el espacio de nombres es la URL, no el prefijo.
El prefijo de un espacio de nombres se puede cambiar con simpleXML.
Podemos cambiar el prefijo con el método registerXPathNamespace().
La sintaxis sería el siguiente:
public SimpleXMLElement::registerXPathNamespace ( string $prefix , string $ns ) : bool
SimpleXMLElement::asXML — Retorna un string XML correcto basado en un elemento SimpleXML
Descripción:
public SimpleXMLElement::asXML ([ string $filename ] ) : mixed
El método asXML formatea los datos del objeto padre en XML versión 1.0.
(PHP 5, PHP 7)
SimpleXMLElement::asXML — Retorna un string XML correcto basado en un elemento SimpleXML
Descripción:
public SimpleXMLElement::asXML ([ string $filename ] ) : mixed
El método asXML formatea los datos del objeto padre en XML versión 1.0.
(PHP 5 >= 5.1.3, PHP 7)
SimpleXMLElement::addChild — Añade un elemento hijo al nodo XML
Descripción
public SimpleXMLElement::addChild ( string $name [, string $value [, string $namespace ]] ) : SimpleXMLElement
Añade un elemento hijo al nodo y retorna un SimpleXMLElement del hijo.
Podemos relacionar fácilmente los archivos leídos desde SimpleXML a la clase DOMDocument, entre otras cosas para dar un formato más legible.
Un iterador es un apuntador que nos permite recorrer todos los elementos, ya que todos apuntan al siguiente elemento. Las principales métodos son:
Las principales operaciones de un iterador son:
rewind(), mueve el iterador al primer elemento.
key(), regresa la llave o clave del elemento actual.
current(), regresa el valor del elemento actual.
next(), mueve el iterador al próximo elemento.
valid(), verifica si hay más elementos para moverse.
getChildren(), Devuelve los sub nodos del elemento actual.
hasChildren(), Comprueba si el elemento actual tiene subelementos.
Una vez que hemos leído los datos del documento XML y los iteramos, nos será muy sencillo subirlo a una base de datos.
Apuntes de la sección.
Por medio de javascript podemos realizar un proceso por medio de una barra.
Por medio de javascript podemos realizar un proceso por medio de una barra.
Por medio de javascript podemos realizar un proceso por medio de una barra.
Guardaremos los datos en un arreglo o array.
Por medio de javascript podemos realizar un proceso por medio de una barra.
Guardaremos los datos en un arreglo o array.
El lenguaje XML es un estándar en el intercambio de información en Internet. De esta simple tecnología, se desprenden muchas otras que hacen a XML aún más poderoso. A parte de ver los fundamentos del lenguaje, analizaremos las herramientas para diseñar los archivos XML, como son los estilos en cascada tradicionales (CSS) y la poderosa herramienta XSLT.
También revisaremos las herramientas para recorrer un archivo XML como el XPath y la estructura DOM con JavaScript.
Por último veremos dos herramientas fundamentales para la validación de los documentos como el tradicional DTD y el poderoso XML Schema.