Skip to content

Instantly share code, notes, and snippets.

@stetro
Created June 20, 2015 15:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stetro/5266c9d020bd11025e08 to your computer and use it in GitHub Desktop.
Save stetro/5266c9d020bd11025e08 to your computer and use it in GitHub Desktop.
Jena Reasoning
apply plugin: 'java'
version = '1.0'
repositories {
mavenCentral()
}
dependencies {
compile('org.apache.jena:apache-jena:2.13.0')
}
package de.fhkoeln.stetro.reasoning;
import com.hp.hpl.jena.rdf.model.*;
import com.hp.hpl.jena.reasoner.Reasoner;
import com.hp.hpl.jena.reasoner.ReasonerRegistry;
import com.hp.hpl.jena.reasoner.ValidityReport;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.vocabulary.RDFS;
public class JenaMain {
public static final String NAMESPACE = "example.org/";
public static final String TRAVEL_NAMESPACE = "http://www.owl-ontologies.com/travel.owl#";
public static void main(String[] args) {
simpleJenaReasoningExample();
extendedJenaReasoningExample();
}
private static void extendedJenaReasoningExample() {
Model ontology = FileManager.get().loadModel("file:travel.owl");
Resource fourSeasons = ontology.getResource(TRAVEL_NAMESPACE + "FourSeasons");
Property hasRating = ontology.getProperty(TRAVEL_NAMESPACE + "hasRating");
System.out.println(fourSeasons.getProperty(hasRating));
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel infOntology = ModelFactory.createInfModel(reasoner, ontology);
Resource infFourSeasons = infOntology.getResource(TRAVEL_NAMESPACE + "FourSeasons");
Property infHasRating = infOntology.getProperty(TRAVEL_NAMESPACE + "hasRating");
System.out.println(infFourSeasons.getProperty(infHasRating));
}
private static void simpleJenaReasoningExample() {
// Build a trivial example data set
Model ontology = ModelFactory.createDefaultModel();
Resource person = ontology.createResource(NAMESPACE + "Person");
Resource cat = ontology.createResource(NAMESPACE + "Cat");
Property hasPet = ontology.createProperty(NAMESPACE, "has_pet");
Property likes = ontology.createProperty(NAMESPACE, "likes");
ontology.add(hasPet, RDFS.subPropertyOf, likes);
person.addProperty(hasPet, cat);
ontology.write(System.out, "Turtle");
System.out.println();
System.out.println("Statement: " + person.getProperty(likes));
System.out.println("Statement: " + person.getProperty(hasPet));
System.out.println();
Reasoner reasoner = ReasonerRegistry.getOWLReasoner();
InfModel infOntology = ModelFactory.createInfModel(reasoner, ontology);
ValidityReport validate = infOntology.validate();
System.out.println("Valide?: " + (validate.isValid() ? "Yes" : "No"));
System.out.println("Clean?: " + (validate.isClean() ? "Yes" : "No"));
Resource infPerson = infOntology.getResource(NAMESPACE + "Person");
System.out.println();
System.out.println("Statement: " + infPerson.getProperty(likes));
System.out.println("Statement: " + infPerson.getProperty(hasPet));
System.out.println();
infOntology.write(System.out,"Turtle");
}
}
<?xml version="1.0" ?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:daml="http://www.daml.org/2001/03/daml+oil#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://www.owl-ontologies.com/travel.owl#"
xml:base="http://www.owl-ontologies.com/travel.owl">
<owl:Ontology rdf:about="">
<owl:versionInfo rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>1.0 by Holger Knublauch (holger@smi.stanford.edu)</owl:versionInfo>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>An example ontology for tutorial purposes.</rdfs:comment>
</owl:Ontology>
<owl:Class rdf:ID="Sunbathing">
<rdfs:subClassOf>
<owl:Class rdf:about="#Relaxation"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Accommodation">
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A place to stay for tourists.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="QuietDestination">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:ID="Destination"/>
<owl:Class>
<owl:complementOf>
<owl:Class rdf:about="#FamilyDestination"/>
</owl:complementOf>
</owl:Class>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A destination that is not frequented by noisy families.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="BackpackersDestination">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Destination"/>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
<owl:someValuesFrom>
<owl:Class rdf:about="#BudgetAccommodation"/>
</owl:someValuesFrom>
</owl:Restriction>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class>
<owl:unionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Sports"/>
<owl:Class rdf:about="#Adventure"/>
</owl:unionOf>
</owl:Class>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A destination that provides budget accommodation and offers sport or adventure activities.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="Sports">
<owl:disjointWith>
<owl:Class rdf:about="#Adventure"/>
</owl:disjointWith>
<owl:disjointWith>
<owl:Class rdf:about="#Relaxation"/>
</owl:disjointWith>
<owl:disjointWith>
<owl:Class rdf:about="#Sightseeing"/>
</owl:disjointWith>
<rdfs:subClassOf>
<owl:Class rdf:ID="Activity"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Yoga">
<rdfs:subClassOf>
<owl:Class rdf:about="#Relaxation"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="BudgetAccommodation">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Accommodation"/>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<AccommodationRating rdf:ID="OneStarRating">
<owl:differentFrom>
<AccommodationRating rdf:ID="ThreeStarRating">
<owl:differentFrom>
<AccommodationRating rdf:ID="TwoStarRating">
<owl:differentFrom rdf:resource="#OneStarRating"/>
<owl:differentFrom rdf:resource="#ThreeStarRating"/>
</AccommodationRating>
</owl:differentFrom>
<owl:differentFrom rdf:resource="#OneStarRating"/>
</AccommodationRating>
</owl:differentFrom>
<owl:differentFrom rdf:resource="#TwoStarRating"/>
</AccommodationRating>
<AccommodationRating rdf:about="#TwoStarRating"/>
</owl:oneOf>
</owl:Class>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasRating"/>
</owl:onProperty>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>Accommodation that has either one or two star rating.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="LuxuryHotel">
<rdfs:subClassOf>
<owl:Class rdf:about="#Hotel"/>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:hasValue rdf:resource="#ThreeStarRating"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasRating"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="FamilyDestination">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Destination"/>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
<owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>1</owl:minCardinality>
</owl:Restriction>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
<owl:minCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#int"
>2</owl:minCardinality>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A destination with at least one accommodation and at least 2 activities.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="Beach">
<rdfs:subClassOf rdf:resource="#Destination"/>
</owl:Class>
<owl:Class rdf:ID="Hotel">
<owl:disjointWith>
<owl:Class rdf:about="#BedAndBreakfast"/>
</owl:disjointWith>
<owl:disjointWith>
<owl:Class rdf:about="#Campground"/>
</owl:disjointWith>
<rdfs:subClassOf rdf:resource="#Accommodation"/>
</owl:Class>
<owl:Class rdf:ID="Museums">
<rdfs:subClassOf>
<owl:Class rdf:about="#Sightseeing"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="BudgetHotelDestination">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Destination"/>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#BudgetAccommodation"/>
<owl:Class rdf:about="#Hotel"/>
</owl:intersectionOf>
</owl:Class>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A destination with a hotel that is also a budget accommodation.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="City">
<rdfs:subClassOf>
<owl:Class rdf:about="#UrbanArea"/>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
<owl:someValuesFrom rdf:resource="#LuxuryHotel"/>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="AccommodationRating">
<owl:equivalentClass>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<AccommodationRating rdf:about="#OneStarRating"/>
<AccommodationRating rdf:about="#TwoStarRating"/>
<AccommodationRating rdf:about="#ThreeStarRating"/>
</owl:oneOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>Consists of exactly three individuals.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="BedAndBreakfast">
<owl:disjointWith rdf:resource="#Hotel"/>
<rdfs:subClassOf rdf:resource="#Accommodation"/>
<owl:disjointWith>
<owl:Class rdf:about="#Campground"/>
</owl:disjointWith>
</owl:Class>
<owl:Class rdf:ID="Campground">
<rdfs:subClassOf>
<owl:Restriction>
<owl:hasValue rdf:resource="#OneStarRating"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasRating"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<owl:disjointWith rdf:resource="#BedAndBreakfast"/>
<rdfs:subClassOf rdf:resource="#Accommodation"/>
<owl:disjointWith rdf:resource="#Hotel"/>
</owl:Class>
<owl:Class rdf:ID="Safari">
<rdfs:subClassOf>
<owl:Class rdf:about="#Adventure"/>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Class rdf:about="#Sightseeing"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="RuralArea">
<rdfs:subClassOf rdf:resource="#Destination"/>
<owl:disjointWith>
<owl:Class rdf:about="#UrbanArea"/>
</owl:disjointWith>
</owl:Class>
<owl:Class rdf:ID="RetireeDestination">
<owl:equivalentClass>
<owl:Class>
<owl:intersectionOf rdf:parseType="Collection">
<owl:Class rdf:about="#Destination"/>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
<owl:someValuesFrom>
<owl:Restriction>
<owl:hasValue rdf:resource="#ThreeStarRating"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasRating"/>
</owl:onProperty>
</owl:Restriction>
</owl:someValuesFrom>
</owl:Restriction>
<owl:Restriction>
<owl:someValuesFrom>
<owl:Class rdf:about="#Sightseeing"/>
</owl:someValuesFrom>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
</owl:Restriction>
</owl:intersectionOf>
</owl:Class>
</owl:equivalentClass>
<rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
>A destination with at least one three star accommodation and sightseeing opportunities.</rdfs:comment>
</owl:Class>
<owl:Class rdf:ID="Relaxation">
<owl:disjointWith rdf:resource="#Sports"/>
<owl:disjointWith>
<owl:Class rdf:about="#Sightseeing"/>
</owl:disjointWith>
<owl:disjointWith>
<owl:Class rdf:about="#Adventure"/>
</owl:disjointWith>
<rdfs:subClassOf rdf:resource="#Activity"/>
</owl:Class>
<owl:Class rdf:ID="Capital">
<rdfs:subClassOf>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#Museums"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf rdf:resource="#City"/>
</owl:Class>
<owl:Class rdf:ID="Hiking">
<rdfs:subClassOf rdf:resource="#Sports"/>
</owl:Class>
<owl:Class rdf:ID="UrbanArea">
<owl:disjointWith rdf:resource="#RuralArea"/>
<rdfs:subClassOf rdf:resource="#Destination"/>
</owl:Class>
<owl:Class rdf:ID="BunjeeJumping">
<rdfs:subClassOf>
<owl:Class rdf:about="#Adventure"/>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Adventure">
<owl:disjointWith rdf:resource="#Sports"/>
<rdfs:subClassOf rdf:resource="#Activity"/>
<owl:disjointWith>
<owl:Class rdf:about="#Sightseeing"/>
</owl:disjointWith>
<owl:disjointWith rdf:resource="#Relaxation"/>
</owl:Class>
<owl:Class rdf:ID="Contact"/>
<owl:Class rdf:ID="NationalPark">
<rdfs:subClassOf rdf:resource="#RuralArea"/>
<rdfs:subClassOf>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#Campground"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasAccommodation"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
<rdfs:subClassOf>
<owl:Restriction>
<owl:someValuesFrom rdf:resource="#Hiking"/>
<owl:onProperty>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:onProperty>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:Class rdf:ID="Town">
<rdfs:subClassOf rdf:resource="#UrbanArea"/>
</owl:Class>
<owl:Class rdf:ID="Sightseeing">
<owl:disjointWith rdf:resource="#Sports"/>
<rdfs:subClassOf rdf:resource="#Activity"/>
<owl:disjointWith rdf:resource="#Relaxation"/>
<owl:disjointWith rdf:resource="#Adventure"/>
</owl:Class>
<owl:Class rdf:ID="Farmland">
<rdfs:subClassOf rdf:resource="#RuralArea"/>
</owl:Class>
<owl:Class rdf:ID="Surfing">
<rdfs:subClassOf rdf:resource="#Sports"/>
</owl:Class>
<owl:ObjectProperty rdf:ID="isOfferedAt">
<rdfs:range rdf:resource="#Destination"/>
<rdfs:domain rdf:resource="#Activity"/>
<owl:inverseOf>
<owl:ObjectProperty rdf:about="#hasActivity"/>
</owl:inverseOf>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasRating">
<rdfs:range rdf:resource="#AccommodationRating"/>
<rdfs:domain rdf:resource="#Accommodation"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasActivity">
<owl:inverseOf rdf:resource="#isOfferedAt"/>
<rdfs:range rdf:resource="#Activity"/>
<rdfs:domain rdf:resource="#Destination"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasContact">
<rdfs:range rdf:resource="#Contact"/>
<rdfs:domain rdf:resource="#Activity"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasAccommodation">
<rdfs:range rdf:resource="#Accommodation"/>
<rdfs:domain rdf:resource="#Destination"/>
</owl:ObjectProperty>
<owl:ObjectProperty rdf:ID="hasPart">
<rdfs:range rdf:resource="#Destination"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#TransitiveProperty"/>
<rdfs:domain rdf:resource="#Destination"/>
</owl:ObjectProperty>
<owl:DatatypeProperty rdf:ID="hasCity">
<rdfs:domain rdf:resource="#Contact"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
</owl:DatatypeProperty>
<owl:DatatypeProperty rdf:ID="hasEMail">
<rdfs:domain rdf:resource="#Contact"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
</owl:DatatypeProperty>
<owl:FunctionalProperty rdf:ID="hasZipCode">
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
<rdfs:domain rdf:resource="#Contact"/>
</owl:FunctionalProperty>
<owl:FunctionalProperty rdf:ID="hasStreet">
<rdfs:domain rdf:resource="#Contact"/>
<rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
</owl:FunctionalProperty>
<RuralArea rdf:ID="Woomera"/>
<Town rdf:ID="Coonabarabran"/>
<LuxuryHotel rdf:ID="FourSeasons"/>
<NationalPark rdf:ID="BlueMountains"/>
<Capital rdf:ID="Canberra"/>
<Beach rdf:ID="BondiBeach"/>
<Beach rdf:ID="CurrawongBeach"/>
<NationalPark rdf:ID="Warrumbungles"/>
<RuralArea rdf:ID="CapeYork"/>
<Capital rdf:ID="Sydney">
<hasAccommodation rdf:resource="#FourSeasons"/>
<hasPart rdf:resource="#BondiBeach"/>
<hasPart rdf:resource="#CurrawongBeach"/>
</Capital>
<City rdf:ID="Cairns"/>
</rdf:RDF>
<!-- Created with Protege (with OWL Plugin 1.2 beta, Build 146) http://protege.stanford.edu -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment