diff --git a/html/img/alterator.png b/html/img/alterator.png new file mode 100644 index 0000000000000000000000000000000000000000..485be5071e62d3718ef60e670bae14cc3277a275 Binary files /dev/null and b/html/img/alterator.png differ diff --git a/html/img/testgeneration.png b/html/img/testgeneration.png new file mode 100644 index 0000000000000000000000000000000000000000..32746cbe634bd85100ecd76072ce100deffe80af Binary files /dev/null and b/html/img/testgeneration.png differ diff --git a/html/img/testset.png b/html/img/testset.png new file mode 100644 index 0000000000000000000000000000000000000000..b59e4894770b81027a075bbcd1d541a0fd7c0912 Binary files /dev/null and b/html/img/testset.png differ diff --git a/html/index.html b/html/index.html index 024597ab3647e49c138cf2a784937e4f0c8579a8..a50b1932389b57c0c26fe2d2d0c5f55b6482d5d2 100644 --- a/html/index.html +++ b/html/index.html @@ -10,8 +10,6 @@ [<a href="http://gforge.inria.fr/frs/?group_id=117">Download</a>] [<a href="align.html">Install & use</a>] [<a href="tutorial/">Tutorial</a>] -[<a - href="http://gforge.inria.fr/docman/index.php?group_id=117&selected_doc_group_id=1812">Documentation</a>] [<a href="relnotes.html">Release notes</a>] [<a href="http://gforge.inria.fr/scm/?group_id=117">SVN access</a>] [<a href="aserv.html">Server</a>] @@ -87,12 +85,12 @@ cannot find such a paper about the Alignment API or one of its sample matcher). <dd>Official releases.</dd> <dt><a href="align.html">Install & use</a></dt> <dd>Quick start with the API.</dd> -<dt><a href="aserv.html">Alignment Server</a></dt> -<dd>Installing a server that will generate and store alignments</dd> <dt><a href="tutorial/">Tutorial</a></dt> <dd>Walk through the Alignment API features</dd> -<dt><a href="http://gforge.inria.fr/docman/index.php?group_id=117&selected_doc_group_id=1812">Documentation</a></dt> -<dd>Supposed to be a reference manual, but not fully complete.</dd> +<!--dt><a href="http://gforge.inria.fr/docman/index.php?group_id=117&selected_doc_group_id=1812">Documentation</a></dt> +<dd>Supposed to be a reference manual, but not fully complete.</dd--> +<dt><a href="aserv.html">Alignment Server</a></dt> +<dd>Installing a server that will generate and store alignments</dd> </dl> </p> @@ -103,7 +101,7 @@ cannot find such a paper about the Alignment API or one of its sample matcher). <dt><a href="ontowrap.html">Wrapping ontology APIs</a></dt> <dd>The package contains an ontology API wrapper called ontowrap allowing for using the Alignment API with various ontology APIs - (JENA, OWL API 1.0, 3.0, soon SKOS).</dd> + (JENA, OWL API 1.0, 3.0, SKOS API and our SKOSLite API).</dd> <dt><a href="format.html">Alignment format</a> and the <a href="edoal.html">Expressive and Declarative Ontology Alignment Language (EDOAL)</a></dt> <dd>How to express alignments that the API can input or output.</dd> @@ -112,8 +110,8 @@ the <a href="edoal.html">Expressive and Declarative Ontology Alignment Language <dt><a href="labels.html">Registered annotations</a></dt> <dd>List of extension labels that are declared (and should not be used by others)</dd> -<dt><a href="eval.html">Eval</a></dt> -<dd>Using the API for evaluating alignments.</dd> +<dt><a href="testgen.html">Generating tests</a> and <a href="eval.html">evaluating results</a></dt> +<dd>Using the API for evaluating alignments and matchers.</dd> </dl></p> <h2>Additional resources</h2> @@ -139,6 +137,8 @@ the <a href="edoal.html">Expressive and Declarative Ontology Alignment Language <p><dl> <dt><a href="neontk/">NeOn Alignment plug-in</a></dt> <dd>Alignment API and server plug-in for the NeOn toolkit.</dd> +<dt><a href=""></a>Microalign</dt> +<dd>Stripped down Alignment API and implementation for Android.</dd> </dl> </p> diff --git a/html/relnotes.html b/html/relnotes.html index 6dbccac139f5f05a596d40df2d3b4b8dd789227d..f5675535396266f8010b1f4b0798fb8e45055480 100644 --- a/html/relnotes.html +++ b/html/relnotes.html @@ -63,6 +63,12 @@ with a warning: <h2>Current SVN trunk version</h2> +<!--h2>Version 4.4 (): ??/??/2012 - ?????????</h2--> + +<p><ul compact="1"> +<li>Simplified <tt>TestGen</tt> options (cli)</li> +</ul></p> + <h2>Version 4.3 (1690): 22/02/2012 - Zimt</h2> <p><span style="color: red;">BEWARE:</span> All command-line utilities diff --git a/html/testgen.html b/html/testgen.html index d497a20bb827d2e557836633fb818b2f62f435bd..49dd5f3d991252459d537bcfae431497c04e3b5b 100644 --- a/html/testgen.html +++ b/html/testgen.html @@ -16,162 +16,306 @@ <p>It allows for generating altered ontologies from a seed ontology and generating the reference alignment between the two ontologies).</p> -<h2>Using predefined alterators</h2> +<h2>Generating tests</h2> + +<h3>Generating tests from the command line</h3> + +<center> +<img width="72%" src="img/testgeneration.png"> +</center> +<p> +It is possible to use the command line command <tt>TestGen</tt> in +order to generate tests. +</p> +<p> +It can be invoked for generating only one test: +<div class="fragment"> +$ java -Xmx1200m -cp $JAVALIB/procalign.jar fr.inrialpes.exmo.align.cli.TestGen -u outputurl -o outputdir -Dparameter=value seedontology +</div> +such that: +<ul> +<li>seed ontology is the ontology which is altered for producing the test;</li> +<li>outputurl is the url prefix that will be used for the generated ontology;</li> +<li>outputdir is the directory in which the test will be generated;</li> +<li>-Dparameter=value are the parameters used for generating this tests (see Alterator section below)</li> +</ul> +For instance: +<div class="fragment"> +$ java -Xmx1200m -cp $JAVALIB/procalign.jar fr.inrialpes.exmo.align.cli.TestGen -u http://example.com/mynewtest -o mynewtest -DremoveComments=1. -DrenameClasses=.75 -DremoveProperties=.5 biblio.owl +</div> +</p> +<p> +It may also be used for generating a whole test set (see below) by: +<div class="fragment"> +$ java -Xmx1200m -cp $JAVALIB/procalign.jar fr.inrialpes.exmo.align.cli.TestGen -t testsetclass -u outputurl -o outputdir seedontology +</div> +In which, testsetclass is the class name of an implementation +of <tt>TestSet</tt> (see below) to be used for generating a testset. +For instance: +<div class="fragment"> +$ java -Xmx1200m -cp $JAVALIB/procalign.jar fr.inrialpes.exmo.align.cli.TestGen -t fr.inrialpes.exmo.align.gen.BenchmarkGenerator -u http://example.com/mynewtestset -o mynewtestset -Dcontinuous=1 biblio.owl +</div> +generates part of the initial <a href="http://oaei.ontologymatching.org">OAEI</a> benchmarks. +</p> + +<h3>Generating tests from Java</h3> <p> -Alterators are simple classes, implementing the <tt>Alterator</tt> interface +The equivalent to the command line invokations may be obtained in Java +by the simple: +<div class="owl" id="qu1"><pre> +TestGenerator tg = new TestGenerator(); +tg.setDirPrefix( dir ); +tg.setURLPrefix( url ); +tg.modifyOntology( fileName, (Properties)null, testNumber, params ); +</pre></div> +for generating only one test, and +<div class="owl" id="qu1"><pre> +TestSet gb = new BenchmarkGenerator(); +gb.generate( params ); +</pre></div> +for generating a test set (here <tt>BenchmarkGenerator</tt>). </p> +<h2>Ontology alterators</h2> + +<p> +The tests are generated from the notion of <tt>Alterators</tt>. +Ontology alterators are classes, implementing +the <tt>Alterator</tt> interface. +</p> +<center> +<img width="36%" src="img/alterator.png"> +</center> +<p> +The test framework is based on the notion of <tt>Alterator</tt> instances of +the <tt>fr.inrialpes.exmo.align.gen.Alterator</tt>. An +alterator, takes as input an ontology (Jena <tt>OntModel</tt>) and an +alignment (<tt>Alignment</tt>) and generates an altered ontology and +alignment. Following the schema of the figure. +</p> + +<h3>Predefined alterators</h3> + <p> The available predefined alterators are: <dl> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> -<dt></dt> -<dd></dd> +<dt>EmptyModification []</dt> +<dd>generates a test in which the initial ontology is not + altered. This test is used in test sets (see below), for the root test.</dd> +<!--dt>AddClassLevel [addClassLevel=<i>p.n</i>]</dt> +<dd>adds at level <i>p</i> (from the top) of the class hierarchy </dd--> +<dt>AddClasses [addClasses=<i>p</i>]</dt> +<dd>adds <i>p</i>% classes.</dd> +<dt>AddProperties [addProperties=<i>p</i>]</dt> +<dd>adds <i>p</i>% properties.</dd> +<dt>FlattenLevel [levelFlattened=<i>n</i>]</dt> +<dd>removes all classes of level <i>n</i> (their subclasses are + directly conenected to their superclasses).</dd> +<!--dt>RemoveClassLevel []</dt> +<dd></dd--> +<dt>RemoveClasses [removeClasses=<i>p</i>]</dt> +<dd>removes <i>p</i>% of classes.</dd> +<dt>RemoveComments [removeComments=<i>p</i>]</dt> +<dd>removes <i>p</i>% of comments.</dd> +<dt>RemoveIndividuals [removeIndividuals=<i>p</i>]</dt> +<dd>removes <i>p</i>% of individuals.</dd> +<dt>RemoveProperties [removeProperties=<i>p</i>]</dt> +<dd>removes <i>p</i>% of properties.</dd> +<dt>RemoveRestrictions [removeRestrictions=<i>p</i>]</dt> +<dd>removes <i>p</i>% of restriction.</dd> +<dt>RenameClasses [renameClasses=<i>p</i>]</dt> +<dd>renames <i>p</i>% of classes in various ways [default: random]</dd> +<dt>RenameProperties [renameProperties=<i>p</i>]</dt> +<dd>renames <i>p</i>% of properties in various ways [default: random]</dd> +<dt>SuppressHierarchy [noHierarchy]</dt> +<dd>suppresses all subclasses relations (but to owl:Thing)</dd> </dl> </p> -<h3>Benchmark generator</h3> +<h3>Adding new alterators</h3> + +<p> +The alterator interface is rather complex. +However, most of the functions of alterators are available in +the <tt>BasicAlterator</tt>, so that creating a new alterator requires +only to write the <tt>modify( Properties )</tt> method if it extends +<tt>BasicAlterator</tt>. +</p> +<p> +An alterator follows a particulat lifecycle: +</p> +<h4>Creation</h4> +<p> +The Alterator is created either: +<ul> +<li>from a seed ontology and generate the alignment between this ontology itself</li> +<li>from a previous alterator from which it will take the output ontology and alignment as input.</li> +</ul> +So a "virtual" constructor should be provided in which the alterator +is created from a previous alterator: +<div class="owl" id="qu1"><pre> +public Alterator( Alterator om ); +</pre></div> +</p> +<p> +Once this has been done, it is possible to retrieve the namespace of +the input ontology (which is the target of the previous alignment if +an alterator has been used for creating the alignment): +<div class="owl" id="qu1"><pre> +public String getNamespace(); +</pre></div> +and the namespace of the source ontology in the input alignment +<div class="owl" id="qu1"><pre> +public String getBase(); +</pre></div> +</p> + +<h4>Modification</h4> + +<p>The <tt>modify</tt> method applies the alteration to the input: +<div class="owl" id="qu1"><pre> +public Alterator modify( Properties params ); +</pre></div> +The results are kept in internal structures which, in the case +of <tt>BasicAlterator</tt> have the following accessors: +<div class="owl" id="qu1"><pre> +public Properties getProtoAlignment(); +public OntModel getProtoOntology(); +public ClassHierarchy getHierarchy(); +</pre></div> +</p> + +<h4>Relocation</h4> + +<p> +It is often useful to relocate the results, i.e., to change their +namespaces in both the ontologies and alignments to output. This is +achieved with the following methods (the namespaces are those of the +source and target ontology respectively): +<div class="owl" id="qu1"><pre> +public void relocateTest( String namespace1, String namespace2 ); +public void relocateTest( String namespace2 ); +</pre></div> +</p> + +<h4>Exporting the results</h4> <p> -The BenchmarkGenerator class is an example of a whole test set +Finally, results can be obtained through the two following primitives: +<div class="owl" id="qu1"><pre> +public Alignment getAlignment(); +public OntModel getModifiedOntology(); +</pre></div> +</p> + +<h2>Test sets</h2> + +<p> +Full test sets can be generated from one seed ontology (see Figure). For that +purpose, the structure of the test set is defined through a +structure which described how a test is generated from scratch or from +other tests in the test set. +</p> +<center> +<img width="72%" src="img/testset.png"> +</center> +<p> +From this structure it is possible to generate the test set with +different modalities which are specified through parameters. +</p> + +<h3>Predefined test sets</h3> + +<h4>Benchmark generator</h4> + +<p> +The <tt>BenchmarkGenerator</tt> class is an example of a whole test set defined at once. It combines various alterators in a specified way. This can be applied to any seed ontology (that Jena is able to parse). -It can be invoked from the command line through: -<pre> -$ java -Xmx1200m -cp $JAVALIB/procalign.jar fr.inrialpes.exmo.align.cli.TestGen -m generateBenchmark -u outputurl -o outputdir -i seedontology -</pre> </p> -<h3>Designing a whole test set</h3> +<h4>Adaptive benchmark generator</h4> -<p> -Designing a whole test set can be achived as it is done for -Benchmarks, by instantiating the <tt>TestSet</tt> class and creating -a hierarchy of tests (each one built from another; but this can be -achieved by having all tests generated from the init ontology). -</p> +<p>Not available yet.</p> -<h3>Adaptive benchmark generator</h3> +<h4>Hidden ontology generator</h4> <p>Not available yet.</p> -<h3>Hidden ontology generator</h3> +<h3>Adding new test sets</h3> -<p>Not available yet.</p> +<p> +Designing a whole test set can be achieved, as it is done for +Benchmarks, by extending the <tt>TestSet</tt> class and creating +a hierarchy of tests (each one built from another; but this can be +achieved by having all tests generated from the init ontology). +</p> + +<p> +New test sets can be obtained by extending the <tt>TestSet</tt> +abstract class. The only abstract method is: +<div class="owl" id="qu1"><pre> +public abstract void initTestCases( Properties params ); +</pre></div> +It creates a structure comprising the test cases as a hierarchy with +an initial test (which will bear the initial ontology): +<div class="owl" id="qu1"><pre> +TestCase initTests( String labelInitTest ); +</pre></div> +and other tests derived from the initial one through alterations: +<div class="owl" id="qu1"><pre> +void addTestChild( String labelParentTest, String labelNewTest, + Properties alterationSpecification ); +</pre></div> +<tt>initTestCases</tt> is only used for creating this structure which +will be later processed to generate a particular test from a precise +seed ontology and various modalities (in particular if each test will +be generated intependently of the others (random) or if they will be +generated incrementally by further alterating previous tests (continuous). +</p> <h2>Ontology network alterators</h2> -<h2>Creating a simple test</h2> - - -<h2>Extending the test generation framework</h2> - -<p>The test framework is based on the notion of Alterator instances of - the <tt>fr.inrialpes.exmo.align.gen.Alterator</tt>. An - alterator, takes as input an ontology (Jena <tt>OntModel</tt>) and an - alignment (<tt>Alignment</tt>) and generates an altered ontology and - alignment.</p> -<p> -So its interface is : - - -/** - * An abstract test generator which takes as input an ontology and an - * alignment between this ontology and another one and transform the - * ontology and the alignment accordingly to a type of alteration. - * - * It follows a particular lifecycle - */ -public interface Alterator { - - /** - * It is created either: - * - from a seed ontology and generate the alignment between this - * ontology itself - * - from a previous alterator from which it will take the output - * ontology and alignment as input. - */ - //public Alterator( Alterator om ); - - /** - * the namespace of the input ontology - */ - public String getNamespace(); - /** - * the namespace of the source ontology in the input alignment - */ - public String getBase(); - - /** - * modify applies the alteration to the input (the results are kept in - * internal structures. - */ - public Alterator modify( Properties params ); - - // Temporary - /** - * getProtoAlignment, getProtoOntology, getHierarchy - * are used for accessing these internal structure at creation time. - */ - public Properties getProtoAlignment(); - public OntModel getProtoOntology(); - public ClassHierarchy getHierarchy(); - - /** - * Modifies the namespaces of source and target ontologies - * (for the main purpose of outputing them) - */ - public void relocateTest( String namespace1, String namespace2 ); - public void relocateTest( String namespace2 ); - - /** - * Returns the altered Alignment and Ontology in output form - */ - public Alignment getAlignment(); - public OntModel getModifiedOntology(); - -</p> -<p> -Most of the functions of alterators are available in -the <tt>BasicAlterator</tt>, so that creating a new alterator requires -only to write the <tt>modify( Properties )</tt> method if it extends -<tt>BasicAlterator</tt>. +<p> +Ontology network alterators obey to the <tt>OntologyNetworkWeakener</tt> interface. +This interface is very simple since it consists of one single +method: <tt>weaken</tt> taking as argument an onology network, an int +(absolute value) or a double (percentage) characterizing the amount of +alteration and a set of optional parameters in a <tt>Properties</tt> +object. +Each alterator returns a brand new ontology network with eventually +modified alignments. +</p> +<p> +Ontology network alterators cannot be obtained at command line. +</p> +<h3>Predefined network alterators</h3> +<p> +Some alterators are available with the Alignment API implementation: +<dl> +<dt>NetworkAlignmentDropper</dt> +<dd>randomly drops <i>n</i>% of all alignments in the network. <i>n</i> is a number between 0. and 1. +</dd> +<dt>NetworkAlignmentWeakener</dt> +<dd>suppresses <i>n</i>% of the correspondences at random in each alignments. <i>n</i> is a number between 0. and 1. +A <tt>threshold</tt> parameter tells if the corrrespondences are suppressed at random (false) of by suppressing the <i>n</i>% of lower confidence (true) +</dd> +<dt>NetworkCorrespondenceDropper</dt> +<dd>suppresses <i>n</i>% of the correspondences at random in all alignments (globally). <i>n</i> is a number between 0. and 1. a <tt>threshold</tt> parameter tells if the corrrespondences are suppressed at random (false) of by suppressing the <i>n</i>% of lower confidence (true). +</dd> +<dt>NetworkDeconnector</dt> +<dd>(Not implemented) suppresses alignments in the ontology network so that it retain <i>n</i>-connectivity, i.e., any pairs of ontologies connected by less than <i>n</i> alignments are still connected through at most <i>n</i> alignments. +</dd> +<!--dt>OntologyNetworkGenerator</dt> +<dd></dd--> +</dl> </p> +<!--h3>Adding new network alterators</h3--> + <address> <small> <hr />