我很习惯使用,SQL但有一个不可能的时间理解SPARQL.对于初学者,我甚至不了解如何查看数据的结构(MySQL我会这样做describe <table name>)所以我可以查询相应的字段.
有没有办法将整个RDF数据集导入MySQL数据库中的相应表?
除非是,是有办法SELECT *,从所有的表(或其他等效描述符),这样我可以得到所有的输出数据为CSV(并从那里?)
我试图查询的RDF数据集有一个SPARQL端点,甚至是如何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
}
Run Code Online (Sandbox Code Playgroud)
对我来说没什么意义.为什么在某些WHERE语句结束时有一段时间而在其他语句中没有??comment mebase:has-annotator ?annotator简单的英语是什么意思?选择注释器名称作为注释器名称的注释器名称?是吧?
对于您可以指出的任何资源,我将不胜感激.
Rob*_*obV 19
虽然SPARQL在语法中看起来像SQL,但它的功能实际上是完全不同的,这是你和许多其他人在尝试学习它时遇到的问题.
SPARQL是关于三重模式匹配而不是从SQL这样的表中进行选择.示例中的每组三个项目代表三重模式.例如:
?comment rdf:type meannot:Comment .
Run Code Online (Sandbox Code Playgroud)
这告诉SPARQL处理器发现其中有任何东西rdf:type的meannot:Comment即东西是类型的注释.在这种模式?comment中,一个变量就像一个通配符,将其视为SQL中可以选择的字段
如果我们添加使用变量的额外三重模式,那么我们要求SPARQL处理器找到所有匹配所有三重模式的东西,因此:
?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
?comment rdf:type meannot:Comment .
Run Code Online (Sandbox Code Playgroud)
这会查找对特定项目发表评论的内容.
在SQL术语中,这就像写,SELECT commentID FROM COMMENTS WHERE itemID=1234如果这有助于你理解它.
当我们开始添加其他变量时,您可以将其视为与其他表的连接:
?comment mebase:annotates <http://www.myexperiment.org/workflows/52> .
?comment rdf:type meannot:Comment .
?comment mebase:has-annotator ?annotator .
Run Code Online (Sandbox Code Playgroud)
这会查找注释内容以及在特定项目上创建它们的用户
它将大致等同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 .
Run Code Online (Sandbox Code Playgroud)
意味着您不必?comment再为后续模式输入内容.
类似地,用于重复主语和谓词:
?comment rdf:type meannot:Comment , ex:Annotation .
Run Code Online (Sandbox Code Playgroud)
岂不是?comment和rdf:type重复,简单的英语上面会事情是注释类型和类型注解
RDF不存储在表中,因为它是无模式数据模型,与表最接近的是命名图,这只是将三元组逻辑分组在一起的一种方法.
看一下关于探索性SPARQL查询的这个问题,以获得有关查询的一些建议.
如果你只想选择你能做的一切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
Run Code Online (Sandbox Code Playgroud)
如果您只想通过浏览网站上的所有数据来查看它们是否提供RDF转储,该转储通常是带有一堆RDF文件的压缩存档.这将让您在本地查看数据
有些系统可以让你在基于SQL的数据库中存储RDF,但是从那些使用各种三重存储的人那里获取它,这远远不如使用原生三重存储那样高效.
您可能对R2RML感兴趣,这是一个新的W3C标准(目前处于早期工作草案中),它定义了将关系数据映射到RDF的标准方法.他们的一些文档可能有助于您更好地理解RDF/SPARQL和SQL之间的关系
有关更全面的教程,我将通过示例查看SPARQL,这是SPARQL规范的作者之一,强烈建议