1
Knowledge Representation Part II
Jan Pettersen Nytun, UiA
Apache Jena Part II Jan Pettersen Nytun, UiA 1 S O P This - - PowerPoint PPT Presentation
Knowledge Representation Apache Jena Part II Jan Pettersen Nytun, UiA 1 S O P This presentation is based on: Jena Ontology API http://jena.apache.org/documentation/ontology/ Jan Pettersen Nytun, UIA, page 2 Jena is fundamentally an
1
Jan Pettersen Nytun, UiA
S O
P
Jan Pettersen Nytun, UIA, page 2
3
4
5
6
S O
P
Jan Pettersen Nytun, UIA, page 7
S O
P
Jan Pettersen Nytun, UIA, page 8
[Wikipedia]:
S O
P
Jan Pettersen Nytun, UIA, page 9
[Wikipedia]:
10
S O
P
Jan Pettersen Nytun, UIA, page 11
S O
P
Jan Pettersen Nytun, UIA, page 12
S O
P
Jan Pettersen Nytun, UIA, page 13
S O
P
Jan Pettersen Nytun, UIA, page 14
S O
P
OntModel m = ModelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
Jan Pettersen Nytun, UIA, page 15
S O
P
Jan Pettersen Nytun, UIA, page 16
S O
P
@prefix : <http://www.uia.no/janpettersennytun/inference#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix xml: <http://www.w3.org/XML/1998/namespace> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
:hasApprovedId a owl:DatatypeProperty ; rdfs:subPropertyOf :hasSomeId . :hasSomeId a owl:DatatypeProperty . :hasHusband a owl:ObjectProperty ; owl:inverseOf :hasWife . :hasWife a owl:ObjectProperty . :Man a owl:Class ; rdfs:subClassOf :Human . :Woman a owl:Class ; rdfs:subClassOf :Human . :Human a owl:Class . :Homer a owl:NamedIndividual , :Man ; :hasSomeId "Homer_ID1_SomeID" . :Marge a owl:NamedIndividual , :Woman ; :hasApprovedId "Marge_ID1_Approved" ; :hasHusband :Homer .
Jan Pettersen Nytun, UIA, page 17
S O
P
Testing Reasoning in Jena
package testreasoners; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.jena.ontology.OntModel; import org.apache.jena.ontology.OntModelSpec; import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; import org.apache.jena.rdf.model.Property; import org.apache.jena.rdf.model.RDFNode; import org.apache.jena.rdf.model.Resource; import org.apache.jena.rdf.model.Statement; import org.apache.jena.rdf.model.StmtIterator; import org.apache.jena.util.FileManager;
Jan Pettersen Nytun, UIA, page 18
S O
P
public class TestReasoners { private static String inputFileName = "InferenceTest__InputFile.ttl"; private static String outputFileName = "InferenceTest__OutputFile.ttl"; public static void main(String[] args){ … } public static List<String> getSortedTriples(Model model){ … } public static OntModel readFile(OntModelSpec ontModelSpec){ … } }
Jan Pettersen Nytun, UIA, page 19
Testing Reasoning in Jena
S O
P
public static OntModel readFile(OntModelSpec ontModelSpec){ OntModel ontModel = ModelFactory.createOntologyModel(ontModelSpec); InputStream in = FileManager.get().open( inputFileName ); if (in == null) { System.out.println("File: " + inputFileName + " not found"); System.exit(1); } // read the Turtle file
//ontModel.write(System.out, "Turtle"); return ontModel; }
Jan Pettersen Nytun, UIA, page 20
Testing Reasoning in Jena
S O
P
public static List<String> getSortedTriples(Model model){ List<String> triples = new ArrayList<String>(); StmtIterator iter = model.listStatements(); String format = "%-20s"; String defaultNamespace = model.getNsPrefixMap().get(""); if (defaultNamespace == null) return triples;
Jan Pettersen Nytun, UIA, page 21
Testing Reasoning in Jena
while (iter.hasNext()) { Statement stmt = iter.nextStatement(); // get next statement Resource subject = stmt.getSubject(); // get the subject String namespace = subject.getNameSpace(); if (namespace == null || !namespace.equals(defaultNamespace)) continue; Property predicate = stmt.getPredicate(); // get the predicate RDFNode object = stmt.getObject(); // get the object String tripleAsString = String.format(format, subject.getLocalName().toString()); tripleAsString = tripleAsString + String.format(format, predicate.getLocalName().toString()); if (object instanceof Resource) { tripleAsString = tripleAsString + object.asResource().getLocalName().toString() + " ."; } else { // object is a literal tripleAsString = tripleAsString + " \"" + object.toString() + "\"" + " ."; } triples.add(tripleAsString); } Collections.sort(triples); return triples; }
Jan Pettersen Nytun, UIA, page 22
S O
P
public static void main(String[] args){ OntModel model_OWL_DL_MEM = readFile(OntModelSpec.OWL_DL_MEM); List<String> triples_OWL_DL_MEM = getSortedTriples(model_OWL_DL_MEM); System.out.println("Triple found in model_OWL_DL_MEM"); System.out.println("............................................................................."); for (String oneTriple : triples_OWL_DL_MEM) System.out.println(oneTriple); System.out.println(".............................................................................\n"); model_OWL_DL_MEM.close(); …
Jan Pettersen Nytun, UIA, page 23
Triple found in model_OWL_DL_MEM ................................................................ Homer hasSomeId "Homer_ID1_SomeID" . Homer type Man . Homer type NamedIndividual . Human type Class . Man subClassOf Human . Man type Class . Marge hasApprovedId "Marge_ID1_Approved" . Marge hasHusband Homer . Marge type NamedIndividual . Marge type Woman . Woman subClassOf Human . Woman type Class . hasApprovedId subPropertyOf hasSomeId . hasApprovedId type DatatypeProperty . hasHusband inverseOf hasWife . hasHusband type ObjectProperty . hasSomeId type DatatypeProperty . hasWife type ObjectProperty . ................................................................
OntModel model_OWL_DL_MEM_RDFS_INF = readFile(OntModelSpec.OWL_DL_MEM_RDFS_INF); List<String> triples_OWL_DL_MEM_RDFS_INF = getSortedTriples(model_OWL_DL_MEM_RDFS_INF); System.out.println("Triple found in model_OWL_DL_MEM_RDFS_INF"); System.out.println("............................................................................."); for (String oneTriple : triples_OWL_DL_MEM_RDFS_INF) { System.out.println(oneTriple); } System.out.println(".............................................................................\n"); model_OWL_DL_MEM_RDFS_INF.close();
Jan Pettersen Nytun, UIA, page 25
Triple found in model_OWL_DL_MEM_RDFS_INF ................................................................. Homer hasSomeId "Homer_ID1_SomeID" . Homer type Human . Homer type Man . Homer type NamedIndividual . Human subClassOf Human . Human type Class . Human type Class . Human type Resource . Man subClassOf Human . Man subClassOf Man . Man type Class . Man type Class . Man type Resource . Marge hasApprovedId "Marge_ID1_Approved" . Marge hasHusband Homer . Marge hasSomeId "Marge_ID1_Approved" . Marge type Human . Marge type NamedIndividual . Marge type Woman .
Woman subClassOf Human . Woman subClassOf Woman . Woman type Class . Woman type Class . Woman type Resource . hasApprovedId subPropertyOf hasApprovedId . hasApprovedId subPropertyOf hasSomeId . hasApprovedId type DatatypeProperty . hasApprovedId type Property . hasApprovedId type Resource . hasHusband inverseOf hasWife . hasHusband type ObjectProperty . hasSomeId subPropertyOf hasSomeId . hasSomeId type DatatypeProperty . hasSomeId type Property . hasSomeId type Resource . hasWife type ObjectProperty . .........................................................
Jan Pettersen Nytun, UIA, page 27
OntModel model_OWL_DL_MEM_RULE_INF = readFile(OntModelSpec.OWL_DL_MEM_RULE_INF); List<String> triples_OWL_DL_MEM_RULE_INF = getSortedTriples(model_OWL_DL_MEM_RULE_INF); System.out.println("Triple found in model_OWL_DL_MEM_RULE_INF"); System.out.println("............................................................................."); for (String oneTriple : triples_OWL_DL_MEM_RULE_INF) System.out.println(oneTriple); System.out.println(".............................................................................\n"); try { OutputStream outFile = new FileOutputStream(outputFileName); model_OWL_DL_MEM_RULE_INF.write(outFile,"Turtle"); } catch (FileNotFoundException e) { e.printStackTrace(); } model_OWL_DL_MEM_RULE_INF.close(); }
Jan Pettersen Nytun, UIA, page 28
Triple found in model_OWL_DL_MEM_RULE_INF .................................................... Homer hasSomeId "Homer_ID1_SomeID" . Homer hasWife Marge . Homer sameAs Homer . Homer type Human . Homer type Man . Homer type NamedIndividual . Homer type Resource . Homer type Thing . Human equivalentClass Human . Human subClassOf Human . Human subClassOf Resource . Human subClassOf Thing . Human type Class . Human type Class . Human type Resource .
Jan Pettersen Nytun, UIA, page 29
Man equivalentClass Man . Man subClassOf Human . Man subClassOf Man . Man subClassOf Resource . Man subClassOf Thing . Man type Class . Man type Class . Man type Resource . Marge hasApprovedId "Marge_ID1_Approved" . Marge hasHusband Homer . Marge hasSomeId "Marge_ID1_Approved" . Marge sameAs Marge . Marge type Human . Marge type NamedIndividual . Marge type Resource . Marge type Thing . Marge type Woman .
Jan Pettersen Nytun, UIA, page 30
Woman equivalentClass Woman . Woman subClassOf Human . Woman subClassOf Resource . Woman subClassOf Thing . Woman subClassOf Woman . Woman type Class . Woman type Class . Woman type Resource . hasApprovedId subPropertyOf hasApprovedId . hasApprovedId subPropertyOf hasSomeId . hasApprovedId type DatatypeProperty . hasApprovedId type Property . hasApprovedId type Resource .
Jan Pettersen Nytun, UIA, page 31
hasHusband domain Resource . hasHusband domain Thing . hasHusband inverseOf hasWife . hasHusband range Resource . hasHusband range Thing . hasHusband subPropertyOf hasHusband . hasHusband type ObjectProperty . hasHusband type Property . hasHusband type Resource . hasSomeId subPropertyOf hasSomeId . hasSomeId type DatatypeProperty . hasSomeId type Property . hasSomeId type Resource .
Jan Pettersen Nytun, UIA, page 32
hasWife domain Resource . hasWife domain Thing . hasWife inverseOf hasHusband . hasWife range Resource . hasWife range Thing . hasWife subPropertyOf hasWife . hasWife type ObjectProperty . hasWife type Property . hasWife type Resource . ...................................................
Jan Pettersen Nytun, UIA, page 33