1

我有这个 rdf 文件:

<!DOCTYPE rdf:RDF [
    <!ENTITY db "http://dbpedia.org/ontology/" >
    <!ENTITY owl "http://www.w3.org/2002/07/owl#" >
    <!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
    <!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
    <!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >]>

<rdf:RDF xmlns="http://dbpedia.org/ontology/"
     xml:base="http://dbpedia.org/ontology/"
     xmlns:db="http://dbpedia.org/ontology/"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
     xmlns:owl="http://www.w3.org/2002/07/owl#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">


    <owl:ObjectProperty rdf:about="&db;actingHeadteacher">
        <rdfs:label xml:lang="el">διευθυντής σχολείου</rdfs:label>
        <rdfs:label xml:lang="en">acting headteacher</rdfs:label>
    </owl:ObjectProperty>
</rdf:RDF>

并希望通过其 lang 值过滤 Literal 对象。例如:

from rdflib import Graph
from rdflib.namespace import RDFS
filetype = util.guess_format(rdf_file)
g = Graph()
g.parse(rdf_file, format = filetype)
for s,p,o in g.triples((None, RDFS.label, None)):
    print(repr(o))  # rdflib.term.Literal('acting headteacher', lang='en')
                    # rdflib.term.Literal('διευθυντής σχολείου', lang='el')

我只想查询 o where lang='en'

4

2 回答 2

5

当您查看rdflib 的手册时,您会发现它rdflib.term.Literal有一个名为的属性language和一个方法。但是,调用该方法似乎对我不起作用。

像这样的东西可以做到:

# from rdflib import URIRef

subject = URIRef('&db;actingHeadteacher')

# just getting your literals directly here:
generator = graph.objects(subject, RDFS.label)

for lit in generator:
    print lit.language

labels 或preferredLabel仅 s

如果您只对标签/首选标签(SKOS 或 RDFS)感兴趣,请查看手册中的第 47 页

subject = URIRef('&db;actingHeadteacher')
graph.preferredLabel(subject=subject, label='en') # or label='el'

这将返回一个(labelProp, label)对列表,其中labelPropisskos:prefLabelrdfs:label

于 2014-11-06T18:42:21.787 回答
0

在 rdflib 中可能有一个更优雅/性能更好的解决方案,但您可以使用 SPARQL 查询:

g = Graph()
g.parse("../stw.nt", format="nt")

qres = g.query(
    """SELECT ?label
        WHERE {
            ?s ?p ?label
            FILTER langMatches( lang(?label), "en" )
        }"""
)

for row in qres:
    print(row.label)
于 2014-06-30T10:59:10.177 回答