UML_URML

Projekt zakończony

Piotr Przybycin pit4@o2.pl Design rbs examples with URML.

Spotkania

080415

  • próba exportu do R2ML, etc, patrz 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 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.

: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:

<?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

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 translatory

Przykładowe przejście z kodu R2ML do XMI dla Production Rule z przykładu:przykład.

<?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>

Przydatne linki

pl/miw/miw08_uml_urml.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0