如何在RDF中表示像<time:before>这样的时间关系?

时间:2017-07-19 07:30:43

标签: sequence rdf temporal

我的RDF数据表示存在问题。该表包含数百万行和数千个subject_id个。这是一个表格样本。

row_id      subject_id    DateTime
34951953    144           14/07/2016 22:00
34952051    145           14/07/2016 22:00
34951954    146           14/07/2016 22:00    
34951976    144           15/07/2016 3:00
34952105    146           15/07/2016 3:00
34952004    144           15/07/2016 20:00

我使用jena完成了简单的1:1 rdf映射转换。

<foo/data/row_id=34951953>  <foo/data/subject_id>   "144"
<foo/data/row_id=34951954>  <foo/data/subject_id>   "146"
<foo/data/row_id=34951954>  <foo/data/subject_id>   "146"
<foo/data/row_id=34952051>  <foo/data/subject_id>   "145"
<foo/data/row_id=34951976>  <foo/data/subject_id>   "144"
<foo/data/row_id=34952105>  <foo/data/subject_id>   "146"
<foo/data/row_id=34952004>  <foo/data/subject_id>   "144"
<foo/data/row_id=34951953>  <foo/data/DateTime> "14/07/2016 22:00:00"
<foo/data/row_id=34952051>  <foo/data/DateTime> "14/07/2016 22:00:00"
<foo/data/row_id=34952054>  <foo/data/DateTime> "14/07/2016 22:00:00"
<foo/data/row_id=34951976>  <foo/data/DateTime> "15/07/2016 3:00:00"
<foo/data/row_id=34952105>  <foo/data/DateTime> "15/07/2016 3:00:00"
<foo/data/row_id=34952004>  <foo/data/DateTime> "15/07/2016 20:00:00"

现在,我想为所有<time:before>添加一些时间属性,例如subject_id,即顺序信息。以下是我想要的例子:

对于subject_id = 144;

<foo/data/row_id=34951953> <time:before> <foo/data/row_id=34951976>
<foo/data/row_id=34951976> <time:before> <foo/data/row_id=34952004>

for subject_id = 146;

<foo/data/row_id=34951954> <time:before> <foo/data/row_id=34952105>

我可以明确添加时间关系<time:before>吗?有没有更好的方法来解决这类问题?

1 个答案:

答案 0 :(得分:1)

<强>什么

显然,您可以使用rdf:Seqrdf:List。但是,查询这些结构是painful

我建议您为这种时间序列找到合适的本体或词汇,或者使用自己的轻量级词汇表。请注意time:保留foo:before前缀。

我们假设您使用名为INSERT { ?row_1 foo:before ?row_2 . } WHERE { ?row_1 foo:subject ?subject . ?row_2 foo:subject ?subject . ?row_1 foo:time ?time_1 . ?row_2 foo:time ?time_2 . FILTER (?time_1 > ?time_2) FILTER NOT EXISTS { ?row_3 foo:subject ?subject . ?row_3 foo:time ?time_3 . FILTER ((?time_1 < ?time_3) && (?time_3 < ?time_2)) } } 的属性。

如何

您可以使用SPARQL在RDF数据中添加具有此属性的三元组:

sed

<强>性能

Time ontology查询在我的终端上执行大约1分钟,其中包含3000多个“主题”和60000多个“行”。

您的CSV表可能是从RDBMS导出的,您可以在其中对所有这些数据进行规范化。然后,您可以使用相邻的“行”对创建SQL视图,然后使用Analogous工具将其导出或生成RDF三元组。

另一种选择是以某种方式对RDF文件进行排序/转换,并使用pythonxsd:dateTime等生成所需的三元组。

<强>更新

当然,您的日期应为def pre_processing(img_list, zero_mean=True, unit_var=True): with tf.device('/cpu:0'): tn_img0 = img_list[0][1] tn_img1 = img_list[1][1] t_img = tn_img0 # t_img = tf.concat([tn_img0, tn_img1], axis=0) rgb_mean, rgb_var = tf.nn.moments(t_img, [0, 1]) if zero_mean: tn_img0 = tf.subtract(img_list[0][1], rgb_mean) tn_img1 = tf.subtract(img_list[1][1], rgb_mean) if unit_var: tn_img0 = tf.divide(tn_img0, rgb_var) tn_img1 = tf.divide(tn_img1, rgb_var) 类型,或至少应以自然方式进行比较。