我正在使用芬兰司法部最近发布的 RDF 数据库学习 SPARQL 的基础知识。它包含芬兰法律数据。
有法规,有版本,有日期和主题。我想获得具有“枪”主题的最新版本。所以,我写了这个:
PREFIX sfl: <http://data.finlex.fi/schema/sfl/>
PREFIX eli: <http://data.europa.eu/eli/ontology#>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?stat ?vers ?dv
WHERE {
?stat rdf:type sfl:Statute .
?stat sfl:hasVersion ?vers .
?vers eli:version_date ?dv .
?vers eli:is_about ?top .
?top skos:prefLabel "Ase"@fi .
} ORDER BY DESC(?dv)
Run Code Online (Sandbox Code Playgroud)
这将返回四行,三个法规,一个法规两次。这是因为该法规有两个版本,旧版本和当前版本。另外两个法规只有一个版本。
如何摆脱旧版本,以便仅获得最新版本的法规?我尝试使用类似的东西(MAX(?dv) AS ?ndv)并按 ?stat 和 ?vers 分组,但这不起作用,因为有四个不同的版本。
编辑:让我添加一个模拟示例来说明发生的情况。
原始查询的结果如下所示:
stat | vers | dv
a | abc | x
a | cde | y(<x)
b | foo | z …Run Code Online (Sandbox Code Playgroud) 在检查官方示例查询“大陆、国家、地区和首都”的结果(在https://query.wikidata.org/ 上,为了您的方便,这里仅限于德国:链接),我注意到德国联邦的一些首都状态丢失。例如威斯巴登作为黑森州的首府。我注意到与其他一些城市相比,威斯巴登是 的一个实例big city,但不是city(参见https://www.wikidata.org/wiki/Q1721)。我能够还包括那些的子类城市来缓解这一问题city,通过改变线路17 ?city wdt:P31/wdt:P279? wd:Q515。
仍然失踪的四个城市之一是萨克森-安哈尔特州的首府马格德堡。
诊断查询
SELECT ?cityLabel ?props
WHERE {
?city wdt:P31 ?props.
FILTER(?city = wd:Q1733 || ?city = wd:Q1726).
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
Run Code Online (Sandbox Code Playgroud)
显示 Magdeburg 甚至不是 的一个实例city,尽管它显然是根据其 Wikidata 页面https://www.wikidata.org/wiki/Q1733。
我是 Wikidata 和 SPARQL 的新手。然而,这对我来说似乎是错误的。我该怎么做才能获得德国联邦州的所有首都?这种行为的原因是什么?