wikidata 툴킷을 사용하고 있으며 모든 이벤트의 목록을 얻고 싶습니다.wikidata에서 모든 이벤트를 얻는 방법
덤프 밖으로 이벤트를 필터링하려는 EntityDocumentProcessor를 작성했습니다. 글쎄, 이벤트 문서의 ID가 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가 이벤트인지 쉽게 확인할 수있는 방법을 아는 사람이 있습니까?