[pyar] Ayuda con lxml y expresión regular

Fernando Copa copa.fernando en gmail.com
Lun Abr 11 16:29:29 ART 2016


Hola Daniel gracias por tu respuesta.
En primer lugar, pido perdón por los nombre de archivos que quizás son
confusos.
En segundo lugar te explico cuál es mi objetivo.

El objetivo en sí es dado un "archivo.xml" y el "Esquema" (No el dtd en si)
poder comprobar que "archivo.xml" respeta el esquema. Es decir, yo tengo
dos archivos:

archivo.xml y esquema.xml (Me imagino que no tiene importancia la extensión
a .xsd)

Y quiero validar archivo.xml con el esquema.xml
Entonces buscando documetación de la librería lxml de Python, leí que
existía tal función. Y los pasos a seguir eran lo que publiqué
anteriormente. Los nombres que puse en el test como archivoDTD.xml en
realidad contiene adentro un Esquema, y no un DTD (por eso te decía sobre
los nombres confusos de los archivos, quedaron así porque estaba haciendo
muchos test para poder encontrar el error y me olvidé cambiarlos a nombres
más significativos)

El problema es que a mi me dan el Esquema.xml y alli dentro está la
expresión regular. Es decir, Esquema.xml contiene:
1 <?xml version="1.0" encoding="utf-8"?>
2 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
3 <xs:element name="SSN">
...
167 <xs:simpleType name="Precio">
168   <xs:restriction base="xs:string">
169       <xs:pattern value="^-{0,1}(?!\,?$)\d{0,12}(\,\d{0,2})?$"/>
170    </xs:restriction>
171 </xs:simpleType>
...

Y bueno, con ese esquema traté de entenderlo haciendo pruebas en ipython y
es allí donde me larga el error descrito en el email anterior.
Pensando un poco, pensé que existe un archivo DTD y "alguíen" lo pasó (con
alguna herramienta) a un archivo xml shema, y esa "herramienta" generó esa
expresión regular. Entonces pensé en hacer la inversa, pasar a un dtd (xml
schema -> xml dtd) y usar una herramienta de python para volver a pasarlo a
un xml schema válido para python. Pero creo que es mucho lío. Y aún
mantengo la fe que tiene alguna solución. Ya que estuve probando con la
librería "re" de python y con ese mismo pattern y no tira para nada de
error, trabaja perfectamente. Aparentemente los valores para ese pattern
son números de hasta 12 digitos enteros con dos decimales.
$: También tengo entendido que es el final de una expr. regular, pero "?$"
(juntos) no estoy seguro que hace y más si sumamos el escape de la coma
"\,?$" tampoco se qué hace.
Si supiera que hace esa expresión regular, trataría de escribirlo de otra
manera sin perder la semántica.

No sé que hacer, aún sigo buscando en la web más información.

Gracias por sus tiempos.

PD: El archivo DTD no me lo dan, me las tengo que arreglar con este esquema.

2016-04-11 7:50 GMT-03:00 Daniel <dmlistapython en gmail.com>:

> No soy precisamente un capo en expresiones regulares pero te paso lo que
> yo entiendo
>
>>
>>
>> Lo que entiendo de expresión regular es:
>> -{1,0}    # cero o un signo -      ->  uno (o menos) "-"  si fuera -{1,3}
>> (de uno hasta 3 "-")
>> (\?!\,?$)    # tengo duda lo que hace -> literalmente "?!?" el $ es fín
>> de cadena así que me parece que ese sería un problema
>> \d{0,12}    # cero dígitos hasta 12 dígitos
>> (\,\d{0,2})?    # entiendo que es opcional pero \, no sé lo que quiere
>> decir. -> la \ se utiliza para escapar, es decir si vos necesitas que te
>> reconozca el ? en una cadena debes poner \? (de hecho esto lo usas en el
>> segundo grupo)
>>
>
> ¿de dónde sacaste la expresión regular?
> tal vez seria bueno que pases algunos string y que aclares que necesitás
> caputurar.
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>



-- 
*Fernando Copa*

/*
 ** San Salvador de Jujuy - Jujuy*
 */
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20160411/8fad5c68/attachment.html>


Más información sobre la lista de distribución pyar