diff --git a/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js b/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js index cac6f44a5..61095fd24 100644 --- a/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js +++ b/extensions/wikidata/module/scripts/dialogs/schema-alignment-dialog.js @@ -301,6 +301,7 @@ SchemaAlignmentDialog._addNameDesc = function(item, json) { .attr('value', 'ALIAS') .text('Alias') .appendTo(type_input); + type_input.val(type); var toolbar = $('
').addClass('wbs-toolbar').appendTo(namedesc); $('').attr('alt', 'remove name/description').click(function() { @@ -317,10 +318,10 @@ SchemaAlignmentDialog._nameDescToJSON = function (namedesc) { var type = namedesc.find('select').first().val(); var value = namedesc.find('.wbs-namedesc-value').first().data("jsonValue"); return { - type: "wbnamedescexpr", + type: "wbnamedescexpr", name_type: type, value: value, - } + }; } @@ -551,7 +552,7 @@ SchemaAlignmentDialog._getPropertyType = function(pid, callback) { props: "datatype", }, dataType: "jsonp", - success: function(data) { + success: function(data) { callback(data.entities[pid].datatype); }}); } @@ -884,7 +885,7 @@ $.suggest("langsuggest", { success: function(data) { self.response(self.convertResults(data)); }, - dataType: "jsonp", + dataType: "jsonp", }; $.ajax(ajax_options); }, diff --git a/extensions/wikidata/src/org/openrefine/wikidata/exporters/QuickStatementsExporter.java b/extensions/wikidata/src/org/openrefine/wikidata/exporters/QuickStatementsExporter.java index 9354e3c5f..93067c98f 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/exporters/QuickStatementsExporter.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/exporters/QuickStatementsExporter.java @@ -76,6 +76,7 @@ public class QuickStatementsExporter implements WriterExporter { if (item.getItemId().getId() == "Q0") { writer.write("CREATE\n"); qid = "LAST"; + item.normalizeLabelsAndAliases(); } translateNameDescr(qid, item.getLabels(), "L", item.getItemId(), writer); diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/ItemUpdate.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/ItemUpdate.java index 172fe328e..404813459 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/schema/ItemUpdate.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/ItemUpdate.java @@ -156,4 +156,28 @@ public class ItemUpdate { } return map; } + + /** + * This should only be used when creating a new item. + * This ensures that we never add an alias without adding + * a label in the same language. + */ + public void normalizeLabelsAndAliases() { + // Ensure that we are only adding aliases with labels + List labelLanguages = new ArrayList(); + for(MonolingualTextValue label : labels) { + labelLanguages.add(label.getLanguageCode()); + } + + List filteredAliases = new ArrayList<>(); + for(MonolingualTextValue alias : aliases) { + if(!labelLanguages.contains(alias.getLanguageCode())) { + labelLanguages.add(alias.getLanguageCode()); + labels.add(alias); + } else { + filteredAliases.add(alias); + } + } + aliases = filteredAliases; + } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbLanguageExpr.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbLanguageExpr.java index 23fd2ab11..4945b34e8 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbLanguageExpr.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbLanguageExpr.java @@ -23,8 +23,10 @@ public abstract class WbLanguageExpr extends BiJsonizable { String type = obj.getString(jsonTypeKey); if (WbLanguageConstant.jsonType.equals(type)) { return WbLanguageConstant.fromJSON(obj); + } else if (WbLanguageVariable.jsonType.equals(type)) { + return WbLanguageVariable.fromJSON(obj); } else { - throw new JSONException("unknown type for WbLocationExpr"); + throw new JSONException("unknown type for WbLanguageExpr"); } } } diff --git a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbNameDescExpr.java b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbNameDescExpr.java index 465ec4222..76906e6f1 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/schema/WbNameDescExpr.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/schema/WbNameDescExpr.java @@ -35,18 +35,22 @@ public class WbNameDescExpr extends BiJsonizable { _value.write(writer, options); } - public void contributeTo(ItemUpdate item, ExpressionContext ctxt) throws SkipStatementException { - MonolingualTextValue val = _value.evaluate(ctxt); - switch (_type) { - case LABEL: - item.addLabel(val); - break; - case DESCRIPTION: - item.addDescription(val); - break; - case ALIAS: - item.addAlias(val); - break; + public void contributeTo(ItemUpdate item, ExpressionContext ctxt) { + try { + MonolingualTextValue val = _value.evaluate(ctxt); + switch (_type) { + case LABEL: + item.addLabel(val); + break; + case DESCRIPTION: + item.addDescription(val); + break; + case ALIAS: + item.addAlias(val); + break; + } + } catch (SkipStatementException e) { + return; } }