2017-08-13 30 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”引用,那么就把它包含到你的正则表达式中吧? –