attakatara

El sitio del código de todos python, sql, xml …

Archivo para la etiqueta “XML”

¿Cómo se come Xpath?

Este documento es de libre acceso y uso bajo los términos expuestos en la licencia: Atribución-CompartirIgual 3.0 Venezuela (CC BY-SA 3.0 VE), https://creativecommons.org/licenses/by-sa/3.0/ve/ se agrega una copia de la misma en este repositorio.

Documento referencial con fines didácticos elaborado por jorgescalona @jorgemustaine jorgescalona@riseup.net.

verlo en GitHub

Xpath

Xpath es un estandar para el lenguaje de path en XML. Existe desde hace más de 15 años y se conocen 3 versiones:

  • Xpath 1.0, como una recomendación de W3C el 16 de Noviembre de 1999. Es muy básica con respecto a sus sucesoras, solo soportaba 4 tipos de datos: node, booleam, number, string y un compendio reducido de funciones pre construida para ser exactos solo 27.
  • Xpath 2.0, como una recomendación de W3C el 23 de Enero de 2007. Se considera un gran avance se introdujo en está versión un sistema de tipado general que soportaba cerca de 50 tipos, nuevos operadores y una biblioteca de funciones integrada con más de 100 funciones. Se introduce el concepto de secuencias, todos los valores de uns expresión Xpath 2.0 es una secuencia. Conjuntos de nodos en la ver 1.0 fueron reemplazados con Secuencias de nodos en la ver 3.0.
  • Xpath 3.0, como una recomendación de W3C el 8 de Abril de 2014. Introduce nuevos tipos, operadores y más de 200 funciones nuevas. El más significativo aporte de la versiuón es la recursividad de funciones pudiendo ahora una función ser pasada a otra como argumento o retornar una función. Y permite escribir funciones propias del desarrollador inline functions, o crear su propias librerias de funciones.

con Xpath es posible identificar partes del documento XML y también ejecutar computos sobre esa data.

Expresiones (expresions)

es el principal bloque de construcción en Xpath, una expresión es un simple string de caracteres unicode hecho de palabras claves, simbolos y operadores.

Secuencias (sequences)

Son muy importantes en Xpath ya que cada expresión retorna una secuencia. Así una secuencia es una simple colección de items que pueden ir desde cero o más de ellos. Una secuencia sin items o vacía se conoce como: secuencia vacía (empty sequence). Una secuencia con un item simple es conocida como secuencia simple (singleton sequence). a partir de Xpath 3.0 un item en una secuencia puede ser un nodo, un valor atómico (atomic value), o una función. De esta manera Xpath 3.0 define 7 tipos de nodos:

  1. documento (document).
  2. element.
  3. attribute.
  4. namespace.
  5. procesing instruction.
  6. comment.
  7. text.

Un valor atómico es un valor permitido de un conjunto de valores para un tipo atómico en particular. Los tipos atómicos son todos los tipos que se derivan de forma directa o indirecta de xs:anyAtomicType.Como se especifica en el diagrama de herencia de tipos de datos para XML Schema 1.1:

La función es un nuevo tipo de item. En Xpath 2.0 un item en una secuencia solo podía ser un nodo o un valor atómico. En Xpath 3.0 puede ser un nodo, un valor atómico o una función.

Ubicación de la ruta (path)

Ubicar rutas es Xpath es muy similar a usar la notación de path para archivos en el sistema de archivos que usemos y al igual que este ultimo tenemos rutas relativas y absolutas, donde una ruta absoluta siempre es evaluada desde la raiz del arbol “/” y una ruta relativa se referencia a un nodo en especifico. la raiz del documento “/” es el nivel más alto del XML y es el contenedor de todos los nodos que lo componen inclusive el mismo. Una ruta absoluta también puede empezar con: “//” (lo que se refiere a todos los subnodos de la raiz) lo que es distinto a “/” (se refiere a la raiz, todo el documento, incluyendo nodos, expresiones y/o funciones). Una ruta relativa es siempre evaluada desde el contexto de un nodo. Ejemplo:

