在SQL中导入RDF数据?

在SQL中导入RDF数据?,rdf,sparql,Rdf,Sparql,我很习惯使用SQL,但却无法理解SPARQL。首先,我甚至不知道如何查看数据的结构(在MySQL中,我只会执行descripe),以便查询适当的字段 有没有办法将整个RDF数据集导入MySQL数据库中的各个表中 除此之外,是否有办法从所有表(或任何等效描述符)中选择*,这样我就可以将所有输出数据都转换成csv(并从那里获取) 我试图查询的RDF数据集有一个详细的说明,甚至有一个指南,但我很难理解它 例如: PREFIX meannot: <http://rdf.myexperiment.o

我很习惯使用
SQL
,但却无法理解
SPARQL
。首先,我甚至不知道如何查看数据的结构(在
MySQL
中,我只会执行
descripe
),以便查询适当的字段

有没有办法将整个RDF数据集导入MySQL数据库中的各个表中

除此之外,是否有办法从所有表(或任何等效描述符)中选择*,这样我就可以将所有输出数据都转换成csv(并从那里获取)

我试图查询的RDF数据集有一个详细的说明,甚至有一个指南,但我很难理解它

例如:

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
}
?comment rdf:type meannot:Comment .
前缀不是:
前缀sioc:
前缀rdf:
前缀mebase:
选择不同的注释器名称
在哪里{
?注释mebase:注释。
?注释rdf:type meannot:comment。
?注释mebase:具有注释器?注释器
?注释员sioc:名称?注释员名称
}
对我来说没什么意义。为什么在WHERE语句的末尾有一个句号,而在其他语句的末尾没有句号?那么,
?comment mebase:has annotator?annotator
在简单的英语中是什么意思?选择注释器名称,其中注释器名称是注释器名称?嗯


如果您能为我提供任何资源,我将不胜感激

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

模式匹配 SPARQL是关于三重模式匹配的,而不是从SQL之类的表中进行选择。在您的示例中,每组三个项目表示一个三重模式。例如:

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
}
?comment rdf:type meannot:Comment .
这告诉SPARQL处理器查找任何具有
rdf:type
类型
meannot:Comment
的对象,即类型为Comment的对象。在这个模式中,
?comment
是一个作用类似于通配符的变量,请将其视为SQL中可以选择的字段

如果我们添加了使用变量的其他三重模式,那么我们要求SPARQL处理器查找与所有三重模式匹配的所有内容,因此:

?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
?comment rdf:type meannot:Comment .
这将查找作为评论的内容以及对特定项目发表评论的用户
这大致相当于SQL中的
selectcommentid,userID来自COMMENTS C internal JOIN USERS U ON C.userID=U.userID,其中itemID=1234

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

您在示例中还可以看到
的使用位于三重模式的末尾。这些是重复主题的速记

?comment mebase:annotates <http://www.myexperiment.org/workflows/52> ;
         rdf:type meannot:Comment .
这意味着,
?注释
rdf:type
是重复的,用通俗易懂的英语来说,上面是注释类型和注释类型的东西

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

请查看上的此问题,以获取有关尝试查询的一些建议

如果您只想选择您可以执行的所有操作
select*WHERE{s?p?o}
-请注意,许多端点会对一个查询的结果数施加限制,因此即使端点后面有数百万个三元组,您也可能只返回几千个。您可以使用
LIMIT
OFFSET
翻阅结果,例如

SELECT * 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
如果你只是想把所有的数据拖网出来,试着在一个网站上四处看看,看看他们是否提供了一个RDF转储文件,通常是一个压缩的归档文件,里面有一堆RDF文件。这将允许您在本地查看数据

将RDF放入SQL表 有些系统可以让您将RDF存储在基于SQL的数据库中,但从使用过大量三元组存储的人那里获取,这远没有使用本机三元组存储的性能好

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

教程
对于更完整的教程,我将查看SPARQL规范的作者之一编写的教程,强烈建议您使用它将大型RDF转储转换为MySQL、PostgreSQL或其他关系数据库。对于较小的数据集,一个简单的替代方法是。

感谢Rob在耐心对待像我这样的n00b的同时花时间写下如此详细的回复。@Maiasaura总是乐于帮助,如果您有更多与语义Web相关的问题,您可能会发现通过在