在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相关的问题,您可能会发现通过在