Йена, DBpedia: RDF и название модели - PullRequest
2 голосов
/ 15 февраля 2011

Я использую dbpedia в своем приложении и использую Jena для семантической логики.

В Jena классы:

Model :набор операторов http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/Model.html Ресурс : http://jena.sourceforge.net/javadoc/com/hp/hpl/jena/rdf/model/Resource.html

В dbpedia код rdf ресурса такой: например, http://dbpedia.org/resource/Frederick_of_Sweden становится http://dbpedia.org/data/Frederick_of_Sweden.rdf

Если я позвоню:

Model model = maker.createModel( "http://dbpedia.org/data/Frederick_of_Sweden.rdf")

Будет создана модель с именем 'http://dbpedia.org/data/Frederick_of_Sweden.rdf'.Но на самом деле мне нужно назвать это «http://dbpedia.org/resource/Frederick_of_Sweden',», чтобы соответствовать заявлениям rdf.Как мне назвать модель?

Если я хочу перемещаться по графику и достигать других узлов, какой способ хранения этих операторов является наилучшим?Нужна ли отдельная модель для каждого ресурса dbpedia или я могу объединить все операторы в одну большую модель?

Спасибо за любую подсказку!Mulone

1 Ответ

4 голосов
/ 16 февраля 2011

Я не думаю, что способ создания ваших моделей действительно влияет на способ загрузки данных. Вы можете создать свою модель с идентификатором URI, который вам нравится.

Здесь я показываю пример, который может дать некоторые идеи о том, как отделить способ получения троек от DBPedia и способ их хранения в бэкэнд-системе.

Исходя из вашего вопроса, я предполагаю, что вы используете серверную часть базы данных, поэтому мой код нацелен на такую ​​серверную часть в Йене.

import java.sql.SQLException;
import com.hp.hpl.jena.util.FileManager;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.SimpleSelector;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.rdf.model.RDFNode;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.StmtIterator;
import com.hp.hpl.jena.rdf.model.Statement;
import com.hp.hpl.jena.db.DBConnection;
import com.hp.hpl.jena.rdf.model.ModelMaker;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class TestJena {

    public static void main(String[] args) throws java.lang.ClassNotFoundException, java.sql.SQLException {
        Class.forName("com.mysql.jdbc.Driver");            

        //The database backend initialization.
        DBConnection connection = new DBConnection(MY_DB, USER, PASS, "mysql");
        ModelMaker dbMaker = ModelFactory.createModelRDBMaker(connection);

        //A file manager to get the triples from the DBPedia revolvable URI. 
        FileManager fManager = FileManager.get();
        fManager.addLocatorURL();
        Model linkedDataModel =
              fManager.loadModel("http://dbpedia.org/data/Frederick_of_Sweden.rdf");


        //Now we copy the in-memory model into our DB backend. 
        //When the model is created you can give it the name that you like.
        Model dbModel = 
              dbMaker.createModel("http://dbpedia.org/resource/Frederick_of_Sweden");

        dbModel.add(linkedDataModel);

        StmtIterator iter = dbModel.listStatements();
        while (iter.hasNext()) {
            Statement stmt = iter.nextStatement();
            System.out.println(stmt);
        }


        linkedDataModel.close();
        dbModel.close();
        connection.close();
}

Этот пример печатает ...

[http://dbpedia.org/resource/Frederick_i_of_sweden, http://dbpedia.org/ontology/wikiPageRedirects, http://dbpedia.org/resource/Frederick_of_Sweden]
[http://dbpedia.org/resource/Frederick_I_%28of_Sweden%29, http://dbpedia.org/ontology/wikiPageRedirects, http://dbpedia.org/resource/Frederick_of_Sweden]
[http://dbpedia.org/resource/Frederick_I,_Landgrave_of_Hesse-Kassel, http://dbpedia.org/ontology/wikiPageRedirects, http://dbpedia.org/resource/Frederick_of_Sweden]
[http://dbpedia.org:8890/data/Frederick_of_Sweden.rdf, http://xmlns.com/foaf/0.1/primaryTopic, http://dbpedia.org/resource/Frederick_of_Sweden]
(....)
...