SPARQL, чтобы найти количество внуков


Я использую schema.org онтология. Я хочу вернуть подклассы <http://schema.org/Event> с количеством потомков для каждого возвращенного подкласса. Мой запрос в настоящее время возвращает один подкласс.

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 3

1 ответ:

Вы не упоминаете, что такое "неправильный подсчет его детей". Когда я выполню ваш запрос на schema.org сова документ , я получаю следующие результаты:

-------------------------------------------------------
| uri                                 | childrenCount |
=======================================================
| <http://schema.org/UserInteraction> | 9             |
-------------------------------------------------------
Я думаю, что этот подсчет верен. Если вы ожидали другого количества, пожалуйста, обновите вопрос, чтобы указать , что вы ожидали, и почему. Согласно schema.org на странице полная иерархия показана эта иерархия, в рамках которой единственными внучатыми классами Event являются дети UserInteraction, и их всего девять.

иерархия типов для события из schema.org

В любом случае, причина, по которой вы не видите больше результатов в этом списке, заключается в том, что запрос теперь находит только детей, которые на самом деле имеют своих собственных детей, и это значительно ограничивает ваши результаты. Вы можете выбрать внуков 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              |
-------------------------------------------