====== Hekate Translation Framework ======
//HaThoR// is an XML-based framework for knowledge translation from/to the [[Hekate Markup Language]] (DTD versioned in the HathoR CVS repo) to other formats, mainly:
* RDF, OWL -> attributes,
* RIF, SWRL (OWL) -> rules,
* XMI -> rules with tables,
* GraphViz -> ard/xtt (for presentation).
Currently the framework is in an alpha stage.
It can be used by registered developers on [[https://hekate.ia.agh.edu.pl/webtrans/|a dedicated page]].
The framework has been developed by Justyna Szostek Janik,
supervised by Grzegorz J. Nalepa.
HaThoR is part of [[HaDEs]].
See also the [[hekatedev:hathor|developemnt page.]]
===== UML-based Translation =====
UML-based Translators are based on //Analysis of UML Representation for XTT and ARD Rule Design Methods//
CSL Technical Report no. 5/2009 AGH University of Science and Technology (for [[http://cslab.ia.agh.edu.pl/csltr:listaraportow|more reports...]]):
* [[http://vtls.cyf-kr.edu.pl/cgi-bin/abc-k/chameleon?sessionid=2010010101371132340&skin=abc-k&lng=pl&inst=consortium&host=localhost%2b9898%2bDEFAULT&search=FREEFORM&function=CARDSCR&SourceScreen=NEXTPAGE&elementcount=1&t1=kol:KOL03%20%26%20bl:m&u1=0&pos=46&itempos=1&rootsearch=FREEFORM|ABC-KRAKOW record of the report]]
* [[http://winntbg.bg.agh.edu.pl/csl/csltr-5-2009.pdf|CSL Technical Report no. 5/2009 online]]
**Download**:
Translators: {{:hekate:translators.tar.gz}}
**Requirements**:
* The [[http://xmlsoft.org/XSLT/xsltproc2.html|xsltproc]] tool (or similar XSLT processor)
* hml.dtd file
**HOW TO**:
An exemplary translation from hml file to xmi file:
xsltproc translator.xsl hekate_case_nazwa.hml > hekate_case_nazwa.xmi
===== HaThoR v.2.0 =====
HaThoR (v.2.0) is a set of XSLT translators which translate (parts of) [[hekate:hekate_markup_language|HML]] files into other knowledge representation languages.
* Information about the first version of HaThoR can be found [[hekate:hathor|here]].
* Evaluation of the first version (including miw projects: [[pl:miw:2009:miw09_swrltrans|XTT->SWRL]] and [[pl:miw:miw08_xtt_rif|XTT->RIF]]) can be found [[hekatedev:hathor_evaluation|here]].
__HaThoR v.2.0 consists of the following translators:__
* ATTML -> OWL (RDF/XML syntax)
* ATTML -> OWL2 (RDF/XML syntax)
* ARDML -> OWL (RDF/XML syntax)
* ARDML -> OWL2 (RDF/XML syntax)
* XTTML -> SWRL (RDF/XML syntax)
* XTTML -> RIF Core
* XTTML -> RIF PRD
* STATE -> OWL (RDF/XML syntax)
* STATE -> OWL2 (RDF/XML syntax)
* HML -> SWRL/OWL (RDF/XML syntax)
* HML (without XTTML) -> OWL2 (RDF/XML syntax)
==== Download ====
{{:hekatedev:hathor2-final.tar.gz|}}
==== HaThoR online ====
[[http://home.agh.edu.pl/~wta/onto/hathor2/www/|HaThoR online]]
==== Cases ====
HeKatE cases:
* cardio
* cashpoint
* health
* hello
* thermostat
* upsell
Download: {{:hekatedev:hathor2-hekate-cases.tar.gz|hekate cases translated with hathor2}}
==== Translators - shortly ====
* **attml2owl1** [[http://home.agh.edu.pl/wta/onto/hathor2/attml2owl1.xsl|attml2owl1.xsl]]
* based on hathor1 by JSJ
* syntactic changes
* HML2 compliance
* some potentially misleading changes of datatype properties:
* range(ordered)={ordered,unordered} -> range(tpeIsOrdered)=boolean
* range(att_value)={single,multiple} -> range(attHasClass)={simple,general}
* range(att_class)={ro,rw,wo,state} -> range(attHasComm)={in,io,out,state}
* **attml2owl2** [[http://home.agh.edu.pl/wta/onto/hathor2/attml2owl2.xsl|attml2owl2.xsl]]
* hierarchy of types (SymbolicType, NumericType as subclasses of Type)
* datatypes (XSD) and value ranges in domain declarations
* **ardml2owl** [[http://home.agh.edu.pl/wta/onto/hathor2/ardml2owl1.xsl|ardml2owl1.xsl]]
* **ardml2owl2** [[http://home.agh.edu.pl/wta/onto/hathor2/ardml2owl2.xsl|ardml2owl2.xsl]]
* based on hathor1 by JSJ
* **xttml2rif** [[http://home.agh.edu.pl/wta/onto/hathor2/xtt2rif-prd-simple.xsl|xtt2rif-prd-simple.xsl]], [[http://home.agh.edu.pl/wta/onto/hathor2/xtt2rif-core.xsl|xtt2rif-core.xsl]]
* based on miw_08_rif (but it's for RIF-BLD)
* nested groups as in jsj-msc
* variables removed
* **xttml2swrl** [[http://home.agh.edu.pl/wta/onto/hathor2/xttml2swrl.xsl|xttml2swrl.xsl]]
* production rules can be encoded but will not work, as in [[https://ai.ia.agh.edu.pl/wiki/hekate:cases:hekate_case_upsell:start|Upsell case study]]
* no support for conditions like: attr > Tuesday (swrlb:greaterThan, SWRLJessTab)
* **state2owl** [[http://home.agh.edu.pl/wta/onto/hathor2/state2owl1.xsl|state2owl1.xsl]]
* **state2owl2** [[http://home.agh.edu.pl/wta/onto/hathor2/state2owl2.xsl|state2owl2.xsl]]
* ''attTakesValue(att,value)''
* **hml2owl2** [[http://home.agh.edu.pl/wta/onto/hathor2/hml2owl2.xsl|hml2owl2.xsl]]
* attml2owl2+ardml2owl2+state2owl2 (**NO RULES**)
* **hml2swrl** [[http://home.agh.edu.pl/wta/onto/hathor2/hml2swrl.xsl|hml2swrl.xsl]]
* attml2owl1+ardml2owl+xttml2swrl+state2owl1
==== Translators - more details ====
===Translation ATTML - OWL/RDF===
* The main classes are Attribute and Type.
* Class Attribute represents attributes from the ATTML ''attributes'' section, and types of attributes from ATTML ''types'' section are represented by subclasses of a class Type.
* Each type is represented by a class deriving from the superclass Type, and for each type an instance is generated
* there are main subclasses of the class Type NumericType and SymbolicType, thhey are created based on information from HML
* multiple properties for types and attributes (translated attributes of HML elements and ) - One can describe the attributes in details, e.g. the use of the attribute in the system, its type and class, description etc.
* in **attml2owl1** the domains are represented as strings, e.g. ''0-24''. In **atttml2owl2** the data ranges are used.
* in **attml2owl1** the domains are represented with properties (for each type a new property is defined), in **attml2owl2**, types are defined by the values they allow, e.g. ''Boolean ≡ tpeHasValues {0,1}''
===Translation ARDML - OWL/RDF===
* ARDML properties are represented in OWL as instances of a class Property.
* Relations between properties are represented using Objet Property ''hasAttribute'', ''dependsOn'' for dependencies betweeen attribute, and ''transformedInto'' for TPH relations.
===Translation XTTML - RIF ===
== RIF PRD ==
2 approaches: simple and frame-based
* simple: using representing attributes and their values by defining/using external predicates construct extensively
* attributes references are constanst identified with URIs (''rif:iri'')
* attributes' values are bound using predicates ''xtt:name_of_the_relation(attr,value_or_a_set)''
* frame-based: representing attributes as frames, //to be considered in future?//
General remarks (common for both translations):
* XTTML model as a RIF Group,
* XTT tables as RIF Nested Groups,
* XTT rules as RIF Rules; the rule conditions are placed in the '''' section, and the decisions in '''' realized in RIF ACTION_BLOCK
* Connections between XTT tables represented with ''xtt:link'' predicate (calling external action)
* Logical operators used in rule preconditions are externally defined using RIF '''' tag
* primitive datatypes as defined in RIF DTB
* new operators and predicates for XTT: ''**xtt:range**'' for ranges and ''**xtt:set**'' for sets {a,b,c} (previously: xtt:set and xtt:complex_set)
* in the decision part external actions are used - for better compatibility with RIF BLD and beause of the nuances of ''Assert'', ''Retract'', ''Modify'' (e.g. should we assert or modify the attribute value?)
* not compatible with other translations, but in this case I think it doesn't matter. In the end the others may change, in RIF alternative there are some interesting ideas, e.g:
* [[https://ai.ia.agh.edu.pl/wiki/pl:miw:miw08_xtt_rif#niuanse_zapisu_xtt_w_rif|attr in any]]
* problems: no RIF PRD Validators, only syntax checking (the translator produces valid XML documents)
== RIF Core ==
* based on the above translator, only some PRD constructs removed
* validated with [[http://idi.fundacionctic.org/rifle/validator.jsf|RIFLE Validator]] - yields analogous warnings as for the [[http://www.w3.org/2005/rules/test/repository/tc/|standard W3C RIF files...]] ;-)
===Translation XTTML - SWRL===
* no support for production rules in SWRL -> rules translated, and asserting new facts can be done (e.g. by JessSWRLTab in Protege), but updating an attribute value would not work
* translated rules' conditions: att=val,att>val,att
attTakesValue(att_10, "workday") ∧ attTakesValue(att_11, ?var_att_11) ∧ swrlb:lessThan(?var_att_11, "9") → attTakesValue(att_7, "not_during_business_hours")
* no support for symbolic ranges (e.g. att> Tuesday)
=== STATE - OWL ===
* A state of a system is modelled with the following properties (role assertions): ''attTakesValue(a,d)'' for simple attributes and ''attTakesValue(a,v1),attTakesValue(a,v2)...attTakesValue(a,vn)'' for generalized ones.
* each state in an instance of a class State,with a set of datatype property assertions: ''stDescibeAttribute(state,att)''