SPARQL(一)
来源:互联网 发布:优化好的单机游戏 编辑:程序博客网 时间:2024/06/09 19:49
本文是对使用 SPARQL 查询 RDF 数据的汇总演示,详情请点击原文及原文引用文章。
subject:主语;Object:宾语;property:属性(关系);
前置准备
一.使用工具为Apache Jena的命令行工具,需要添加JEAN_HOME和在path中加入%JENA_HOME%/bin;
二.下载示例使用资源,后边会有介绍,也可以自己写;
一.基本使用方式
/*配置好环境后,在资源文件目录运行*/sparql --query query.rq --data basic.nt
1.–query后边表示要运行的查询语句所在的文件;–data表示所要查询的数据文件;
2.查询文件rq后缀约定俗称,怎么写都能成功运行。但是数据文件的后缀在用于区分数据文件格式,只要使用一种适合序列化格式的标准后缀,sparql 工具就会正确地解析该格式(例如,.ttl 用于 Turtle图表,.rdf 用于 RDF/XML,.nt 用于 N-Triples);
3.query.rq中查询语句
select ?s ?p ?o where { ?s ?p ?o }//类似于SQL的select,但是其查询元素只有三元组子集,一般使用方式如下:SELECT variable-listWHERE{ graph pattern //可以使用通配符,like等}
如果想要询问特定节点的问题,您可以在模式的主语位置指定这些节点。如果想要知道一个特定属性的值,可以在模式的谓语位置指定该属性。任何您不想指定的元素都可由一个变量来表示,该变量将映射到该位置存在的任何可能值。如果不指定模式的任何部分,则会实际要求图形中的所有元组扁平化到一个结果集中。
4.数据文件basic.nt内容
//<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/birthday> "05-26" .<https://w3id.org/people/bsletten> <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .<https://w3id.org/people/bsletten> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Person> .//可以看出数据格式是<a> <b> <c> .,其中三元组元素之间用空格隔开,最后一英文句号结尾,最后一个元素可以用""代替<>,猜测应该分别表示数据属性和对象属性
也可以将数据存放在Turtle 文件中,如示例中basic.ttl
<https://w3id.org/people/bsletten> a <http://xmlns.com/foaf/0.1/Person> ; <http://xmlns.com/foaf/0.1/birthday> "05-26" ; <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .<https://w3id.org/people/mcarducci> a <http://example.com/ns/Magician> ; <http://xmlns.com/foaf/0.1/homepage> <http://michaelcarducci.com> ; <http://xmlns.com/foaf/0.1/name> "Michael Carducci" .//可以看出数据格式为 主体 属性1 属性值1;属性2 属性值2. 最后.表示此主体的描述结束;
5.如上所述,查询特定主语、谓语或者宾语的数据信息时,只需要所要查询数据的常量值放在对应位置即可,示例如下
//查询主语为XX的三元组谓语、宾语信息select ?p ?o where { <https://w3id.org/people/mcarducci> ?p ?o }
因为查询某个特定资源/主语的请求比较常用,因此sparql提供了另一种查询方式DESCRIBE,而且其结果集不是表格,而是图表:
DESCRIBE <https://w3id.org/people/mcarducci>
6.当我们需要使用多个数据源时:
sparql --query query.rq --data source1 --data source2 --data...
例如我们为以下数据添加关联:Brian “知道”Michael
<https://w3id.org/people/bsletten> a <http://xmlns.com/foaf/0.1/Person> ; <http://xmlns.com/foaf/0.1/birthday> "05-26" ; <http://xmlns.com/foaf/0.1/name> "Brian Sletten" .<https://w3id.org/people/mcarducci> a <http://example.com/ns/Magician> ; <http://xmlns.com/foaf/0.1/homepage> <http://michaelcarducci.com> ; <http://xmlns.com/foaf/0.1/name> "Michael Carducci" .
Brian “知道”Michael 这个新的三元组关系在另一个ttl中做如下表示:
PREFIX foaf: <http://xmlns.com/foaf/0.1/><https://w3id.org/people/bsletten> foaf:knows <https://w3id.org/people/mcarducci>
用如下语句查询,每一句查询一个属性:
PREFIX ex:<http://example.com/ns/>PREFIX foal<http://xmlns.com/foaf/0.1/>select ?magician ?namewhere{//查出名字为“BS”的主体,查出这些主体知道的宾语,用?magician标识返回; ?s foaf:name "B S"; foaf:knows ?magician.//查出#type类型为M的?m,找出其name属性值,用?name标识返回; ?magician a ex:Magician; foaf:name ?name;
7.查询远程数据:将链接作为一个数据源即可,放在 –data 后边,示例如下:
sparql --query interests.rq --data basic.ttl --data knows.ttl --data https://w3id.org/people/bsletten
查询文件内容为
select ?interest where { ?s <http://xmlns.com/foaf/0.1/interest> ?interest ; <http://xmlns.com/foaf/0.1/knows> ?magician . ?magician a <http://example.com/ns/Magician> ; <http://xmlns.com/foaf/0.1/name> "Michael Carducci". //代码运行是自下而上的}
输出结果为:
-----------------------------------------------| interest |===============================================| <http://dbpedia.org/page/Fish_%28singer%29> || <http://dbpedia.org/resource/Sushi> || <http://dbpedia.org/resource/Phish> || <http://www.w3.org/2000/01/sw/> || <http://www.w3.org/Metadata/> || <http://www.w3.org/RDF/> |-----------------------------------------------
语法关键字
- limit:同mysql,放在语句最后
select ?s ?p ?o where { ?s ?p ?o } limit 10
2.distinct:位置同mysql,修饰跟着的所有属性
select distinct ?s where { ?s ?p ?o }//如果...distinct ?s ?p,则s和p都一样则只显示一个;
3.PREFIX:前缀别名
PREFIX foaf: <http://xmlns.com/foaf/0.1/>SELECT ?sWHERE { ?s foaf:name "Michael Carducci" }//PREFIX 别名:别名值;上句查询等同于以下:select ?swhere{ ?s <http://xmlns.com/foaf/0.1/name> "Michael Carducci" }
6.二次查询:有些查询必须使用组合语句,比如“名字属性为MC的主体的所有信息”。匹配模式语句中第一次查询出的常量可以作为输入,继续进行查询,两句查询语句用分号分割就好:
PREFIX foaf: <http://xmlns.com/foaf/0.1/>SELECT ?p ?oWHERE { ?s foaf:name "Michael Carducci";//查出了名字为MC的主语 ?p ?o .//上行主语作为输入,求其谓语、宾语}
7.DESCRIBE和a的使用:
PREFIX ex: <http://example.com/ns/>DESCRIBE ?sWHERE { ?s a ex:Magician}/* *1.使用糖衣语法a避免完整指定RDF type属性:<XXX#type>; *组合使用DESCRIBE;*/
重要:注意事项
- 查询文件内容不区分大小写,但不能有分号; 2.
- SPARQL(一)
- Sparql语言模型(一)
- SPARQL和大数据(以及NoSQL)
- sparql 学习,理解sparql
- Jena环境变量配置(可进行Sparql 查询)
- SPARQL 简介
- SPARQL教程
- sparql学习 sparql示例 dbpedia在线验证
- learning sparql 中文版翻译
- sparql查询特点
- Jena,TDB,Sparql
- 使用 SPARQL 查询 RDF
- sparql查询学习
- sparql查询学习 2
- 使用 SPARQL 查询 RDF
- sparql查询范例
- 如何运行SPARQL
- Sparql查询RDF
- 【Scikit-Learn 中文文档】流形学习
- 目标检测:Improving Object Detection With One Line of Code
- js与JQuery的某些方法
- spring+springmvc+mybatis+jsp练习
- Mybatis 单例获取SqlSessionFactory
- SPARQL(一)
- Android实现LIstView条目单选和多选RadioButton
- MATLAB 深度学习:自编码(含MATLAB)
- 元素的显示方式
- jQuery的三种$()
- 使用SimpleDateFormate转换日期出错
- 轻量级分布式 RPC 框架
- 姿态检测整理--06-Associative Embedding: End-to-End Learning for Joint Detection and Grouping
- 使用 pycharm 远程运行server 上代码