当前位置: 首页 > 知识库问答 >
问题:

带有Turtle文件的SPARQL查询(公共数据源)

魏翰
2023-03-14

我不熟悉海龟格式的文件并用SPARQL查询它们。所以我有很多问题要解决,希望你能帮助我!

我有一个文件,名为设备CURT3.ttl并包含以下内容:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix v: <http://www.w3.org/2006/vcard/ns#> .
@prefix xml: <http://www.w3.org/XML/1998/namespace> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<http://opendata.gencat.cat/recursos/equipaments/30883> a v:VCard ;
v:adr [ a v:Work ;
        v:country-name "Spain" ;
        v:locality "Sabadell" ;
        v:postal-code "08202" ;
        v:region "Vallès Occidental" ;
        v:street-address " c.  Sant Josep" ] ;
v:category "2. Parvulari"@ca,
    "3. Educació primària"@ca,
    "4. Educació secundària obligatòria"@ca,
    "Educació. Formació"@ca,
    "Ensenyaments de règim general"@ca ;
v:fn "Escolàpies Sabadell"@ca ;
v:geo [ v:latitude 4.154826e+01 ;
        v:longitude 2.111243e+00 ] ;
v:nickname "Escolàpies Sabadell"@ca ;
v:tel [ a v:Pref,
            v:Tel,
            v:Work ;
        rdf:value "937255348" ] .

<http://opendata.gencat.cat/recursos/equipaments/31264> a v:VCard ;
v:adr [ a v:Work ;
        v:country-name "Spain" ;
        v:locality "Molins de Rei" ;
        v:postal-code "08750" ;
        v:region "Baix Llobregat" ;
        v:street-address " c.  Ntra. Sra. de Lourdes" ] ;
v:category "4. Educació secundària obligatòria"@ca,
    "7. Batxillerat"@ca,
    "8. Cicles formatius d'FP de grau mitjà (CFPM)"@ca,
    "9. Cicles formatius d'FP de grau superior (CFPS)"@ca,
    "Educació. Formació"@ca,
    "Ensenyaments de règim general"@ca ;
v:fn "Institut Bernat el Ferrer"@ca ;
v:geo [ v:latitude 4.14105e+01 ;
        v:longitude 2.02704e+00 ] ;
v:nickname "Institut Bernat el Ferrer"@ca ;
v:tel [ a v:Pref,
            v:Tel,
            v:Work ;
        rdf:value "936683762" ] .

<http://opendata.gencat.cat/recursos/equipaments/31265> a v:VCard ;
v:adr [ a v:Work ;
        v:country-name "Spain" ;
        v:locality "Castellar del Vallès" ;
        v:postal-code "08211" ;
        v:region "Vallès Occidental" ;
        v:street-address " NC  Bonavista" ] ;
v:category "2. Parvulari"@ca,
    "3. Educació primària"@ca,
    "Educació. Formació"@ca,
    "Ensenyaments de règim general"@ca ;
v:fn "Escola Bonavista"@ca ;
v:geo [ v:latitude 4.161903e+01 ;
        v:longitude 2.091745e+00 ] ;
v:nickname "Escola Bonavista"@ca ;
v:tel [ a v:Pref,
            v:Tel,
            v:Work ;
        rdf:value "937144195" ] .

