SPARQL查询。一组猫的品种以及所属的猫咪。

问题描述 投票:0回答:1

我想查询所有的猫咪品种(wd:Q43577)以及所属的猫咪列表。下面是我的解决方案。我的解决方案的结果是不相关的,并且包含一个冗余。因此,我需要你的帮助来找到最佳的解决方案。(要执行这个查询,你必须使用这个方法。联系).

     SELECT ?CatsBreedsID ?CatsBreedsName ?CategoryID ?CategoryName ?CatsID ?CatsName  where {
     ?CatsBreedsID wdt:P31 wd:Q43577.
    OPTIONAL{

                ?CatsBreedsID wdt:P279 ?CategoryID.
                ?CatsID       wdt:P31  ?CategoryID.
            }
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en".
            ?CatsBreedsID rdfs:label ?CatsBreedsName .
            ?CategoryID      rdfs:label ?CategoryName .
            ?CatsID      rdfs:label ?CatsName. 
    }    
    }
sparql wikidata
1个回答
2
投票

如果我对你的问题理解正确的话,你应该使用GROUP_CONCAT函数。

试试这样的查询。

    SELECT ?CatsBreedsID ?CatsBreedsName ?CategoryID ?CategoryName
           (GROUP_CONCAT(DISTINCT ?CatsID; SEPARATOR=', ') AS ?CatsID_List)
           (GROUP_CONCAT(DISTINCT ?CatsName; SEPARATOR=', ') AS ?CatsName_List)
WHERE {
     ?CatsBreedsID wdt:P31 wd:Q43577.
    OPTIONAL{

                ?CatsBreedsID wdt:P279 ?CategoryID.
                ?CatsID       wdt:P31  ?CategoryID.
            }
    SERVICE wikibase:label {
        bd:serviceParam wikibase:language "en".
            ?CatsBreedsID rdfs:label ?CatsBreedsName .
            ?CategoryID      rdfs:label ?CategoryName .
            ?CatsID      rdfs:label ?CatsName. 
    }    
    } GROUP BY ?CatsBreedsID ?CatsBreedsName ?CategoryID ?CategoryName
© www.soinside.com 2019 - 2024. All rights reserved.