Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:2009:miw09_swrltrans [2009/03/24 12:09] mikel |
pl:miw:2009:miw09_swrltrans [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ~~ODT~~ |
Michał Lesiak <mikelik@o2.pl> | ====== MIW 2009 SWRLtrans ====== |
| |
| **Zrealizował**: [[mikelik@o2.pl|Michał Lesiak]] (4RI) |
| |
:!::!: | :!::!: |
[[student:msc2008_xml_knowledge_transformation:xttml2rif]] | [[student:msc2008_xml_knowledge_transformation:xttml2rif]] |
| |
====== Spotkania ====== | ====== Prezentacja ====== |
===== 20090319 ==== | [[pl:miw:2009:miw09_swrltrans:prezentacja|Prezentacja wyników projektowych]]. |
* [[#przyklad_xtt_-_swrl]] | |
* konieczność utworzenia zmiennych tymczasowych (u mnie: temp1), ponieważ nie można zagnieżdżać funkcji w funkcji, np. builtin sin w builtin add ([[http://www.w3.org/Submission/SWRL/swrlx.xsd|swrlx.xsd]]). | |
* za pomocą transformacji XSL trzeba policzyć ilość zagnieżdżeń, ilość predykatów o arności więcej niż 2, (...) - skomplikowane (o ile wykonalne) - sugestia zmiany narzędzia z XSLT, może napisać rodzaj 'kompilatora'? | |
| |
===== 20090305 ==== | |
* Projekty bazujące na xtt2: ([[pl:miw:miw08_xtt_r2ml:translator|xtt to r2ml ]], [[https://ai.ia.agh.edu.pl/wiki/_media/pl:miw:miw08_xtt_rif:xtttorif.xml|xtt to rif]])\\ | |
* <del>Bazować jedynie na specyfikacji: [[student:hqed:xttml20]] i przykładzie z projektu [[pl:miw:miw08_xtt_xml]]: [[https://ai.ia.agh.edu.pl/wiki/_media/pl:miw:thermostat2.0.xml|:pl:miw:thermostat2.0.xml]] - wiarygodny thermostat2.0 czy stworzony przez studenta?</del> - specyfikacja xtt na potrzeby hqed | |
* jedyna poprawna specyfikacja XTT2: [[hekate:xtt2]] | |
| |
===== 20090219 ==== | ====== Spotkania ====== |
* konto | [[pl:miw:2009:miw09_swrltrans:spotkania|Notatki ze spotkań projektowych]]. |
brak dostępu: | |
* [[hekatedev:xtt_rules]] | |
* [[student:msc2008_xml_knowledge_transformation:xttml2rif]] | |
* [[hekatedev:xtt_minicases#calculations_factorial]] - link z [[pl:miw:miw08_xtt_r2ml]] | |
* [[student:xttml20]] - link z 080318 [[pl:miw:miw08_xtt_xml]] | |
| |
Czy jest przykładowy xttml, w którym byłyby wszystkie znaczniki? | ====== Projekt ====== |
np. [[https://ai.ia.agh.edu.pl/wiki/_media/pl:miw:thermostat2.0.xml?id=pl%3Amiw%3Amiw08_xtt_xml&cache=cache|thermostat2.0]] | |
| |
=== xtt -> r2ml -> swrl (niepolecane)=== | [[pl:miw:2009:miw09_swrltrans:projekt|Implementacja translacji w prologu]]. |
xtt -> r2ml: https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_r2ml:translator | |
| |
r2ml -> swrl: http://www.eclipse.org/m2m/atl/atlTransformations/#R2ML2SWRL (przy pomocy transformacji ATL) | ====== Sprawozdanie ====== |
| |
====== Projekt ====== | |
| |
===== Założenia ===== | ===== Założenia ===== |
| |
W projekcie zostanie stworzony wzorzec XSLT, który zamieni składnię XTTML na składnię [[http://www.w3.org/Submission/SWRL/#5|SWRL XML]], przy czym XML dla SWRL jest kombinacją [[http://www.w3.org/TR/owl-xmlsyntax/|OWL Web Ontology Language XML]] z [[http://www.ruleml.org/|RuleML XML]] | W projekcie miał zostać stworzony wzorzec XSLT, który zamieni składnię XTTML na składnię [[http://www.w3.org/Submission/SWRL/#5|SWRL XML]], przy czym XML dla SWRL jest kombinacją [[http://www.w3.org/TR/owl-xmlsyntax/|OWL Web Ontology Language XML]] z [[http://www.ruleml.org/|RuleML XML]].\\ |
| Ostatecznie został stworzony translator w prologu, gdyż XSLT okazał się nie wystarczającym narzędziem.\\ |
| |
Możliwa jest również zamiana XTTML na [[http://www.w3.org/Submission/SWRL/#6|RDF dla SWRL]], przy czym można tego dokonać korzystając ze wzorca [[http://www.w3.org/TR/owl-xmlsyntax/owlxml2rdf.xsl|owlxml2rdf.xsl]], który należałoby rozbudować. | Możliwa jest również zamiana XTTML na [[http://www.w3.org/Submission/SWRL/#6|RDF dla SWRL]], przy czym można tego dokonać korzystając ze wzorca [[http://www.w3.org/TR/owl-xmlsyntax/owlxml2rdf.xsl|owlxml2rdf.xsl]], który należałoby rozbudować. |
==swrlx:differentIndividualsAtom== | ==swrlx:differentIndividualsAtom== |
==swrlx:builtinAtom== | ==swrlx:builtinAtom== |
| |
| |
| ==== Fragment drzewa syntaktycznego ==== |
| {{:pl:miw:2009:miw09_swrltrans:swrlx.png|}} |
| ===== Translacja XTT na SWRL ===== |
| |
| W SWRL występuje ciąg aksjomatów (axioms) i faktów, gdzie aksjomaty to reguły i klasy obiektów. SWRL przewiduje tylko proste obliczenia matematyczne (builtIn), |
| ale poprawność syntaktyczna nie jest sprawdzana. Np. operacja "builtIn(op:numeric-add ?x 5)" (czyli: x + 5 zamiast np. 6 = x + 5) jest poprawna i zwraca wartość fałszu. SWRL bazuje na opisie i właściwościach klas obiektów. |
| To zdecydowanie odmienne podejście niż w przypadku XTT powoduje problemy w translacji między tymi językami. |
| |
| ==== Problemy w translacji ==== |
| |
| 1. Możliwość stosowania tylko predykatów binarnych w SWRL (w XTT brak ograniczenia),\\ |
| 2. Brak możliwości zagnieżdżania obliczeń matematycznych w SWRL,\\ |
| 3. Brak możliwości korzystania z predykatów zdefiniowanych zewnętrznie,\\ |
| 4. SWRL nie obsługuje negacji ani alternatywy. |
| |
| ==== Rodzaje podejść ==== |
| |
| === Translacja identycznościowa === |
| |
| Translacja, której wynikiem byłby XML SWRL taki, że interpreter SWRL dokonywałby działań (operacji) analogicznych do interpretera XTT. |
| Napisanie takich reguł translacji XTT -> SWRL przy pomocy XSLT jest bardzo trudne, o ile nie niemożliwe (XSLT jest nieodpowiednim do tego narzędziem, należałoby napisać własny translator).\\ |
| |
| W tym podejściu rozwiązania problemów przedstawiałyby się nastepująco:\\ |
| ad 1. Rozwiązaniem jest stworzenie sztucznej relacji, która wiąże ze soba kolejne argumenty. [[#przyklad_prolog_-_swrl|Przykład zastosowania sztucznej relacji 'reifiedRelation']]\\ |
| ad 2. Rozwiązaniem jest stworzenie serii zmiennych pomocniczych, które przechowywałyby wyniki obliczeń kolejno w sobie zagnieżdżonych operacji.\\ |
| ad 3. Brak istniejącego rozwiązania.\\ |
| ad 4. Rozwiązaniem problemu alternatywy jest stworzenie tylu reguł, ile jest alternatyw. Każda reguła w poprzedniku posiadałaby inną alternatywę, w następniku znajdowałaby się natomiast ta sama dla wszystkich operacja (Zbiór operacji).\\ |
| |
| Przykład translacji identycznościowej: |
| [[#Przykład translacji identycznościowej XTT -> SWRL| Przykład translacji identycznościowej XTT -> SWRL]] |
| |
| === Translacja obiektowa === |
| Translacja, której wynikiem byłby XML SWRL taki, że interpreter SWRL stwierdziłby poprawność XML, ale nie byłby w stanie wykonać działań (operacji) analogicznie do tego jak zrobiłby to interpreter XTT. |
| Translacja powodowałaby przedstawienie obliczeń i operacji w postaci klas i obiektów.\\ |
| |
| Najbardziej właściwa dla SWRLa wydaje się propozycja przedstawiania zmiennych/operacji/funkcji jako klas, posiadających odpowiednie własności: wartość (własność: "value"), operacja (własność zależna od operacji).\\ |
| Przykładem operacji jest np. sumowanie, właściwość obiektu "add" byłaby obiektem, która posiadałaby własność liczby (DataPropertyValue) lub przechowywałaby konieczne do wykonania obliczenia w postaci obiektu (ObjectPropertyValue) - kolejne zagnieżdżenie z kolejnymi własnościami "value" lub operacjami. |
| \\ |
| W takim przypadku również reguła byłaby obiektem, ponieważ interpreter SWRL i tak nie byłby w stanie sprawdzić założeń reguły (poprzednika, tezy), gdyż poprzednikiem byłaby po prostu klasa - czyli obiekt. |
| |
| Przykład translacji obiektowej: |
| [[#Przykład translacji obiektowej XTT -> SWRL| Przykład translacji obiektowej XTT -> SWRL]] |
| |
==== Przykład Prolog -> SWRL ==== | ==== Przykład Prolog -> SWRL ==== |
| |
| Przykład pokazuje rozwiązanie problemu translacji predykatów o arności większej niż 2. |
| |
//[[http://vistology.com/papers/SWRLp.PDF|SWRL example]]//\\ | //[[http://vistology.com/papers/SWRLp.PDF|SWRL example]]//\\ |
Kod w Prologu: | Kod w Prologu: |
[[pl:miw:miw08_hml_rules:owl|Więcej przykładów SWRL (na podstawie OWL)]] | [[pl:miw:miw08_hml_rules:owl|Więcej przykładów SWRL (na podstawie OWL)]] |
| |
==== Przykład XTT -> SWRL === | ==== Przykład translacji identycznościowej XTT -> SWRL === |
| |
XTT: [[hekate:hekate_markup_language#xttml]] | XTT: [[hekate:hekate_markup_language#xttml]] |
| |
| |
Propozycja SWRL: (sprawdzona poprawność składniowa przez [[http://www.w3.org/2001/03/webdata/xsv]]) | Propozycja translacji identycznościowej SWRL: (sprawdzona poprawność składniowa przez [[http://www.w3.org/2001/03/webdata/xsv]]) |
<code> | <code> |
<?xml version='1.0' ?> | <?xml version='1.0' ?> |
</owlx:Annotation> | </owlx:Annotation> |
<owlx:VersionInfo>v 1.0 2009/03/15 Michal Lesiak mikelik@o2.pl</owlx:VersionInfo> | <owlx:VersionInfo>v 1.0 2009/03/15 Michal Lesiak mikelik@o2.pl</owlx:VersionInfo> |
| |
| <owlx:ObjectProperty owlx:name="table"/> |
| <owlx:ObjectProperty owlx:name="link"/> |
| |
| <ruleml:var>att_0</ruleml:var> |
| <ruleml:var>att_1</ruleml:var> |
| <ruleml:var>temp1</ruleml:var> |
| |
| <ruleml:imp> |
| <ruleml:_rlab ruleml:href="rul_1a"/> |
| <owlx:Annotation> |
| <owlx:Documentation> |
| Ta reguła dotyczy: if att_0 nalezy do zbioru (1,5) |
| </owlx:Documentation> |
| </owlx:Annotation> |
| <ruleml:_body> |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#greaterThanOrEqual"> |
| <ruleml:var>att_0</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">1</owlx:DataValue> |
| </swrlx:builtinAtom> |
| |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#lessThanOrEqual"> |
| <ruleml:var>att_0</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">5</owlx:DataValue> |
| </swrlx:builtinAtom> |
| </ruleml:_body> |
| <ruleml:_head> |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> |
| <ruleml:var>att_1</ruleml:var> |
| <ruleml:var>att_0</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">1</owlx:DataValue> |
| </swrlx:builtinAtom> |
| |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#sin"> |
| <ruleml:var>temp1</ruleml:var> |
| <ruleml:var>att_0</ruleml:var> |
| </swrlx:builtinAtom> |
| |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> |
| <ruleml:var>att_1</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">5</owlx:DataValue> |
| <ruleml:var>temp1</ruleml:var> |
| </swrlx:builtinAtom> |
| |
| </ruleml:_head> |
| </ruleml:imp> |
| |
| <owlx:Individual owlx:name="rul_1a"> |
| <owlx:ObjectPropertyValue owlx:property="table"> |
| <owlx:Individual owlx:name="#xtt_1" /> |
| </owlx:ObjectPropertyValue> |
| <owlx:ObjectPropertyValue owlx:property="link"> |
| <owlx:Individual owlx:name="#xtt_1" /> |
| </owlx:ObjectPropertyValue> |
| <!-- owlx:type owlx:name="typu_np._link" - jakis typ obiektu czyli klasa" /> --> |
| <!-- może być tez wartość typu string |
| <owlx:DataPropertyValue owlx:property="link"> |
| <owlx:DataValue owlx:datatype="&xsd;string">xtt_1</owlx:DataValue> |
| </owlx:DataPropertyValue> --> |
| </owlx:Individual> |
| |
| <ruleml:imp> |
| <ruleml:_rlab ruleml:href="rul_1b"/> |
| <owlx:Annotation> |
| <owlx:Documentation> |
| Ta reguła dotyczy: if att_0 jest rowne 8 |
| </owlx:Documentation> |
| </owlx:Annotation> |
| <ruleml:_body> |
| <swrlx:datarangeAtom> |
| <owlx:OneOf> |
| <owlx:DataValue owlx:datatype="&xsd;int">8</owlx:DataValue> |
| </owlx:OneOf> |
| <ruleml:var>att_0</ruleml:var> |
| </swrlx:datarangeAtom> |
| </ruleml:_body> |
| <ruleml:_head> |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> |
| <ruleml:var>att_1</ruleml:var> |
| <ruleml:var>att_0</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">1</owlx:DataValue> |
| </swrlx:builtinAtom> |
| |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#sin"> |
| <ruleml:var>temp1</ruleml:var> |
| <ruleml:var>att_0</ruleml:var> |
| </swrlx:builtinAtom> |
| |
| <swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> |
| <ruleml:var>att_1</ruleml:var> |
| <owlx:DataValue owlx:datatype="&xsd;#int">5</owlx:DataValue> |
| <ruleml:var>temp1</ruleml:var> |
| </swrlx:builtinAtom> |
| |
| </ruleml:_head> |
| </ruleml:imp> |
| |
| <owlx:Individual owlx:name="rul_1b"> |
| <owlx:ObjectPropertyValue owlx:property="table"> |
| <owlx:Individual owlx:name="#xtt_1" /> |
| </owlx:ObjectPropertyValue> |
| <owlx:ObjectPropertyValue owlx:property="link"> |
| <owlx:Individual owlx:name="#xtt_1" /> |
| </owlx:ObjectPropertyValue> |
| </owlx:Individual> |
| |
| </swrlx:Ontology> |
| </code> |
| |
| ==== Przykład translacji obiektowej XTT -> SWRL === |
| |
| XTT: [[hekate:hekate_markup_language#xttml]] |
| |
| W skrócie:\\ |
| xtt_1:\\ |
| rule_1: if att_0 in <1,5>u{8} then att_1 = att_0 + 1 and att_1 = 5 + sin(att_0)\\ |
| |
| Poniżej translacja tylko fragmentu XTT, gdyż reszta jest analogiczna: |
| |
| XTT: |
| <code> |
| <logop name="in"> |
| <attref ref="att_0"/> |
| <domain> |
| <range from="1" to="5"/> |
| <value>8</value> |
| </domain> |
| </logop> |
| </code> |
| |
| |
| SWRL: |
| <code> |
| <owlx:Individual> |
| |
<ruleml:var>att_0</ruleml:var> | <owlx:ObjectPropertyValue owlx:property="logop"> |
<ruleml:var>att_1</ruleml:var> | <owlx:Individual> |
<ruleml:var>temp1</ruleml:var> | <owlx:ObjectPropertyValue owlx:property="attribute"> |
| <owlx:Individual> |
<ruleml:imp> | <owlx:DataPropertyValue owlx:property="name"> |
<ruleml:_rlab ruleml:href="rul_1"/> | <owlx:DataValue owlx:datatype="&xsd;string">in</owlx:DataValue> |
<owlx:Annotation> | </owlx:DataPropertyValue> |
<owlx:Documentation> | </owlx:Individual> |
Uwzgledniac opis czy nie - np. przynaleznosc do tabeli - Ta reguła dotyczy: if att_0 (1,5) | </owlx:ObjectPropertyValue> |
</owlx:Documentation> | |
</owlx:Annotation> | <owlx:ObjectPropertyValue owlx:property="attref"> |
<ruleml:_body> | <owlx:Individual> |
<swrlx:builtinAtom swrlx:builtin="&swrlb;#greaterThanOrEqual"> | <owlx:ObjectPropertyValue owlx:property="attribute"> |
<ruleml:var>att_0</ruleml:var> | <owlx:Individual> |
<owlx:DataValue owlx:datatype="&xsd;#int">1</owlx:DataValue> | <owlx:DataPropertyValue owlx:property="ref"> |
</swrlx:builtinAtom> | <owlx:DataValue owlx:datatype="&xsd;string">in</owlx:DataValue> |
| </owlx:DataPropertyValue> |
<swrlx:builtinAtom swrlx:builtin="&swrlb;#lessThanOrEqual"> | </owlx:Individual> |
<ruleml:var>att_0</ruleml:var> | </owlx:ObjectPropertyValue> |
<owlx:DataValue owlx:datatype="&xsd;#int">5</owlx:DataValue> | </owlx:Individual> |
</swrlx:builtinAtom> | </owlx:ObjectPropertyValue> |
</ruleml:_body> | |
<ruleml:_head> | |
<swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> | |
<ruleml:var>att_1</ruleml:var> | |
<ruleml:var>att_0</ruleml:var> | |
<owlx:DataValue owlx:datatype="&xsd;#int">1</owlx:DataValue> | |
</swrlx:builtinAtom> | |
| |
<swrlx:builtinAtom swrlx:builtin="&swrlb;#sin"> | <owlx:ObjectPropertyValue owlx:property="domain"> |
<ruleml:var>temp1</ruleml:var> | <owlx:Individual> |
<ruleml:var>att_0</ruleml:var> | <owlx:ObjectPropertyValue owlx:property="range"> |
</swrlx:builtinAtom> | <owlx:Individual> |
| <owlx:ObjectPropertyValue owlx:property="attribute"> |
<swrlx:builtinAtom swrlx:builtin="&swrlb;#add"> | <owlx:Individual> |
<ruleml:var>att_1</ruleml:var> | <owlx:DataPropertyValue owlx:property="from"> |
<owlx:DataValue owlx:datatype="&xsd;#int">5</owlx:DataValue> | <owlx:DataValue owlx:datatype="&xsd;string">1</owlx:DataValue> |
<ruleml:var>temp1</ruleml:var> | </owlx:DataPropertyValue> |
</swrlx:builtinAtom> | <owlx:DataPropertyValue owlx:property="to"> |
| <owlx:DataValue owlx:datatype="&xsd;string">5</owlx:DataValue> |
</ruleml:_head> | </owlx:DataPropertyValue> |
</ruleml:imp> | </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
<owlx:ObjectProperty owlx:name="table"/> | </owlx:Individual> |
<owlx:ObjectProperty owlx:name="link"/> | </owlx:ObjectPropertyValue> |
| <owlx:DataPropertyValue owlx:property="value"> |
<owlx:Individual owlx:name="rul_1"> | <owlx:DataValue owlx:datatype="&xsd;string">8</owlx:DataValue> |
<owlx:ObjectPropertyValue owlx:property="table"> | </owlx:DataPropertyValue> |
<owlx:Individual owlx:name="#xtt_1" /> | </owlx:Individual> |
</owlx:ObjectPropertyValue> | </owlx:ObjectPropertyValue> |
<owlx:ObjectPropertyValue owlx:property="link"> | </owlx:Individual> |
<owlx:Individual owlx:name="#xtt_1" /> | </owlx:ObjectPropertyValue> |
</owlx:ObjectPropertyValue> | |
<!-- owlx:type owlx:name="typu_np._link" - jakis typ obiektu czyli klasa" /> --> | </owlx:Individual> |
<!-- może być tez wartość typu string | |
<owlx:DataPropertyValue owlx:property="link"> | |
<owlx:DataValue owlx:datatype="&xsd;string">xtt_1</owlx:DataValue> | |
</owlx:DataPropertyValue> --> | |
</owlx:Individual> | |
| |
| |
</swrlx:Ontology> | |
</code> | </code> |
| |
====== Sprawozdanie ====== | |
====== Prezentacja ====== | |
====== Materiały ====== | ====== Materiały ====== |
* [[http://www.w3.org/Submission/SWRL/|SWRL]] | * [[http://www.w3.org/Submission/SWRL/|SWRL]] |