1. RIF(Rule Interchange Format) jest stworzonym przez W3C (Word Wide Web Consorcium) formatem reguł pozwalających na ich wymianę dla różnych języków reguł w sieciach semantycznych (RDF, OWL). Format RIF jest ciągle w fazie rozwoju, jedyne dostępne dokumenty są to szkice specyfikacji poszczególnych modułów (Working Draft). Do rozwijanych dokumentów należą m.in. RIF Framework for Logic Dialects oraz RIF Basic Logic Dialect
Atrybuty w RIF + RDF oraz OWL Kompatybilność
Dokładny opis specyfikacji RIF można znaleźć w projekcie XTT_RIF. Dla mnie istotna, z punktu widzenia projektu, jest wiedza jak zapisywać typowe dla reguł elementy tj:
<Var> B </Var>
<arg><Const type="rds:long"> 300 </Const></arg>
<Uniterm>
<op><Const type="rif:iri"> op:numeric-add </Const></op>
<arg><Const type=""> 1 </Const></arg>
<arg><Var> n </Var></arg>
</Uniterm>
<Uniterm>
<op><Const type="rif:iri"> op:numeric-subtract </Const></op>
<arg><Const type=""> 1 </Const></arg>
<arg><Var> n </Var></arg>
</Uniterm>
<Equal>
<arg> wyr_1 </arg>
<arg> wartosc </arg>
</Equal>
<Uniterm>
<op><Const type="rif:iri"> op:numeric-greater-than </Const></op>
<arg><Var> n </Var></arg>
<arg><Const type="xsd:decimal"> 0 </Const></arg>
</Uniterm>
<Uniterm>
<op><Const type="rif:iri"> op:numeric-less-or-equal-than </Const></op>
<arg><Var> n </Var></arg>
<arg><Const type="xsd:decimal"> 0 </Const></arg>
</Uniterm>
<And>
<formula>
(wyr_1)
</formula>
<formula>
(wyr_2)
</formula>
</And>
<Implies>
<if>
(conditions)
</if>
<then>
(conclusion)
</then>
</Implies>
Teraz, na podstawie powyższej wiedzy, możemy spróbować zapisać nasz przykład (Jeżeli dzień=poniedziałek wtedy temp=20st) za pomocą RIF:
<?xml version="1.0" encoding="UTF-8"?>
<Ruleset>
<rule>
<declare><Var> day </Var></declare>
<formula>
<Implies>
<if>
<formula>
<Equal>
<arg><Var> day </Var></arg>
<arg><Const type="xsd:string">Monday</Const></arg>
</Equal>
</formula>
</if>
<then>
<Uniterm>
<op><Const type="rif:local">temp</Const></op>
<arg><Const type="rds:positiveInteger">20</Const></arg>
</Uniterm>
</then>
</Implies>
</formula>
</rule>
</Ruleset>
W analogiczny sposób możemy zapisać większość reguł. Przykładem może być tu całość HeKatE Case Thermostat którego reguły przedstawione w RIF wyglądają nastepująco: therm in RIF.
2. R2ML – Reverse Rule Markup Language powstał z inicjatywy REWERSE Working Group I1, w celu ułatwienia wymiany reguł między różnymi systemami oraz narzędziami, wzbogacenia ontologii o reguły oraz możliwości łączenia systemów regułowych z narzedziami R2ML do wizualizacji, weryfikacji, walidacji oraz werbalizacji. R2ML wspiera Integrity Rules, Derivation Rules, Production Rules oraz Reaction Rules. R2ML integruje Object Constraint Language (OCL), Semantic Web Rule Language (SWRL) oraz Rule Markup Language (RuleML).
Nie musimy być zaznajomieni ze wszystkimi elementami języka R2ML w celu wykorzystania jej wydajnością. Aby można było użyć R2ML’a do przedstawiania reguł potrzebna jest wiedza jak zapisywać typowe dla nich elementy. Poniżej przedstawiam kilka takich elementów zapisanych w R2ML ver.0.4:
<r2ml:GenericVariable r2ml:name="B"/>
<r2ml:TypedLiteral r2ml:lexicalValue="300" r2ml:datatype="xs:integer"/>
<r2ml:DatatypeFunctionTerm r2ml:datatypeFunction="op:numeric-add">
<r2ml:dataArguments>
<r2ml:GenericVariable r2ml:name="n"/>
<r2ml:TypedLiteral r2ml:lexicalValue="1" r2ml:datatype="xs:integer"/>
</r2ml:dataArguments>
</r2ml:DatatypeFunctionTerm>
<r2ml:DatatypeFunctionTerm r2ml:datatypeFunction="op:numeric-subtract">
<r2ml:dataArguments>
<r2ml:GenericVariable r2ml:name="n"/>
<r2ml:TypedLiteral r2ml:lexicalValue="1" r2ml:datatype="xs:integer"/>
</r2ml:dataArguments>
</r2ml:DatatypeFunctionTerm>
<r2ml:EqualityAtomr2ml:isNegated="false">
<r2ml:ObjectVariabler2ml:name="wyr_1"/>
<r2ml:ObjectVariabler2ml:name="wartosc"/>
</r2ml:EqualityAtom>
<r2ml:DatatypePredicateAtomr2ml:datatypePredicateID="swrlb:greaterThan">
<r2ml:dataArguments>
<r2ml:GenericVariable r2ml:name="n"/>
<r2ml:TypedLiteral r2ml:lexicalValue="1" r2ml:datatype="xs:integer"/>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
<r2ml:DatatypePredicateAtomr2ml:datatypePredicateID="swrlb: lessThanOrEqual ">
<r2ml:dataArguments>
<r2ml:GenericVariable r2ml:name="n"/>
<r2ml:TypedLiteral r2ml:lexicalValue="1" r2ml:datatype="xs:integer"/>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
<r2ml:GenericAtom r2ml:isNegated="false" r2ml:predicateID="wyr_1">
<r2ml:arguments>
</r2ml:arguments>
</r2ml:GenericAtom>
<r2ml:GenericAtom r2ml:isNegated="false" r2ml:predicateID="wyr_2">
<r2ml:arguments>
</r2ml:arguments>
</r2ml:GenericAtom>
<r2ml:DerivationRule>
<r2ml:conditions>
(conditions)
</r2ml:conditions>
<r2ml:conclusion>
(conclusion)
</r2ml:conclusion>
</r2ml:DerivationRule>
<r2ml:GenericFunctionTermr2ml:genericFunctionID=" fun_name ">
<r2ml:arguments>
<r2ml:GenericVariabler2ml:name="B"/>
</r2ml:arguments>
</r2ml:FunctionTerm>
Teraz możemy spróbować zapisać nasz przykład (Jeżeli dzień=poniedziałek wtedy temp=20st) za pomocą R2ML.
Przedstawmy go w postaci:
temp = 20 if day = monday
wówczas zapis w R2ML wyglada następująco:
<?xml version="1.0" encoding="UTF-8" ?>
<r2ml:RuleBase xmlns:r2ml="http://www.rewerse.net/I1/2006/R2ML"
xmlns:r2mlv="http://www.rewerse.net/I1/2006/R2ML/R2MLV"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:userv="http://www.businessrulesforum.com/2005/userv#"
xmlns:swrlb="http://www.w3.org/2003/11/swrlb"
xsi:schemaLocation="http://oxygen.informatik.tu-cottbus.de/R2ML/0.5/R2ML.xsd">
<r2ml:DerivationRuleSet>
<r2ml:DerivationRule r2ml:ruleID="Rule" xmlns:swrlb="http://www.w3.org/2003/11/swrlb" xmlns:srv="http://www.services.org/EU-Rent/">
<r2ml:Documentation>
<r2ml:RuleText r2ml:textFormat="plain" r2ml:ruleDiagram="examples:DR_scheduledService.gif">
If day is a monday then temp is equal to 20 degrees.
</r2ml:RuleText>
</r2ml:Documentation>
<r2ml:conditions>
<r2ml:ObjectClassificationAtom r2ml:classID="monday">
<r2ml:ObjectVariable r2ml:name="day"/>
</r2ml:ObjectClassificationAtom>
</r2ml:conditions>
<r2ml:conclusion>
<r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:equal">
<r2ml:dataArguments>
<r2ml:ObjectVariable r2ml:name="temp"/>
<r2ml:TypedLiteral r2ml:lexicalValue="20" r2ml:datatypeID="xs:positiveInteger"/>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
</r2ml:conclusion>
</r2ml:DerivationRule>
</r2ml:DerivationRuleSet>
</r2ml:RuleBase>
Inne przykłady przedstawienia reguł za pomocą R2ML można znaleźć na stronie: Rule Examples. Ciekawym przykładem może być również całość hekate_case_thermostat zapisana w R2ML: Therm in R2ML