To jest stara wersja strony!
UML_URML
Piotr Przybycin pit4@o2.pl
Design rbs examples with URML.
Spotkania
080415
-
opis instalacji strelki, w tym ew. błędy, niedoróbki, usterki
opis uwag, co do projektowania Therm w strelce: * czy w urml da się zrealizować całość przykładu?
czy sa jakieś ograniczenia urml co do składni, semantyki?
czy sa jakieś mechanizmy ułatwiające potem integrację z większą aplikacją w Javie, w której nasz therm byłby systemem decyzyjnym, a w Javie np. klasy wizualizujące decyzję
Jak jest realizowana integracja w drools?
080527
Projekt
Wstęp
URML jest językiem opartym na diagramie klas języka UML. Został stworzony aby ułatwić tworzenie dokumentacji wymagań systemów w sposób mniej techniczny, a bardziej wizualny.
Podstawowym jego rozszerzeniem w stosunku do diagramu klas języka UML, jest możliwość modelowania reguł ( derivation rules, production rules and reaction rules ). Reguły są reprezentowane graficznie jako kółka z identyfikatorami, natomiast zależności w postaci strzałek reprezentujących:
warunki, wyzwalacze, akcje, czy wnioski.
Narzędziem, które umożliwia modelowanie systemów w języku URML jest Strelka, stworzona przez REWERSE Working Group I1.
Instalacja programu Strelka
Będziemy korzystać z programu Strelka w wersji 0.3 dla platformy Eclipse.
Aby w pelni korzystac z możliwości programu wystarczy pobrać plik download_Strelka, rozpakować go do dowolnego folderu i uruchomić plik „eclipse.exe”.
Żadne dodatkowe instalacje nie są potrzebne. Po uruchuchomieniu możemy otworzyć również pewne gotowe przykłady, z katalogu ./examples.
W razie jakichkolwiek wątpliwości odsyłam do: REWERSEworking.groupI1-Strelka
Przykład
Spróbujemy teraz zamodelować w URML-u jakiś przykład.
Naszym przykładem będzie hekate_case_thermostat.
Model wykonany przy użyciu programu Stralka.
Projektowanie naszego układu przebiegło bez większych problemów. Środowisko okazało się bardzo intuicyjne i pozwoliło zaprojektować całość układu bez zbędnych modyfikacji.
Nie zaobserwowałem również żadnych ograniczeń co do składni czy semantyki. Integracja w derivation rules realizowana jest przy użyciu logicznego AND, czyli wszystkie warunki muszą mieć wartość
true. Jeśli chcemy aby reguła dawała wartość true na wyjściu dla wartości false warunku; musimy wtedy zanegować wartość tego warunku.
Znalazłem także narzędzia ułatwiające integrację naszego modelu, ze środowiskami takimi jak:
Jena 2, Jess, F-Logic. Aby wygenerować kod danej reguły dla danego środowiska wystarczy kliknąć na nią prawym przyciskiem myszy, a następnie wybrać „Translate to…” oraz interesujące nas środowisko.
Szczególnie interesująca jest integracja z platformą Jess. Jess jest środowiskiem w pełni stworzonym w języku Java firmy Sun. Przy jego pomocy mamy możliwość tworzenia programów w Javie, które będą potrafiły
wnioskować na podstawie wiedzy dostarczonej w formie reguł. Jess jest językiem, który daje dostęp do wszystkich API Javy.
Przykładowy kod po translacji do Jess dla reguły DR_bizh:
<?xml version="1.0" encoding="UTF-8"?>
<!--// Jess output of R2ML derivation rules-->
<jess>
<pre>(defrule DR_bizh (Hour ? ) (and (test (>= "9" (IDhour ? ) )) (test (<= "16" (IDhour ? ) )) ) (Workday ? ) => (Bizh ? ) )
</pre>
</jess>
Dla lepszego poznania środowiska Jess: JessRules.com
Eksport do R2ML-u
Przy użyciu Strelki możemy również w bardzo prosty sposób uzyskać zapis naszych reguł w standardzie R2ML.
Wystarczy kliknać prawym przyciskiem myszy na daną regułę a następnie wybrać „Preview R2ML”.
Przykładowy kod R2ML dla reguły DR_bizh:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<r2ml:RuleBase xsi:schemaLocation="http://oxygen.informatik.tu-cottbus.de/R2ML/0.4/R2ML.xsd" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:r2mlv="http://www.rewerse.net/I1/2006/R2ML/R2MLV" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:r2ml="http://www.rewerse.net/I1/2006/R2ML" xmlns:soap="http://www.w3.org/2001/12/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<r2mlv:Vocabulary>
<r2mlv:Class r2mlv:ID="Day">
<r2mlv:Attribute r2mlv:ID="IDday">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Weekend">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Day"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Workday">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Day"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Hour">
<r2mlv:Attribute r2mlv:ID="IDhour">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Notbizh"/>
<r2mlv:Class r2mlv:ID="Bizh"/>
<r2mlv:Class r2mlv:ID="Month">
<r2mlv:Attribute r2mlv:ID="IDmonth">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Autumn">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Month"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Winter">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Month"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Spring">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Month"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Summer">
<r2mlv:superClass>
<r2mlv:Class r2mlv:ID="Month"/>
</r2mlv:superClass>
</r2mlv:Class>
<r2mlv:Class r2mlv:ID="Thermostat">
<r2mlv:Attribute r2mlv:ID="temp">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:float"/>
</r2mlv:range>
</r2mlv:Attribute>
</r2mlv:Class>
</r2mlv:Vocabulary>
<r2ml:DerivationRuleSet>
<r2ml:DerivationRule r2ml:ruleID="DR_bizh">
<r2ml:conditions>
<r2ml:ObjectClassificationAtom r2ml:classID="Hour" r2ml:isNegated="false">
<r2ml:ObjectVariable/>
</r2ml:ObjectClassificationAtom>
<r2ml:qf.Conjunction>
<r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:greaterThanOrEqual" r2ml:isNegated="false" xmlns:swrlb="http://www.w3.org/2003/11/swrlb">
<r2ml:dataArguments>
<r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="9"/>
<r2ml:AttributeFunctionTerm r2ml:attributeID="IDhour">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:classID="Hour"/>
</r2ml:contextArgument>
</r2ml:AttributeFunctionTerm>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
<r2ml:DatatypePredicateAtom r2ml:datatypePredicateID="swrlb:lessThanOrEqual" r2ml:isNegated="false" xmlns:swrlb="http://www.w3.org/2003/11/swrlb">
<r2ml:dataArguments>
<r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="16"/>
<r2ml:AttributeFunctionTerm r2ml:attributeID="IDhour">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:classID="Hour"/>
</r2ml:contextArgument>
</r2ml:AttributeFunctionTerm>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
</r2ml:qf.Conjunction>
<r2ml:ObjectClassificationAtom r2ml:classID="Workday" r2ml:isNegated="false">
<r2ml:ObjectVariable/>
</r2ml:ObjectClassificationAtom>
</r2ml:conditions>
<r2ml:conclusion>
<r2ml:ObjectClassificationAtom r2ml:classID="Bizh">
<r2ml:ObjectVariable/>
</r2ml:ObjectClassificationAtom>
</r2ml:conclusion>
</r2ml:DerivationRule>
</r2ml:DerivationRuleSet>
</r2ml:RuleBase>
Zgodność z innymi językami
R2ML jest obszernym, i przyjaznym dla użytkownika bazującym na XML-u językiem, którego głównymi zadaniami są:
wymiana reguł między różnymi systemami i narzędziami
możliwość łączenia poszczególnych systemów decyzyjnych z narzędziami bazującymi na R2ML-u w celu zapewnienia wizualizacji, werbalizacji, weryfikacji oraz ratyfikacji.
R2ML jest bardzo wszechstronny ponieważ integruje takie języki jak:
the Object Constraint Language (OCL)
the Semantic Web Rule Language (SWRL)
the Rule Markup Language (RuleML)
Obecną wersją języka R2ML jest wersja 0.5 (Release Date: August 23, 2007).
Jest ona oparta na schemacie XML, który jest dostępny XMLSchema
Sprawozdanie
Materiały