簡體   English   中英

檢索空白節點映射

[英]Retrieving blank node mapping

我的小組目前正在開發一個點擊界面,用於從RDF圖表中導航和提取信息。 作為其中的一部分,我們使用Jena的sparqlservice方法連接到各種三重存儲端點。 為了移動用戶當前正在查看的點,用戶可以選擇節點並使其成為中心。 然后程序使用下面的表達式獲取該節點的鄰居:

CONSTRUCT {
<URI> ?p ?o .
?s ?p <URI> .
} WHERE {
{<URI> ?p ?o .}
UNION
{?s ?p <URI> .}
} LIMIT N

其中URI是用戶選擇的節點(我們對文字做了稍微不同的事情)。 然后按如下方式執行此表達式:

Query myQuery = QueryFactory.create(_query);
QueryExecution qexe = QueryExecutionFactory.sparqlService(this.myURL, myQuery);
Model resultModel = qexe.execConstruct();
return resultModel;

我們面臨的問題是關於空白節點。 當Jena從端點獲取空白節點時,會立即為其分配Jena bNode ID。 此ID與端點提供的ID不同,如果用戶選擇客戶端的空白節點作為新中心,這顯然會導致問題。

因此,我的問題是:有沒有辦法在Jena中保留原始端點ID? 通過瀏覽Jena的腹部,我可以看到幾個ResultSet類使用一個類來處理endpoint-和Jena ID之間的映射,稱為LabelToNodeMap 有沒有辦法檢索這個映射? 或者,防止Jena使用自己的ID模式,而是使用端點。

基本上沒有你在與遠程SPARQL服務交談時無法直接識別空白節點。

首先,各種SPARQL結果規范實際上並未要求存儲將其內部ID作為空白節點ID發送。 例如, SPARQL結果XML規范有這樣的說法:

注意:空白節點標簽I的范圍限定為結果集XML文檔,不需要與查詢圖中該RDF術語的空白節點標簽有任何關聯。

即使使用CONSTRUCT查詢情況類似,幾乎所有RDF格式都表示空白節點標簽僅限於文檔范圍。 因此,如果我在兩個單獨的請求中有_:id_:id ,從語義上講,我有兩個不同的空白節點。

無論格式如何,您還會遇到一些問題,即某些語法在空白節點標簽中出現的字符非常嚴格,因此即使商店確實使用其內部標識符(這種情況很少見),它通常也必須轉義/編碼它們。某種方式是有效的語法。 然后,這需要您了解每個端點轉義/編碼方案(如果它完全公開標識符)以及如何將其轉換為實際ID。

底線是終端沒有給你內部標識符,所以讓Jena保留它們(嚴格說來雖然不是一個簡單的擴展點)但是不會真正幫助你。

即使您可以保留它們,也無法將它們發送回遠程端點,因為查詢中的空白節點是匿名變量而不是標識符。 有些商店會接受非標准語法<_:id>來引用一個空白節點,但很多商店都不會這樣做,而且您將超越SPARQL規范,因此您的應用程序將失去可移植性。

解決方法

解決方法是簡單地擴展您之前的查詢,您的問題意味着用戶僅因為先前的查詢而看到此空白節點。 由於您只能通過關聯識別空白節點,因此您可以修改以前的查詢以詢問有關空白節點的其他詳細信息。

這可能會返回有關多個節點的詳細信息,您必須進行一些客戶端處理,以確定用戶實際需要的節點以及如何將其他數據與現有可視化相關聯,但這一切都是可行的。

暫無
暫無

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

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