【问题标题】:getting labels from Wikidata in graphDB在 graphDB 中从 Wikidata 获取标签
【发布时间】:2023-04-08 15:12:01
【问题描述】:

我在 graphDB 中有一个艺术风格列表,我正在尝试使用 SERVICE 函数通过以下查询从 Wikidata 获取它们的标签:

PREFIX gp: <http://www.semanticweb.org/kandd/group76/final_project#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>

SELECT ?movement ?label
WHERE{
    ?artist gp:hasArtStyle ?movement.
    SERVICE <https://query.wikidata.org/sparql>{
        ?movement rdfs:label ?label .
        FILTER (langMatches( lang(?label), "EN" ) )
        }
    }

请注意,gp 是一个仅存在于我的图表中的命名空间,而不是互联网上的任何地方,还请注意 ?movement 包含一个有效的 Wikidata URIs 列表,例如 http://www.wikidata.org/entity/Q186030

但我得到的仍然是:

Error 500: error
Query evaluation error: org.eclipse.rdf4j.query.QueryEvaluationException: org.eclipse.rdf4j.query.QueryEvaluationException: java.io.IOException: Unkown record type: 83 (HTTP status 500)

我做错了什么?

【问题讨论】:

  • 您是否尝试过一个更简单的查询,而不是 ?movement 是一个列表,您只有一个 URI 并且没有过滤器?如果可行,我会按顺序添加它们,希望能找出引擎不喜欢的部分

标签: sparql wikidata graphdb wikidata-api


【解决方案1】:

请记住,您的查询是从内到外处理的,这意味着首先处理 service 部分,然后 然后 使用您自己的特定属性的部分.

目前,您对 WikiData 的查询非常笼统。您要求所有具有rdfs:label 的内容,然后过滤它返回的所有英文标签。

鉴于此,我的猜测是您的查询只是超时。相反,我会尝试这样的事情:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX wdt: <http://www.wikidata.org/prop/direct/>
PREFIX wd: <http://www.wikidata.org/entity/>

SELECT *
WHERE{
    SERVICE <https://query.wikidata.org/sparql>{
        ?artist wdt:P101 wd:Q186030 ; #Field of Work is contemporary art
                wdt:P31 wd:Q5 ;       #instance of Human
                rdfs:label ?name .    #get the label
        FILTER (langmatches(lang(?name), "en"))
        }
    }

如果我在 GraphDB 中尝试这个,它会返回 156 个结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多