====== 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]].