|
|
pl:miw:miw08_ard_xml [2008/06/02 12:37] wojnicki links corrected |
pl:miw:miw08_ard_xml [2019/06/27 15:50] |
====== Opis ====== | |
[[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: | |
| |
<code> | |
Class(ard:Attribute) | |
Class(ard:Property) | |
</code> | |
| |
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: | |
| |
<code> | |
ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute)) | |
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of)) | |
</code> | |
| |
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: | |
| |
<code> | |
ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property)) | |
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property)) | |
</code> | |
| |
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: | |
| |
<code> | |
ObjectProperty(ard:transformed_into domain(ard:Property) range(Property)) | |
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into)) | |
</code> | |
| |
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ć: | |
| |
<code> | |
[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)) | |
) | |
</code> | |
| |
Tworzenie instancji poszczególnych klas ma następującą postać: | |
| |
<code> | |
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)) | |
</code> | |
| |
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]]. | |
| |
| |
| |