当前位置: 首页 > 面试题库 >

使用Jena TDB在本地加载DBpedia吗?

吴安和
2023-03-14
问题内容

我需要对DBpedia执行查询:

SELECT DISTINCT ?poi ?lat ?long ?photos ?template ?type ?label WHERE {
  ?poi  <http://www.w3.org/2000/01/rdf-schema#label> ?label .
  ?poi <http://www.w3.org/2003/01/geo/wgs84_pos#lat> ?lat .
  ?poi <http://www.w3.org/2003/01/geo/wgs84_pos#long> ?long .
  ?poi <http://dbpedia.org/property/hasPhotoCollection> ?photos .                      
  OPTIONAL {?poi <http://dbpedia.org/property/wikiPageUsesTemplate> ?template } .
  OPTIONAL {?poi <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> ?type } .
  FILTER ( ?lat > x && ?lat < y &&
           ?long > z && ?long < ω && 
           langMatches( lang(?label), "EN" ))
}

我猜测此信息分散在不同的转储(.nt)文件中,并且SPARQL端点以某种方式为我们提供了结果集。我需要在本地下载这些不同的.nt文件(并非所有DBpedia),仅执行一次查询并将结果存储在本地(我不想使用SPARQL端点)。

  • 我应该在耶拿的哪一部分进行此运行?

我对此帖子的阅读有些困惑:

因此,您可以将整个DBPedia数据加载到磁盘上的单个TDB位置(即单个目录)中。这样,您可以在其上运行SPARQL查询。

  • 如果得到三个.nt DBpedia文件,以耶拿的话,如何将DBpedia加载到单个TDB位置?我们如何将上述查询应用于这些.nt文件?(任何代码都会有所帮助。)

  • 例如,这是错误的吗?

     String tdbDirectory = "C:\\TDB";
     String dbdump1 = "C:\\Users\\dump1_en.nt";
     String dbdump2 = "C:\\Users\\dump2_en.nt";
     String dbdump3 = "C:\\Users\\dump3_en.nt";
     Dataset dataset = TDBFactory.createDataset(tdbDirectory);
     Model tdb = dataset.getDefaultModel(); //<-- What is the default model?Should I care?
     //Model tdb = TDBFactory.createModel(tdbdirectory) ;//<--is this prefered?
     FileManager.get().readModel( tdb, dbdump1, "N-TRIPLES" );
     FileManager.get().readModel( tdb, dbdump2, "N-TRIPLES" );
     FileManager.get().readModel( tdb, dbdump3, "N-TRIPLES" );
     String q = "my big fat query";
     Query query = QueryFactory.create(q);
            QueryExecution qexec = QueryExecutionFactory.create(query, tdb);
            ResultSet results = qexec.execSelect();
             while (results.hasNext()) {
             //do something significant with it
     }
    qexec.close()
    tdb.close() ;
    dataset.close();
  • 在上面的代码中,我们使用了"dataset.getDefaultModel"(获取默认图作为Jena Model)。这句话有效吗?我们是否需要创建一个数据集来执行查询,还是应该使用TDBFactory.createModel(tdbdirectory)

问题答案:

要让Jena在本地建立索引:

/** The Constant tdbDirectory. */
public static final String tdbDirectory = "C:\\TDBLoadGeoCoordinatesAndLabels";

/** The Constant dbdump0. */
public static final String dbdump0 = "C:\\Users\\Public\\Documents\\TDB\\dbpedia_3.8\\dbpedia_3.8.owl";

/** The Constant dbdump1. */
public static final String dbdump1 = "C:\\Users\\Public\\Documents\\TDB\\geo_coordinates_en\\geo_coordinates_en.nt";

 ...

Model tdbModel = TDBFactory.createModel(tdbDirectory);<\n>

/*Incrementally read data to the Model, once per run , RAM > 6 GB*/
FileManager.get().readModel( tdbModel, dbdump0);
FileManager.get().readModel( tdbModel, dbdump1, "N-TRIPLES");
FileManager.get().readModel( tdbModel, dbdump2, "N-TRIPLES");
FileManager.get().readModel( tdbModel, dbdump3, "N-TRIPLES");
FileManager.get().readModel( tdbModel, dbdump4, "N-TRIPLES");
FileManager.get().readModel( tdbModel, dbdump5, "N-TRIPLES");
FileManager.get().readModel( tdbModel, dbdump6, "N-TRIPLES");
tdbModel.close();

查询耶拿:

String queryStr = "dbpedia query ";

Dataset dataset = TDBFactory.createDataset(tdbDirectory);
Model tdb = dataset.getDefaultModel();

Query query = QueryFactory.create(queryStr);
QueryExecution qexec = QueryExecutionFactory.create(query, tdb);

/*Execute the Query*/
ResultSet results = qexec.execSelect();

while (results.hasNext()) {
    // Do something important
}

qexec.close();
tdb.close() ;


 类似资料:
  • 我需要对dbpedia执行一个查询: null null

  • 问题内容: 我尝试在WKWebView上使用javascript加载本地HTML游戏。尽管我可以看到CSS样式的HTML页面,但是我听不到游戏的声音,并且某些游戏的动作不对应。 我注意到,如果我通过http live服务器加载完全相同的游戏,那么一切似乎都很完美。因此,我认为本地负载出了点问题。也许这一个Apache的问题可能是这个问题? Info.plist: 我的代码 (SWIFT 3) :

  • 我知道这个问题已经被问到这里了。但我面临着一些问题没有得到解决。 Error Domain=NSURLErrorDomain Code=-1001“请求超时。”userinfo={nsunderlyingError=0x60800084D950{Error domain=KCFNetwork code=-1001“请求超时。”userinfo={noj/library/developer/core

  • 我一直在尝试使用Spark中的加载本地文件。 我已经读过[问题]:如何在sc.textfile中加载本地文件,而不是HDFS Centos 7.0上中有本地文件 使用时,出现如下错误。 16/12/27 12:15:56警告TaskSetManager:stage 5.0中丢失任务0.0(TID 36,):java.io.FileNotFoundException:File File:/home/

  • 问题内容: 我已经使用安装了React 。它安装得很好,但是我试图将图像加载到我的一个组件(,文件路径:)中,但是没有加载。这是我的代码: 如果我在变量中写入图像路径,则会出现错误: 编译失败。 ./src/Components/common/Header.js中的错误 找不到模块:/ var / www / html / wistful / src / Components / common中的

  • 问题内容: 今天早上,这使我发疯。我想将一些本地html加载到Web视图中: 该html文件位于我的项目的根文件夹中,但位于组中。Webview对我来说是空白的。有什么想法怎么了?我正在使用xcode 6.1并在iPhone 6上运行此示例。 问题答案: 要检索应用程序资源的URL,应使用类的方法。 迅捷2 迅捷3