Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_uml_urml [2008/06/03 13:23] miw |
pl:miw:miw08_uml_urml [2008/06/25 00:13] gjn |
====== UML_URML ====== | |
Piotr Przybycin <pit4@o2.pl> | |
Design rbs examples with URML. | |
| |
| |
| |
| |
====== Spotkania ====== | |
| |
| |
===== 080415 ===== | |
* próba exportu do R2ML, etc, patrz [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/15|translatory]] | |
* 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 ===== | |
* przejście r2ml->urml (prod rules) | |
* czy/jak da się przejść z r2ml do XMI (urml) i vice versa | |
* sprawozdanie | |
| |
| |
| |
| |
| |
| |
| |
======Sprawozdanie====== | |
| |
===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 [[http://oxygen.informatik.tu-cottbus.de/strelka/Strelka_0.3_Eclipse.zip|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: [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/46|REWERSEworking.groupI1-Strelka]] | |
| |
| |
| |
| |
| |
===Przykład=== | |
Spróbujemy teraz zamodelować w URML-u jakiś przykład. | |
Naszym przykładem będzie [[hekate:hekate_case_thermostat]]. | |
| |
| |
| |
| |
Model wykonany przy użyciu programu Stralka. | |
| |
{{:pl:miw:miw08_uml_urml:miw1a.png|:pl:miw:miw08_uml_urml:miw1a.png}} | |
| |
| |
| |
| |
| |
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: | |
<code xml> | |
<?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> | |
</code> | |
Dla lepszego poznania środowiska Jess: [[http://www.jessrules.com/|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: | |
| |
<code xml> | |
<?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> | |
</code> | |
| |
===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 [[http://www.w3.org/2001/XMLSchema|XMLSchema]] | |
| |
Język R2ML jest ciągle rozwijany i mamy obecnie również dostęp do różnorakich translatorów takich jak: | |
| |
* R2ML to F-Logic | |
* F-LogicXML to R2ML | |
* R2ML to Jess | |
* R2ML to RuleML | |
* RuleML to R2ML | |
* R2ML to JenaRules | |
* JenaRules to R2ML | |
* R2ML to JBoss Rules | |
* SWRL to R2ML | |
* R2ML to SWRL | |
* R2ML to XMI | |
* R2ML to OCL | |
* OCL to R2ML | |
| |
Wszystkie dostępne pod linkiem [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/15|translatory]] | |
| |
| |
Przykładowe przejście z kodu R2ML do XMI dla Production Rule z przykładu:[[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/17|przykład.]] | |
| |
| |
<code xml> | |
<?xml version = '1.0' encoding = 'ISO-8859-1' ?> | |
<XMI xmi.version = '1.2' timestamp = 'Tue Jun 03 13:12:09 CEST 2008'> | |
<XMI.header> | |
<XMI.documentation> | |
<XMI.exporter>Netbeans XMI Writer</XMI.exporter> | |
<XMI.exporterVersion>1.0</XMI.exporterVersion> | |
</XMI.documentation> | |
</XMI.header> | |
<XMI.content> | |
<R2ML.ProductionRuleSet xmi.id = 'a1'/> | |
<R2ML.ProductionRuleSet xmi.id = 'a2'/> | |
<R2ML.Atoms.AtBasic.ObjectClassificationAtom xmi.id = 'a3' isNegated = 'false'/> | |
<R2ML.Terms.TerBasic.Variables.ObjectVariable xmi.id = 'a4'/> | |
<R2ML.Terms.TerFunctional.AttributeFunctionTerm xmi.id = 'a5'> | |
<R2ML.Terms.TerFunctional.AttributeFunctionTerm.attribute> | |
<R2ML.Vocabulary.VocBasic.Attribute xmi.idref = 'a6'/> | |
</R2ML.Terms.TerFunctional.AttributeFunctionTerm.attribute> | |
<R2ML.Terms.TerFunctional.AttributeFunctionTerm.contextArgument> | |
<R2ML.Terms.TerBasic.Variables.ObjectVariable xmi.idref = 'a4'/> | |
</R2ML.Terms.TerFunctional.AttributeFunctionTerm.contextArgument> | |
</R2ML.Terms.TerFunctional.AttributeFunctionTerm> | |
<R2ML.Terms.TerFunctional.DatatypeFunctionTerm xmi.id = 'a7'> | |
<R2ML.Terms.TerFunctional.DatatypeFunctionTerm.function> | |
<R2ML.Vocabulary.VocFunctional.DatatypeFunction xmi.idref = 'a8'/> | |
</R2ML.Terms.TerFunctional.DatatypeFunctionTerm.function> | |
<R2ML.Terms.TerFunctional.DatatypeFunctionTerm.dataArguments> | |
<R2ML.Vocabulary.VocBasic.TypedLiteral xmi.idref = 'a9'/> | |
<R2ML.Terms.TerFunctional.AttributeFunctionTerm xmi.idref = 'a5'/> | |
</R2ML.Terms.TerFunctional.DatatypeFunctionTerm.dataArguments> | |
</R2ML.Terms.TerFunctional.DatatypeFunctionTerm> | |
<R2ML.Vocabulary.VocBasic.TypedLiteral xmi.id = 'a9' lexicalValue = '600'> | |
<R2ML.Vocabulary.VocBasic.TypedLiteral.type> | |
<R2ML.Vocabulary.VocBasic.Datatype xmi.idref = 'a10'/> | |
</R2ML.Vocabulary.VocBasic.TypedLiteral.type> | |
</R2ML.Vocabulary.VocBasic.TypedLiteral> | |
<R2ML.Vocabulary.VocBasic.Attribute xmi.id = 'a6' predicateCategory = 'closed'/> | |
<R2ML.Vocabulary.VocBasic.Datatype xmi.id = 'a10' predicateCategory = 'closed'/> | |
<R2ML.Vocabulary.VocFunctional.DatatypeFunction xmi.id = 'a8' arity = '0'/> | |
</XMI.content> | |
</XMI> | |
</code> | |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
====== Przydatne linki ====== | |
| |
[[http://developers.sun.com/jsenterprise/learning/tutorials/jse8/uml_class_diagram.html|UML Modeling: Creating Class Diagrams - Tutorial]] | |
| |
[[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=URML|URML -- a UML-Based Rule Modeling Language - REWERSE Working Group I1 page]] | |