如何从Turtle RDF数据中提取语言标签?

问题描述 投票:0回答:1

我想提取语言标签。我无法访问语言标签并收到查询中未使用“@”的错误。

这是我的数据:

@prefix msterms: <http://materials.springer.com/terms/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .

<http://km.springer.com/smat-substances/AFQMYGSOCIHFSLIX> msterms:elementSystem "C-F-H-O" ;
    msterms:inChIKey "DTQVDTLACAAQTR-UHFFFAOYSA-N" ;
    msterms:molecularFormula "C<sub>2</sub>HF<sub>3</sub>O<sub>2</sub>" ;
    owl:sameAs <http://www.wikidata.org/entity/Q412033>,
        <https://echa.europa.eu/substance-information/-/substanceinfo/100.000.846> ;
    skos:altLabel "2,2,2-Trifluoroacetic acid",
        "تریفلورواستیک اسید"@azb,
        "трифлуороцетна киселина"@bg,
        "kyselina trifluoroctová"@cs,
        "三氟乙酸"@zh-sg,
        "三氟乙酸"@zh-tw ;
    skos:prefLabel "trifluoroacetic acid" .

如何提取语言标签?

这是我的代码、错误和查询:

from rdflib import Graph

# Load the Turtle data into a Graph object
graph = Graph()
graph.parse("/content/demo.ttl", format="ttl")

# Define SPARQL query to extract language tags
query = """
SELECT ?lang
WHERE {
  <http://km.springer.com/smat-substances/AFQMYGSOCIHFSLIX> skos:altLabel ?altLabel@?lang .
}
"""

# Execute the SPARQL query
qres = graph.query(query)

for row in qres:
  altlabel = row.altLabel  # Access the language-tagged literal
  lang = altlabel.language  # Extract the language tag directly
  print(lang)

错误:

ParseException: Expected SelectQuery, found '@'  (at char 105), (line:4, col:84)
sparql rdf rdflib
1个回答
0
投票

您提供的 SPARQL 查询无效,特别是

?altLabel@?lang
部分。相反,您可以尝试以下方法从文字中提取语言:

SELECT ?lang
WHERE {
  <http://km.springer.com/smat-substances/AFQMYGSOCIHFSLIX> skos:altLabel ?altLabel .
  BIND( LANG(?altLabel) AS ?lang)
}
© www.soinside.com 2019 - 2024. All rights reserved.