From: <dc...@us...> - 2012-04-28 17:26:20
|
Revision: 3662 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3662&view=rev Author: dcherix Date: 2012-04-28 17:26:12 +0000 (Sat, 28 Apr 2012) Log Message: ----------- A new class to add the type to object in a jena model Added Paths: ----------- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java Added: trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java (rev 0) +++ trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-04-28 17:26:12 UTC (rev 3662) @@ -0,0 +1,128 @@ +package org.dllearner.utilities.analyse; + +import java.util.HashSet; +import java.util.Set; + +import org.dllearner.kb.sparql.simple.QueryExecutor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hp.hpl.jena.graph.Node; +import com.hp.hpl.jena.graph.Triple; +import com.hp.hpl.jena.ontology.DatatypeProperty; +import com.hp.hpl.jena.ontology.Individual; +import com.hp.hpl.jena.ontology.ObjectProperty; +import com.hp.hpl.jena.ontology.OntClass; +import com.hp.hpl.jena.ontology.OntModel; +import com.hp.hpl.jena.rdf.model.ModelFactory; +import com.hp.hpl.jena.util.iterator.ExtendedIterator; +import com.hp.hpl.jena.vocabulary.OWL; +import com.hp.hpl.jena.vocabulary.RDF; + +public class TypeOntology { + + private static Logger log = LoggerFactory.getLogger(TypeOntology.class); + + public void addTypes(OntModel model) { + Set<DatatypeProperty> dataProperties = model.listDatatypeProperties() + .toSet(); + Set<ObjectProperty> objectProperties = model.listObjectProperties() + .toSet(); + Set<OntClass> classes = model.listClasses().toSet(); + Set<Individual> individuals = model.listIndividuals().toSet(); + Set<Triple> triples = model.getGraph().find(Triple.ANY).toSet(); + Node subject; + Node predicate; + Node object; + // while (!triples.isEmpty()) { + ExtendedIterator<Triple> iterator = model.getGraph().find(Triple.ANY); + // System.out.println(triples.size()); + for (Triple triple : triples) { + // System.out.println(triple); + subject = triple.getSubject(); + predicate = triple.getPredicate(); + object = triple.getObject(); + if (individuals.contains(model.getResource(subject.getURI()))) { + log.debug("{}", triple); + if (predicate.hasURI(RDF.type.getURI())) { + if (!classes.contains(model.getResource(object.getURI())) + && !object.getURI().equals(OWL.Thing.getURI())) { + model.getResource(subject.getURI()).addProperty( + com.hp.hpl.jena.vocabulary.RDFS.subClassOf, + OWL.Thing); + classes = model.listClasses().toSet(); + log.debug("{} is a class", object); + } + } else if (object.isLiteral()) { + if (!objectProperties.contains(model.getResource(predicate + .getURI()))) { + model.createDatatypeProperty(predicate.getURI()); + dataProperties = model.listDatatypeProperties().toSet(); + log.debug("{} is a dataproperty", predicate); + } else { + model.createOntProperty(predicate.getURI()); + log.info("{} is a rdf:property", predicate); + } + } else if (!individuals.contains(model.getResource(object + .getURI()))) { + model.getResource(object.getURI()).addProperty(RDF.type, + OWL.Thing); + individuals = model.listIndividuals().toSet(); + if (!dataProperties.contains(model.getResource(predicate + .getURI()))) { + model.createObjectProperty(predicate.getURI()); + objectProperties = model.listObjectProperties().toSet(); + log.debug("{} is an objectproperty", predicate); + } else { + model.createOntProperty(predicate.getURI()); + log.info("{} is a rdf:property", predicate); + } + log.debug("{} is an individual", object); + } + + } else if (classes.contains(model.getResource(subject.getURI()))) { + model.getResource(object.getURI()).addProperty( + com.hp.hpl.jena.vocabulary.RDFS.subClassOf, OWL.Thing); + } + } + } + + public static void main(String... args) { + String sparql = "CONSTRUCT {?s ?p ?o}" + + "{ ?s ?p ?o " + + "FILTER (?s IN( <http://dbpedia.org/resource/Philolaus>," + + " <http://dbpedia.org/resource/Zeno_of_Elea>," + + " <http://dbpedia.org/resource/Socrates>," + + " <http://dbpedia.org/resource/Pythagoras>," + + " <http://dbpedia.org/resource/Archytas>," + + " <http://dbpedia.org/resource/Plato>," + + " <http://dbpedia.org/resource/Democritus> )) ." + + " FILTER ( !isLiteral(?o) && regex(str(?o), '^http://dbpedia.org/resource/') &&" + + " ! regex(str(?o), '^http://dbpedia.org/resource/Category') &&" + + " ! regex(str(?o), '^http://dbpedia.org/resource/Template') ) . }"; + OntModel model = ModelFactory.createOntologyModel(); + model.createIndividual("http://dbpedia.org/resource/Philolaus", + OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Zeno_of_Elea", + OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Socrates", + OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Pytagoras", + OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Archytas", + OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Plato", OWL.Thing); + model.createIndividual("http://dbpedia.org/resource/Democritus", + OWL.Thing); + QueryExecutor exec = new QueryExecutor(); + exec.executeQuery(sparql, "http://live.dbpedia.org/sparql", model, + "http://dbpedia.org"); + System.out.println(model.listIndividuals().toSet()); + System.out.println(model.listObjectProperties().toSet()); + TypeOntology type = new TypeOntology(); + type.addTypes(model); + System.out.println(model.listIndividuals().toSet()); + System.out.println(model.listObjectProperties().toSet()); + System.out.println(model.listDatatypeProperties().toSet()); + } +} Property changes on: trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java ___________________________________________________________________ Added: svn:mime-type + text/plain This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-05-03 11:42:45
|
Revision: 3681 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3681&view=rev Author: dcherix Date: 2012-05-03 11:42:24 +0000 (Thu, 03 May 2012) Log Message: ----------- Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java Modified: trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-05-03 11:41:19 UTC (rev 3680) +++ trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-05-03 11:42:24 UTC (rev 3681) @@ -1,13 +1,14 @@ package org.dllearner.utilities.analyse; +import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; import org.dllearner.kb.sparql.simple.QueryExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.hp.hpl.jena.graph.Node; import com.hp.hpl.jena.graph.Triple; import com.hp.hpl.jena.ontology.DatatypeProperty; import com.hp.hpl.jena.ontology.Individual; @@ -18,75 +19,151 @@ import com.hp.hpl.jena.util.iterator.ExtendedIterator; import com.hp.hpl.jena.vocabulary.OWL; import com.hp.hpl.jena.vocabulary.RDF; +import com.hp.hpl.jena.vocabulary.RDFS; public class TypeOntology { private static Logger log = LoggerFactory.getLogger(TypeOntology.class); - public void addTypes(OntModel model) { - Set<DatatypeProperty> dataProperties = model.listDatatypeProperties() - .toSet(); - Set<ObjectProperty> objectProperties = model.listObjectProperties() - .toSet(); - Set<OntClass> classes = model.listClasses().toSet(); - Set<Individual> individuals = model.listIndividuals().toSet(); + private int addTypes(OntModel model) { + int changes=0; + Set<String> dataProperties = new HashSet<String>(); + Set<String> objectProperties = new HashSet<String>(); + Set<String> classes = new HashSet<String>(); + Set<String> individuals = new HashSet<String>(); Set<Triple> triples = model.getGraph().find(Triple.ANY).toSet(); - Node subject; - Node predicate; - Node object; - // while (!triples.isEmpty()) { - ExtendedIterator<Triple> iterator = model.getGraph().find(Triple.ANY); - // System.out.println(triples.size()); + + ExtendedIterator<OntClass> itClass = model.listClasses(); + while (itClass.hasNext()) { + classes.add(itClass.next().getURI()); + } + + ExtendedIterator<Individual> itIndividuals = model.listIndividuals(); + while (itIndividuals.hasNext()) { + individuals.add(itIndividuals.next().getURI()); + } + + ExtendedIterator<DatatypeProperty> itDataProperties = model + .listDatatypeProperties(); + while (itDataProperties.hasNext()) { + dataProperties.add(itDataProperties.next().getURI()); + } + + ExtendedIterator<ObjectProperty> itObjectProperties = model + .listObjectProperties(); + while (itObjectProperties.hasNext()) { + objectProperties.add(itObjectProperties.next().getURI()); + } + + String sUri; + String pUri; + String oUri; + System.out.println(individuals); + + // foreach triple in the model for (Triple triple : triples) { - // System.out.println(triple); - subject = triple.getSubject(); - predicate = triple.getPredicate(); - object = triple.getObject(); - if (individuals.contains(model.getResource(subject.getURI()))) { - log.debug("{}", triple); - if (predicate.hasURI(RDF.type.getURI())) { - if (!classes.contains(model.getResource(object.getURI())) - && !object.getURI().equals(OWL.Thing.getURI())) { - model.getResource(subject.getURI()).addProperty( - com.hp.hpl.jena.vocabulary.RDFS.subClassOf, - OWL.Thing); - classes = model.listClasses().toSet(); - log.debug("{} is a class", object); + if(triple.getSubject().isBlank() || triple.getPredicate().isBlank() || triple.getObject().isBlank()){ + System.out.println(triple); + continue; + } + sUri = triple.getSubject().getURI(); + pUri = triple.getPredicate().getURI(); + oUri = triple.getObject().getURI(); + + // if subject is an Individual + if (individuals.contains(sUri)) { + log.debug("Subject is an individuals {}",triple); + + // if predicate is rdf:type + if (pUri.equals(RDF.type.getURI())) { + + // if object is not in the list of class and not equals + // owl:thing + if (!classes.contains(model.getResource(oUri)) + && !oUri.equals(OWL.Thing.getURI())) { + model.getResource(oUri).addProperty(RDFS.subClassOf, OWL.Thing); + classes.add(oUri); + changes++; + log.debug("{} is a class",oUri); } - } else if (object.isLiteral()) { - if (!objectProperties.contains(model.getResource(predicate - .getURI()))) { - model.createDatatypeProperty(predicate.getURI()); - dataProperties = model.listDatatypeProperties().toSet(); - log.debug("{} is a dataproperty", predicate); + + // object is not a class, so it can only be a literal or an + // object + // if object is a literal + } else if (model.getResource(oUri).isLiteral()) { + + // if predicate is not in the list of objectproperties + if (!objectProperties.contains(pUri)) { + model.createDatatypeProperty(pUri); + dataProperties.add(pUri); + + log.debug("{} is a dataproperty",pUri); + + // if predicate is in the list of objectproperties it + // must be an rdf:property } else { - model.createOntProperty(predicate.getURI()); - log.info("{} is a rdf:property", predicate); + model.createOntProperty(pUri); + log.info("{} is a rdf:property", pUri); } - } else if (!individuals.contains(model.getResource(object - .getURI()))) { - model.getResource(object.getURI()).addProperty(RDF.type, - OWL.Thing); - individuals = model.listIndividuals().toSet(); - if (!dataProperties.contains(model.getResource(predicate - .getURI()))) { - model.createObjectProperty(predicate.getURI()); - objectProperties = model.listObjectProperties().toSet(); - log.debug("{} is an objectproperty", predicate); + changes++; + + // object is not a literal or a class so it must be an + // instance + // if object is not in the list of individuals + } else if (!individuals.contains(oUri)) { + model.getResource(oUri).addProperty(RDF.type, OWL.Thing); + individuals.add(oUri); + + // subject and object are individuals so is predicate an + // objectproperty + // if predicate ist not in the list of dataproperties + if (!dataProperties.contains(pUri)) { + model.createObjectProperty(pUri); + objectProperties.add(pUri); + log.debug("{} is an objectproperty", pUri); + + // if predicate is in the list of dataproperties it must + // be a rdf:property } else { - model.createOntProperty(predicate.getURI()); - log.info("{} is a rdf:property", predicate); + model.createOntProperty(pUri); + log.info("{} is a rdf:property", pUri); } - log.debug("{} is an individual", object); + log.debug("{} is an individual",oUri); + changes++; } - - } else if (classes.contains(model.getResource(subject.getURI()))) { - model.getResource(object.getURI()).addProperty( + // if subject is an owl:class + } else if (classes.contains(sUri)) { + model.getResource(oUri).addProperty( com.hp.hpl.jena.vocabulary.RDFS.subClassOf, OWL.Thing); + changes++; } } + return changes; } + public OntModel addTypetoJena(OntModel model, List<String> individuals, + List<String> classes) { + if (individuals != null) { + for (String individual : individuals) { + model.getResource(individual).addProperty(RDF.type, OWL.Thing); + } + } + if (classes != null) { + for (String ontClass : classes) { + if (!ontClass.equals(OWL.Thing.getURI())) { + model.getResource(ontClass).addProperty(RDFS.subClassOf, OWL.Thing); + } + } + } +// model.write(System.out); + int changes; + do{ + changes=this.addTypes(model); + } while(changes!=0); + + return model; + } + public static void main(String... args) { String sparql = "CONSTRUCT {?s ?p ?o}" + "{ ?s ?p ?o " @@ -101,26 +178,21 @@ + " ! regex(str(?o), '^http://dbpedia.org/resource/Category') &&" + " ! regex(str(?o), '^http://dbpedia.org/resource/Template') ) . }"; OntModel model = ModelFactory.createOntologyModel(); - model.createIndividual("http://dbpedia.org/resource/Philolaus", - OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Zeno_of_Elea", - OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Socrates", - OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Pytagoras", - OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Archytas", - OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Plato", OWL.Thing); - model.createIndividual("http://dbpedia.org/resource/Democritus", - OWL.Thing); + List<String> individuals = new ArrayList<String>(7); + individuals.add("http://dbpedia.org/resource/Philolaus"); + individuals.add("http://dbpedia.org/resource/Zeno_of_Elea"); + individuals.add("http://dbpedia.org/resource/Socrates"); + individuals.add("http://dbpedia.org/resource/Pytagoras"); + individuals.add("http://dbpedia.org/resource/Archytas"); + individuals.add("http://dbpedia.org/resource/Plato"); + individuals.add("http://dbpedia.org/resource/Democritus"); QueryExecutor exec = new QueryExecutor(); exec.executeQuery(sparql, "http://live.dbpedia.org/sparql", model, "http://dbpedia.org"); System.out.println(model.listIndividuals().toSet()); System.out.println(model.listObjectProperties().toSet()); TypeOntology type = new TypeOntology(); - type.addTypes(model); + model=type.addTypetoJena(model, individuals, null); System.out.println(model.listIndividuals().toSet()); System.out.println(model.listObjectProperties().toSet()); System.out.println(model.listDatatypeProperties().toSet()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <dc...@us...> - 2012-07-07 11:34:54
|
Revision: 3775 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3775&view=rev Author: dcherix Date: 2012-07-07 11:34:48 +0000 (Sat, 07 Jul 2012) Log Message: ----------- Bug fix, no mor problem wit nodes without uri Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java Modified: trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-07-07 11:33:39 UTC (rev 3774) +++ trunk/components-core/src/main/java/org/dllearner/utilities/analyse/TypeOntology.java 2012-07-07 11:34:48 UTC (rev 3775) @@ -63,8 +63,7 @@ // foreach triple in the model for (Triple triple : triples) { - if(triple.getSubject().isBlank() || triple.getPredicate().isBlank() || triple.getObject().isBlank()){ - System.out.println(triple); + if(!triple.getSubject().isURI() || !triple.getPredicate().isURI() || !triple.getObject().isURI()){ continue; } sUri = triple.getSubject().getURI(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |