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

Post on 06-Feb-2016

42 views 0 download

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 ΑΝΑΠΑΡΑΣΤΑΣΗ ΓΝΩΣΗΣ ΣΤΟΝ ΠΑΓΚΟΣΜΙΟ ΙΣΤΟ

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

Jena API

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

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="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

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

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)

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

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

}

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.

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

InfModel inf = ModelFactory.createRDFSModel(model);

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/"