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?