我正在使用Python3.5和一个名为RDFLib(https://github.com/RDFLib/rdflib)的库。我需要从一个文件称为设备读取CURT. rdf,将其序列化为设备3.ttl然后检索与设备相关的所有信息。例如,对于设备30883(http://opendata.gencat.cat/recursos/equipaments/30883),我想要v: adr,v:类别,v: fn,v: geo和v: tel。为了获得这些数据,我使用SPARQL,但我不知道为什么查询不起作用。我很困惑如何查询这些信息。

这是我的密码:

import rdflib , pprint
from rdflib import URIRef, Graph
from rdflib.plugins import sparql

g = Graph()
g.load("equipamentsCURT3.ttl", format='turtle')

queryTest = 'prefix v: <http://www.w3.org/2006/vcard/ns#> ' \
'select ?y where {?x  a <http://opendata.gencat.cat/recursos/equipaments 30883>; ?y v:VCard .}'
qresult = g.query(queryTest)

for st in qresult:
 print rdflib.term.Literal(st).value

共有1个答案

班浩皛
2023-03-14

整个查询没有任何意义,也与数据不匹配。我建议先阅读SPARQL教程。整个查询看起来像是从其他东西复制粘贴,或者是从您这边随机复制的东西。

>

  • URIhttp://opendata.gencat.cat/recursos/equipaments30883包含错误的空白

    http://opendata.gencat.cat/recursos/equipaments/30883不是一个类。因此,三重模式?x a

    第二个三重模式是?十、y v:VCard。您正在选择谓词?y作为查询的最终结果。但是您需要一个给定主题和一组给定谓词的对象。三元组/resp的语法。三重模式)是主谓宾语。因此,例如对于v:category,它应该是

    PREFIX v: <http://www.w3.org/2006/vcard/ns#> 
    SELECT ?o WHERE {
      <http://opendata.gencat.cat/recursos/equipaments/30883>  v:category ?o 
    }
    

    对于其他属性,它将更加复杂,因为值本身是通过其他属性附加多个值的空白节点。例如,对于v:adr而言

    PREFIX v: <http://www.w3.org/2006/vcard/ns#> 
    SELECT ?p ?o WHERE {
      <http://opendata.gencat.cat/recursos/equipaments/30883>  v:adr ?adr .
      ?adr ?p ?o 
    }
    

    如果您不想要值,而是想要属性,那么将变量放在谓词位置是正确的。但是将其限制为与对象v: VCard仅以三元组形式出现的属性是错误的,因为除了rdf: type之外没有这样的属性(a只是它的同义词)。那样的话应该是

    PREFIX v: <http://www.w3.org/2006/vcard/ns#> 
    SELECT DISTINCT ?p WHERE {
      <http://opendata.gencat.cat/recursos/equipaments/30883>  ?p ?o 
    }
    

  •  类似资料:
    • SPARQL查询从以下文件返回2001-2017年间的所有日记账的语法是什么?

    • 我试图从下层超级输出区域(LSOAs)和英国邮政编码数据集中获取一些信息。

    • 基本的问题是在多个文本文件中添加一些公共数据。我编写的SAS程序的输出是文件夹中的许多文本文件,比如30到50个文本文件,现在我必须在每个文件的顶部添加一个手机号码。现在,我通过手动复制号码,然后打开文本文件,然后粘贴号码来实现这一点。有人能给我推荐一种替代方法吗?可能是SAS程序或类似的东西。 提前谢谢。

    • 我使用jena创建了一个用于电子邮件存储的rdf模型。我的thr rdf代码是: 这是我查询rdf模型的代码。在这里,我从命令行获取输入,但是字符串的查询也可以工作... 这显示了查询的工作情况:

    • 这里有一个名为的小本体,由Protégé创建,其中我有类、、、和个体()、()和(也是)。在本体论中,我只声明。 当我在Protégé的DL Query选项卡中请求的实例时,我得到的是(它是,因此是,因此是)。 但当我编写以下SPARQ查询时: 我没有任何例子。当我将替换为时,结果是相同的。只有当我用替换它时,我才会得到所需的结果。 为什么DL查询做推断(允许我获得作为类的实例),而不是SPARQ

    • 当文件需要与企业外的人进行共享或者协作时,则可通过公开共享的方式,目前公开共享有共享链接和二维码2种共享方式,共享方式如下: 1)开启公开共享; 2)设置共享权限,可设置:可编辑、仅下载、仅查看; 3)设置有效时间,可设置:24小时、7天、1个月、永久有效; 4)复制公开链接或者复制/保存共享二维码; 5)将二维码或者链接通过轻推或者其他方式发送给需要共享的对象; 6)收到链接或者二维码的人无需下