2016-11-24 1 views
0

J'utilise la boîte à outils wikidata et je veux obtenir une liste de tous les événements.Comment obtenir tous les événements dans wikidata

J'ai écrit un EntityDocumentProcessor, où je veux filtrer les événements hors de ma sauvegarde. Eh bien, je sais que le document d'événement a l'ID Q1190554 et que je dois en quelque sorte vérifier si l'instance de l'itemDocument actuel est une "instance de" (P31) d'un événement.

@Override 
public void processItemDocument(ItemDocument itemDocument) { 
     boolean isEvent = false; 
     for (StatementGroup statementGroup : itemDocument.getStatementGroups()) { 
      switch (statementGroup.getProperty().getId()) { 
       case "P31": // P31 is "instance of" 
        isEvent = containsValue(statementGroup, filterClass); 
        break; 
       case "P279": // P279 is "subclass of" 
        if (!isEvent) { 
         isEvent = containsValue(statementGroup, filterClass); 
        } 
        break; 
      } 
     } 
} 



private boolean containsValue(StatementGroup statementGroup, Value value) { 
    for (Statement s : statementGroup.getStatements()) { 
     if (value.equals(s.getValue())) { 
      return true; 
     } 
    } 

    return false; 
} 

Cette approche a fonctionné assez bien pour attirer les gens. Mais le problème avec les événements est que les événements comme WW2 (https://www.wikidata.org/wiki/Q362) n'ont pas l'événement directement mappé. L'événement est caché quelque part. Est-ce que quelqu'un sait comment je peux facilement vérifier si le itemDocument actuel est un événement?

Répondre

0

Vous devez suivre la hiérarchie du subclass of du instance of en une division. Ainsi, à partir de Q362 vous finirez par atteindre: https://www.wikidata.org/wiki/Q350604-armed conflict, la présomption étant que la Seconde Guerre mondiale est tout jusqu'à ce que avant cette séparation, à savoir:
1) world war: https://www.wikidata.org/wiki/Q103495 et
2) war: https://www.wikidata.org/wiki/Q198, puis
3) armed conflict : https://www.wikidata.org/wiki/Q350604 qui se divise à:

1) : https://www.wikidata.org/wiki/Q180684, qui divise maintenant
2) event: https://www.wikidata.org/wiki/Q1190554

Et puisque vous n'êtes intéressé que par les événements, je le ferai de manière récursive jusqu'à ce que j'atteigne la classe de l'événement.