Both sides previous revision
Poprzednia wersja
|
|
pl:miw:miw08_hml_rules:r2ml [2008/05/19 18:33] miw |
pl:miw:miw08_hml_rules:r2ml [2019/06/27 15:50] (aktualna) |
| **R2ML – Reverse Rule Markup Language** powstał z inicjatywy [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/|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 [[http://www.omg.org/technology/documents/formal/ocl.htm|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: |
| |
| * wartość logiczna: np: B |
| |
| <code xml> |
| <r2ml:GenericVariable r2ml:name="B"/> |
| </code> |
| |
| * stałe argumenty: np: 300 |
| |
| <code xml> |
| <r2ml:TypedLiteral r2ml:lexicalValue="300" r2ml:datatype="xs:integer"/> |
| </code> |
| |
| * suma: n+1 |
| |
| <code xml> |
| <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> |
| </code> |
| |
| * różnica: n-1 |
| |
| <code xml> |
| <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> |
| </code> |
| |
| * równość: (wyr_1) = (wartosc) |
| |
| <code xml> |
| <r2ml:EqualityAtomr2ml:isNegated="false"> |
| <r2ml:ObjectVariabler2ml:name="wyr_1"/> |
| <r2ml:ObjectVariabler2ml:name="wartosc"/> |
| </r2ml:EqualityAtom> |
| </code> |
| |
| * nierówność: n > 0 |
| |
| <code xml> |
| <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> |
| </code> |
| |
| * nierówność: n <= 1 |
| |
| <code xml> |
| <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> |
| </code> |
| |
| * suma logiczna : (wyr_1) and (wyr_2) |
| |
| <code xml> |
| <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> |
| </code> |
| |
| * warunek if : (conclusion) if (conditions) |
| |
| <code xml> |
| <r2ml:DerivationRule> |
| <r2ml:conditions> |
| (conditions) |
| </r2ml:conditions> |
| <r2ml:conclusion> |
| (conclusion) |
| </r2ml:conclusion> |
| </r2ml:DerivationRule> |
| </code> |
| |
| * funkcje: fun_name(B) |
| |
| <code xml> |
| <r2ml:GenericFunctionTermr2ml:genericFunctionID=" fun_name "> |
| <r2ml:arguments> |
| <r2ml:GenericVariabler2ml:name="B"/> |
| </r2ml:arguments> |
| </r2ml:FunctionTerm> |
| </code> |
| |
| 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: |
| |
| <code xml> |
| <?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> |
| </code> |
| |
| Inne przykłady przedstawienia reguł za pomocą R2ML można znaleźć na stronie: [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/17|Rule Examples]]. Ciekawym przykładem może być również całość [[https://ai.ia.agh.edu.pl/wiki/hekate:hekate_case_thermostat|hekate_case_thermostat]] zapisana w R2ML: [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_r2ml:thermostat|Therm in R2ML]] |
| |
| |
| [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_hml_rules|Powrót]] |
| |
| |
| ====== Materiały ====== |
| |
| ** Więcej na stronie domowej** http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/6 |
| |
| ** Szczególnie przydatne** http://www.w3.org/TR/xpath20/ |
| |
| ** Więcej przykładów** http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/49 |
| |
| ** Całość thermostat w R2ML** https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_r2ml:thermostat |
| |
| |