使用 Turtle 文件的 SPARQL 查询(Public 数据源)
SPARQL query with Turtle file (Public data source)
我不熟悉 Turtle 格式文件并使用 SPARQL 查询它们。所以我有很多问题想解决,希望大家能帮帮我!
我有一个名为 equipamentsCURT3.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). I need to read from a file called equipamentsCURT.rdf, serialize it into equipamentsCURT3.ttl and then retrieve all information related to an equipment. For example, for the equipment 30883 (http://opendata.gencat.cat/recursos/equipaments/30883) 的库,我想要 v:adr,v:category,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
整个查询没有任何意义,也不符合数据。
我建议先阅读 SPARQL 教程。整个查询看起来像是从其他东西复制粘贴+你身边的一些随机东西。
URI http://opendata.gencat.cat/recursos/equipaments 30883
包含一个白色 space 这是错误的
http://opendata.gencat.cat/recursos/equipaments/30883
是 不是 一个 class。因此,一个三重模式
?x a <http://opendata.gencat.cat/recursos/equipaments/30883>
,这意味着属于class的所有资源http://opendata.gencat.cat/recursos/equipaments/30883
与您的数据不匹配。
第二个三元组模式是?x ?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
}
我不熟悉 Turtle 格式文件并使用 SPARQL 查询它们。所以我有很多问题想解决,希望大家能帮帮我!
我有一个名为 equipamentsCURT3.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). I need to read from a file called equipamentsCURT.rdf, serialize it into equipamentsCURT3.ttl and then retrieve all information related to an equipment. For example, for the equipment 30883 (http://opendata.gencat.cat/recursos/equipaments/30883) 的库,我想要 v:adr,v:category,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
整个查询没有任何意义,也不符合数据。 我建议先阅读 SPARQL 教程。整个查询看起来像是从其他东西复制粘贴+你身边的一些随机东西。
URI
http://opendata.gencat.cat/recursos/equipaments 30883
包含一个白色 space 这是错误的http://opendata.gencat.cat/recursos/equipaments/30883
是 不是 一个 class。因此,一个三重模式?x a <http://opendata.gencat.cat/recursos/equipaments/30883>
,这意味着属于class的所有资源http://opendata.gencat.cat/recursos/equipaments/30883
与您的数据不匹配。第二个三元组模式是
?x ?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
}