2017-08-13 25 views
-1

我有一個應用程序通過其REST API從各種其他應用程序請求JSON對象。從任何應用程序的響應進來的格式如下:在本體註釋的JSON對象之間執行虛擬對齊

{ 
data : { 
     key1: { val: value, defBy: "ontology class"} 
     key2: ..., 
    } 
} 

下面的代碼描述了來自應用1的對象:

{ 
data : { 
     key1: { val: "98404506-385576361", defBy: "abc:SHA-224"} 
    } 
} 

下面的代碼描述了來自應用2的對象:

{ 
    data : { 
      key2: { val: "495967838-485694812", defBy: "xyz:SHA3-224"} 
     } 
    } 

這裏,DefBy指的是用於加密val中字符串的算法。當我的應用程序接收到這樣的對象,它解析JSON和各KV的對象轉換成RDF這樣的:

// For objects from App1: 
key1 rdf:type osba:key 
key1 osba:generatedBy abc:SHA-224 
... 
// For objects from App2 
key2 rdf:type osba:key 
key2 osba:generatedBy xyz:SHA3-224 

我需要查詢的,我可以指定的方式生成的RDF數據如果任何osba:generatedBy鍵屬於SHA家庭,然後回到主題,因爲一個有效的查詢結果,使得:where {?k osba:generatedBy ???}

請注意以下幾點:

  1. 我還有R與其他加密算法如MD5

  2. 我不知道eceive對象事先什麼加密算法將由一個新的應用程序加入網絡也不它使用什麼樣NS使用。例如,在上述對象中,一個使用abc:,另一個使用xyz:

  3. 我不能使用SPARQL濾波,因爲該值可以是SecureHashAlgorithm代替SHA

我的問題是,我無法預先限定上(引用)本體和映射存儲的值在defBy:的傳入對象,因爲我不知道什麼本體被使用,也沒有什麼加密算法的價值代表。

我讀了關於自動本體集成,對齊,映射等。但是我無法找到這個概念的理由來解決我的問題。

任何解決方案?

+1

你能說說點3嗎?你嘗試過哪些過濾器不起作用? –

+0

我試圖使用通配符函數,如沙*,但我無法解決問題,因爲P-3 –

+0

中表達的原因。沒有集成本體,您不能執行查詢擴展等。顯然,你需要一個同義詞的映射,否則,你不能寫一個完整和正確的過濾器。這對每個領域都適用。 – AKSW

回答

0

3)我不能使用SPARQL濾波,因爲該值可以是SecureHashAlgorithm代替SHA

SPARQL過濾supports matching against regular expressions通過xpath所定義的。因此,沿着

SELECT ?key 
WHERE { ?key osba:generatedBy ?generator 
     FILTER regex(?generator, "^s(ecure)?h(ash)?a(lgorithm)?.*", "i") } 

線東西(注:未經測試)應該做的工作。要建立一個良好的正則表達式,我可以推薦http://regexr.com/

如果有必要:您可以將IRI轉換爲字符串(用於匹配)與the str() function

+0

我需要使用不是正則表達式的語義,因爲如果傳入類型是\t FIPS PUB 180-4,字符串可以改變什麼? SHA3​​的認證碼 –

+3

你究竟想達到什麼目的?你可以把一個小例子與輸入數據和預期輸出結合起來嗎?如果只是關於SHA被「fips pub 180-4」引用,那麼就把它包含到你的正則表達式中吧? –