Both sides previous revision
Previous revision
Next revision
|
Previous revision
|
hekate:hekate_markup_language [2008/01/24 13:45] wojnicki |
hekate:hekate_markup_language [2019/06/27 15:49] (current) |
| |
====== Hekate Markup Language ====== | ====== Hekate Markup Language ====== |
| |
===== 1. ARDML basic use ===== | The //Hekate Markup Language (HML)// is provided for the machine readable XML serialization of the HeKatE rule base described in a human-readable [[HMR]] format. |
**Tag sequence is required.** | |
| The rules are formalized with the use of the [[hekate:ALSVFD]] logic |
| and [[hekate:XTT2]] rules |
| prototyped with the [[hekate:ARDplus]] method. |
| |
| There are the following subsets of the HeKatE Markup Language defined: |
| * ''attml'' -- Attribute Markup Language for describing rule [[hekate:attributes]] |
| * ''ardml'' -- Attribute Relationship Markup Language for the [[hekate:ARDplus]] prototype |
| * ''xttml'' -- XTT2 Rule Markup Language for the [[hekate:XTT2]] structured rule representation |
| |
| The sublanguages can be used according to the following scenarios: |
| - ''attml'' -- only attribute definition, the minimalistic case |
| - ''attml'' + ''ardml'' -- attributes and ARD dependencies |
| - ''attml'' + ''ardml'' + ''xttml'' -- attributes, dependencies and XTT2 rules |
| - ''attml'' + ''xttml'' -- attributes and rules, (without the ARD prototype) |
| |
| A HML application using all sublanguages is as follows: |
| |
<code xml> | <code xml> |
| <hml> |
| <!-- attml starts here --> |
| <types> |
| ... |
| </types> |
| |
<attml version="1.0"> | <attributes> |
<att name="Thermostat"> | ... |
| </attributes> |
| <!-- attml ends here --> |
| |
</att> | <!-- ardml starts here --> |
</attml> | <properties> |
| ... |
| </properties> |
| |
<ardml version="1.0"> | <tph> |
<property_list> | ... |
<property pid="p1"> | </tph> |
<attref name="Thermostat"/> | |
</property> | |
<property pid="p2"> | |
<attref name="Time"/> | |
<attref name="Temp"/> | |
</property> | |
<property pid="p3"> | |
<attref name="Time"/> | |
</property> | |
<property pid="p4"p> | |
<attref name="Temp"/> | |
</property> | |
<property pid="p5"> | |
<attref name="therm_sett"/> | |
</property> | |
</property_list> | |
| |
<tph> | <ard> |
<trans src="p1" dst="p2"/> | ... |
<trans src="p2" dst="p3"/> | </ard> |
<trans src="p2" dst="p4"/> | <!-- ardml ends here --> |
<trans src="p4" dst="p5"/> | |
</tph> | |
| |
<ard> | <!-- xttml starts here --> |
<dep independent="p1" dependent="p2"/> | <xtt> |
<dep independent="p1" dependent="p2"/> | ... |
<dep independent="p2" dependent="p3"/> | </xtt> |
<dep independent="p3" dependent="p4"/> | <!-- xttml ends here --> |
<dep independent="p2" dependent="p4"/> | |
</ard> | |
</ardml> | |
| |
| <!-- extra system state specification --> |
| <states> |
| </states> |
| </hml> |
</code> | </code> |
| |
===== 2. Properties defining ===== | The current version is referred to as //HML2// |
| (the first one is [[HML1]], see below). |
| |
| ===== HeKatE markup history===== |
| |
| The markup for the various knowledge representations now present in HeKatE has been evolving. |
| * 2004 - first markup for XTT in GJN PhD -> XTTML0 |
| * 2007 - first markup for ARD+ in VARDA |
| * 2007 - second version of markup for XTT in early versions of HQEd -> XTTML |
| * 2007 - third version of markup for XTT in HQEd M5_* -> XTTML2 |
| * 2008 - first version markup proposal for HeKatE, ARD+, XTT+ -> [[HML1]]: ATTML1, ARDML1, XTTML3 (proposal for XTT+, partially supported by design tools) |
| * 2009 - second version of HML, ARD+ XTT2 -> HML2: ATTML2, ARDML2, XTTML4 (supported by HQEd M6_* from 05.2009) |
| |
| |
| ===== HML syntax ===== |
| |
| HeKatE markup language DTD: (for HML2). |
| |
| For syntax test purposes there is an example XML file:{{:hekate:hml-test-hekate_case_thermostat.xml|}} |
| A minimalistic file is: {{:hekate:hml-test-min.xml}} |
| |
| //(Note: the above files are versioned in the HaDEs CVS repo in the [[HatHoR]] module.)// |
| |
| Important elements are indexed with an attribute ''id''. |
| ''id'' value has to be unique (enforced by DTD) and should start with (depending on particular element): |
| * types: ''id="tpe_..."'' |
| * attributes: ''id="att_..."'' |
| * properties: ''id="prp_..."'' |
| * type groups: ''id="tgr_..."'' |
| * attribute groups: ''id="agr_..."'' |
| * dependencies: ''id="dep_..."'' |
| * ARD history (TPH): ''id="hst_..."'' |
| //All id numbers start with 1// |
| |
| An additional attribute (''id'') is introduced to guarantee that types, attributes, properties and groups can be uniquely referenced. |
| It can be forced, using DTD, that an attribute has a unique value within an XML document, it becomes a unique identifier. |
| Similarly, it can be forced that an attribute references an element by its unique identifier. |
| Making attribute names unique identifiers prevents naming a group, or type, with the same name as the attribute, since unique identifiers are unique within entire document regardless of the element they regard to. |
| |
| It is possible to validate a HML file using a validator i.e. ''xmlstarlet'': |
| |
| xmlstarlet val -e -d hml.dtd hml-test.xml |
| |
| ===== ATTML ===== |
| |
| For information on attributes [[hekate:attributes|see here]]. |
| |
Basic syntax: | |
<code xml> | <code xml> |
<property_list> | |
<property pid="p1"> | <types> |
<attref name="aname_1_1"/> | <type id="tpe_1" name="Temperature" base="numeric" length="5" scale="0"> |
... | <desc>represents a temperature</desc> |
<attref name="aname_1_n"/> | <domain> |
</property> | <value from="1" to="5"/> |
... | <value is="7" /> |
<property pid="pn"> | <value from="20" to="22"/> |
<attref name="aname_n_1"/> | <value is="26" /> |
... | <value is="27" /> |
<attref name="aname_n_m"/> | </domain> |
</property> | </type> |
</property_list> | <type id="tpe_2" name="Integer" base="numeric" length="5" scale="0"> |
| <desc>represents an integer number</desc> |
| <domain> |
| <value from="-10000" to="10000"/> |
| </domain> |
| </type> |
| </types> |
| |
| <attributes> |
| <attr id="att_1" type="tpe_1" name="temp" abbrev="t1" class="simple" comm="in"> |
| <desc>input temperature from sensor number 1</desc> |
| </attr> |
| <attr id="att_2" type="tpe_1" name="temp-aux" abbrev="t1a" class="general" comm="in"> |
| <desc>input temperature from sensor number 1, aux reading, including historic data</desc> |
| </attr> |
| |
| <agroup id="grp_1" name="sensors" abbrev="sns"> |
| <desc>temperatures from sensors</desc> |
| <attref ref="att_1"/> |
| <attref ref="att_2"/> |
| </agroup> |
| |
| </attributes> |
</code> | </code> |
| |
* Properties are defined in **<property_list>...</property_list>** section. This section must contain all properties which are used in ARD diagram. | Both in the case of //types// and //attributes// groups can be specified. |
* Single property is defined by **<property>** tag, with following parameters: | Example: types day, hour, month can form a type group //date//. |
| The same could apply to specific attributes. |
| In the example above there is set of attributes describing sensor readings formed out of values of temp and corresponding temp-aux. |
| Attributes in groups and types are //ordered//. |
| |
^Parameter name ^Required ^Description ^ | |
|pid |(necessary) |defines property name tag.\\ __Value type:__ **string**.\\ __Constraints:__ **no constraints**.| | |
| |
* Single property contains any number of attributes. List of attributes we can define by **<attref>** tag with following parameters: | ===== ARDML ===== |
| For ARD see [[hekate:ardplus]] |
^Parameter name ^Required ^Description ^ | and |
|name |(necessary) |defines attribute name.\\ __Value type:__ **string**.\\ __Constraints:__ **no spaces allowed**.| | [[hekate:bib:hekate_bibliography#gjn2008flairs-ardformal]] |
| [[hekate:bib:hekate_bibliography#gjn2008flairs-ardprolog]] |
| |
| <code xml> |
| |
| <hml> |
| <types> |
| ... |
| </types> |
| |
| <attributes> |
| <attr name="Thermostat" id="att_0"/> |
| <attr name="Time" ... /> |
| </attributes> |
| |
| <properties> |
| <property id="prp_1"> |
| <attref ref="att_0"/> |
| </property> |
| <property id="prp_2"> |
| <attref ref="att_0"/> |
| <attref ref="att_1"/> |
| </property> |
| <property id="prp_3"> |
| <attref ref="att_0"/> |
| </property> |
| <property id="prp_4"> |
| <attref ref="att_1"/> |
| </property> |
| <property id="prp_5"> |
| <attref ref="att_0"/> |
| </property> |
| </properties> |
| |
| <tph> |
| <hist id="hst_01" src="prp_1" dst="prp_2"/> |
| <hist id="hst_02" src="prp_2" dst="prp_3"/> |
| <hist id="hst_03" src="prp_2" dst="prp_4"/> |
| <hist id="hst_04" src="prp_4" dst="prp_5"/> |
| </tph> |
| |
| <ard> |
| <dep id="dep_01" independent="prp_1" dependent="prp_2"/> |
| <dep id="dep_02" independent="prp_2" dependent="prp_3"/> |
| <dep id="dep_03" independent="prp_3" dependent="prp_4"/> |
| <dep id="dep_04" independent="prp_2" dependent="prp_4"/> |
| </ard> |
| |
===== 3. TPH diagram defining ===== | ... |
| ... |
| </hml> |
| </code> |
| |
| ==== Defining ARD+ Properties ==== |
| |
| Basic syntax: |
| <code xml> |
| <properties> |
| <property id="prp_1"> |
| <attref ref="att_0"/> |
| ... |
| <attref ref="att_ad003"/> |
| </property> |
| ... |
| <property id="prp_2"> |
| <attref ref="att_44"/> |
| ... |
| <attref ref="att_2"/> |
| </property> |
| </properties> |
| </code> |
| |
| * Properties are defined in ''<properties>...</properties>'' section. This section must contain all properties which are being used in an ARD diagram. |
| * Single property is defined by ''<property>'' tag |
| * Single property contains any number of attributes. A list of attributes is defined by ''<attref>'' |
| |
| ==== Defining TPH Diagram ==== |
Basic syntax: | Basic syntax: |
| |
<code xml> | <code xml> |
<tph> | <tph> |
<trans src="p1" dst="p2"/> | <hist src="prp_1" dst="prp_2"/> |
<trans src="p2" dst="p3"/> | <hist src="prp_2" dst="prp_3"/> |
<trans src="p2" dst="p4"/> | <hist src="prp_2" dst="prp_4"/> |
... | ... |
<trans src="pn" dst="pm"/> | <hist src="prp_n" dst="prp_m"/> |
</tph> | </tph> |
</code> | </code> |
| |
| * TPH diagram is definied in ''<tph>...</tph>'' section. TPH diagram contains relationships called transformations. |
| * A transformation is defined with the ''<hist>'' tags and it describes the development between a source (''src'') and destination (''dst'') properties. |
| |
* TPH diagram is definied in **<tph>...</tph>** section. TPH diagram contains relations called branches. | |
| |
* Branch defining begins the **<trans>** tag, which has following parameters: | |
| |
^Parameter name ^Required ^Description ^ | |
|src |(necessary) |defines parent in relations parent-child.\\ __Value type:__ **string**.\\ __Constraints:__ **the attribute which has name tag equal to parameter parent value must be defined earlier in <properties> section**.| | |
|dst |(necessary) |defines child in relations parent-child.\\ __Value type:__ **string**.\\ __Constraints:__ **the attribute which has name tag equal to parameter child value must be defined earlier in <properties> section**.| | |
| |
===== 4. Dependencies defining ===== | ==== Defining Dependencies ==== |
**Basic syntax:** | Basic syntax: |
| |
<code xml> | <code xml> |
<ard> | <ard> |
<dependency independent="p1" dependent="p2"/> | <dep independent="prp_1" dependent="prp_2"/> |
<dependency independent="p2" dependent="p3"/> | <dep independent="prp_2" dependent="prp_3"/> |
... | ... |
<dependency independent="px" dependent="py"/> | <dep independent="prp_x" dependent="prp_y"/> |
... | ... |
<dependency independent="px" dependent="pz"/> | <dep independent="prp_x" dependent="prp_z"/> |
</ard> | </ard> |
</code> | </code> |
| |
* Dependencies definig begins **<ard>** tag. This tag hasn't parameters. Each dependence is defined as pair of properties, where the first **independent** is the property tag name independed from the second property **dependent**. | * ARD dependencies begin with the ''<ard>'' tag. The tag does not have attributes. Each dependence is defined with a a pair of properties: an ''independent'' and a ''dependent'' one. |
| |
| |
| |
| ===== XTTML ===== |
| |
| For information on the XTT itself [[hekate:xtt2|see here]]. |
| |
| <code xml> |
| <xtt> |
| <table id="tab_1" name="first"> |
| <schm> |
| <precondition> |
| <attref ref="att_1"/> |
| </precondition> |
| <conclusion> |
| <attref ref="att_0"/> |
| </conclusion> |
| </schm> |
| <rule id="rul_1"> |
| <condition> |
| <relation name="in"> |
| <attref ref="att_0"/> |
| <set> |
| <value from="1" to="5"/> |
| <value is="8"/> |
| </set> |
| </relation> |
| </condition> |
| <decision> |
| <trans> |
| <attref ref="att_1"/> |
| <expr name="add"> |
| <attref ref="att_1"/> |
| <value is="1"/> |
| </expr> |
| </trans> |
| <trans> |
| <attref ref="att_1"/> |
| <expr name="add"> |
| <value is="5"/> |
| <expr name="sin"> |
| <attref ref="att_0"/> |
| </expr> |
| </expr> |
| </trans> |
| </decision> |
| <link> |
| <tabref ref="tab_1"/> |
| </link> |
| </rule> |
| </table> |
| </xtt> |
| </code> |
| |
| An XTT diagram (''xtt'' element) consists of some number of XTT tables (the ''table'' element). |
| The above example can be read as: |
| |
| <code> |
| xtt_1: |
| rule_1: if att_0 in <1,5>u{8} then att_1 = att_0 + 1 and att_1 = 5 + sin(att_0) |
| </code> |
| |
| ==== Schema ==== |
| |
| Element ''schem'' describes precondition and conclusion attributes that are allowed to be used in a particular XTT table. |
| The schema is generated by the ARD->XTT transition algorithm directly from ARD. |
| |
| ==== Rule ==== |
| |
| A rule (''rule'') consists of a condition (''condition'') part and a decision part (''decision''). |
| The condition is composed of the [[hekate:ALSVFD]] formulas, that specify certain''relation''s between attribute values and given set of values. |
| |
| The decision part is decomposed into two parts: |
| * state ''trans''istion that can specify new state (attribute values), and |
| * external ''action'' to be executed; it is assumed it does //not// infulences the state in any way. |
| |
| Each rule can explicitly transef the inference to a next table (possibly also a rule). |
| |
| ===== State specification ===== |
| |
| Number of named system states can also be specified. |
| A single state is a vector of attribute values. |
| |
| <code xml> |
| <states> |
| <state id="sta_1" name="start"> |
| <attref ref="att_0"/> |
| <set> |
| <value from="1" to="5"/> |
| <value is="8"/> |
| </set> |
| <attref ref="att_1"/> |
| <set> |
| <value from="1" to="5"/> |
| </set> |
| </state> |
| </states> |
| </code> |
| |
| ===== HML implementation and support ===== |
| HML is used to serialize the knowledge in the HeKatE project in a machne redable format. |
| It is used to interchange knowledge between the tools forming the [[HaDEs]] framework. |
| |
| HML syntax has been designed to: |
| * correspond to the logical system formulation with [[hekate:XTT2]] based on the [[hekate:ALSVfd]] logics, and |
| * match the syntax of //HMR// (the HeKatE Meta Representation) as supported by //[[hekate:HeART]]// - the HeKatE runTime environment. |
| |
^Parameter name ^Required ^Description ^ | |
|independent |(necessary) |defines property independent from property defined as **dependent**.\\ __Value type:__ **string**.\\ __Constraints:__ **the property which has //pid// tag equal to parameter independent value must be defined earlier in <properties> section**.| | |
|dependent |(necessary) |defines property dependent from property defined as **independent**.\\ __Value type:__ **string**.\\ __Constraints:__ **the property which has //pid// tag equal to parameter dependent value must be defined earlier in <properties> section**.| | |
| |