Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:2009:miw09_swrltrans [2009/03/02 00:08] 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 ====== |
===== 20090305 ==== | [[pl:miw:2009:miw09_swrltrans:prezentacja|Prezentacja wyników projektowych]]. |
* Brak projektów-translatorów bazujących XTT 2.0 ([[pl:miw:miw08_xtt_r2ml:translator|xtt 1.0 to r2ml ]], [[https://ai.ia.agh.edu.pl/wiki/_media/pl:miw:miw08_xtt_rif:xtttorif.xml|xtt 1.0 to rif]]) | |
* Bazować jedynie na specyfikacji: [[student: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? | |
| |
===== 20090219 ==== | |
* konto | |
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? | ====== Spotkania ====== |
np. [[https://ai.ia.agh.edu.pl/wiki/_media/pl:miw:thermostat2.0.xml?id=pl%3Amiw%3Amiw08_xtt_xml&cache=cache|thermostat2.0]] | [[pl:miw:2009:miw09_swrltrans:spotkania|Notatki ze spotkań projektowych]]. |
| |
=== xtt -> r2ml -> swrl (niepolecane)=== | ====== Projekt ====== |
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) | [[pl:miw:2009:miw09_swrltrans:projekt|Implementacja translacji w prologu]]. |
| |
====== Projekt ====== | ====== Sprawozdanie ====== |
| |
===== 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ć. |
* konieczność transformacji na predykaty binarne (SWRL jest zgodne z OWL, który zabrania używania predykatów złożonych ("higher-order"). Zwiększa nieczytelność, wydłuża XML, | * konieczność transformacji na predykaty binarne (SWRL jest zgodne z OWL, który zabrania używania predykatów złożonych ("higher-order"). Zwiększa nieczytelność, wydłuża XML, |
* rozróżnianie predykatów reprezentujących: classAtom, individualPropertyAtom, datavaluedPropertyAtom. Wydłuża XML, | * rozróżnianie predykatów reprezentujących: classAtom, individualPropertyAtom, datavaluedPropertyAtom. Wydłuża XML, |
* mieszanie ruleml, swrlx, swrlb i owlx. W każdym elemencie trzeba określić przestrzeń nazw. Wydłuża XML. | * mieszanie ruleml, swrlx, swrlb i owlx. W każdym elemencie trzeba określić przestrzeń nazw. Wydłuża XML, |
| * nie można korzystać z predykatów definiowanych zewnętrznie jak ma to miejsce w RIF [[http://www.w3.org/2005/rules/wg/draft/rif-dtb/#Appendix:_Schemas_for_Externally_Defined_Terms]]. |
| * SWRL nie obsługuje ani negacji, ani alternatywy [[http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ#nid9L3|SWRL FAQ]]. |
| |
W związku z czym został zaproponowany bardziej czytelny XML: SWRL presentation: [[http://vistology.com/papers/SWRLp.PDF|SWRLp]] | W związku z czym został zaproponowany bardziej czytelny XML: SWRL presentation: [[http://vistology.com/papers/SWRLp.PDF|SWRLp]] |
==swrlx:builtinAtom== | ==swrlx:builtinAtom== |
| |
==== Przykład ==== | |
| ==== 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 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: |
</code> | </code> |
| |
====== Sprawozdanie ====== | [[pl:miw:miw08_hml_rules:owl|Więcej przykładów SWRL (na podstawie OWL)]] |
====== Prezentacja ====== | |
| ==== Przykład translacji identycznościowej 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)\\ |
| |
| |
| Propozycja translacji identycznościowej SWRL: (sprawdzona poprawność składniowa przez [[http://www.w3.org/2001/03/webdata/xsv]]) |
| <code> |
| <?xml version='1.0' ?> |
| <!DOCTYPE swrlx:Ontology [ |
| <!ENTITY swrlb 'http://www.w3.org/2003/11/swrlb'> |
| <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema'> |
| <!ENTITY map 'http://www.daml.org/2001/06/map/map-ont#'> |
| ]> |
| |
| <swrlx:Ontology |
| xmlns:owlx="http://www.w3.org/2003/05/owl-xml" |
| xmlns:swrlx="http://www.w3.org/2003/11/swrlx" |
| xmlns:ruleml="http://www.w3.org/2003/11/ruleml" |
| xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://www.w3.org/2003/11/swrlx http://www.ruleml.org/swrl/xsd/swrlx.xsd" |
| > |
| <owlx:Annotation> |
| <owlx:Documentation> XTT to SWRL Translator</owlx:Documentation> |
| </owlx:Annotation> |
| <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> |
| |
| <owlx:ObjectPropertyValue owlx:property="logop"> |
| <owlx:Individual> |
| <owlx:ObjectPropertyValue owlx:property="attribute"> |
| <owlx:Individual> |
| <owlx:DataPropertyValue owlx:property="name"> |
| <owlx:DataValue owlx:datatype="&xsd;string">in</owlx:DataValue> |
| </owlx:DataPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| |
| <owlx:ObjectPropertyValue owlx:property="attref"> |
| <owlx:Individual> |
| <owlx:ObjectPropertyValue owlx:property="attribute"> |
| <owlx:Individual> |
| <owlx:DataPropertyValue owlx:property="ref"> |
| <owlx:DataValue owlx:datatype="&xsd;string">in</owlx:DataValue> |
| </owlx:DataPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| |
| <owlx:ObjectPropertyValue owlx:property="domain"> |
| <owlx:Individual> |
| <owlx:ObjectPropertyValue owlx:property="range"> |
| <owlx:Individual> |
| <owlx:ObjectPropertyValue owlx:property="attribute"> |
| <owlx:Individual> |
| <owlx:DataPropertyValue owlx:property="from"> |
| <owlx:DataValue owlx:datatype="&xsd;string">1</owlx:DataValue> |
| </owlx:DataPropertyValue> |
| <owlx:DataPropertyValue owlx:property="to"> |
| <owlx:DataValue owlx:datatype="&xsd;string">5</owlx:DataValue> |
| </owlx:DataPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| <owlx:DataPropertyValue owlx:property="value"> |
| <owlx:DataValue owlx:datatype="&xsd;string">8</owlx:DataValue> |
| </owlx:DataPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| </owlx:Individual> |
| </owlx:ObjectPropertyValue> |
| |
| </owlx:Individual> |
| </code> |
====== Materiały ====== | ====== Materiały ====== |
* [[http://www.w3.org/Submission/SWRL/|SWRL]] | * [[http://www.w3.org/Submission/SWRL/|SWRL]] |
* [[http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ]] | * [[http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ]] |
* [[http://vistology.com/papers/SWRLp.PDF|SWRL Presentation Proposal]] | * [[http://vistology.com/papers/SWRLp.PDF|SWRL Presentation Proposal]] |
| * [[pl:miw:miw08_hml_rules:owl|SWRL na podstawie OWL - podstawy, przykłady]] |
| * [[http://www.oxygenxml.com/|Oxygen - darmowy edytor XML]] |
| * [[http://www.w3.org/2001/03/webdata/xsv|Sprawdzanie poprawności XML]] |