Wikidata SPARQL 按语言过滤字段值

问题描述

所以我有这个获取美元信息的 SparQL 查询

SELECT 
?currency ?page_title ?currencyLabel ?currencyIso4217 
(GROUP_CONCAT(distinct ?shortName; separator = ',') as ?shortNames)  
    {  
        ?currency wdt:P498 ?currencyIso4217 .  
        OPTIONAL {?currency wdt:P1813 ?shortName} .    
        ?article schema:about ?currency ; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?page_title    
            SERVICE wikibase:label { bd:serviceParam wikibase:language 'nl' }  
            {
                BIND(wd:Q4917 AS ?currency).  
                OPTIONAL { 
                     SERVICE wikibase:label 
                             { 
                               ?shortName rdfs:label ?shortNameLabel . 
                               bd:serviceParam wikibase:language 'nl'  
                             }  
                         } 
             } 
      }  
group by ?currency ?currencyLabel ?currencyIso4217 ?page_title

Try it here

输出

enter image description here

现在,当我查看美元的 WikiData 页面,然后到“简称”部分时,我看到了:

Wikidata image

它们在括号之间都有一个语言属性。现在我的问题是:我想要在查询中只包含短名称的“英文”版本并过滤掉所有其他语言。我该怎么做?

解决方法

您的查询奇怪地令人费解,并且我相信由于在这种情况下 GROUP_CONCAT 的长期错误,您已经被引导到了这条道路上(至少我似乎记得类似的事情 - 现在无法完全查明).

无论如何,至少在理论上,我认为这里有一些东西对您有用。实际上,没有足够的“短名称”来说明问题。

SELECT DISTINCT ?currency ?page_title ?currencyLabel ?currencyIso4217 ?shortName WHERE 
  {  
    ?currency wdt:P498 ?currencyIso4217 .  
    ?article schema:about ?currency ; schema:isPartOf <https://en.wikipedia.org/>; schema:name ?page_title .          
    
    OPTIONAL {
      ?currency wdt:P1813 ?shortName .
      FILTER(LANG(?shortName) = "en") .
    }    
    SERVICE wikibase:label { bd:serviceParam wikibase:language 'en' }  
  }

Link to query

你会注意到我剪掉了很多东西。但我认为您一直在抓住的一个想法就是 FILTER 的线条。也许 LANG(?string) 能让你掌握语言。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...