簡體   English   中英

使用Jena,Sparql和初始DBPedia URI進行簡單的深度搜索

[英]Simple depth search using Jena, Sparql and a initial DBPedia URI

基於DBPedia的初始URI(例如:dbpedia.org/resource/Barack_Obama),我需要按照以下步驟執行深度搜索:

1-從DBPedia解引用RDF鏈接[確定]

2-采取所有斷言此模式的三元組[確定]

<givenURI> <property> <someObject> .

3-將結果重新插入初始圖形[?]

4-要瀏覽新數據,我需要找到滿足這兩種模式的新三元組[?]

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

5-比起第一步,以遞歸的方式進行操作,保存訪問的URI以免發生循環循環。

因此,存在來自步驟2的resultSet。 此時,它是初始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
...

我真的很困惑如何將結果查詢中的resultSet插入到初始圖形,而不是再次對其進行深度搜索。

Java上有使用Jena和Sparql的實際代碼:

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結果

那就是說將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
      }
    }
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM