Pregunta

Trabajamos con los mensajes que están basados ??en texto (sin XML). Nuestro objetivo es validar los mensajes, un mensaje es válido si el contenido es correcto. Hemos desarrollado nuestro propio idioma definido en XML para expresar reglas sobre el mensaje. Tenemos que añadir reglas más complejas y creemos que ahora es el momento de mirar a otra alternativa y usar motor de reglas real. Apoyamos estos tipos de reglas:

  • nombre en una lista de valores o un habitual la expresión ex {SMITH, Moore, A *}
  • nombre está presente en el mensaje -
  • nombre no está presente en el mensaje
  • si la condición continuación name = nombre de John demás = Jane Nota que la condición es simple y no contiene ningún operadores lógicos.

Tenemos que apoyar estos tipos de reglas:

  • Si, pues, más que la condición contiene operadores lógicos
  • para ... bucle:
    • Para todos los clientes en el mensaje que queremos al menos uno de los EE.UU. y al menos uno de Francia
    • Para todos los clientes en el mensaje que queremos por lo menos cinco que son de los EE.UU. y están comprando más de $ 1000 por año
    • Para cualquier cliente con el nombre de Juan, el último nombre debe ser Doe
  • El total de clientes con nombre de John <15
  • El nombre de la empresa es igual al nombre de la empresa en otra ubicación en el mensaje

Las reglas dependerá del tipo de mensajes que procesamos. Así que estábamos investigando varias soluciones existentes como:

  • JESS
  • OWL (comprobación de coherencia)
  • Schematron (transformando el mensaje en XML)

¿Cuáles serían las mejores alternativas teniendo en cuenta que desarrollamos en Java? Otra cosa a tener en cuenta es que debemos ser capaces de hacer los informes de errores como la descripción del error, la ubicación de error (línea y columna).

¿Fue útil?

Solución

Me suena como si estuviera en el camino correcto ya; mis sugerencias son:

  1. Revise sus mensajes de texto directamente con un analizador / intérprete y aplicar reglas sobre los objetos generados. @Kdeveloper ha sugerido JavaCC para la generación de analizador / intérpretes, y puedo añadir a esto que dé fe personalmente por < a href = "http://www.antlr.org/1.1." rel = "nofollow"> ANTLRv3 que es un medio excelente para la generación de analizador / intérprete / transformadores en Java (entre otros idiomas). A partir de ahí, se puede usar Jess Java o algún otro motor de reglas para validar los objetos que generan. Usted podría también tratar de codificar sus reglas en un analizador / intérprete directamente, pero te aconsejo contra esta y en su lugar optar por la separación de las reglas a cabo para mantener el análisis sintáctico y semántico separar las etapas de validación.
  2. La transformación de los mensajes basados ??en texto a XML para aplicar Schematron también es otra opción viable, pero usted obviamente tendrá que analizar los mensajes de texto para ponerlos en XML de todos modos. Por esto, yo todavía sugiero mirar JavaCC o ANTLRv3, y quizás llenar un pre-determinado modelo de objetos que se pueden calcular las referencias a XML (tal como la que puede ser generada por o href="http://www.oracle.com/technetwork/articles/javase/index-140168.html" rel="nofollow"> JAXB de una W3C del esquema XML ). A partir de ahí, se puede aplicar Schematron sobre el XML resultante.
  3. Yo diría que la transformación de OWL la opción más delicada de sus sugerencias, pero podría ser el más poderoso. Para empezar, es probable que desee un ontología terminología (TBox) (las clases, propiedades, etc). para mapear su datos de instancia (ABox) en. A partir de ahí, la comprobación de coherencia sólo va a llegar tan lejos; muchos de los tipos de restricciones que he descrito como querer capturar simplemente no puede ser representado en OWL y validado utilizando un DL-razonador solo. Sin embargo, si su pareja OWL ontología con SWRL reglas (por ejemplo), usted tiene la oportunidad de capturar la mayor parte de los tipos de reglas que ha contorneado. Vistazo a los tipos de reglas y muebles empotrados disponibles en SWRL para ver si esto es expresivo suficiente para ti. Si es así, se puede emplear el uso de DL-razonadores con SWRL de apoyo como de pellets o ermitaño . Nota que las implementaciones individuales de razonadores OWL / SWRL tales como éstos pueden implementar más o menos de la W3C especificación , por lo que necesita para inspeccionar cada uno para determinar su aplicabilidad.

Otros consejos

Si eres reglas son estáticas (es decir, conoce en tiempo de compilación) se podría hacer esto con generador de análisis de Java conocida: JavaCC .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top