This reasoner, implemented in Java, extends PELLET (OWL-DL reasoner) to reason on similarities. The provided API consists of a SPARQL interface which allows accessing the reasoner's functionalities pervasively.

Similarities can be defined according to the ontology similarity (examples in the file similarity.owl).

A full similarity (or similarity-on-undividual) can be defined as follows:

<owl:NamedIndividual rdf:about="">
    <rdf:type rdf:resource=""/>
    <similarTo rdf:resource=""/>

That OWL statement defines un1 as an uncertainty (uncertainElement) similar to Flavio (in the context of the ontology UC1).

Partial similarity (or similarity-on-property) can be defined as in the example below:

<owl:NamedIndividual rdf:about="">
    <rdf:type rdf:resource=""/>
    <similarTo rdf:resource=""/>
    <onProperty rdf:datatype=""></onProperty>
    <onProperty rdf:datatype=""></onProperty>

The individual un1 is stated similar to Flavio only on the properties detectedAt and lives.

Finally, similarity-on-value can be defined as follows:

<owl:NamedIndividual rdf:about="">
    <rdf:type rdf:resource=""/>
    <similarTo rdf:resource=""/>
    <onValue rdf:datatype="">,</onValue>

The individual un5 is declared similar to Mary but also of type surfer.

The class includes a simple code to reason on the similarities (defined in similarity.owl) in the context of the example ontology in the file UC1.owl.

Current version:

Previous versions:

Run the example below ( to quickly get started:

// The CONTEXT ontology + The SIMILARITY ontology
private String  ontology    = "file:///Users/spileggi/Desktop/UC1.owl";
private String  similarity  = "file:///Users/spileggi/Desktop/similarity.owl";

private String similarityPrefix = "";

String queryString =        
    "select ?surfer "+
    "where { "+
    "?surfer a <>  "+
    "} \n ";

public void run() {

    SFactorRS rs = new SFactorRS();
    SFactorRS rs1 = new SFactorRS();

    //The class similarityOnIndividual considers ONLY full similarities (similarity-on-individual)
    rs = new similarityOnIndividual(similarityPrefix).QueryOnSimilarity(ontology, similarity, queryString);

    /*The class similarityOnProperty processes both full similarities (similarity-on-individual)
    and partial similarities (similarity-on-property)*/

    rs1 = new similarityOnProperty(similarityPrefix).QueryOnSimilarity(ontology, similarity, queryString);