diff --git a/extensions/wikidata/module/langs/translation-en.json b/extensions/wikidata/module/langs/translation-en.json index 1552902cd..66e4c4ab5 100644 --- a/extensions/wikidata/module/langs/translation-en.json +++ b/extensions/wikidata/module/langs/translation-en.json @@ -23,11 +23,11 @@ }, "new-item-without-labels-or-aliases": { "title": "New items created without any label or alias.", - "body": "You should at least provide one label, so that others can understand what the item is about." + "body": "You should at least provide one label for new items such as {example_entity}, so that others can understand what the item is about." }, "new-item-without-descriptions": { "title": "New items created without any description.", - "body": "Adding descriptions will make it easier to disambiguate the items from namesakes." + "body": "Adding descriptions on new items such as {example_entity} will make it easier to disambiguate the items from namesakes." }, "new-item-with-deleted-statements": { "title": "Deleting statements on new items.", @@ -35,7 +35,7 @@ }, "new-item-without-P31-or-P279": { "title": "New items created without any type.", - "body": "You should provide an \"instance of\" (P31) or \"subclass of\" (P279) statement for each item that you create." + "body": "You should provide an \"instance of\" (P31) or \"subclass of\" (P279) statement for each item that you create, such as {example_entity}." }, "add-statements-with-invalid-format": { "title": "{property_entity} statements with invalid format.", @@ -51,35 +51,35 @@ }, "self-referential-statements": { "title": "Self-referential statements.", - "body": "While not forbidden, self-referential statements are generally suspicious. You could have reconciliation issues." + "body": "While not forbidden, self-referential statements are generally suspicious. You have some on {example_entity}." }, "unsourced-statements": { "title": "Statements without references.", "body": "Most statements should have references. You can add them easily in the schema." }, "property-restricted-to-reference-found-in-mainsnak": { - "title": "Reference-only property used as statement.", - "body": "You are using in a statement a property that was designed to be used in references only." + "title": "{property_entity} used as statement.", + "body": "You are using {property_entity} in a statement but it is designed to be used in references only." }, "property-restricted-to-reference-found-in-qualifier": { - "title": "Reference-only property used as qualifier.", - "body": "You are using in a qualifier a property that was designed to be used in references only." + "title": "{property_entity} used as qualifier.", + "body": "You are using in {property_entity} in a qualifier but it is designed to be used in references only." }, "property-restricted-to-qualifier-found-in-mainsnak": { - "title": "Qualifier-only property used as statement.", - "body": "You are using in a statement a property that was designed to be used in qualifiers only." + "title": "{property_entity} used as statement.", + "body": "You are using {property_entity} in a statement but it is designed to be used in qualifiers only." }, "property-restricted-to-qualifier-found-in-reference": { - "title": "Qualifier-only property used as reference.", - "body": "You are using in a reference a property that was designed to be used in qualifiers only." + "title": "{property_entity} used as reference.", + "body": "You are using {property_entity} in a reference but it is designed to be used in qualifiers only." }, "property-restricted-to-mainsnak-found-in-qualifier": { - "title": "Statement-only property used as qualifier.", - "body": "You are using in a qualifier a property that was designed to be used as a statement only." + "title": "{property_entity} used as qualifier.", + "body": "You are using {property_entity} in a qualifier but it is designed to be used as a statement only." }, "property-restricted-to-mainsnak-found-in-reference": { - "title": "Statement-only property used as reference.", - "body": "You are using in a reference a property that was designed to be used as a statement only." + "title": "{property_entity} used as reference.", + "body": "You are using {property_entity} in a reference but it is designed to be used as a statement only." }, "missing-mandatory-qualifiers": { "title": "{statement_property_entity} is missing a {missing_property_entity} qualifier.", @@ -90,8 +90,8 @@ "body": "Statements using {statement_property_entity} such as the one on {example_item_entity} should not have a {disallowed_property_entity} qualifier as they are incompatible." }, "single-valued-property-added-more-than-once": { - "title": "Single valued property added more than once.", - "body": "A property that is expected to be used at most once on each item has been added multiple times on the same item." + "title": "{property_entity} added more than once on the same item.", + "body": "This property is expected to be used at most once on each item but has been added multiple times on the same item, for instance on {example_entity}." }, "no-edit-generated": { "title": "No edit was generated.", diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/InverseConstraintScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/InverseConstraintScrutinizer.java index f5fdbbff6..08a71d53f 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/InverseConstraintScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/InverseConstraintScrutinizer.java @@ -89,8 +89,8 @@ public class InverseConstraintScrutinizer extends StatementScrutinizer { 1); issue.setProperty("added_property_entity", ourProperty); issue.setProperty("inverse_property_entity", missingProperty); - issue.setProperty("source_entity", idValue); - issue.setProperty("target_entity", itemLinks.getKey()); + issue.setProperty("source_entity", itemLinks.getKey()); + issue.setProperty("target_entity", idValue); addIssue(issue); } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/NewItemScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/NewItemScrutinizer.java index 2fc9db1ff..d5c43597d 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/NewItemScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/NewItemScrutinizer.java @@ -1,5 +1,6 @@ package org.openrefine.wikidata.qa.scrutinizers; +import org.openrefine.wikidata.qa.QAWarning; import org.openrefine.wikidata.schema.ItemUpdate; import org.wikidata.wdtk.datamodel.interfaces.StatementGroup; @@ -15,15 +16,33 @@ public class NewItemScrutinizer extends ItemEditScrutinizer { info("new-item-created"); if (update.getLabels().isEmpty() && update.getAliases().isEmpty()) { - critical("new-item-without-labels-or-aliases"); + QAWarning issue = new QAWarning( + "new-item-without-labels-or-aliases", + null, + QAWarning.Severity.CRITICAL, + 1); + issue.setProperty("example_entity", update.getItemId()); + addIssue(issue); } if (update.getDescriptions().isEmpty()) { - warning("new-item-without-descriptions"); + QAWarning issue = new QAWarning( + "new-item-without-descriptions", + null, + QAWarning.Severity.WARNING, + 1); + issue.setProperty("example_entity", update.getItemId()); + addIssue(issue); } if (! update.getDeletedStatements().isEmpty()) { - warning("new-item-with-deleted-statements"); + QAWarning issue = new QAWarning( + "new-item-with-deleted-statements", + null, + QAWarning.Severity.WARNING, + 1); + issue.setProperty("example_entity", update.getItemId()); + addIssue(issue); } // Try to find a "instance of" or "subclass of" claim @@ -36,7 +55,13 @@ public class NewItemScrutinizer extends ItemEditScrutinizer { } } if (!typeFound) { - warning("new-item-without-P31-or-P279"); + QAWarning issue = new QAWarning( + "new-item-without-P31-or-P279", + null, + QAWarning.Severity.WARNING, + 1); + issue.setProperty("example_entity", update.getItemId()); + addIssue(issue); } } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/RestrictedPositionScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/RestrictedPositionScrutinizer.java index f2034c140..f586792d3 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/RestrictedPositionScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/RestrictedPositionScrutinizer.java @@ -6,6 +6,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Set; +import org.openrefine.wikidata.qa.QAWarning; import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue; import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue; import org.wikidata.wdtk.datamodel.interfaces.Reference; @@ -81,7 +82,14 @@ public class RestrictedPositionScrutinizer extends StatementScrutinizer { if (restriction != null && position != restriction) { String positionStr = position.toString().toLowerCase(); String restrictionStr = restriction.toString().toLowerCase(); - warning("property-restricted-to-"+restrictionStr+"-found-in-"+positionStr); + + QAWarning issue = new QAWarning( + "property-restricted-to-"+restrictionStr+"-found-in-"+positionStr, + snak.getPropertyId().getId(), + QAWarning.Severity.IMPORTANT, + 1); + issue.setProperty("property_entity", snak.getPropertyId()); + addIssue(issue); } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SelfReferentialScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SelfReferentialScrutinizer.java index 5fc8f8b0d..3053c1bd7 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SelfReferentialScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SelfReferentialScrutinizer.java @@ -1,5 +1,6 @@ package org.openrefine.wikidata.qa.scrutinizers; +import org.openrefine.wikidata.qa.QAWarning; import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue; import org.wikidata.wdtk.datamodel.interfaces.Snak; @@ -15,7 +16,13 @@ public class SelfReferentialScrutinizer extends SnakScrutinizer { @Override public void scrutinize(Snak snak, EntityIdValue entityId, boolean added) { if (entityId.equals(snak.getValue())) { - warning("self-referential-statements"); + QAWarning issue = new QAWarning( + "self-referential-statements", + null, + QAWarning.Severity.WARNING, + 1); + issue.setProperty("example_entity", entityId); + addIssue(issue); } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SingleValueScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SingleValueScrutinizer.java index 96474525b..7fb788dad 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SingleValueScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/SingleValueScrutinizer.java @@ -3,6 +3,7 @@ package org.openrefine.wikidata.qa.scrutinizers; import java.util.HashSet; import java.util.Set; +import org.openrefine.wikidata.qa.QAWarning; import org.openrefine.wikidata.schema.ItemUpdate; import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue; import org.wikidata.wdtk.datamodel.interfaces.Statement; @@ -22,7 +23,15 @@ public class SingleValueScrutinizer extends ItemEditScrutinizer { for(Statement statement : update.getAddedStatements()) { PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId(); if (seenSingleProperties.contains(pid)) { - warning("single-valued-property-added-more-than-once"); + + QAWarning issue = new QAWarning( + "single-valued-property-added-more-than-once", + pid.getId(), + QAWarning.Severity.WARNING, + 1); + issue.setProperty("property_entity", pid); + issue.setProperty("example_entity", update.getItemId()); + addIssue(issue); } else if (_fetcher.hasSingleValue(pid)) { seenSingleProperties.add(pid); }