ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

13
ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ Jena API Αναπαράσταση Γνώσης στον Παγκόσμιο Ιστό http://aigroup.ceid.upatras.gr/index.php/el/krweb

description

ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ. Jena API. Αναπαράσταση Γνώσης στον Παγκόσμιο Ιστό. http://aigroup.ceid.upatras.gr/index.php/el/krweb. Jena in Netbeans. Project->Properties. …\apache-jena-2.7.4\lib. Τύποι Δεδομένων. Model -> Μοντέλο ενος RDF Αρχείου - Γράφος - PowerPoint PPT Presentation

Transcript of ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Page 1: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Jena API

Αναπαράσταση Γνώσης στον Παγκόσμιο Ιστόhttp://aigroup.ceid.upatras.gr/index.php/el/krweb

Page 2: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Project->Properties

…\apache-jena-2.7.4\lib

Jena in Netbeans

Page 3: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Τύποι Δεδομένων• Model -> Μοντέλο ενος RDF Αρχείου - Γράφος• Statement -> Μια Πρόταση {Subject – Predicate - Object}• Resource -> Πόρος• Property -> Ιδιότητα• RDFNode -> Αντικείμενο (Πόρος ή Αλφαριθμητικό)• Literal -> Αλφαριθμητικό

Page 4: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

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.*;

Page 5: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Δημιουργία Μοντέλου

Model model = ModelFactory.createDefaultModel();

Δημιουργία κενού μοντέλου

Page 6: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Εισαγωγή και εξαγωγή RDF αρχείου

InputStream in = FileManager.get().open(inputFileName);

model.read(in, "");

model.write(System.out);

Εξαγωγή του μοντέλου σε αρχείο(εδώ επιλέγουμε στην οθόνη)Ελέγχει πρώτα αν το RDF μοντέλο είναι valid!

Εισαγωγή μοντέλου απο RDF Αρχείο

Page 7: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Προσθήκη Πόρου

String uni_uri="http://www.mydomain.org/uni/";

Resource Mitsos = model.createResource(uni_uri+“mitsos");

Property p =model.createProperty(uni_uri,"has_name");

Mitsos.addProperty(RDF.type, "http://www.mydomain.org/uni#Professor"); Mitsos.addProperty(p, "Mitsos");

Μερικά γνωστά namespaces όπως το RDF, RDFS κτλ είναι ορισμένα στο: import com.hp.hpl.jena.vocabulary.*;και μπορείτε να τα χρησιμοποιείται απευθείας πχ: RDF.type

Page 8: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Ανάκτηση Πόρου

Resource r = model.getResource("http://www.mydomain.org/books/book012");

Property p = model.getProperty("http://www.mydomain.org/books/title");

r.getNameSpace(); -> http://www.mydomain.org/books/r.getLocalName(); -> book012

RDFNode x (Μπορεί να είναι πόρος ή literal)

Page 9: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

IteratorsResource r = model.getResource("http://www.mydomain.org/books/book012");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()

Page 10: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

SPARQL ΕρωτήματαString queryString = "PREFIX books:<http://www.mydomain.org/books#> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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() );

}

Page 11: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

SPARQL ΕρωτήματαString queryString = "PREFIX books:<http://www.mydomain.org/books#> PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>

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.

Page 12: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Χρήση Μηχανισμού Συμπερασμού

InfModel inf = ModelFactory.createRDFSModel(model);

Page 13: ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

Jena NamespacesΑν δεν δηλωθεί namespace σε κάποια ιδιότητα το Jena API προσθέτει δήλωση με δικά του ονόματα όπως: j.0, j.1 κλπ

Προσοχή: Μπορεί να έχετε δηλώσει ένα namespace στο RDF αρχείο με # στο τέλος: πχ: xmlns:uni="http://www.mydomain.org/uni#"και όταν προσθέσετε μια ιδιότητα το Jena να δημιουργήσει καινούργιο

xmlns:j.0= "http://www.mydomain.org/uni/"

Η λύση είναι να ορίσετε το namespace με / στο τέλος:xmlns:uni="http://www.mydomain.org/uni/"

Πχ:String uni_uri="http://www.mydomain.org/uni/";Property p =model.createProperty(uni_uri,"has_name");Αν δεν έχει δηλωθεί στο αρχείο το «http://www.mydomain.org/uni/» namespace θα δημιουργηθεί δήλωση: xmlns:j.0="http://www.mydomain.org/uni/"