Rule Interchange Format

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir RIF.

Le Rule Interchange Format (RIF ) est une recommandation du W3C. RIF fait partie de la feuille de route du web sémantique, avec principalement SPARQL, RDF et OWL. Bien que prévu initialement par beaucoup comme une "couche de règles logiques" pour le web sémantique, en réalité, la conception du RIF est basée sur l'observation qu'il existe de nombreux "langages de règles" et qu'il est nécessaire de s'échanger des règles entre eux[1].

RIF comprend trois dialectes, un dialecte de base (Core dialect), un dialecte logique de base (BLD pour Basic Logic Dialect) et le dialecte de la règle de production (PRD pour Production Rule Dialect)[2].

Historique[modifier | modifier le code]

RIF est devenu une recommandation du W3C le 22 juin 2010[3].

Règles et Systèmes de règles[modifier | modifier le code]

Une règle est peut-être l'une des plus simples notions en informatique : c'est une construction SI (IF) - ALORS(THEN). Si certaines conditions (dans la partie SI) sont vérifiables avec certaines données, alors la conclusion (la partie ALORS) est traitée. Issu de la logique, les systèmes de règle utilisent la notion de prédicats qui permet l'inférence ou non de données ou d'objets. Par exemple, le fait que deux personnes soient mariées, peut être représenté avec des prédicats comme MARIÉ(LISA, JOHN). MARIÉ est un prédicat qui offre une inférence entre LISA et JOHN. En ajoutant la notion de variables, une règle pourrait ressembler à :

SI MARIÉ(?x, ?y) ALORS AIME(?x, ?y)

Ainsi pour chaque paire de ?x et ?y (par exemple, LISAet JOHN) où le prédicat MARIÉ est appliqué, un système informatique pourra déduire avec cette règle que le prédicat AIME s'applique à la paire ?x et ?y.

Les règles sont un moyen simple de savoir représenter une connaissance, et sont une simplification radicale de logique du premier ordre pour lequel il est relativement facile à mettre en œuvre des moteurs d'inférence qui peuvent traiter les conditions et déduire de bonnes conclusions. Un système de règles est une implémentation particulière d'une syntaxe et d'une sémantique de règles, qui peuvent s'étendre de la simple notion décrit ci-dessus afin d'inclure :

Les systèmes de règles ont été appliqués et étudiés depuis le milieu des années 1970 et ont largement adoptés dans les années 1980 lors de l'apparition des systèmes expert.

Dialectes standard RIF[modifier | modifier le code]

DTB[modifier | modifier le code]

Core[modifier | modifier le code]

FLD[modifier | modifier le code]

BLD[modifier | modifier le code]

PRD[modifier | modifier le code]

Exemple (Example 1.2 in [4])

Prefix(ex <http://example.com/2008/prd1#>)
(* ex:rule_1 *)
Forall ?customer ?purchasesYTD (
 If   And( ?customer#ex:Customer
           ?customer[ex:purchasesYTD->?purchasesYTD]
           External(pred:numeric-greater-than(?purchasesYTD 5000)) )
 Then Do( Modify(?customer[ex:status->"Gold"]) ) )

Non-standard RIF Dialects[modifier | modifier le code]

CASPD[modifier | modifier le code]

Exemple :

Document(
      Prefix(ex <http://example.com/concepts#>)

      Group (
          Forall ?S (
              ex:afraid(?S ex:Math) :- And ( ?S#ex:Student (Naf Neg ex:afraid(?S ex:Math)) )
          )
      
          Forall ?S (
              Neg ex:afraid(?S ex:Math) :- And ( ?S#ex:Student ?S[ex:majors -> ex:Math] )
          )
      )

URD[modifier | modifier le code]

Exemple :

Document( 
  Import (<http://example.org/fuzzy/membershipfunction >) 
  Group 
  ( 
    Forall ?x ?y( 
        cheapFlight(?x ?y) :- affordableFlight(?x ?y) 
    )  / 0.4 
    Forall ?x ?y(affordableFlight(?x ?y))  / left_shoulder0k4k1k3k(?y) 
  )    ) 

SILK[modifier | modifier le code]

Exemple

Document {
      Prefix(foaf http://xmlns.com/foaf/0.1/)
      Prefix(pub http://example.org/pub#)
      Prefix(silk http://TBD/silk#)
      Group {
        (* r1 *) Forall ?a1 ?a2 ?paper 
                 (?a1[foaf:knows->?a2] 
                  :- ?paper # pub:Publication[pub:author->?a1,
                                          pub:author->?a2}])
        (* r2 *) Forall ?a1 ?a2
                 (neg ?a1[foaf:knows->?a2] 
                  :- ?a1[hasNeverMet->?a2])
        silk:overrides(r2, r1)
      }
}

Références[modifier | modifier le code]

Liens externes[modifier | modifier le code]