在SQL中导入RDF数据?

时间:2011-06-30 22:34:43

标签: rdf sparql

我很乐意使用SQL,但却无法理解SPARQL。对于初学者,我甚至不了解如何查看数据的结构(在MySQL我会做describe <table name>),因此我可以查询相应的字段。

我有办法将整个RDF数据集导入MySQL数据库中的相应表吗?

除此之外,是否有一种方法可以从所有表中SELECT *(或者等效的描述符),这样我就可以将所有输出数据输入csv(并获取它)从那里?)

我尝试查询的RDF数据集有一个SPARQL endpoint甚至是How to SPARQL的指南,但我很难理解它。

例如:

PREFIX meannot: <http://rdf.myexperiment.org/ontologies/annotations/>
PREFIX sioc: <http://rdfs.org/sioc/ns#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX mebase: <http://rdf.myexperiment.org/ontologies/base/>
SELECT DISTINCT ?annotator_name
WHERE {
  ?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
  ?comment rdf:type meannot:Comment .
  ?comment mebase:has-annotator ?annotator
  ?annotator sioc:name ?annotator_name
}

对我来说没什么意义。为什么在某些WHERE语句结束时有一段时间而在其他语句中没有? ?comment mebase:has-annotator ?annotator用简单的英语表示什么?选择注释器名称作为注释器名称的注释器名称?啊?

我很感激您可以指出的任何资源。

2 个答案:

答案 0 :(得分:18)

虽然SPARQL在语法中看起来像它的功能实际上是完全不同的,这是你和许多其他人在尝试学习时遇到的问题。

模式匹配

SPARQL是关于三重模式匹配而不是从SQL这样的表中进行选择。示例中的每组三个项目代表三重模式。例如:

?comment rdf:type meannot:Comment .

这告诉SPARQL处理器找到rdf:type meannot:Comment ?comment的任何内容,即类型为comment 的内容。在这种模式中,?comment mebase:annotates <http://www.myexperiment.org/workflows/52> . ?comment rdf:type meannot:Comment . 是一个充当通配符的变量,可以将其视为SQL中可以选择的字段

如果我们添加使用变量的其他三重模式,那么我们要求SPARQL处理器找到所有匹配所有三重模式的东西,所以:

SELECT commentID FROM COMMENTS WHERE itemID=1234

这会找到对特定项目发表评论的内容 在SQL术语中,这就像编写?comment mebase:annotates <http://www.myexperiment.org/workflows/52> . ?comment rdf:type meannot:Comment . ?comment mebase:has-annotator ?annotator . 一样,如果这有助于您理解它。

当我们开始添加其他变量时,您可以将其视为与其他表的连接:

SELECT commentID, userID FROM COMMENTS C INNER JOIN USERS U ON C.userID=U.userID WHERE itemID=1234

这会找到评论的内容以及在特定项目上生成这些内容的用户
它大致相当于SQL中的.

语法注释

就语法而言,;表示三重模式的结束 在您的示例中省略它的事实实际上是人们发布如何引导的错误。我碰巧在一个参与该项目的大学工作,所以我给同事留了一张纸条,要求他们解决这个问题。

您在示例中还可以看到在三重模式结束时使用?comment mebase:annotates <http://www.myexperiment.org/workflows/52> ; rdf:type meannot:Comment . 。这些是重复主题的缩写,例如

?comment

意味着您不必再为后续模式键入,

类似地?comment rdf:type meannot:Comment , ex:Annotation . 用于重复主语和谓词:

?comment

意味着重复rdf:typeSELECT * WHERE { ?s ?p ?o },用简单的英语,上面的类型为注释和类型注释的内容

发现数据结构

RDF不存储在表中,因为它是无模式数据模型,与表最接近的是命名图,这只是将三元组逻辑分组在一起的一种方法。

exploratory SPARQL queries上查看此问题,了解有关查询的一些建议。

如果你只想选择你可以做的所有事情LIMIT - 请注意许多端点会对一个查询的结果数量施加限制,所以即使端点后面有三百万个三元组,你也可能只得到它几千回。您可以使用OFFSETSELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 0 SELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 1000 SELECT * WHERE { ?s ?p ?o } LIMIT 1000 OFFSET 2000 # And so forth until you find no further results 例如

来浏览结果
{{1}}

如果您只是想通过浏览网站上的所有数据来查看它们是否提供 RDF转储,它通常是带有一堆RDF文件的压缩存档它。这将让您在本地查看数据

将RDF放入SQL表

有些系统可以让您将RDF存储在基于SQL的数据库中,但是可以从使用各种三重存储的人那里获取它,这与使用原生三重存储的性能相差无几。

您可能对R2RML感兴趣,这是一个新的W3C标准(目前处于早期工作草案中),它定义了将关系数据映射到RDF的标准方法。他们的一些文档可能有助于您更好地理解RDF / SPARQL和SQL之间的关系

教程

有关更全面的教程,我会查看SPARQL by Example,这是SPARQL规范的作者之一,强烈推荐

答案 1 :(得分:3)

您可以使用RDF2X将大型RDF转储转换为MySQL,PostgreSQL或其他关系数据库。较小数据集的一个简单替代方法是rdf2rdb