office/employee/first_name[.=’John’]

El nodo contextual en el que esta evaluada está expresión es ‘company’ que es la raiz del archivo company_1.xml, el elemento padre es ‘office’. El elemento contextual puede cambiar durante la evaluación de la expresión como lo indica el caracter punto ‘.’ en este caso es usado para indicar el nodo contextual ‘first_name’ de esta forma se compara el valor de este nodo con el string ‘John’.

Steps

Una ruta de path contiene uno o más steps. Un step está compuesto de:

  1. una axis. Es la primera parte de una ubicación step la que determina la dirección a navegar con respecto de un nodo particular. Existen 13 diferentes axisas pertenecientes a dos grupos: forward axis (estás retornan en el mismo orden que se encuentran en el documento XML) o *reverse axis (retornan de forma inversa al documento XML). Se usa “::” para separar la axisa especifica del node test. *
  2. un node test. Aparece inmediatamente despues de la axis y pueden ser de tres tipos: por nombre, por kind o por tipo.
  3. Cero o más predicates.

axis::node_test[predicate]

child::office[@location='Viena']

Está ultima expresión selecciona desde el nodo contextual todos los elementos hijos de ‘office’ que tengan un atributo llamado ‘location’ que a su vez sea igual a ‘Vienna’.

Algunas Forward Axis:

  • child
  • descendant
  • attribute
  • self
  • desendant-or-self
  • following-sibling
  • following
  • namespace

Algunas Reverse Axis:

  • parent
  • ancestor
  • preceding-sibling
  • preceding
  • ancestor-or-self

Ejemplo:

child::office

Está expresión Xpath es una ruta relativa la cual selecciona todos los elementos hijos del nodo contextual ‘office’.

node test

  • by name:officeEstá expresión Xpath contiene un nombre de nodo ‘office’ el cual selecciona todos los elementos hijos (de ese nodo contextual en especifico). Por eso no se especifica axisa alguna. La axisa child es asumida por defecto y es por ello que el principal tipo de nodo es la axisa child.@locationEsta expresión Xpath selecciona el atributo llamado ‘location’ del nodo contextual. la forma abreviada de la axisa ‘attribute’ es ‘@’.
  • by kind:los kind que se pueden aplicar a un nodo son:
    • document-node()
    • element()
    • attribute()
    • schema-element()
    • schema-attribute()
    • processing-instruction()
    • comment()
    • text()
    • namespace-node()
    • node()

    Ejemplos:

    //attribute()

    Esta expresión Xpath selecciona todos los atributos nodales en el documento XML (independientemente del nombre o el tipo). El doble slash al principio de la expresión es la forma corta de la axisa ‘descendant-or-self’.

    //element()

    Esta expresión Xpath selecciona todos los elementos del documento XML (independientemente del nombre o el tipo).

    //*

    Esta Expresión Xpath es el equivalente del ejemplo anterior. En esta forma abreviada el comodín ‘*’ es usado para denotar los elementos nodales.

  • by type:Los tipos de nodos que pueden ser evaluados son cualquiera de los presentados en la tabla de built-in Schema datatypes (arriba expuesta), como también cualquier tipo definido por el usuario o tipos complejos. Ejemplo://element(*,xs:date)El primer argumento de la función en esta expresión Xpath es el nombre del nodo y el segundo argumento es el tipo. El asterisco es usado en el primer argumento y denota ‘cualquier nombre’. La expresión selecciona todos los elementos del documento XML (insistintamente del nombre de elemento) los cuales tengan como tipo ‘xs:date’.

Predicates

Los predicados son usados para encontrar un nodo especifico o un nodo que contiene valores especificos. Estos siempre estan embebidos entre corchetes. Ejemplos:

