To jest stara wersja strony!
Opis
Tomasz Pałosz - tomekpalosz@o2.pl
translacja XTTML → R2ML
XTTML - format, który ma powstać na bazie XTT. XTT jest tabelarycznym sposobem reprezentacji wiedzy.
R2ML - jest obszernym i wygodnym zestawem zasad XMLowych pozwalającym na
Spotkania
08.03.04
080318
080408
080422
080429
komplet plikow do R2ML w wiki, w tym xsd i translator → napisać do Giurca, Werner, cc: gjn
zestaw uwag po ang. co nie dziala w w.w., email jak wyzej
jak/czy można dostać urml z r2ml? patrz xmi!
jak zaimportować słownik do drools?
080520
080603
Projekt
Translacja do RIF: W planach jest taki translator, ale w tej chwili nie ma go jeszcze zaimplementowanego. Atrybuty, z których korzystają oba formaty (RIF i R2ML) w podstawowej wersji są takie same tj. zgodne z rdf oraz xsd.
URML
URML dziedziczy z R2ML. Oba formaty są w sporej części zgodne (nie w pełni - prace nad pełną zgodnością trwają). Za pomocą programu Strelka można uzyskać kod R2ML'a z URML.
W związku z dziedziczeniem URML z R2ML mogą wystąpić problemy z przejściem w drugą stronę tj. z R2ML do URML.
W szczególnym przypadku reguły ProductionRule da się przekonwertować do URML.
Nie znalazłem informacji odnośnie konwertowanych wersji. URML wersja 0.2. R2ML wersja 0.5.
XTTML -> URML (XMI)
To rozwiązanie byłoby wygodne, bo XTTML→URML→R2ML.
Takie rozwiązanie nie jest możliwe. Sprawdzałem jak Strelka radzi sobie z wykorzystaniem InvokeActionExpression i nie da się tam zrobić wpisania w InvokeActionExpression takich formuł jak ja zaproponowałem. Invoke musi odnosić się do metody klasy.
Można ominąć ten problem robiąc metodę o takiej samej nazwie jak klasa (czyli konstruktor domyślny) i odnosić się do niego w InvokeActionExpression.
R2ML -> URML (XMI)
Jest wykonalne. Niestety nie znalazłem żadnego translatora. Nawet zespół, który pracuje nad regułami R2ML nie pisał ich ręcznie tylko generował za pomocą Strelki. Opisują to w swoim postępowaniu przy tworzeniu reguł dla projektu Derby2005.
Możliwe jest jednak stworzenie takiego translatora. Sądzę, że byłoby wygodniejsze konwertowanie do URML (XMI dla Strelki) niż konwertowanie do R2ML, gdyż ze Strelki można potem wygenerować R2ML. Reguły nie są skomplikowane. Poniżej zamieszczam najbardziej okrojone reguły jakie udało mi się uzyskać dla prostego przykładu.
<?xml version="1.0" encoding="UTF-8"?>
<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:URML="http:///URML.ecore" xmlns:notation="http://www.eclipse.org/gmf/runtime/1.0.1/notation" xmlns:uml="http://www.eclipse.org/uml2/2.1.0/UML">
<notation:Diagram xmi:id="nD1" type="URML" element="element1" measurementUnit="Pixel">
<styles xmi:type="notation:DiagramStyle" xmi:id="id1"/>
</notation:Diagram>
<uml:Package xmi:id="element1">
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="idString" name="String"/>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="idBoolean" name="Boolean"/>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="idInteger" name="Integer"/>
<packagedElement xmi:type="uml:PrimitiveType" xmi:id="idFloat" name="Float"/>
<packagedElement xmi:type="URML:ProductionRule" xmi:id="idPR" name="myPR1">
<conditions xmi:type="URML:ClassificationAtom" xmi:id="idCA" condRule="idPR" filter="startDate-reservationDate>=5" clazz="idmyRental" classVariable="myRental"/>
<producedActionExpr xmi:type="URML:AssignVariableActionExpr" xmi:id="idAE" rule="idPR" clazz="idmyRental" actionType="A" classVariable="myRental" statement="discount=10"/>
</packagedElement>
<packagedElement xmi:type="uml:Class" xmi:id="idmyRental" name="myRental">
<ownedAttribute xmi:type="uml:Property" xmi:id="iddiscount" name="discount" type="idInteger" aggregation="composite"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="id_reservationDate" name="reservationDate" type="idInteger" aggregation="composite"/>
<ownedAttribute xmi:type="uml:Property" xmi:id="id_startDate" name="startDate" type="idInteger" aggregation="composite"/>
</packagedElement>
</uml:Package>
</xmi:XMI>
Przy tak upakowanym kodzie istnieje problem odczytu takiego schematu w programie Strelka. Problem leży w zredukowanym fragmencie „notation:Diagram”. Efekt widoczny poniżej.
Tutaj kod R2ML wygenerowany na za pomocą Strelki z powyższego diagramu. Oczywiście kod w obu przypadkach jest identyczny.
<?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="myRental">
<r2mlv:Attribute r2mlv:ID="discount">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
<r2mlv:Attribute r2mlv:ID="reservationDate">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
<r2mlv:Attribute r2mlv:ID="startDate">
<r2mlv:range>
<r2mlv:Datatype r2mlv:ID="xs:integer"/>
</r2mlv:range>
</r2mlv:Attribute>
</r2mlv:Class>
</r2mlv:Vocabulary>
<r2ml:ProductionRuleSet>
<r2ml:ProductionRule r2ml:ruleID="myPR1">
<r2ml:conditions>
<r2ml:ObjectClassificationAtom r2ml:classID="myRental" r2ml:isNegated="false">
<r2ml:ObjectVariable r2ml:name="myRental"/>
</r2ml:ObjectClassificationAtom>
<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="5"/>
<r2ml:DatatypeFunctionTerm r2ml:datatypeFunctionID="numeric-substract">
<r2ml:dataArguments>
<r2ml:AttributeFunctionTerm r2ml:attributeID="reservationDate">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:name="myRental" r2ml:classID="myRental"/>
</r2ml:contextArgument>
</r2ml:AttributeFunctionTerm>
<r2ml:AttributeFunctionTerm r2ml:attributeID="startDate">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:name="myRental" r2ml:classID="myRental"/>
</r2ml:contextArgument>
</r2ml:AttributeFunctionTerm>
</r2ml:dataArguments>
</r2ml:DatatypeFunctionTerm>
</r2ml:dataArguments>
</r2ml:DatatypePredicateAtom>
</r2ml:conditions>
<r2ml:producedAction>
<r2ml:AssignActionExpression r2ml:propertyID="discount">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:name="myRental"/>
</r2ml:contextArgument>
<r2ml:TypedLiteral r2ml:datatypeID="xs:integer" r2ml:lexicalValue="10"/>
</r2ml:AssignActionExpression>
</r2ml:producedAction>
</r2ml:ProductionRule>
</r2ml:ProductionRuleSet>
</r2ml:RuleBase>
Odwzorowanie połączeń
Moja propozycja to dopisanie na końcu reguły, z której przechodzimy InvokeActionExpression.
Przykład 1: „Go to today of date”:
<r2ml:InvokeActionExpression r2ml:operationID="today">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:name="date" r2ml:classID="Date"/>
</r2ml:contextArgument>
</r2ml:InvokeActionExpression>
Przykład 2: „Calculate the total payment of the purchase order”:
<r2ml:InvokeActionExpression r2ml:operationID="totalPayment">
<r2ml:contextArgument>
<r2ml:ObjectVariable r2ml:name="purchaseOrder" r2ml:classID="Order"/>
</r2ml:contextArgument>
</r2ml:InvokeActionExpression>
Sprawozdanie