Question

Nous travaillons avec des messages qui sont à base de texte (pas XML). Notre objectif est de valider les messages, un message est valide si le contenu est correct. Nous avons développé notre propre langue définie en XML pour exprimer des règles sur le message. Nous devons ajouter des règles plus complexes et nous pensons qu'il est maintenant temps de regarder d'autres alternatives et utiliser le moteur réel des règles. Nous soutenons ces types de règles:

    nom
  • dans une liste de valeurs ou régulière expression ex {SMITH, MOORE, A *}
  • nom est présent dans le message -
  • nom ne figure pas dans le message
  • si la condition puis nommez = John nom = autre Jane Notez que la condition est simple et ne contient pas d'opérateurs logiques.

Nous devons soutenir ces types de règles:

  • si alors d'autre que la condition contient des opérateurs logiques
  • pour ... boucle:
    • Pour tous les clients dans le message que nous voulons au moins un des Etats-Unis et au moins un de la France
    • Pour tous les clients dans le message que nous voulons au moins cinq qui sont des États-Unis et achètent plus de 1000 $ par année
    • Pour tout client avec le nom John, le dernier nom doit être Doe
  • clients au total avec le nom John <15
  • Le nom de la société est égal au nom de la société à un autre endroit dans le message

Les règles dépendra du type de messages que nous traitons. Nous avons donc étudiions plusieurs solutions existantes comme:

  • JESS
  • OWL (vérification de cohérence)
  • Schematron (en transformant le message en XML)

Quelles seraient les meilleures alternatives étant donné que nous développons en Java? Une autre chose à considérer est que nous devrions être en mesure de faire des rapports d'erreur comme la description d'erreur, l'emplacement d'erreur (ligne et numéro de colonne).

Était-ce utile?

La solution

Il me semble que vous êtes sur la bonne voie déjà; mes suggestions sont:

  1. Vérifiez vos messages textes directement avec un analyseur / interprète et appliquer les règles sur les objets générés. @Kdeveloper a suggéré JavaCC pour générer parser / interprètes, et je peux ajouter à cela en se portant garant personnellement < a href = "http://www.antlr.org/1.1." rel = « nofollow »> ANTLRv3 qui est un excellent environnement pour générer l'analyseur / interprète / transformateurs en Java (entre autres langues). A partir de là, vous pouvez utiliser Jess ou un autre moteur de règles Java pour valider les objets que vous générez. Vous pourriez également essayer coder vos règles dans un analyseur / interprète directement, mais je vous conseille contre cela et au lieu d'opter pour la séparation des règles à garder l'analyse syntaxique et les étapes de validation sémantique séparée.
  2. Transformer vos messages textes au format XML pour appliquer Schematron est également une autre option viable, mais vous aurez évidemment besoin d'analyser vos messages textes pour les en XML de toute façon. Pour cela, je vous suggère de toujours regarder JavaCC ou ANTLRv3, et peut-être peuplant un modèle d'objet prédéterminé qui peut être au format XML marshalée (comme celle qui peut être généré par Castor ou JAXB à partir d'un W3C XML Schema ). A partir de là, vous pouvez appliquer Schematron sur le XML résultant.
  3. Je dirais que transformante OWL l'option de vos suggestions plus délicate, mais pourrait être le plus puissant. Pour commencer, vous aurez probablement besoin d'un ontologie terminologie (TBox) (les classes, propriétés, etc). à la carte dans. A partir de là, la vérification de la cohérence ne pouvez obtenir jusqu'à présent; la plupart des types de contraintes que vous avez décrites comme vouloir capturer simplement ne peut pas être représenté dans OWL et validé en utilisant un DL-raisonneur seul. Toutefois, si vous couplez votre ontologie OWL avec SWRL règles (par exemple), vous avez une chance de capturer la plupart des types de règles que vous avez décrit. Regardez les types de règles et built-ins disponibles dans SWRL pour voir si cela est assez expressif pour vous. Dans ce cas, vous pouvez employer l'utilisation de DL-raisonneurs avec SWRL support tel que ou pellets ermite. Notez que les implémentations individuelles de raisonneurs OWL / SWRL tels que ceux-ci peuvent mettre en œuvre plus ou moins spécification W3C , vous aurez donc besoin d'inspecter chacun pour déterminer leur applicabilité.

Autres conseils

Si vous règles sont statiques (par exemple connu au moment de la compilation), vous pouvez faire cela avec générateur d'analyseur Java bien connu: JavaCC .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top