如何从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
相关产品推荐
相关产品推荐

