SPARQL, чтобы найти количество внуков
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
SELECT ?uri (count(?children) as ?childrenCount) WHERE
{
?uri rdfs:subClassOf <http://schema.org/Event>.
?children rdfs:subClassOf ?uri
}
GROUP BY ?uri
Я хочу, чтобы каждый подкласс <http://schema.org/Event>
имел то количество детей, которое он имеет.
1 ответ:
Вы не упоминаете, что такое "неправильный подсчет его детей". Когда я выполню ваш запрос на schema.org сова документ , я получаю следующие результаты:
Я думаю, что этот подсчет верен. Если вы ожидали другого количества, пожалуйста, обновите вопрос, чтобы указать , что вы ожидали, и почему. Согласно schema.org на странице полная иерархия показана эта иерархия, в рамках которой единственными внучатыми классами------------------------------------------------------- | uri | childrenCount | ======================================================= | <http://schema.org/UserInteraction> | 9 | -------------------------------------------------------
Event
являются детиUserInteraction
, и их всего девять. В любом случае, причина, по которой вы не видите больше результатов в этом списке, заключается в том, что запрос теперь находит только детей, которые на самом деле имеют своих собственных детей, и это значительно ограничивает ваши результаты. Вы можете выбрать внуковEvent
внутри шаблонаoptional
, Если хотите выбрать детейEvent
, которые сами не имеют детей. Для иллюстрации:prefix schema: <http://schema.org/> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select * where { ?child rdfs:subClassOf schema:Event . optional { ?grandchild rdfs:subClassOf ?child } }
Производит:
$ arq --data schemaorg.owl --query query.sparql -------------------------------------------------- | child | grandchild | ================================================== | schema:FoodEvent | | | schema:Festival | | | schema:SportsEvent | | | schema:SaleEvent | | | schema:EducationEvent | | | schema:ChildrensEvent | | | schema:DanceEvent | | | schema:BusinessEvent | | | schema:TheaterEvent | | | schema:SocialEvent | | | schema:VisualArtsEvent | | | schema:MusicEvent | | | schema:ComedyEvent | | | schema:LiteraryEvent | | | schema:UserInteraction | schema:UserCheckins | | schema:UserInteraction | schema:UserTweets | | schema:UserInteraction | schema:UserLikes | | schema:UserInteraction | schema:UserPlays | | schema:UserInteraction | schema:UserDownloads | | schema:UserInteraction | schema:UserPlusOnes | | schema:UserInteraction | schema:UserComments | | schema:UserInteraction | schema:UserBlocks | | schema:UserInteraction | schema:UserPageVisits | --------------------------------------------------
Большинство подклассов У
Event
нет никаких подклассов; есть толькоUserInteraction
. Тем не менее, теперь, когда мы видим, как найти эти классы, даже если они не имеют подклассов, подсчет должен происходить с запросом, очень похожим на ваш оригинал:Результаты, конечно, показывают количество нулей для большинства классов и девять дляprefix schema: <http://schema.org/> prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> select ?child (count(?grandchild) as ?nGrandchildren) where { ?child rdfs:subClassOf schema:Event . optional { ?grandchild rdfs:subClassOf ?child } } group by ?child
UserInteraction
.$ arq --data schemaorg.owl --query query.sparql ------------------------------------------- | child | nGrandchildren | =========================================== | schema:ComedyEvent | 0 | | schema:ChildrensEvent | 0 | | schema:SportsEvent | 0 | | schema:FoodEvent | 0 | | schema:BusinessEvent | 0 | | schema:Festival | 0 | | schema:EducationEvent | 0 | | schema:LiteraryEvent | 0 | | schema:SaleEvent | 0 | | schema:TheaterEvent | 0 | | schema:SocialEvent | 0 | | schema:UserInteraction | 9 | | schema:MusicEvent | 0 | | schema:DanceEvent | 0 | | schema:VisualArtsEvent | 0 | -------------------------------------------