attakatara

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

Archivo para la etiqueta “python”

Xpath (módulo python)

Xpath es un módulo que es parte de la librería xml.etree.ElementTree por lo general la misma se importa de la siguiente manera:

 import xml.etree.ElementTree as ET 

Xpath provee una serie de expresiones para localizar elementos en un árbol, su finalidad es proporcionar un conjunto de sintaxis, por lo que debido a su limitado alcance no se considera un motor en si mismo.

Ejemplos de uso de Xpath:

 
import xml.etree.ElementTree as ET

root = ET.fromstring(docxml)

# Elementos de nivel superior
root.findall(".")

# todos los hijos de neighbor o nietos de country en el nivel superior
root.findall("./country/neighbor")

# Nodos xml con name='Singapore' que sean hijos de 'year'
root.findall(".//year/..[@name='Singapore']")

# nodos 'year' que son hijos de etiquetas xml cuyo name='Singapore'
root.findall(".//*[@name='Singapore']/year")

# todos los nodos 'neighbor'que son el segundo hijo de su padre
root.findall(".//neighbor[2]") 

Como vemos nos permite extraer facilmente partes del xml haciendo referencia a su ubicación nodal representada a forma de path, lo que nos hace una sintaxis familiarmente sencilla a la hora de construir un paser xml.

Xpath Sintaxis:

SINTAXIS Descripción
tag Selecciona todos los elementos hijos contenidos en la etiqueta “tag”, Por ejemplo: spam, selecciona todos los elementos hijos de la etiqueta spam y así sucesivamente en un path de nodos spam/egg, /spam/egg/milk
* Selecciona todos los elementos hijos. Ejemplo: */egg, seleccionara todos los elementos nietos bajo la etiqueta egg
. Selecciona el nodo actual, este es muy usado en el inicio del path, para indicar que es un path relativo.
// Selecciona todos los sub elementos de todos los niveles bajo el nodo expresado. Por ejemplo: .//egg selecciona todos los elementos bajo egg a través de todo el arbol bajo la etiqueta
.. Selecciona el elemento padre
[@attrib] Selecciona todos los elementos que contienen el atributo tras el “@”
[@attrib=’value’] Seleccione todos los elementos para los cuales el atributo dado tenga un valor dado, el valor no puede contener comillas
[tag] Selecciona todos los elementos que contienen una etiqueta hijo llamada tag. Solo los hijos inmediatos son admitidos
[tag=’text’] Selecciona todos los elementos que tienen una etiqueta hijo llamada tag incluyendo descendientes que sean igual al texto dado
[position] Selecciona todos los elementos que se encuentran en la posición dada. La posición puede contener un entero siendo 1 la primera posición, la expresión last( ) para la ultima, o la posición relativa con respecto a la ultima posición last( )-1

notas: las expresiones entre corchetes deben ser precedidas por un nombre de etiquta, un astertisco u otro comodín. Las referencias a position deben ser precedidas por una etiqueta xml válida.

Ejemplo de uso de Xpath dentro de una sentencia xml:

 
<xpath expr="//field[@name]='is_done'" position="before">
    <field name="date_deadline" />
</xpath>

 

Enlaces consultados:

  1. referencia oficial de python sobre XPath 
  2. Documentación Odoo en español de Bachaco-VE, cápitulo 3

 

 

 

 

BPMN (modelado de procesos de negocios)

Es una notación gráfica estandarizada que permite describir procesos que se traducen de un flujo de trabajo (Workflow) [1],  y apartir de los mismos planificar estratégias que van desde la planificación hasta la programación de códigos informáticos.

Bpmn fue en principio desarrollado por la organización Business Process Management Initiative (BPMI), y es actualmente mantenida por el Object Management Group (OMG) [2], después de la fusión de las dos organizaciones en el año 2005.

Su proposito es propocionar una notación estandar para que todos los involucrados en el proyecto, haciendo un simil podriamos decir que se asemeja a UML en forma y finalidad. En su forma se maneja a través de diagramas simples con un conjunto muy reducido de elementos gráficos y cuatro categorías básicas de elementos (lo que en UML manejamos como librerías):

  1. Objetos de Flujo: Eventos, Actividades, Rombos de control de flujo (gateways)
  2. Objetos de Conexión: Flujo de Secuencia, Flujo de Mensaje, Asociación
  3. Carriles de nado (swimlanes): Piscina, Carril
  4. Artefactos: Objetos de Datos, Grupo, Anotación.
ObjetosBpmn

Objetos de flujo

 

Carriles de nado

Carriles de nado

 

En el sitio de Bpmn [3], podemos acceder a una guia de ejemplos en formatos libres que nos puede dar una idea de que va el estandar.

Para quienes hemos trabajado con UML sin duda algunas el editor de diagramas DIA [4], es una solución de software libre que nos permite acceder a una librería con todos los componentes del estandar, pues sera grato saber que BPMN no le es extraño a nuestro editor favorito (y en python 😀 [5]):

BPMN en el editor de diagramas DIA

BPMN en el editor de diagramas DIA

Blokdiag [6], es otra herramienta que esta basada en python y nos puede ayudara a realizar diagramas BPMN de manera sencilla y eficaz.

Un diagrama BPMN completo tendrá un aspecto aproximado al siguiente:

BPMN-DiscussionCycle

Para todos los que quieran profundizar sobre el tema les recomendamos la siguiente guía en español: BPMN 2.0 Manual de referencia y guía Práctica. 

BpmnGuia

 

 

[1] https://es.wikipedia.org/wiki/Flujo_de_trabajo

[2] http://www.bpmn.org

[3] http://www.omg.org/cgi-bin/doc?dtc/10-06-02

[4] https://wiki.gnome.org/Apps/Dia

[5] https://www.python.org

[6] https://pypi.python.org/pypi/blockdiag/

 

 

Navegador de artículos