From 9d86566ce7a911968257dc98d5563f5392ee25e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Wed, 17 Mar 2010 14:47:34 +0000
Subject: [PATCH] - tutorial update for version 4.0 (unfinished)

---
 html/tutorial/tutorial3/embed.html | 137 ++++++++++++++++++++++++-----
 html/tutorial/tutorial3/index.html |  17 ++--
 2 files changed, 123 insertions(+), 31 deletions(-)

diff --git a/html/tutorial/tutorial3/embed.html b/html/tutorial/tutorial3/embed.html
index 9ff98681..97281561 100644
--- a/html/tutorial/tutorial3/embed.html
+++ b/html/tutorial/tutorial3/embed.html
@@ -61,27 +61,36 @@ $ javac -classpath ../../lib/align.jar:../../lib/procalign.jar -d results Skelet
 $ java -cp ../../lib/Procalign.jar:results Skeleton file://$CWD/myOnto.owl file://$CWD/edu.mit.visus.bibtex.owl
 </div>
 
-<p>Now considering the <abbr>API</abbr> (that can be consulted through
-  its
-  thin <a href="../../javadoc/org/semanticweb/owl/align/Alignment.html">Javadoc</a>
-  for instance), can you modify the Skeleton program so that it performs the following:</p>
+<p>Now considering the <abbr>API</abbr> (that can be consulted through its
+ thin <a href="../../../javadoc/org/semanticweb/owl/align/Alignment.html">Javadoc</a>
+ for instance), can you modify the Skeleton program so that it performs the following:</p>
 <ul>
-  <li>Run two different alignment methods (e.g., ngram distance and smoa);</li>
-  <li>Merge the two results;</li>
-  <li>Trim at various thresholds;</li>
-  <li>Evaluate them against the reference alignment and choose the one with the best F-Measure;</li>
-  <li>Displays it as <acronym title="The web ontology language OWL">OWL</acronym> Rules.</li>
+<li>Run two different alignment methods (e.g., ngram distance and smoa);</li>
+<li>Merge the two results;</li>
+<li>Trim at various thresholds;</li>
+<li>Evaluate them against the reference alignment and choose the one with the best F-Measure;</li>
+<li>Displays it as <acronym title="The web ontology language OWL">OWL</acronym> axioms.</li>
 </ul>
 
 <p>Of course, you can do it progressively.</p>
 
 <h2>Call an alignment method</h2>
-	
-<div class="fragment">
-$ javac -classpath ../../lib/align.jar:../../lib/procalign.jar -d results MyApp.java
-$ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$CWD/edu.mit.visus.bibtex.owl > results/MyApp.owl
-</div>
 
+<p>
+Matching two ontologies is achieved with three steps:
+<ul>
+<li>creating an instance of the class implementing the expected method
+  (implementing the <tt>AlignmentProcess</tt> interface);</li>
+<li>providing the two ontologies to match to this instance (<tt>init</tt>);</li>
+<li>calling the matching method (<tt>align</tt>).</li>
+</ul>
+The matching method takes two arguments: an eventual alignment to
+improve on (which can be null) a set of parameters
+</p>
+
+<p>
+Below, two different methods (<tt>StringDistAlignment</tt> with two
+different <tt>stringFunction</tt> parameters) are instantiated and run:
 <div class="fragment">
   // Run two different alignment methods (e.g., ngram distance and smoa)
   AlignmentProcess a1 = new StringDistAlignment();
@@ -94,9 +103,23 @@ $ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$
   params.setParameter("stringFunction","ngramDistance");
   a2.align( (Alignment)null, params );
 </div>
-
+After this step, the two matching methods have been processed and the
+result is available within the alignment instances (<tt>a1</tt>
+and <tt>a2</tt>).
+</p>
 
 <h2>Manipulate alignments (merge and trim)</h2>
+
+<p>
+Alignments offer methods to manipulate these alignments. In
+particular, it is possible to
+<ul>
+<li>clone alignments,</li>
+<li>invert alignments (change the order of ontologies),</li>
+<li>merge alignments (put all their correspondences together),</li>
+<li>trim them under various threshold and threshold modalities.</li>
+</ul>
+</p>
 	
 <div class="fragment">
   // Merge the two results.
@@ -106,17 +129,51 @@ $ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$
 </div>
 
 <h2>Evaluating alignments</h2>
-	
+
+<p>
+Alignments can also be evaluated. For that purpose, the API provides
+the <tt>Evaluator</tt> interface. Similarly,
+to <tt>AlignmentProcess</tt>, this interface is called by:
+<ul>
+<li>creating an instance of a particular <tt>Evaluator</tt> taking as
+  argument a reference alignment and the alignment to evaluate;</li>
+<li>processing the evaluation (<tt>eval()</tt>) eventually with a parameter.</li>
+</ul>
+</p>
+
+<p>
+Below the provided code first creates a parser for loading the
+reference alignment, then creates an instance
+of <tt>PRecEvaluator</tt> for computing precision and recall between
+the alignment <tt>a1</tt> above with respects to the reference alignment.
 <div class="fragment">
   // Evaluate them against the references
   // and choose the one with the best F-Measure
   AlignmentParser aparser = new AlignmentParser(0);
   Alignment reference = aparser.parse( (new File ( "refalign.rdf" ) ) . toURL() . toString());
+
   Evaluator evaluator = new PRecEvaluator( reference, a1 );
+  Parameters p = new BasicParameters();
+  evaluator.eval( p );
+</div>
+As previously, results are stored within the <tt>Evaluator</tt> object
+and are accessed through specific accessors.
+</p>
 
