gpt4 book ai didi

java - 使用 Jena、Sparql 和初始 DBPedia URI 进行简单深度搜索

转载 作者:行者123 更新时间:2023-12-01 12:26:07 24 4
gpt4 key购买 nike

根据 DBPedia 的初始 URI(例如:dbpedia.org/resource/Barack_Obama),我需要按照以下步骤执行深度搜索:

1 - 从 DBPedia 取消引用 RDF 链接[确定]

2 - 获取所有断言此模式的三元组[OK]

<givenURI> <property> <someObject> .

3 - 将结果插入到初始图表中[?]

4 - 要浏览新数据,我需要找到满足这两种模式的新三元组[?]:

 <URI> owl:sameAs <resourceObject> . 
<subjectResource> owl:sameAs <URI> .

5 - 返回第一步,递归执行,保存访问的 URI 以避免无限循环。

因此,就有了第 2 步的结果集。此时,它都是来自初始 URI (dbpedia.org/resource/Barack_Obama) 的属性/对象。

select ?property ?resource where {
<http://dbpedia.org/resource/Barack_Obama> ?property ?resource
}
property,resource
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://xmlns.com/foaf/0.1/Person
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://schema.org/Person
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://dbpedia.org/class/yago/UnitedStatesSenatorsFromIllinois
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://wikidata.dbpedia.org/resource/Q215627
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://www.w3.org/2002/07/owl#Thing
http://www.w3.org/1999/02/22-rdf-syntax-ns#type,http://wikidata.dbpedia.org/resource/Q5
...

我真的很困惑如何将结果集从此查询插入到初始图表中,而不是再次深入搜索。

这是使用 Jena 和 Sparql 的 Java 实际代码:

public class SemanticCrawlerImpl implements SemanticCrawler {
public void search(Model graph, String resourceURI) {
graph.read(resourceURI);

ParameterizedSparqlString queryString = new ParameterizedSparqlString( "" +
"select ?property ?resource where {\n" +
" <"+resourceURI+"> ?property ?resource\n" +
"}" );

System.out.println( queryString );

QueryExecution exec = QueryExecutionFactory.sparqlService( "http://dbpedia.org/sparql", queryString.asQuery() );

com.hp.hpl.jena.query.ResultSet results = ResultSetFactory.copyResults( exec.execSelect() );

ResultSetFormatter.outputAsCSV( results );
}
}

所以,就这样了。任何帮助将不胜感激!

最佳答案

您的问题并不完全清楚您想要遵循的是什么,但听起来就像您想从 dbpedia:Barack_Obama 开始,以该主题为主题拉出所有三元组,然后对任何具有 owl:sameAs 属性的三元组的对象执行相同的操作。也就是说,您试图获取主题通过 owl:sameAs 链连接到 dbpedia:Barack_Obama 的所有三元组。不过,您不需要多个查询来做到这一点;您可以只使用属性路径:

construct { ?s ?p ?o }
where {
?s ?p ?o
{
select ?s {
?s (owl:sameAs|^owl:sameAs)? dbpedia:Barack_Obama
}
}
}

SPARQL Results

这表示将 URI dbpedia:Barack_Obama 以及任何满足以下条件的 x 视为 ?s

x owl:sameAs dbpedia:Barack_Obama

dbpedia:Barack_Obama owl:sameAs x

并返回所有三元组?s ?p ?o。 (理想情况下,您实际上想要使用

select ?s { 
?s (owl:sameAs|^owl:sameAs)* dbpedia:Barack_Obama
}

在子查询中遵循任意长度的路径,但 DBpedia 会提示可能的内存使用情况。)

现在,这是一个构造查询,但编写相应的查询来更新您的图表就很容易?g:

insert { graph <URIofGraph> { ?s ?p ?o } }
where {
service <http://dbpedia.org/sparql> {
?s ?p ?o
{
select ?s {
?s (owl:sameAs|^owl:sameAs)? dbpedia:Barack_Obama
}
}
}
}

关于java - 使用 Jena、Sparql 和初始 DBPedia URI 进行简单深度搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com