sparql查询

参考资料:
SPARQL基础知识:https://blog.csdn.net/qq_22938671/article/details/89071370
RDF 和 SPARQL 初探:以维基数据为例
http://www.ruanyifeng.com/blog/2020/02/sparql.html
SPARQL——语义网的查询语言
https://blog.csdn.net/Jenny_oxaza/article/details/108540522
SparQL查询语法
https://zhuanlan.zhihu.com/p/524282156
使用SPARQL查看数据集中数据类型
https://cloud.tencent.com/developer/news/374001
sparql官方教程
https://www.w3.org/TR/sparql11-query/#propertypath-arbitrary-length
sparql路径查询
https://blog.csdn.net/qq_21120275/article/details/101295531

0、SPARQL查询语句的小技巧

1、当不知道该如何写查询语句的结构时,可以先将所有内容查询SELECT ?subject ?p ?object where { ?subject ?p ?object }出来,再写查询语句SELECT ?object where { bmm:bridge rdfs:comment ?object }
sparql查询_第1张图片
sparql查询_第2张图片

在protege中执行sparql属性值查询时,会显示属性值的数据类型(这可能是protege的sparql查询的插件的影响)。在jena fuseki server中执行sparql查询就不会显示属性值的数据类型。
sparql查询_第3张图片

1、SPARQL基础查询语句

日常代码记录
查询实例的类型(实例有默认类和自定义的所属类)
SELECT   ?object  
where {bmm:桥梁1 rdf:type ?object  }

sparql查询_第4张图片

联合查询

针对下文的自编的owl文件的查询

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX user: <http://www.co-ode.org/ontologies/pizza/pizza.owl#>

//1、通过排序查询得到最大值
SELECT ?subject ?object
	WHERE { ?subject  user:age ?object}
ORDER BY DESC(?object) limit 1

//升序输出,可求最小
SELECT ?subject ?object
	WHERE { ?subject  user:age ?object}
ORDER BY ASC(?object) limit 2

//2、过滤查询 ?object.FILTER 中间点
SELECT ?subject ?object
	WHERE { ?subject  user:age ?object.FILTER(?object > 16)
}

//计数
SELECT   (COUNT(?subject) AS ?count_person)
	WHERE { ?subject  user:age ?object.FILTER(?object > 16)}

//嵌套查询,可以通过嵌套查询先筛选出2组数据,再查询两组数据的最大值,从而实现2组数据的比较
SELECT ?subject ?object
	WHERE 
{ 
SELECT ?subject ?object
	WHERE { ?subject  user:age ?object.FILTER(?object > 16)}

}

ORDER BY ASC(?object) limit 1


sparql查询_第5张图片

sparql查询_第6张图片

sparql查询_第7张图片
sparql查询_第8张图片
在这里插入图片描述

sparql查询_第9张图片

自编的owl文件

 <?xml version="1.0"?>
<rdf:RDF xmlns="http://www.co-ode.org/ontologies/pizza/pizza.owl#"
     xml:base="http://www.co-ode.org/ontologies/pizza/pizza.owl"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:xml="http://www.w3.org/XML/1998/namespace"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
    <owl:Ontology rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl">
        <rdfs:comment xml:lang="en">An example ontology that contains all constructs required for the various versions of the Pizza Tutorial run by Manchester University (see http://www.co-ode.org/resources/tutorials/)</rdfs:comment>
        <owl:versionInfo xml:lang="en">v.1.4. Added Food class (used in domain/range of hasIngredient), Added several hasCountryOfOrigin restrictions on pizzas, Made hasTopping invers functional</owl:versionInfo>
        <owl:versionInfo xml:lang="en">v.1.5. Removed protege.owl import and references. Made ontology URI date-independent</owl:versionInfo>
        <owl:versionInfo rdf:datatype="http://www.w3.org/2001/XMLSchema#string">version 1.5</owl:versionInfo>
    </owl:Ontology>
    


    <!-- 
    ///
    //
    // Data properties
    //
    ///
     -->

    


    <!-- http://www.co-ode.org/ontologies/pizza/pizza.owl#age -->

    <owl:DatatypeProperty rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl#age">
        <rdfs:domain rdf:resource="http://www.co-ode.org/ontologies/pizza/pizza.owl#People"/>
    </owl:DatatypeProperty>
    


    <!-- 
    ///
    //
    // Classes
    //
    ///
     -->

    


    <!-- http://www.co-ode.org/ontologies/pizza/pizza.owl#People -->

    <owl:Class rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl#People"/>
    


    <!-- 
    ///
    //
    // Individuals
    //
    ///
     -->

    


    <!-- http://www.co-ode.org/ontologies/pizza/pizza.owl#刘飞 -->

    <owl:NamedIndividual rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl#刘飞">
        <rdf:type rdf:resource="http://www.co-ode.org/ontologies/pizza/pizza.owl#People"/>
        <age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">28</age>
    </owl:NamedIndividual>
    


    <!-- http://www.co-ode.org/ontologies/pizza/pizza.owl#张南 -->

    <owl:NamedIndividual rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl#张南">
        <rdf:type rdf:resource="http://www.co-ode.org/ontologies/pizza/pizza.owl#People"/>
        <age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">15</age>
    </owl:NamedIndividual>
    


    <!-- http://www.co-ode.org/ontologies/pizza/pizza.owl#张山南 -->

    <owl:NamedIndividual rdf:about="http://www.co-ode.org/ontologies/pizza/pizza.owl#张山南">
        <rdf:type rdf:resource="http://www.co-ode.org/ontologies/pizza/pizza.owl#People"/>
        <age rdf:datatype="http://www.w3.org/2001/XMLSchema#integer">30</age>
    </owl:NamedIndividual>
</rdf:RDF>



<!-- Generated by the OWL API (version 4.5.9.2019-02-01T07:24:44Z) https://github.com/owlcs/owlapi -->




2、使用python对RDF文件进行sparql查询

python中用rdflib生成rdf,用sparql查询
https://blog.csdn.net/vuscity/article/details/79869828
如何使用SPARQL在OWL本体中插入新实例
https://cloud.tencent.com/developer/ask/sof/1555685
python包rdflib文档
https://rdflib.readthedocs.io/en/stable/
https://github.com/RDFLib/rdflib
Python第三方库——rdflib
https://blog.csdn.net/qq_46905110/article/details/116450208

9、注意事项

1、在protege 同时查询多个本体

通过protege 的 gather ontologies功能可以将多个本体文件加载进来实现同时查询多个本体,可以使用union语句
sparql查询_第10张图片

PREFIX test2: <http://www.semanticweb.org/zhangyang/ontologies/2022/6/test2#>
PREFIX test:<http://www.semanticweb.org/ZhangYang/ontologies/2022/6/BMMOntology#>

SELECT ?subject ?object
	WHERE { { ?subject  test2:haveCom  ?object } UNION { ?subject  test:ispartof  ?object } }

你可能感兴趣的:(知识图谱,sparql,知识图谱)