+<p>
+As an excercise, one could try to trim the alignment <tt>a1</tt> with
+thresholds of 0., .2, .4, .6, .8, and 1., to evaluate these results
+for precision and recall and to select the one with the best
+F-measure.
+</p>
+<div class="button">
+  <input type="button" onclick="show('qu5')" value="Show result"/>
+  <input type="button" onclick="hide('qu5')" value="Hide result"/>
+</div>
+<div class="explain" id="qu5">
+<pre>
   double best = 0.;
   Alignment result = null;
-  Parameters p = new BasicParameters();
   for ( int i = 0; i <= 10 ; i += 2 ){
     a1.cut( ((double)i)/10 );
     evaluator = new PRecEvaluator( reference, a1 );
@@ -127,22 +184,45 @@ $ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$
        best = ((PRecEvaluator)evaluator).getFmeasure();
     }
   }
+</pre>
 </div>
 
 <h2>Displaying an alignment</h2>
-	
-<div class="fragment">
+
+<p>
+Finally, alignments can be displayed through a variety of formats
+through the <tt>AlignmentVisitor</tt> abstraction. Alignment are
+displayed by:
+<ul>
+<li>creating a <tt>PrintWriter</tt> in which the visitor will print,</li>
+<li>creating the <tt>AlignmentVisitor</tt> on this writer, and</li>
+<li>rendering the alignment (through the <tt>render()</tt> metthod).</li>
+</ul>
+</p>
+<p>
+
+<p>
+For instance, it is possible to print on the standard output the
+alignment selected at the previous exercise as a set of OWL axioms.
+</p>
+<div class="button">
+  <input type="button" onclick="show('qu6')" value="Show result"/>
+  <input type="button" onclick="hide('qu6')" value="Hide result"/>
+</div>
+<div class="explain" id="qu6">
+<pre>
   // Displays it as OWL Rules
   PrintWriter writer = new PrintWriter (
 		        new BufferedWriter(
 	                 new OutputStreamWriter( System.out, "UTF-8" )), true);
   AlignmentVisitor renderer = new OWLAxiomsRendererVisitor(writer);
-  a1.render(renderer);
+  result.render(renderer);
   writer.flush();
   writer.close();
+</pre>
 </div>
 
-<h2>Putting them together</h2>
+<h2>Putting these together</h2>
 	
 <p>Do you want to see a possible solution?</p>
 <div class="button">
@@ -194,6 +274,15 @@ $ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$
   writer.flush();
   writer.close();
 </pre></div>
+
+<p>
+This can be compiled and used through:
+</p>
+<div class="fragment">
+$ javac -classpath ../../lib/align.jar:../../lib/procalign.jar -d results MyApp.java
+$ java -cp ../../lib/Procalign.jar:results MyApp file://$CWD/myOnto.owl file://$CWD/edu.mit.visus.bibtex.owl > results/MyApp.owl
+</div>
+
 <p>The execution provides an insight about the best threshold:
 <pre>
 Threshold 0.0 : 0.4693877551020408 over 148 cells
@@ -221,9 +310,9 @@ Threshold 1.0 : 0.5151515151515151 over 18 cells
 	
 <hr />
 <small>
-<p style="text-align: center;">http://alignapi.gforge.inria.fr/tutorial/tutorial3/embed.html</p>
-</small>
+<div style="text-align: center;">http://alignapi.gforge.inria.fr/tutorial/tutorial3/embed.html</div>
 <hr />
-<p>$Id$</p>
+<div>$Id$</div>
+</small>
 </body>
 </html>
diff --git a/html/tutorial/tutorial3/index.html b/html/tutorial/tutorial3/index.html
index 7ef4d992..e98e6c9c 100644
--- a/html/tutorial/tutorial3/index.html
+++ b/html/tutorial/tutorial3/index.html
@@ -140,6 +140,8 @@ of <tt>URIAlignment</tt> implementing <tt>AlignmentProcess</tt>.
 <div class="fragment">
 package fr.inrialpes.exmo.align.impl; 
 
+import java.util.Properties;
+
 import org.semanticweb.owl.align.Alignment;
 import org.semanticweb.owl.align.AlignmentProcess;
 import org.semanticweb.owl.align.AlignmentException;
@@ -252,11 +254,12 @@ you to implement many more methods and other classes.
 <p>
 Maybe it is not enough, or not efficient enough.
 In this case, the best way is to start from one of our class
-implementing alignments:
+implementing <tt>Alignment</tt>:
 <ul>
-<li><tt>BasicAlignment</tt></li>
-<li><tt>URIAlignment</tt></li>
-<li><tt>ObjectAlignment</tt></li>
+<li><tt>fr.inrialpes.exmo.align.impl.BasicAlignment</tt></li>
+<li><tt>fr.inrialpes.exmo.align.impl.URIAlignment</tt></li>
+<li><tt>fr.inrialpes.exmo.align.impl.ObjectAlignment</tt></li>
+<li><tt>fr.inrialpes.exmo.align.impl.edoal.EDOALAlignment</tt></li>
 </ul>
 and extend it so that it implements your matcher.
 This is the example given in the
@@ -358,9 +361,9 @@ The API features a DistanceAlignment abstract class that can be specialised for
 
 <hr />
 <small>
-<p style="text-align: center;">http://alignapi.gforge.inria.fr/tutorial/tutorial3/</p>
-</small>
+<div style="text-align: center;">http://alignapi.gforge.inria.fr/tutorial/tutorial3/</div>
 <hr />
-<p>$Id$</p>
+<div>$Id$</div>
+</small>
 </body>
 </html>
-- 
GitLab