RDF三倍于一张桌子

时间:2016-12-23 19:07:26

标签: sparql rdf triples

我有一个带有RDF三元组的三重存储,我想将数据导出到一个表,其中列表示谓词。例如,如果我有以下三元组

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>

<link href="https://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css" rel="stylesheet"/>
<div id="slider"></div>
    <span id="infoSlider"></span>
    
    <div class="target">
    
      <img id="image1" class="imagecls" src="http://boothtique.com/Pics/image1.png"  />
      <img id="image2" class="imagecls" src="http://boothtique.com/Pics/image2.png"  />
        <img id="image3" class="imagecls" src="http://boothtique.com/Pics/image3.png"  />
    </div>

我希望它如下

:s1 :p1 "v11"
:s1 :p2 "v12"
:s2 :p2 "v22"
:s2 :p3 "v23"

这似乎有点奇怪,因为在大多数情况下我们需要以其他方式导出,但在这里我想将这些数据提供给数据挖掘软件。

1 个答案:

答案 0 :(得分:3)

使用可选

如果您事先知道谓词,则可以将每个谓词包装在OPTIONAL中,以便为所有主题在同一行中获取所有谓词 - 即使有些谓缺失。这是一个example

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获取所有主题的所有谓词 - 即使有些谓缺失。这是一个example

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