From 9061b7eaa8738cc647111988d1a91ff52f887305 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Sat, 12 Jul 2014 10:36:54 +0000 Subject: [PATCH] - documented the linkkey part - added some Cell grammar --- html/edoal.html | 180 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 164 insertions(+), 16 deletions(-) diff --git a/html/edoal.html b/html/edoal.html index c984ec0c..6a45216c 100644 --- a/html/edoal.html +++ b/html/edoal.html @@ -91,8 +91,8 @@ function primerOnLoad() { </script> </head> <body> -[<a href="http://alignapi.gforge.inria.fr/format.html">Alignment format</a>] -[<a href="http://alignapi.gforge.inria.fr/">API</a>] +[<a href="format.html">Alignment format</a>] +[<a href="index.html">API</a>] <h1 class="titre">EDOAL: Expressive and Declarative Ontology Alignment Language</h1> @@ -104,7 +104,7 @@ correspondences between the entities of different ontologies. Unlike other formats, the alignment vocabulary allows to represent complex correspondences allowing to precisely describe the relation between the entities. The alignment vocabulary extends -the <a href="http://alignapi.gforge.inria.fr/format.html">alignment format</a>.</p> +the <a href="format.html">alignment format</a>.</p> <!--dl> <dt><a href="#sec:purpose">Purpose</a></dt> @@ -128,7 +128,7 @@ the <a href="http://alignapi.gforge.inria.fr/format.html">alignment format</a>.< </pre> </div--> -<p>Representing ontology alignments is the general purpose of this vocabulary. Particularly, it extends the ontology <a href="http://alignapi.gforge.inria.fr/format.html">alignment format</a> in order to enable the representation of complex correspondences.</p> +<p>Representing ontology alignments is the general purpose of this vocabulary. Particularly, it extends the ontology <a href="format.html">alignment format</a> in order to enable the representation of complex correspondences.</p> <p>This format can be used for cases where expressing equivalence or subsumption between terms is not sufficient, when more precise relations need to be expressed. While term equivalence or subsumption might be enough for exchanging documents, more precise relations are needed to exchange and integrate data.</p> @@ -146,6 +146,8 @@ The alignment vocabulary has the following features: specified. Property values using different encoding or units can be aligned using transformations. The current version of Edoal only supports a limited kind of transformations. This will be improved soon.</li> + <li><b>Linkkeys</b> can be defined for expressing conditions under + which, instances of the aligned entities should be considered equivalent.</li> </ul> <div class="syntaxmenu"> @@ -177,7 +179,7 @@ The diagram below shows the vocabulary classes ??? </p--> <p> -While <i>Alignment</i> and <i>Cell</i> are described by the <a href="http://alignapi.gforge.inria.fr/format.html">alignment format</a>, we will focus here on the remaining classes.</p> +While <i>Alignment</i> and <i>Cell</i> are described by the <a href="format.html">alignment format</a>, we will focus here on the remaining classes.</p> <h3 id="ssec:namespaces">Namespaces</h3> <p> @@ -236,7 +238,7 @@ exemplified in the code below. ... </div></div> -<p>Details on each property are available on the <a href="http://alignapi.gforge.inria.fr/format.html">alignment format</a> page.</p> +<p>Details on each property are available on the <a href="format.html">alignment format</a> page.</p> <p>An alignment contains a set of correspondences (<tt>Cell</tt>s). Each cell can be linked to an alignment using the <tt>map</tt> property. @@ -253,15 +255,32 @@ Each cell can be linked to an alignment using the <tt>map</tt> property. <align:relation>=</align:relation> <align:measure rdf:datatype="&xsd;float">1.0</align:measure> <<b>edoal:transformation</b>>...</<b>edoal:transformation</b>> + <<b>edoal:linkkey</b>>...</<b>edoal:linkkey</b>> </align:Cell> </align:map> ... </div></div> +A <tt>Cell</tt> can only have +one <tt>entity1</tt>, <tt>entity2</tt>, <tt>relation</tt> +and <tt>measure</tt> property, though it may have +several <tt>transformation</tt> and <tt>linkkey</tt> properties. </p> +<div class="grammar"> +<u>corresp</u> ::= <Cell {rdf:about=" <u>URI</u> "} /> + <entity1> <u>entity</u> </entity1> + <entity2> <u>entity</u> </entity2> + <relation> <u>STRING</u> </relation> + <measure> <u>STRING</u> </measure> + (<transformation> <u>transformation</u> </transformation>)* + (<linkkey> <u>linkkey</u> </linkkey>)* + </Cell> +</div> + <p> As the example shows, the EDOAL vocabulary only appears within the -"entity" properties and very specificaly in the <tt>edoal:transformation</tt> -property. +"entity" properties and very specificaly in +the <tt>edoal:transformation</tt> and <tt>edoal:linkkey</tt> +properties. </p> <p> The correspondence between the two entities could have been expressed @@ -310,6 +329,8 @@ EDOALCell extends BasicCell Value implements <i>ValueExpression</i> Apply implements <i>ValueExpression</i> Transformation +Linkkey +Corresp TransfService implements <i>Clonable</i> <a href="sec:patterns">Variable</a> Comparator @@ -780,20 +801,15 @@ Transformations are expressed in the cell itself. Transformations do not express constraints on the classes or properties, but constraints on instances that should match. </p> - -<!-- JE: old stuff? --> -<!--div class="grammar"> -<u>transformation</u> ::= <Transformation edoal:operator=" <u>URI</u> " edoal:direction=" <u>STRING</u> "> - <arguments rdf:parseType="Collection"> <u>value</u>* </arguments> - </Transformation> -</div--> +<p> <div class="grammar"> <u>transformation</u> ::= <Transformation edoal:direction=" <u>STRING</u> "> <entity1> <u>entity</u> </entity1> <entity2> <u>entity</u> </entity2> </Transformation> +<i>with</i> <u>STRING</u> ::= 'o-' | '-o' </div> - +</p> <p> Transformations <!--are of two kinds, either XPath transformation functions can be used, or other transformation services -->can be invoked, for example for dynamic transformations like currency conversions (see <a href="#sec:examples">examples</a>).</p> @@ -823,6 +839,79 @@ The following correspondence shows an example of the use of data transformation: </div></div> +<h2 id="ssec:linkkeys">Linkkeys</h2> + +<p> +Linkkeys which are a generalisation to several data +sets of keys in relational databases. +A linkkey is a statement such as: +<center> +( {⟨<i>p</i><sub>1</sub>, <i>q</i><sub>1</sub>⟩,... ⟨<i>p</i><sub><i>n</i></sub>,<i>q</i><sub><i>n</i></sub>⟩} linkkey ⟨<i>c</i>, <i>d</i>⟩ ) +</center> +stating that whatever an instance of the class <i>c</i> has the same +values for +properties <i>p</i><sub>1</sub>,... <i>p</i><sub><i>n</i></sub> as an +instance of class <i>d</i> has for +properties <i>q</i><sub>1</sub>,... <i>q</i><sub><i>n</i></sub>, then +these two are the same entity. +</p> +<p> +Such keys are slightly more complex than in databases because in RDF +properties are not necessarily functional (they may have several +values) and their values may be other objects. For this reason, it is +necessary to indicate if it is required that all values must be the same +(eq) or if some of them must be the same (in). +</p> + +</p> +<p> +<div class="grammar"> +<u>linkkey</u> ::= <Linkkey {edoal:type=" <u>STRING</u> ">} + (<binding> <u>bindspec</u> <binding/>)* + </Linkkey> +<i>with</i> <u>STRING</u> ::= 'weak' | 'plain' (default) | 'strong' + +<u>bindspec</u> ::= <Corresp edoal:type=" <u>STRING</u> "> + <entity1> <u>entity</u> </entity1> + <entity2> <u>entity</u> </entity2> + </Corresp> +<i>with</i> <u>STRING</u> ::= 'in' | 'eq' +</div> +</p> +<p> +Linkkeys are primarily used for identifying identical objects. +For instance, it may be that a instance of the <i>Livre</i> class is +equivalent to an instance of the <i>Novel</i> class as soon as their +properties <i>auteur</i> and <i>titre</i> on the one side +and <i>creator</i> and <i>title</i> on the other side have the same values. +This is expressed in the following example: +<div class="rdfxmlDiv"> +The following correspondence shows an example of the use of data transformation: +<div class="rdfxml">RDF/XML Syntax</div> +<div class="rdfxml"> + <linkkey> + <Linkkey edoal:type="plain"> + <binding> + <Corresp edoal:type="in"> + <entity1><Relation rdf:about="auteur" /></entity1> + <entity2><Relation rdf:about="creator" /></entity2> + </Corresp> + </binding> + <binding> + <Corresp edoal:type="eq"> + <entity1><Property rdf:about="titre" /></entity1> + <entity2><Property rdf:about="title" /></entity2> + </Corresp> + </binding> + </Linkkey> + </linkkey> +</div></div> +</p> +<p> +It is then possible to identify duplicates or to +generate <tt>owl:sameAs</tt> links. +</p> + <h2 id="sec:examples">Longer examples</h2> <p>The best examples are the alignment files found in the @@ -1498,6 +1587,56 @@ the EDOAL API requires complete knowledge of the alignment. </dl> </div> +<div class="vocab"> +<h3>Class: <a name="Linkkey">Linkkey</a></h3> +<dl> +<dt>URI</dt><dd><a href="#Linkkey">http://ns.inria.org/edoal/1.0/#Linkkey</a></dd> +<!--dt>superclasses</dt><dd><a href="#Value">Value</a></dd--> +<dt>properties</dt><dd><a href="#type">type</a>, <a href="#binding">binding</a></dd> +<dt>see also</dt><dd><a href="#ssec:linkkeys">Linkkey section</a></dd> +</dl> +</div> + +<div class="vocab"> +<h3>Relation: <a name="binding">binding</a></h3> +<dl> +<dt>URI</dt><dd><a href="#binding">http://ns.inria.org/edoal/1.0/#binding</a></dd> +<!--dt>superclasses</dt><dd><a href="#Value">Value</a></dd--> +<dt>domain</dt><dd><a href="#Linkkey">Linkkey</a></dd> +<dt>range</dt><dd><a href="#Corresp">Corresp</a></dd> +<dt>see also</dt><dd><a href="#ssec:linkkeys">Linkkey section</a></dd> +</dl> +</div> + +<div class="vocab"> +<h3>Class: <a name="Corresp">Corresp</a></h3> +<dl> +<dt>URI</dt><dd><a href="#Corresp">http://ns.inria.org/edoal/1.0/#Corresp</a></dd> +<dt>properties</dt><dd><a href="#type">type</a>, <a href="#entity1">entity1</a>, <a href="#entity2">entity2</a></dd> +<dt>see also</dt><dd><a href="#ssec:linkkeys">Linkkey section</a></dd> +</dl> +</div> + +<div class="vocab"> +<h3>Relation: <a name="entity1">entity1</a></h3> +<dl> +<dt>URI</dt><dd><a href="#entity1">http://ns.inria.org/edoal/1.0/#entity1</a></dd> +<dt>domain</dt><dd><a href="#Corresp">Corresp</a></dd> +<dt>range</dt><dd><a href="#Attribute">Attribute</a></dd> +<dt>see also</dt><dd><a href="#ssec:linkkeys">Linkkey section</a></dd> +</dl> +</div> + +<div class="vocab"> +<h3>Relation: <a name="entity2">entity2</a></h3> +<dl> +<dt>URI</dt><dd><a href="#entity1">http://ns.inria.org/edoal/1.0/#entity2</a></dd> +<dt>domain</dt><dd><a href="#Corresp">Corresp</a></dd> +<dt>range</dt><dd><a href="#Attribute">Attribute</a></dd> +<dt>see also</dt><dd><a href="#ssec:linkkeys">Linkkey section</a></dd> +</dl> +</div> + <div class="vocab"> <h3>Class: <a name="Comparator">Comparator</a></h3> <dl> @@ -1512,11 +1651,14 @@ the EDOAL API requires complete knowledge of the alignment. </dl> </div> +<p> +Not yet declared: <div class="vocab"> Transformation TransfService implements <i>Clonable</i> <a href="sec:patterns">Variable</a> </pre></div> +</p> <h2>History</h2> @@ -1539,6 +1681,12 @@ It has now been redesigned and reimplemented under the name of EDOAL. It is a plain component of the Alignment API and is maintained together with it. </p> +<p> +The linkkey idea has been promoted by Jérôme Euzenat, +further refined with Jérôme David and Manuel Atencia +and finally implemented in the Alignment API (version 4.7) by Nicolas +Guillouet. +</p> <h2>Thanks</h2> -- GitLab