ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ Jena API
Project->Properties …\apache-jena-2.7.4\lib Jena in Netbeans
Τύποι Δεδομένων Model-> Μοντέλο ενος RDF Αρχείου - Γράφος Statement ->Μια Πρόταση {Subject – Predicate - Object} Resource->Πόρος Property->Ιδιότητα RDFNode->Αντικείμενο (Πόρος ή Αλφαριθμητικό) Literal->Αλφαριθμητικό
import com.hp.hpl.jena.rdf.model.*; import com.hp.hpl.jena.vocabulary.*; import com.hp.hpl.jena.query.Query ; import com.hp.hpl.jena.query.QueryExecution ; import com.hp.hpl.jena.query.QueryExecutionFactory ; import com.hp.hpl.jena.query.QueryFactory ; import com.hp.hpl.jena.query.QuerySolution ; import com.hp.hpl.jena.query.ResultSet ; import org.openjena.atlas.io.IndentedWriter ; import com.hp.hpl.jena.util.FileManager; import java.io.*;
Δημιουργία Μοντέλου Model model = ModelFactory.createDefaultModel(); Δημιουργία κενού μοντέλου
Εισαγωγή και εξαγωγή RDF αρχείου InputStream in = FileManager.get().open(inputFileName); model.read(in, ""); model.write(System.out); Εξαγωγή του μοντέλου σε αρχείο(εδώ επιλέγουμε στην οθόνη) Ελέγχει πρώτα αν το RDF μοντέλο είναι valid! Εισαγωγή μοντέλου απο RDF Αρχείο
Προσθήκη Πόρου String uni_uri=" Resource Mitsos = model.createResource(uni_uri+“mitsos"); Property p =model.createProperty(uni_uri,"has_name"); Mitsos.addProperty(RDF.type, " Mitsos.addProperty(p, "Mitsos"); Μερικά γνωστά namespaces όπως το RDF, RDFS κτλ είναι ορισμένα στο: import com.hp.hpl.jena.vocabulary.*; και μπορείτε να τα χρησιμοποιείται απευθείας πχ: RDF.type
Ανάκτηση Πόρου Resource r = model.getResource(" Property p = model.getProperty(" r.getNameSpace();-> r.getLocalName();->book012 RDFNode x(Μπορεί να είναι πόρος ή literal)
Iterators Resource r = model.getResource(" StmtIterator iter = r.listProperties(); while (iter.hasNext()) { Statement stmt = iter.nextStatement(); System.out.print(" " + stmt.getSubject().toString()); System.out.print(" " + stmt.getPredicate().toString()); System.out.println(" " + stmt.getObject().toString()); } StmtIterator[Iterator for Statements ] Use with:listProperties(), listStatements Get next:Statement s= iter.nextStatement() ResIterator[Iterator for Resources] Use with:listResourcesWithProperty(p) Get next:Resource r_isbn = iter.nextResource() NodeIterator[Iterator for Objects (Resources or Literals)] Use with:listObjects(); Get next:RDFNode x=iter.next()
SPARQL Ερωτήματα String queryString = "PREFIX books: PREFIX rdf: SELECT ?novel ?y WHERE {?novel rdf:type ?y}" ; Query query = QueryFactory.create(queryString) ; query.serialize(new IndentedWriter(System.out,true)) ; QueryExecution qexec = QueryExecutionFactory.create(query, model) ; ResultSet rs = qexec.execSelect() ; for ( ; rs.hasNext() ; ) { QuerySolution rb = rs.nextSolution() ; RDFNode x = rb.get("novel") ; RDFNode y = rb.get("y") ; System.out.println(x.toString() ); System.out.print(y.toString() ); }
SPARQL Ερωτήματα String queryString = "PREFIX books: PREFIX rdf: SELECT ?x ?y WHERE {?x ?prop ?y}" ; Query query = QueryFactory.create(queryString) ; query.serialize(new IndentedWriter(System.out,true)) ; QueryExecution qexec = QueryExecutionFactory.create(query, model) ; ResultSet rs = qexec.execSelect() ; for ( ; rs.hasNext() ; ) { QuerySolution rb = rs.nextSolution() ; RDFNode x = rb.get(“x") ; RDFNode y = rb.get("y") ; System.out.println(x.toString() ); if ( y.isLiteral() ){ Literal Str = (Literal)y ; System.out.println(" "+Str) ; } else System.out.print(y.toString() +" ") ; } Εδώ το αντικείμενο ?y μπορεί να είναι resource ή literal. Αν είναι literal το κάνουμε cast σε μεταβλητή τύπου Literal που είναι αλφαριθμητικό και μπορούμε να το εκτυπώσουμε Αν είναι resource εκτυπώνουμε το URI του με την συνάρτηση toString.
Χρήση Μηχανισμού Συμπερασμού InfModel inf = ModelFactory.createRDFSModel(model);
Jena Namespaces Αν δεν δηλωθεί namespace σε κάποια ιδιότητα το Jena API προσθέτει δήλωση με δικά του ονόματα όπως: j.0, j.1 κλπ Προσοχή: Μπορεί να έχετε δηλώσει ένα namespace στο RDF αρχείο με # στο τέλος: πχ: xmlns:uni=" και όταν προσθέσετε μια ιδιότητα το Jena να δημιουργήσει καινούργιο xmlns:j.0= " Η λύση είναι να ορίσετε το namespace με / στο τέλος: xmlns:uni=" Πχ: String uni_uri=" Property p =model.createProperty(uni_uri,"has_name"); Αν δεν έχει δηλωθεί στο αρχείο το « namespace θα δημιουργηθεί δήλωση: xmlns:j.0="