This articlerelies excessively onreferences toprimary sources. Please improve this article by addingsecondary or tertiary sources. Find sources: "Rule Interchange Format" – news ·newspapers ·books ·scholar ·JSTOR(February 2014) (Learn how and when to remove this message) |
TheRule Interchange Format (RIF) is aW3C Recommendation. RIF is part of the infrastructure for thesemantic web, along with (principally)SPARQL,RDF andOWL. Although originally envisioned by many as a "rules layer" for the semantic web, in reality the design of RIF is based on the observation that there are many "rules languages" in existence, and what is needed is to exchange rules between them.[1]
RIF includes three dialects, a Core dialect which is extended into a Basic Logic Dialect (BLD) and Production Rule Dialect (PRD).[2]
The RIF working group was chartered in late 2005. Among its goals was drawing in members of the commercial rules marketplace. The working group started with more than 50 members and two chairs drawn from industry, Christian de Sainte Marie ofILOG, andChris Welty ofIBM. The charter, to develop an interchange formatbetween existing rule systems was influenced by a workshop in the spring of 2005 in which it was clear that one rule language would not serve the needs of all interested parties (Dr. Welty described the outcome of the workshop asNash Equilibrium[3]).
RIF became aW3C Recommendation on June 22, 2010.[4]
Arule is perhaps one of the simplest notions in computer science: it is an IF - THEN construct. If some condition (the IF part) that is checkable in some dataset holds, then the conclusion (the THEN part) is processed. Deriving somewhat from its roots inlogic, rule systems use a notion of predicates that hold or not of some data object or objects. For example, the fact that two people are married might be represented with predicates as:
MARRIED(LISA,JOHN)
MARRIED is a predicate that can be said tohold betweenLISA andJOHN. Adding the notion of variables, a rule could be something like:
IFMARRIED(?x, ?y) THENLOVES(?x, ?y)
We would expect that for every pair of ?x and ?y (e.g.LISA andJOHN) for which theMARRIED predicate holds, some computer system that could understand this rule would conclude that theLOVES predicate holds for that pair as well.
Rules are a simple way of encoding knowledge, and are a drastic simplification offirst order logic, for which it is relatively easy to implement inference engines that can process the conditions and draw the right conclusions. Arule system is an implementation of a particularsyntax andsemantics of rules, which may extend the simple notion described above to includeexistential quantification,disjunction,logical conjunction,negation,functions,non monotonicity, and many other features. Rule systems have been implemented and studied since the mid-1970s and saw significant uptake in the 1980s during the height of so-calledExpert Systems.
The standard RIF dialects are Core, BLD and PRD. These dialects depend on an extensive list of datatypes with builtin functions and predicates on those datatypes.
Relations of various RIF dialects are shown in the following Venn diagram.[5]
Datatypes and Built-Ins (DTB) specifies a list of datatypes, built-in functions and built-in predicates expected to be supported by RIF dialects. Some of the datatypes are adapted fromXML Schema Datatypes,[6]XPath functions[7] and rdf:PlainLiteral functions.[8]
The Core dialect comprises a common subset of most rule dialect. RIF-Core is a subset of both RIF-BLD and RIF-PRD.
Framework for Logic Dialects (FLD) describes mechanisms for specifying the syntax and semantics of logic RIF dialects, including the RIF-BLD and RIF-Core, but not RIF-PRD which is not a logic-based RIF dialect.
The Basic Logic Dialect (BLD) adds features to the Core dialect that are not directly available such as: logic functions, equality in the then-part andnamed arguments. RIF BLD corresponds to positive datalogs, that is, logic programs without functions or negations.
RIF-BLD has amodel-theoretic semantics.
Theframe syntax of RIF BLD is based onF-logic, but RIF BLD doesn't have thenon-monotonic reasoning features of F-logic.[9]
The Production Rules Dialect (PRD) can be used to modelproduction rules. Features that are notably in PRD but not BLD include negation and retraction of facts (thus, PRD is not monotonic). PRD rules are order dependent, hence conflict resolution strategies are needed when multiple rules can be fired. The PRD specification defines one such resolution strategy based onforward chaining reasoning.
RIF-PRD has anoperational semantics, whereas the condition formulas also have a model-theoretic semantics.
Example (Example 1.2 in[10])
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"]) ) )
Several other RIF dialects exist. None of them are officially endorsed by W3C and they are not part of the RIF specification.
The Core Answer Set Programming Dialect (CASPD)[11] is based onanswer set programming, that is, declarative logic programming based on the answer set semantics (stable model semantics).
Example:
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] ) ) )
The Uncertainty Rule Dialect (URD)[12] supports a direct representation of uncertain knowledge.
Example:
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) ) )
RIF-SILK[13] can be used to modeldefault logic. It is based on declarative logic programming with thewell-founded semantics. RIF-SILK also includes a number of other features present in more sophisticated declarative logic programming languages such as SILK.[14]
Example
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) }}