将RDF三元组转换成表格形式

3
我有一个RDF三元组的三元组存储,并且我想将数据导出到一个表中,其中列代表谓词。例如,如果我有以下三元组:
:s1 :p1 "v11"
:s1 :p2 "v12"
:s2 :p2 "v22"
:s2 :p3 "v23"

我希望它是这样的

----|  p1    | p2  | p3
s1  |  v11   | v12 | (null)
s2  | (null) | v22 | v23

这可能看起来有点奇怪,因为在大多数情况下我们需要进行导出,但是在这里我想将这些数据输入到数据挖掘软件中。
1个回答

3

使用 OPTIONAL

如果您事先知道谓词,您可以将每个谓词包装在 OPTIONAL 中,以便获取所有主题的相同行中的所有谓词 - 即使有些丢失。以下是一个示例

SELECT ?name ?birth ?death
WHERE {
?person foaf:name ?name .
?person dbo:birthPlace :Berlin .
OPTIONAL { ?person dbo:birthDate ?birth . }
OPTIONAL { ?person dbo:deathDate ?death .}
}
ORDER BY ?name
LIMIT 1000

以下是我原来的回答:

使用 UNION(为每个谓词创建单独的行)

如果您预先知道谓词,可以使用 UNION 获取所有主题的所有谓词 - 即使有些缺失。这里有一个示例

SELECT ?name ?birth ?field
WHERE {
?person foaf:name ?name .
?person dbo:birthPlace :Berlin .
{
?person dbo:birthDate ?birth .
} UNION {
?person dbo:field ?field .
}}
ORDER BY ?name
LIMIT 100

谢谢@René,但是在你的例子中,我看到每个值都有一个单独的行(例如“Agnete Bræstrup”),而我正在考虑一种导出整个图形的方法。是的,对于每个谓词,我没有多个值。 - Mostafa abdo
@Mostafaabdo
我更新了我的答案,提供了一个将所有内容保持在一行的解决方案。
- René
所有的功劳归功于@René,这是一个“修改过”的版本,用于导出所有谓词(当然要与“有限”图一起使用)。获取所有谓词 SELECT DISTINCT ?p WHERE { ?s ?p ?o }将它们导出到Excel,并使用concat函数来组装查询,就像原始答案中所示。 - Mostafa abdo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接