~~SLIDESHOW~~
====== MIW 2009 SWRLtrans ======
**Zrealizował**: [[mikelik@o2.pl|Michał Lesiak]] (4RI)
===== Założenia =====
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ć.
===== Wprowadzenie do SWRL ====
Semantic Web Rule Language (SWRL) jest propozycją języka, który bazuje na kombinacji OWL DL i OWL Lite, czyli podjęzyków [[http://www.w3.org/2001/sw/WebOnt/|OWL Web Ontology Language]] z pojedynczymi/binarnymi [[http://en.wikipedia.org/wiki/Datalog|datalogami]] języka RuleML.
Propozycja rozszerza zbiór aksjomatów OWL tak, by zawierał reguły podobne do reguł Horna. Reguły te mogą więc być łączone z bazą wiedzy OWL.
Reguły są przedstawiane w formie implikacji: poprzednik ("body") i następnik ("head"), z których każdy może składać się z zera lub więcej atomów. Implikacja w przypadku pustego poprzednika jest traktowana jako zawsze prawdziwa, a w przypadku pustego następnika jest traktowana jako zawsze fałszywa. Wiele atomów jest traktowanych jako koniunkcja.
Reguła z koniunkcją atomów w następniku jest równoważna koniunkcjom reguł, w których następnikami są pojedyncze atomy.
===== Składnia XML =====
Składnia XML dla SWRL jest kombinacją [[http://www.w3.org/TR/owl-xmlsyntax/|OWL Web Ontology Language XML]] z [[http://www.ruleml.org/|RuleML XML]].
Definiuje przestrzenie nazw swrlx i swrlb, importuje przestrzeń nazw ruleml i owl.
Używane przestrzenie nazw:
|**Skrót**|**Przestrzeń nazw**|
|swrlx|http://www.w3.org/2003/11/swrlx|
|swrlb|http://www.w3.org/2003/11/swrlb|
|ruleml|http://www.w3.org/2003/11/ruleml|
|owl|http://www.w3.org/2003/05/owl-xml|
|xsd|http://www.w3.org/2001/XMLSchema|
=====Zalety SWRL=====
* klasy OWL (np. opisy) mogą być używane jako predykaty w regułach,
* reguły i aksjomaty ontologii mogą być dowolnie mieszane,
* istniejący arkusz XSLT ([[http://www.w3.org/TR/owl-xmlsyntax/owlxml2rdf.xsl]]) może posłużyć jako podstawa do stworzenia mapowania na grafy RDF,
* istniejące narzędzia do RuleML mogą być przystosowane do SWRL
\\
=====Wady SWRL=====
* 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,
* 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
* 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]]
===== Elementy składni=====
====Ontology====
Content: (owlx:VersionInfo | owlx:PriorVersion | owlx:BackwardCompatibleWith |
owlx:IncompatibleWith | owlx:Imports | owlx:Annotation |
owlx:Class[axiom] | owlx:EnumeratedClass(D,F) |
owlx:SubClassOf(D,F) | owlx:EquivalentClasses | owlx:DisjointClasses(D,F) |
owlx:DatatypeProperty | owlx:ObjectProperty |
owlx:SubPropertyOf | owlx:EquivalentProperties |
owlx:Individual[axiom] | owlx:SameIndividual | owlx:DifferentIndividuals |
ruleml:imp[axiom] | ruleml:var[axiom])*
Główny element "Ontology" w stosunku do składni prezentacji OWL XML został rozszerzony o aksjomaty "imp" ("implication" - reguła implikacyjna) oraz "var" ("variable" - deklaracja zmiennej)
======ruleml: var====
xsd:string
Definiuje istnienie zmiennej. Zapożyczono z przestrzeni nazw RuleML.
===== ruleml: imp =====
Content: ( _rlab?, owlx:Annotation*, _body, _head )
===== ruleml:_rlab =====
Content: ( _rlab?, owlx:Annotation*, _body, _head )
===== ruleml:_body =====
Content: ( swrlx:atom* )
===== ruleml:_head=====
Content: ( swrlx:atom* )
===== Atomy =====
Mogą być pojedynczymi predykatami (klasami), binarnymi predykatami (właściwościami), równościami lub nierównościami.
==swrlx:classAtom==
==swrlx:datarangeAtom==
==swrlx:individualPropertyAtom==
==swrlx:datavaluedPropertyAtom==
==swrlx:sameIndividualAtom==
==swrlx:differentIndividualsAtom==
==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.
===== 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).\\
===== Translacja identycznościowa - rozwiązanie =====
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).\\
===== 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.
\\
===== Materiały =====
* [[http://www.w3.org/Submission/SWRL/|SWRL]]
* [[http://oxygen.informatik.tu-cottbus.de/rewerse-i1/?q=node/15]]
* [[http://st.inf.tu-dresden.de/OCLApps2006/topic/acceptedPapers/04_Gasevic_OnInterchanging.pdf]]
* [[http://www.w3.org/2005/rules/wg/wiki/Implementations/SWRL|zależności RIF <-> SWRL]]
* [[http://protege.cim3.net/cgi-bin/wiki.pl?SWRLLanguageFAQ]]
* [[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]]