Path Expression Result
/bookstore/book[1] selecciona el primer elemento ‘book’ que es hijo de ‘bookstore’
/bookstore/book[last()] selecciona el ultimo elemento ‘book’ que es hijo de ‘bookstore’
/bookstore/book[last()-1] seleciona el penultimo elemento ‘book’ que es hijo de ‘bookstore’
/bookstore/book[position()<3] selecciona los dos primeros elementos ‘book’ que son hijos de ‘bookstore’
//title[@lang] selecciona todos los elementos title que poseen un atributo llamado ‘lang’
//title[@lang=’en’] selecciona todos los elementos title cuyo atributo ‘lang’ es igual a ‘en’
/bookstore/book[price>35.00] selecciona todos los elementos ‘book’ hijos de ‘bookstore’ que tengan un precio por encima de 35.00
/bookstore/book[price>35.00]/title selecciona todos los elementos title hijos de ‘book’ y nietos de ‘bookstore’ que tengan un precio por encima de 35.00

Seleccionando nodos desconocidos.

Los comodines en Xpath pueden ser usados para seleccionar nodos XML desconocidos.

comodín Descripción
* cualquier elemento nodal
@* cualquier atributo nodal
node() cualquier nodo de cualquier tipo

En la siguiente tabla se listan algunas expresiones Xpath y su respectivo resultado:

Path Expression Descripción
/bookstore/* selecciona todos los elementos hijos de ‘bookstore’
//* selecciona todos los elementos en el documento
//title[@*] selecciona todos los elementos ‘title’ que tengan un atributo de cualquier indole

Selecionando varios Paths

Usando el operador ‘|’ se puede seleccionar varios paths en una expresión. Ejemplo:

//book/title | //price

selecciona todos los ‘title’ AND ‘price’ elementos hijos de ‘book’

//title | //price

selecciona todos los elementos ‘title’ AND ‘price’ en el documento

/bookstore/book/title | //price

selecciona todos los elementos ‘title’ AND ‘price’ hijos de ‘book’ y nietos de ‘bookstore’ en el documento

Enlaces de intéres y relacionados:

 

Anuncios

Gobierno Abierto ¿Es posible en la Venezuela actual?

Cabudare, 27 de Octubre de 2015

8 de Noviembre de 2015

Gobierno Abierto ¿Es posible en la Venezuela actual?

Un término muy usado en la actualidad sobre todo en las esferas de la “sapiencia” y lo que he denominado el Olimpo (ultimo escalón del concepto vertical del poder), es acaso una moda entra legisladores o ignoran totalmente las connotaciones del término. Al igual que anteponer las siglas de poder popular a cada uno de sus ámbitos de poder no garantiza la participación del soberano, se ha convertido en una transformación de forma y no de fondo.

El conocimiento es y debe ser un bien público” Guillaume Long

Un avance tangible en el hecho político venezolano es el saldo documental-jurídico está representado en el conjunto de decretos, proyectos de ley y leyes orgánicas ya promulgadas, su legitimidad en el hecho de la participación abierta durante el proceso de redacción, revisión y reglamentaría, esto es un hecho irrefutable. Dentro de este legado podemos referenciar la Ley de Infogobierno [1], y el anteproyecto de Ley de Conocimiento Libre [2], Ley de Interoperabilidad [3], entre otras directamente relacionadas.

La actualidad también requiere una revisión respecto a las capacidades del estado Venezolano para implementar lo escrito, está capacidad tiene diferentes aristas que van desde la voluntad política, la conveniencia de aplicación y lo finito de los recursos para acometer planes eficaces y tangibles respecto a la atmósfera jurídica establecida. Más allá de eso nos encontramos con el gran muro del estado que se convierte en un dique de contención de las buenas intenciones. También la participación popular que no se puede reducir al hecho de sugerencias o de masa utilizable en eventos de protocolo y auditorio.

Como comunidad nuestro esfuerzo no puede ser el meramente técnico, decir que los grupos que hacen vida dentro del apasionante mundo de las tecnologías libres se debe limitar al aspecto operativo e investigativo es tributar a la división social de roles, lo que es un esfuerzo ideológico del capital para monopolizar el conocimiento, y los bienes intangibles que el mismo representa. Aceptar esta postura de la comodidad burguesa donde cada humano se transforma en un engranaje que optimiza el proceso desconociendo el producto final del mismo sin la más mínima responsabilidad o conciencia de hecho, es el estadio ideal o caldo de cultivo para la dominación.

De allí que nuestra responsabilidad para con los lectores del blog es crear estos espacios de análisis con la finalidad de que sean un referente teórico para la discusión colectiva, por ahora estudiamos posibles herramientas de interacción que nos permitan sistematizar el debate y pasar de una comunidad de tecnólogos de ojos vendados a ser militantes de las transformaciones necesarias para el logro de la independencia cognoscitiva y permeadores de estos hábitos colaborativos a todas las instancias del saber y la sociedad.

GOBIERNO ABIERTO

El Gobierno Abierto es una doctrina política caracterizada por la adopción de la filosofía del software libre a los principios de la democracia. Tiene como objetivo que los ciudadanos colaboren en la creación y el mejoramiento de los servicios públicos y en el robustecimiento de la transparencia y rendición de cuentas. [4]

Viene sostenido desde las tecnologías de la información y lleva el hecho de la democracia participativa a su máxima expresión. Hasta aquí cabe preguntarnos ¿Qué hemos superado de la representatividad? ¿A quien le convienen el rol patagónico del pueblo en los procesos decisorios de nuestros destinos? ¿Cuantos alcaldes estarían dispuestos a dimitir para dar paso a las comunas? ¿Cuantos gerentes están dispuestos a implementar las herramientas libres necesarias? Si hoy por hoy oímos algunos que dicen preferir pagar la multa (irrita, casi simbólica) de la CONATI (Comisión Nacional de Tecnologías de La Información) y no perder el tiempo diseñando software que de paso lo auditara de forma abierta, publica y transparente.

Los neoriberales impulsan los paraísos fiscales. Nosotros los socialistas del siglo XXI, vamos a impulsar los paraísos del conocimiento, el conocimiento como bien público y libre acceso” Rafael Correa

Claro está que para más de uno acostumbrado a los métodos de un estado, representamos una agresión clara a sus formas y costumbres, es momento de tender alianzas estratégicas y establecer un criterio para la adopción de compromisos que no sean para engrasar la maquinaría misma de la dominación estatal, sino para poner al servicio del pueblo los datos necesarios para el encuentro de los tejidos sociales y el fomento de la nueva economía comunal entonces estamos convencidos que el camino es a través del Gobierno Abierto.

Otro análisis pertinente de traer a colación es la discusión en la comunidad de lo conveniente de que militantes de las tecnologías libres sean absorbidos por los entes gubernamentales, atareados de un tareismo propio del funcionamiento burocrático y sin poder de decisión real sobre la brújula tecnológica dentro de esos mismos entes. La conclusión de este análisis es la protección de los cuadros ante tal fenómeno y se propone la creación de las condiciones ideales para a través de fondos propios sostener el accionar tecno-político de los sujetos seleccionados.

En conclusión, las condiciones materiales, ideológicas y jurídicas están dadas para la implementación de las herramientas que faciliten manejar en la praxis los postulados iniciales del Gobierno Abierto, este fenómeno práctico desembocara en objeto teórico alimentado desde las experiencias de éxito como FlokSociety en Ecuador [5] o MadridDecide en España [6]. Cabe preguntarnos por la voluntad política hacia una práctica transparente en sus acciones, la amplitud del “Doxa” y el “Episteme” (opinión y ciencia).

PROPUESTAS

Es necesario además de la discusión crítica y colectiva crear los espacios necesarios para el encuentro y la promoción del Gobierno abierto como práctica que nos llevará hacia la consolidación de un verdadero estado comunal y participativo, la Alianza para el gobierno Abierto es un ejemplo de ello (opengovpartnertship) [7], la cual es una iniciativa multilateral que tiene como objetivo asegurar compromisos concretos para promover la transparencia, empoderar a los ciudadanos y aprovechar las nuevas tecnologías para fortalecer la gobernabilidad.

¿Existe una iniciativa similar en Venezuela? ¿Es la misma emanada desde el Poder Popular? ¿hasta cuando las comunidades de Tecnologías Libres, nos dedicamos a lo especialisimo de las tareas y no asumimos una propuesta conjunta para la implementación de herramientas ejemplares no controladas desde las superestructuras del estado sino del seno mismo de la participación colectiva?.

La nueva gestión del conocimiento debe buscar construir una institucionalidad que recupere el sentido público y común del bien conocimiento. En otras palabras, no solo proponemos construir un sistema abierto, libre y público del conocimiento porque creemos (por convencimiento) sino porque lo necesitamos” René Ramirez

La lógica entonces dicta que necesitamos espacios para la discusión política real de nuestras condiciones sociales, y no nos referimos aquí a un canal IRC, un grupo Telegram o un foro frío, hablamos del encuentro y la juntura real, el vernos a los ojos y debatir críticamente estos temas de interés, que estén nuestros cuadros allí y ver cual puede ser su aporte desde la institucionalidad y como el resto le apoyamos desde la comunidad.

Consolidar por escrito alianzas estratégicas con los entes interesados y que estos puedan generar las condiciones materiales necesarias para el encuentro, así como compromisos reales y tangibles para el aporte de recursos necesarios para el desarrollo de tecnologías orientadas a la implementación de las herramientas necesarias y de nuestro lado el compromiso de proporcionar la sistematización de las experiencias llevadas a cabo como referente teórico político del fenómeno de implementación mismo.

Esto pasa por que nos dejen de ver como la masa necesaria para llenar auditorios y hacer bulto en la inauguración de eventos y que nos den la batuta y la beligerancia correspondiente que nos merecemos como poder popular, que más allá de una etiqueta académica y los correspondientes dos minutos intangibles frente al micrófono, pasa por superar las parálisis paradigmáticas de los directores y las instituciones que confían más en su pool de sesudos asesores de la UCV o Hardvard, que del militante con su franela raída de Softaware Libre.

Desarrollo de un equipo que pueda allanar los conocimientos técnicos necesarios para presentar soluciones reales de interoperatividad (a nivel de Web-Services, XML-RPC, JRPC) con la finalidad de presentar un documento que sirva para interconectar los datos del estado y sus entes y que los mismos sean de dominio publico.

Desarrollo de una plataforma nacional de encuentro y visualización del tejido social vinculado a las tecnologías libres, preferiblemente del tipo georeferencial, implementado y administrado desde la comunidad, con el soporte de la arquitectura tecnológica gubernamental.

Creación de charlas y Métodos que permitan el encuentro y la introducción de la filosofía de Software Libre a otras aristas del conocimiento humano, esto es permear el uso de las cuatro libertades a todas las actividades humanas como única forma de emancipación del saber popular y la masificación del mismo frente a la ideología de la monopoliocitación cognocitiva tan aupada desde la academia. Esto finalmente es vencer las condiciones de dominación arraigadas desde los procesos educativos y sus errados enfoques curriculares (errados frente a la patria nueva, muy eficientes desde la óptica de la división del saber y la dominación del hombre por el hombre), desde la filosofía del conocimiento libre y el compartir del mismo, claro está pasando por una etapa de análisis colectivo y reflexivo.

Penetración real del sistema educativo por parte de los cuadros tecno-politicos del movimiento desde la figura docente, que permita la creación de grupos de discusión y construcción crítica en el seno de un alma mater viciado de tecnicismo, separatismo, conductivismo positivista, llevando la semilla de la liberación y el uso de las herramientas necesarias para garantizar la sinergía y la creación de saldo orgánico, crítico y reflexivo que en ultima instancia genera la base documental necesaria como nuevo referente teórico, propio y real que nos lleve de la teoría de la dominación enquistada a la teoría de la participación popular.

[1] http://www.conatel.gob.ve/files/leyinfog.pdf

[2] https://redpatria.org.ve/conocimientolibre/images/2/24/Proyecto_Ley_de_Acceso_al_Conocimiento_Libre.pdf

[3] http://interoperabilidad.gobiernoenlinea.gob.ve/index.php/conceptos/sobre-promociones/promociones/96-ley-de-interoperabilidad

[4] https://es.wikipedia.org/wiki/Gobierno_abierto

[5] http://floksociety.org/

[6] https://decide.madrid.es/

[7] http://www.opengovpartnership.org/

Enlaces Complementarios y sugeridos:

https://www.youtube.com/watch?v=f-jMcz5gZHM Gobierno Abierto

https://www.youtube.com/user/FLOKSociety Floksociety Ecuador Canal

https://www.youtube.com/watch?v=-qvp7KplRQ Ponencia del Buen Vivir propuesta de FlokSociety

TRANSPARENCIA PARTICIPACIÓN y COLABORACIÓN (pero en ese orden ya que sin transparencia los subsiguientes no son posibles).

 

¿Cómo se come XML?

     En la actualidad, donde lo cotidiano son los Sistemas Operativos basados en Interfaz gráfica, es muy común utilizar sistemas que manejan representaciones del documento iguales a su resultado final conocidos como WYSIWYG (What you see is What you Get), pero siempre no fue así. Anteriormente los documentos se editaban con marcado de formato.

     El sistema de marcado de formato se basa en <<marcar>> el texto con instrucciones precisas que describen cada una de las condiciones que se desea aplicar a las partes del texto, tales como el tipo de letra y el estilo. A estas marcas se le denomina etiquetas (tags), códigos o marcas.

     Los lenguajes de marcas son muy antiguos, habiendo sido utilizados en la descripción de documentos a través de medios informáticos desde que se utilizan los sistemas de tratamiento de textos. A finales de los 70 IBM encargo a Charles F. Goldfarb que diseñara un sistema estándar para la gestión y edición de documentos, auxiliado por Ed Mosher y Ray Lorie, creó un lenguaje único de marcado, a este desarrollo se le denominó marcado generalizado, y se acuño el termino lenguaje de marcas. A este lenguaje se le bautizó como GML (General Markup Language), siglas que curiosamente coinciden con las iniciales de sus autores (Goldfarb, Mosher, Lorie).

     Hasta 1974 se continuo con el desarrollo de GML, más tarde entre 1978 y 1986 cambiaria según la norma ISO 8879 a SGML (Standard General Markup Language).

     Llegado el punto en que HTML dejo de servir para su función inicial (por motivos que exceden el contenido de este post), el consorcio World Wide Web (W3C), acomete el diseño de un nuevo sub conjunto del SGML que sirva para describir contenidos de documentos, al que sea denominado XML (Extensible Markup Language), publicando sus especificaciones de la versión 1.0 en el año 1998.

     En la actualidad HTML es una aplicación de XML especializada en la representación de documentos Web, mientras que XML es un subconjunto de SGML más fácil de tratar y especializado en al gestión de todo tipo de información para la Web.

     XML al igual que SGML es lo que se conoce como un metalenguaje, es decir un lenguaje de marcas capaz de generar otros lenguajes. Este motivo es el que lo hace ser el padre de XHTML, WML o VML.

    En fin es un metalenguaje de vital interés sobre todo por framewoks modernos para la realización de sockets de comunicación entre aplicaciones y webservices, lo que lo convierte en un estandard para la inteoperatividad entre aplicaciones, de allí su importancia. Un ejemplo de ello lo es OpenERP y Odoo quien utiliza archivos .xml para determinar las vistas de sus aplicativos. XML ha sido diseñado entonces para facilitar la implementación e interoperatividad entre SGML y HTML.

     Finalizando podemos entonces decir que XML es un lenguaje de marcas, basado en SGML, capaz de describir cualquier tipo de información en forma personalizada, aunque también es un metalenguaje de mercado capaz de describir lenguajes de marca adecuadas para aplicaciones concretas.

Navegador de artículos