/** * sets the resource URI as label right now * * @param resource * @return */ private List<MonolingualTextValue> generateLabels(final Resource resource) { final String resourceURI = resource.getUri(); return generateLabels(resourceURI); }
private void processGDMResource(final Resource resource) throws JsonProcessingException, WikidataImporterException { resourceCount.incrementAndGet(); final String resourceURI = resource.getUri(); final List<MonolingualTextValue> labels = generateLabels(resource); final List<MonolingualTextValue> descriptions = generateLabels(resourceURI); final List<MonolingualTextValue> aliases = new ArrayList<>(); final Map<String, List<org.wikidata.wdtk.datamodel.interfaces.Statement>> wikidataStatementsMap = new HashMap<>(); final Set<Statement> gdmStatements = resource.getStatements(); if (gdmStatements != null) { // write statements (if available) for (final Statement gdmStatement : gdmStatements) { statementCount.incrementAndGet(); final String predicateURI = gdmStatement.getPredicate().getUri(); if (!wikidataStatementsMap.containsKey(predicateURI)) { final List<org.wikidata.wdtk.datamodel.interfaces.Statement> wikidataStatements = new ArrayList<>(); wikidataStatementsMap.put(predicateURI, wikidataStatements); } final Optional<org.wikidata.wdtk.datamodel.interfaces.Statement> optionalWikidataStmt = processGDMStatement(gdmStatement); if (!optionalWikidataStmt.isPresent()) { // log non-created statements LOG.debug("could not process statement '{}'", printGDMStatement(gdmStatement)); continue; } final org.wikidata.wdtk.datamodel.interfaces.Statement wikidataStmt = optionalWikidataStmt.get(); wikidataStatementsMap.get(predicateURI).add(wikidataStmt); processedStatementCount.incrementAndGet(); final boolean updated = checkAndOptionallyUpdateBigCounter(statementCount, bigStatementCount); if (updated) { final long currentStatementCount = statementCount.get(); LOG.info( "processed '{}' from '{}' statements", processedStatementCount.get(), currentStatementCount); } } } final List<StatementGroup> statementGroups = new ArrayList<>(); // create statement groups property-wise for (final Map.Entry<String, List<org.wikidata.wdtk.datamodel.interfaces.Statement>> statmentsPerPropertyEntry : wikidataStatementsMap.entrySet()) { final List<org.wikidata.wdtk.datamodel.interfaces.Statement> statementsPerProperty = statmentsPerPropertyEntry.getValue(); final StatementGroup statementGroup = Datamodel.makeStatementGroup(statementsPerProperty); statementGroups.add(statementGroup); } final Map<String, SiteLink> siteLinkMap = new HashMap<>(); // we can also create an item with all it's statements at once, i.e., this would save some HTTP // API calls // TODO: check ItemIdValue in map (i.e. whether an wikidata for this gdm resource exists // already, or not; because if it exists already, then we need to update the existing one, i.e., // do a slightly different API call) final ItemDocument wikidataItem = Datamodel.makeItemDocument( null, labels, descriptions, aliases, statementGroups, siteLinkMap); // create item at wikibase (check whether statements are created as well - otherwise we need to // create them separately) final ItemIdValue itemIdValue = createWikidataItem(resourceURI, wikidataItem); // add/update item id value at the resources items map gdmResourceURIWikidataItemMap.putIfAbsent(resourceURI, itemIdValue); final boolean updated = checkAndOptionallyUpdateBigCounter(resourceCount, bigResourceCount); if (updated) { final long currentResourceCount = resourceCount.get(); LOG.info( "processed '{}' resources ('{}' from '{}' statements)", currentResourceCount, processedStatementCount.get(), statementCount.get()); } }