====== Opis ======
__**Projekt zakończony**__
[[mtomana@student.agh.edu.pl|Michał Tomana]] (4RI)
Translacja ARDML do innych formatów z użyciem XSLT. Ontologie, graphviz.
Historia [[pl:miw:miw08_ard_xml:spotkania|spotkań]].
====== Projekt ======
* ARDML: [[pl:miw:miw08_ard_xml:thermostat_ardml|Thermostat]] (download: {{:pl:miw:miw08_ard_xml:thermostat_ardml.xml|thermostat_ardml.xml}})
* OWL dla ARD: [[pl:miw:miw08_ard_xml:owl_abstract_syntax|abstract syntax]]
* Przykład ontologii dla [[pl:miw:miw08_ard_xml:owl_thermostat|termostatu]]
* XSLT for OWL: [[pl:miw:miw08_ard_xml:ard_owl_xsl|ARDML->OWL]] (download: {{:pl:miw:miw08_ard_xml:ardml_owl.xml|ardml_owl.xsl}})
* XSLT for ARD graph: [[pl:miw:miw08_ard_xml:ardml_ard_dot_xsl|ARDML->(ARD)->DOT]] (download: {{:pl:miw:miw08_ard_xml:ardml_ard_dot.xml|ardml_ard_dot.xsl}})
* XSLT for TPH graph: [[pl:miw:miw08_ard_xml:ardml_tph_dot_xsl|ARDML->(TPH)->DOT]] (download: {{:pl:miw:miw08_ard_xml:ardml_tph_dot.xml|ardml_tph_dot.xsl}})
* Graph examples (using [[pl:miw:miw08_dokuviz|DokuViz plugin]]): [[pl:miw:miw08_ard_xml:notatki|notatki]]
====== Sprawozdanie ======
Celem projektu było przygotowanie ontologii dla ARD (zdefiniowanie klas i gramatyki), a następnie przygotowanie plików XSLT do transformacji z formatu ARDML do OWL oraz w kolejnym etapie do definicji grafów dla programu Graphviz.
==== Ontologia ====
W ARD występują dwa rodzaje elementów: atrybuty (attributes) i właściwości (properties). W ontologii odpowiadają one klasom:
Class(ard:Attribute)
Class(ard:Property)
Dla danego diagramu ARD można zdefiniować stałą listę atrybutów, które następnie są przyporządkowywane poszczególnym właściwościom. W tym celu potrzebne było zdefiniowanie relacji między tymi elementami:
ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute))
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of))
Pierwsza z nich, //is_attribute_of//, jest związana z atrybutami (słowo kluczowe **range**) przypisywanymi do właściwości (słowo kluczone **domain**). Jako, że w języku OWL stosuje się opis relacji działających w obie strony, zdefiniowana została też relacja //has_attribute//, która jest po prostu odwróceniem pierwszej (słowo kluczowe **inverseOf**). Takie podejście ułatwia pisanie ontologii oraz zwiększa czytelność.
W tej chwili można już zdefiniować listę elementów - atrybutów i właściwości - oraz powiązać je ze sobą.
Do pełnego opisu ARD brakuje nam jeszcze relacji wynikających z diagramów ARD/TPH. Pierwsza z nich to zależność poszczególnych właściwości:
ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property))
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property))
Definiuje ona, która właściwość, od której zależy (//depends_on//). Dla przykładu termostatu właściwość //thermostat_setting// jest zależna od właściwości //season//, która to jest zależna od //month//. Analogicznie jak w przypadku poprzedniej relacji, zdefiniowana została relacja przeciwna - //is_prerequisite_for// (czyli wpływanie jednej właściwości na drugą).
Ostatnią rzeczą jest zdefiniowanie, która właściwość została przetranformowana na inne właściwości:
ObjectProperty(ard:transformed_into domain(ard:Property) range(Property))
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into))
Dla wcześniej wspomnianego termostatu, taka relacja ma miejsce na przykład przy właściwości z atrybutem //Date//, która została przetransformowana (//transformed_into//) w inną właściwość zawierającą atrybuty //day//, //month// i //today//. Relacja przeciwna to //transformed_from//.
Taka gramatyka jest w zupełności wystarczająca do opisu ARD (wraz z "zaszytymi" oboma diagramami). Pełna ontologia ma więc postać:
[Namespaces:
owl = http://www.w3.org/2002/07/owl#
rdfs = http://www.w3.org/2000/01/rdf-schema#
rdf = http://www.w3.org/1999/02/22-rdf-syntax-ns#
]
Ontology(
Class(ard:Attribute)
Class(ard:Property)
ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute))
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of))
ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property))
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property))
ObjectProperty(ard:transformed_into domain(ard:Property) range(Property))
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into))
)
Tworzenie instancji poszczególnych klas ma następującą postać:
Individual(ard:prp_1 type(ard:Property)
value(ard:has_attribute ard:att_1)
value(ard:has_attribute ard:att_2)
value(ard:transformed_from ard:prp_0))
Powyżej zdefiniowany jest obiekt klasy //Property// o nazwie //prp_1//. Ma on dwa atrybuty: //att_1// i //att_2//. Został przetransformowany z właściwości //prp_0//.
Pełny opis termostatu za pomocą powyższej ontologii można zobaczyć [[pl:miw:miw08_ard_xml:owl_thermostat|tutaj]].
==== XSLT - OWL ====
Transformacja ARDML do OWLa, za pomocą XSLT nie jest skomplikowanym procesem:
* w pierwszej kolejności zapisywana jest definicja ontologii (klasy i relacje),
* następnie tworzona jest lista atrybutów o odpowiednich nazwach i identyfikatorach,
* kolejnym krokiem jest utowrzenie listy właściwości - i każdej z nich przypisane są odpowiednie atrybuty oraz zdefiniowane relacje zależności i transformacji.
Pełny kod XSLT można obejrzeć [[pl:miw:miw08_ard_xml:ard_owl_xsl|tutaj]].
==== XSLT - DOT ====
== ARD ==
By przejść z ARDML do opisu grafu ARD dla programu Graphviz wymagane są następujące kroki:
* zapisanie nagłówka grafu,
* iteracja po wszystkich elementach zależnych/niezależnych (relacja zależności) by powstała ich pełna lista,
* zdefiniowanie relacji między poszczególnymi encjami (zależność),
* zapisanie końca grafu.
Kod transformacji można obejrzeć [[pl:miw:miw08_ard_xml:ardml_ard_dot_xsl|tutaj]].
== TPH ==
Konstrukcja grafu TPH odpowiada następującemu procesowi:
* zapisanie nagłówka grafu,
* iteracja po wszystkich właściwościach - a dla każdej z nich dodanie etykiety związanych z nią atrybutów,
* zdefiniowanie relacji między poszczególnymi encjami (transformacja),
* zapisanie końca grafu.
Kod transformacji można obejrzeć [[pl:miw:miw08_ard_xml:ardml_tph_dot_xsl|tutaj]]. Obrazki grafów można podglądnąć w [[pl:miw:miw08_ard_xml:notatki|notatkach]] (wykorzystano plugin ###).
====== Materiały ======
[[http://www.w3.org/Style/XSL/|XSLT]] (tutoriale):
* [[http://zvon.org/xxl/XSLTutorial/Output/index.html|ZVON XSLT]]
* [[http://w3schools.com/xsl/default.asp|W3S XSLT]]
* [[wp>XSLT]], [[http://www.w3.org/TR/xslt20/|specyfikacja]].
[[http://en.wikipedia.org/wiki/Web_Ontology_Language|OWL]]:
* http://www.cs.man.ac.uk/~horrocks/ISWC2003/Tutorial/
* http://www.cs.man.ac.uk/~horrocks/ISWC2003/Tutorial/examples.pdf
* http://www.w3.org/TR/owl-semantics/
* http://www.w3.org/TR/owl-guide/
* http://protege.stanford.edu/publications/ontology_development/ontology101-noy-mcguinness.html
Narzędzia:
* http://protege.stanford.edu/
ARD:
* [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal|Towards Formalization of ARD+ Conceptual Design and Refinement Method]]
* [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog|An ARD+ Design and Visualization Toolchain Prototype in Prolog]]
* [[hekate:bib:hekate_bibliography#gjn2008flairs-userv|UServ Case Study, Conceptual Design with ARD+ Method]].