You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Turtle RDF数据提取语言标签?SPARQL查询报错求助

如何提取SKOS altLabel的语言标签?

你遇到的报错是因为SPARQL查询里的?altLabel@?lang语法不符合规范,SPARQL不支持这种写法。下面提供两种可行的解决方式:

方法一:用SPARQL的lang()函数直接查询语言标签

修改你的SPARQL查询,使用lang()函数提取字面量的语言标签,可直接在查询结果中拿到语言代码:

from rdflib import Graph

graph = Graph()
graph.parse("/content/demo.ttl", format="ttl")

# 修正后的SPARQL查询
query = """
SELECT ?lang
WHERE {
  <http://km.springer.com/smat-substances/AFQMYGSOCIHFSLIX> skos:altLabel ?altLabel .
  BIND(lang(?altLabel) AS ?lang)
}
"""

qres = graph.query(query)

for row in qres:
    print(row.lang)

方法二:从Literal对象直接获取语言属性

如果不想修改查询逻辑,也可以直接查询所有altLabel字面量,然后通过rdflib的Literal对象的language属性提取语言标签:

from rdflib import Graph

graph = Graph()
graph.parse("/content/demo.ttl", format="ttl")

query = """
SELECT ?altLabel
WHERE {
  <http://km.springer.com/smat-substances/AFQMYGSOCIHFSLIX> skos:altLabel ?altLabel .
}
"""

qres = graph.query(query)

for row in qres:
    lang = row.altLabel.language
    # 注意:无语言标签的字面量(比如"2,2,2-Trifluoroacetic acid")会返回None
    if lang is not None:
        print(lang)

这两种方法都能正确提取出azb、bg、cs、zh-sg、zh-tw这些语言标签,同时避免原查询的语法错误。

内容的提问来源于stack exchange,提问作者PrincessIris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:43:21