SPARQL 查询:一组品种猫以及属于的猫

SPARQL Query: A sets of breeds cat along with the cats that belong to

我正在尝试查询所有猫品种 (wd:Q43577) 以及属于的猫的列表。下面,你会找到我的解决方案。我的解决方案的结果不相关并且包含冗余。因此,我需要您的帮助来找到最佳解决方案。 (要执行此查询,您必须使用此 link)。

     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. 
    }    
    }

如果我理解正确,你应该使用 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