我正在使用wikidata工具包,我想獲取所有事件的列表。如何獲取wikidata中的所有事件
我寫了一個EntityDocumentProcessor,我想過濾出我的轉儲中的事件。那麼我知道事件文檔的編號爲Q1190554
,而且我必須以某種方式檢查當前itemDocument的實例是否爲事件的「實例」(P31)。
@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;
}
這種方法對獲取人員非常有效。但事件的問題是像WW2(https://www.wikidata.org/wiki/Q362)這樣的事件沒有直接映射事件。事件隱藏在某個地方。 有沒有人知道我如何輕鬆檢查當前itemDocument是否是事件?