Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_ard_xml [2008/04/08 06:06] miw |
pl:miw:miw08_ard_xml [2019/06/27 15:50] (aktualna) |
====== Opis ====== | ====== Opis ====== |
| __**Projekt zakończony**__ |
| |
[[mtomana@student.agh.edu.pl|Michał Tomana]] (4RI) | [[mtomana@student.agh.edu.pl|Michał Tomana]] (4RI) |
| |
Translacja ARDML do innych formatów z użyciem XSLT. Ontologie, graphviz. | Translacja ARDML do innych formatów z użyciem XSLT. Ontologie, graphviz. |
| |
====== Spotkania ====== | Historia [[pl:miw:miw08_ard_xml:spotkania|spotkań]]. |
| |
===== 080304 ===== | |
* koncepcja przejścia ARD->[[http://www.w3.org/2004/OWL/|OWL]] (modelowanie słownika, vocabulary) | |
| |
| |
===== 080311 ===== | ====== Projekt ====== |
* j.w. + [[hekate:varda]] i [[hekate:hekate_case_thermostat]] | * 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]] |
| |
===== 080318 ===== | |
* próba preprezentacji w OWL pełnego modelu (VARDA/tic), [[hekate:hekate_markup_language|HML]] | |
Wątpliwości: | |
* co z powtarzającymi się nazwami? Time+Tepmeratore -> Time, Temperature (może to ta sama właściwość?) | |
* nomenklatura | |
| |
===== 080408 ===== | |
* właściwa repr w owl (att/prop) | |
* nie ma prefixow att/prop, uzywamy jakiegoś id | |
* prób zrobienia xslt hml(ardml) -> owl | |
| |
| ====== 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. |
| |
====== Projekt ====== | ==== Ontologia ==== |
| W ARD występują dwa rodzaje elementów: atrybuty (attributes) i właściwości (properties). W ontologii odpowiadają one klasom: |
| |
===== ARD Ontology. Abstract Syntax: ===== | <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> | <code> |
[Namespaces: | [Namespaces: |
owl = http://www.w3.org/2002/07/owl# | owl = http://www.w3.org/2002/07/owl# |
ard = https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_ard_xml# | rdfs = http://www.w3.org/2000/01/rdf-schema# |
| rdf = http://www.w3.org/1999/02/22-rdf-syntax-ns# |
] | ] |
| |
Ontology( | Ontology( |
Class(ard:attribute) | Class(ard:Attribute) |
Class(ard:property) | Class(ard:Property) |
| |
ObjectProperty(ard:is_attribute_of domain(ard:property) range(ard:attribute)) | ObjectProperty(ard:is_attribute_of domain(ard:Property) range(ard:Attribute)) |
ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of)) | ObjectProperty(ard:has_attribute inverseOf(ard:is_attribute_of)) |
| |
ObjectProperty(ard:depends_on domain(ard:property) range(ard:property)) | ObjectProperty(ard:depends_on domain(ard:property) range(ard:Property)) |
ObjectProperty(ard:is_prerequisite_for inverseOf(ard:property)) | ObjectProperty(ard:is_prerequisite_for inverseOf(ard:Property)) |
| |
ObjectProperty(ard:transformed_into domain(ard:property) range(property)) | ObjectProperty(ard:transformed_into domain(ard:Property) range(Property)) |
ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into)) | ObjectProperty(ard:transformed_from inverseOf(ard:transformed_into)) |
) | ) |
</code> | </code> |
| |
| Tworzenie instancji poszczególnych klas ma następującą postać: |
===== Thermostat example: ===== | |
| |
<code> | <code> |
[Namespaces: | Individual(ard:prp_1 type(ard:Property) |
owl = http://www.w3.org/2002/07/owl# | |
ard = https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_ard_xml# | |
] | |
| |
| |
| |
Ontology( | |
Individual(ard:att_0 type(ard:attribute) Label("Thermostat")) | |
Individual(ard:att_1 type(ard:attribute) Label("Time")) | |
Individual(ard:att_2 type(ard:attribute) Label("Temperature")) | |
Individual(ard:att_3 type(ard:attribute) Label("Date")) | |
Individual(ard:att_4 type(ard:attribute) Label("Hour")) | |
Individual(ard:att_5 type(ard:attribute) Label("season")) | |
Individual(ard:att_6 type(ard:attribute) Label("operation")) | |
Individual(ard:att_7 type(ard:attribute) Label("thermostat_settings")) | |
Individual(ard:att_8 type(ard:attribute) Label("day")) | |
Individual(ard:att_9 type(ard:attribute) Label("month")) | |
Individual(ard:att_10 type(ard:attribute) Label("today")) | |
Individual(ard:att_11 type(ard:attribute) Label("hour")) | |
| |
Individual(ard:prp_0 type(ard:property) | |
value(ard:has_attribute ard:att_0)) | |
| |
Individual(ard:prp_1 type(ard:property) | |
value(ard:has_attribute ard:att_1) | value(ard:has_attribute ard:att_1) |
value(ard:has_attribute ard:att_2) | value(ard:has_attribute ard:att_2) |
value(ard:transformed_from ard:prp_0)) | value(ard:transformed_from ard:prp_0)) |
| |
Individual(ard:prp_2 type(ard:property) | |
value(ard:has_attribute ard:att_1) | |
value(ard:transformed_from ard:prp_1)) | |
| |
Individual(ard:prp_3 type(ard:property) | |
value(ard:has_attribute ard:att_2) | |
value(ard:transformed_from ard:prp_1)) | |
| |
Individual(ard:prp_4 type(ard:property) | |
value(ard:has_attribute ard:att_3) | |
value(ard:has_attribute ard:att_4) | |
value(ard:has_attribute ard:att_5) | |
value(ard:has_attribute ard:att_6) | |
value(ard:transformed_from ard:prp_2)) | |
| |
Individual(ard:prp_5 type(ard:property) | |
value(ard:has_attribute ard:att_7) | |
value(ard:depends_on ard:prp_10) | |
value(ard:depends_on ard:prp_11) | |
value(ard:transformed_from ard:prp_3)) | |
| |
Individual(ard:prp_6 type(ard:property) | |
value(ard:has_attribute ard:att_3) | |
value(ard:has_attribute ard:att_4) | |
value(ard:transformed_from ard:prp_4)) | |
| |
Individual(ard:prp_7 type(ard:property) | |
value(ard:has_attribute ard:att_5) | |
value(ard:has_attribute ard:att_6) | |
value(ard:transformed_from ard:prp_4)) | |
| |
Individual(ard:prp_8 type(ard:property) | |
value(ard:has_attribute ard:att_3) | |
value(ard:transformed_from ard:prp_6)) | |
| |
Individual(ard:prp_9 type(ard:property) | |
value(ard:has_attribute ard:att_4) | |
value(ard:transformed_from ard:prp_6)) | |
| |
Individual(ard:prp_9 type(ard:property) | |
value(ard:has_attribute ard:att_4) | |
value(ard:transformed_from ard:prp_6)) | |
| |
Individual(ard:prp_10 type(ard:property) | |
value(ard:has_attribute ard:att_5) | |
value(ard:depends_on ard:prp_14) | |
value(ard:transformed_from ard:prp_7)) | |
| |
Individual(ard:prp_11 type(ard:property) | |
value(ard:has_attribute ard:att_6) | |
value(ard:depends_on ard:prp_17) | |
value(ard:depends_on ard:prp_13) | |
value(ard:transformed_from ard:prp_7)) | |
| |
Individual(ard:prp_12 type(ard:property) | |
value(ard:has_attribute ard:att_8) | |
value(ard:has_attribute ard:att_9) | |
value(ard:has_attribute ard:att_10) | |
value(ard:transformed_from ard:prp_8)) | |
| |
Individual(ard:prp_13 type(ard:property) | |
value(ard:has_attribute ard:att_11) | |
value(ard:transformed_from ard:prp_9)) | |
| |
Individual(ard:prp_14 type(ard:property) | |
value(ard:has_attribute ard:att_9) | |
value(ard:transformed_from ard:prp_12)) | |
| |
Individual(ard:prp_15 type(ard:property) | |
value(ard:has_attribute ard:att_8) | |
value(ard:has_attribute ard:att_10) | |
value(ard:transformed_from ard:prp_12)) | |
| |
Individual(ard:prp_16 type(ard:property) | |
value(ard:has_attribute ard:att_8) | |
value(ard:transformed_from ard:prp_15)) | |
| |
Individual(ard:prp_17 type(ard:property) | |
value(ard:has_attribute ard:att_10) | |
value(ard:depends_on ard:prp_16) | |
value(ard:transformed_from ard:prp_15)) | |
| |
Individual(ard:prp_18 type(ard:property)) | |
) | |
</code> | </code> |
| |
====== Sprawozdanie ====== | 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 ###). |
| |
| |
* [[wp>XSLT]], [[http://www.w3.org/TR/xslt20/|specyfikacja]]. | * [[wp>XSLT]], [[http://www.w3.org/TR/xslt20/|specyfikacja]]. |
| |
narzędzia: | [[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/ | * http://protege.stanford.edu/ |
| |
ARD: | ARD: |
* [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal-submitted|Towards Formalization of ARD+ Conceptual Design and Refinement Method]] | * [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal|Towards Formalization of ARD+ Conceptual Design and Refinement Method]] |
* [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog-submitted|An ARD+ Design and Visualization Toolchain Prototype in Prolog]] | * [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog|An ARD+ Design and Visualization Toolchain Prototype in Prolog]] |
* [[hekate:bib:hekate_bibliography#gjn2008flairs-userv-submitted|UServ Case Study, Conceptual Design with ARD+ Method]]. | * [[hekate:bib:hekate_bibliography#gjn2008flairs-userv|UServ Case Study, Conceptual Design with ARD+ Method]]. |
| |
| |
| |