use of org.wikidata.wdtk.datamodel.interfaces.Value in project OpenRefine by OpenRefine.
the class RestrictedValuesScrutinizer method scrutinize.
@Override
public void scrutinize(Snak snak, EntityIdValue entityId, boolean added) {
if (!added) {
return;
}
PropertyIdValue pid = snak.getPropertyId();
Value value = null;
if (snak instanceof ValueSnak) {
value = ((ValueSnak) snak).getValue();
}
List<Statement> allowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, allowedValuesConstraintQid);
List<Statement> disallowedValueConstraintDefinitions = _fetcher.getConstraintsByType(pid, disallowedValuesConstraintQid);
Set<Value> allowedValues = null, disallowedValues = null;
if (!allowedValueConstraintDefinitions.isEmpty()) {
AllowedValueConstraint constraint = new AllowedValueConstraint(allowedValueConstraintDefinitions.get(0));
allowedValues = constraint.allowedValues;
}
if (!disallowedValueConstraintDefinitions.isEmpty()) {
DisallowedValueConstraint constraint = new DisallowedValueConstraint(disallowedValueConstraintDefinitions.get(0));
disallowedValues = constraint.disallowedValues;
}
if ((allowedValues != null && !allowedValues.contains(value)) || (disallowedValues != null && disallowedValues.contains(value))) {
QAWarning issue = new QAWarning(type, pid.getId(), QAWarning.Severity.IMPORTANT, 1);
issue.setProperty("property_entity", pid);
issue.setProperty("example_value_entity", value);
issue.setProperty("example_subject_entity", entityId);
addIssue(issue);
}
}
use of org.wikidata.wdtk.datamodel.interfaces.Value in project OpenRefine by OpenRefine.
the class WbStatementExpr method evaluate.
public StatementEdit evaluate(ExpressionContext ctxt, EntityIdValue subject, PropertyIdValue propertyId) throws SkipSchemaExpressionException {
Snak mainSnak = null;
if (mainSnakValueExpr != null) {
Value mainSnakValue = mainSnakValueExpr.evaluate(ctxt);
mainSnak = Datamodel.makeValueSnak(propertyId, mainSnakValue);
} else {
// hack to make sure we have a non-null snak
mainSnak = Datamodel.makeNoValueSnak(propertyId);
}
// evaluate qualifiers
List<Snak> qualifiers = new ArrayList<Snak>(getQualifiers().size());
for (WbSnakExpr qExpr : getQualifiers()) {
try {
qualifiers.add(qExpr.evaluate(ctxt));
} catch (SkipSchemaExpressionException e) {
QAWarning warning = new QAWarning("ignored-qualifiers", null, QAWarning.Severity.INFO, 1);
warning.setProperty("example_entity", subject);
warning.setProperty("example_property_entity", mainSnak.getPropertyId());
ctxt.addWarning(warning);
}
}
List<SnakGroup> groupedQualifiers = groupSnaks(qualifiers);
Claim claim = Datamodel.makeClaim(subject, mainSnak, groupedQualifiers);
// evaluate references
List<Reference> references = new ArrayList<Reference>();
for (WbReferenceExpr rExpr : getReferences()) {
try {
references.add(rExpr.evaluate(ctxt));
} catch (SkipSchemaExpressionException e) {
QAWarning warning = new QAWarning("ignored-references", null, QAWarning.Severity.INFO, 1);
warning.setProperty("example_entity", subject);
warning.setProperty("example_property_entity", mainSnak.getPropertyId());
ctxt.addWarning(warning);
}
}
StatementRank rank = StatementRank.NORMAL;
return new StatementEdit(Datamodel.makeStatement(claim, references, rank, ""), merger, mode);
}
use of org.wikidata.wdtk.datamodel.interfaces.Value in project OpenRefine by OpenRefine.
the class SnakOnlyStatementMerger method match.
/**
* Matches two snaks using the underlying value matcher.
* The snaks must have the same property id to match.
*
* @param existingSnak
* @param addedSnak
* @return
*/
public boolean match(Snak existingSnak, Snak addedSnak) {
// Deliberately only comparing the pids and not the siteIRIs to avoid spurious mismatches due to federation
if (!existingSnak.getPropertyId().getId().equals(addedSnak.getPropertyId().getId())) {
return false;
} else if (existingSnak instanceof NoValueSnak && addedSnak instanceof NoValueSnak) {
return true;
} else if (existingSnak instanceof SomeValueSnak && addedSnak instanceof SomeValueSnak) {
return true;
} else {
Value existingValue = ((ValueSnak) existingSnak).getValue();
Value addedValue = ((ValueSnak) addedSnak).getValue();
return valueMatcher.match(existingValue, addedValue);
}
}
use of org.wikidata.wdtk.datamodel.interfaces.Value in project OpenRefine by OpenRefine.
the class ConflictsWithScrutinizer method scrutinize.
@Override
public void scrutinize(TermedStatementEntityEdit update) {
Map<PropertyIdValue, Set<Value>> propertyIdValueValueMap = new HashMap<>();
for (Statement statement : update.getAddedStatements()) {
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
Value value = null;
Snak mainSnak = statement.getClaim().getMainSnak();
if (mainSnak instanceof ValueSnak) {
value = ((ValueSnak) mainSnak).getValue();
}
Set<Value> values;
if (value != null) {
if (propertyIdValueValueMap.containsKey(pid)) {
values = propertyIdValueValueMap.get(pid);
} else {
values = new HashSet<>();
}
values.add(value);
propertyIdValueValueMap.put(pid, values);
}
}
for (PropertyIdValue propertyId : propertyIdValueValueMap.keySet()) {
List<Statement> statementList = _fetcher.getConstraintsByType(propertyId, conflictsWithConstraintQid);
for (Statement statement : statementList) {
ConflictsWithConstraint constraint = new ConflictsWithConstraint(statement);
PropertyIdValue conflictingPid = constraint.conflictingPid;
List<Value> itemList = constraint.itemList;
if (propertyIdValueValueMap.containsKey(conflictingPid) && raiseWarning(propertyIdValueValueMap, conflictingPid, itemList)) {
QAWarning issue = new QAWarning(type, propertyId.getId() + conflictingPid.getId(), QAWarning.Severity.WARNING, 1);
issue.setProperty("property_entity", propertyId);
issue.setProperty("added_property_entity", conflictingPid);
issue.setProperty("example_entity", update.getEntityId());
addIssue(issue);
}
}
}
}
use of org.wikidata.wdtk.datamodel.interfaces.Value in project OpenRefine by OpenRefine.
the class InverseConstraintScrutinizer method scrutinize.
@Override
public void scrutinize(Statement statement, EntityIdValue entityId, boolean added) {
if (!added) {
// TODO support for deleted statements
return;
}
Snak mainSnak = statement.getClaim().getMainSnak();
if (!(mainSnak instanceof ValueSnak)) {
return;
}
Value mainSnakValue = ((ValueSnak) mainSnak).getValue();
if (mainSnakValue instanceof ItemIdValue) {
PropertyIdValue pid = mainSnak.getPropertyId();
PropertyIdValue inversePid = getInverseConstraint(pid);
if (inversePid != null) {
EntityIdValue targetEntityId = (EntityIdValue) mainSnakValue;
Set<EntityIdValue> currentValues = _statements.get(pid).get(entityId);
if (currentValues == null) {
currentValues = new HashSet<EntityIdValue>();
_statements.get(pid).put(entityId, currentValues);
}
currentValues.add(targetEntityId);
}
}
}
Aggregations