Add support for qualifiers
This commit is contained in:
parent
c0f2468236
commit
66b3ddf76b
@ -292,8 +292,6 @@ SchemaAlignmentDialog._statementGroupToJSON = function (statementGroup) {
|
|||||||
|
|
||||||
|
|
||||||
SchemaAlignmentDialog._addStatement = function(container, datatype, json) {
|
SchemaAlignmentDialog._addStatement = function(container, datatype, json) {
|
||||||
console.log('addStatement');
|
|
||||||
console.log(datatype);
|
|
||||||
var qualifiers = null;
|
var qualifiers = null;
|
||||||
var value = null;
|
var value = null;
|
||||||
if (json) {
|
if (json) {
|
||||||
@ -309,21 +307,63 @@ SchemaAlignmentDialog._addStatement = function(container, datatype, json) {
|
|||||||
var inputContainer = $('<div></div>').addClass('wbs-target-input').appendTo(statement);
|
var inputContainer = $('<div></div>').addClass('wbs-target-input').appendTo(statement);
|
||||||
SchemaAlignmentDialog._initField(inputContainer, datatype, value);
|
SchemaAlignmentDialog._initField(inputContainer, datatype, value);
|
||||||
var right = $('<div></div>').addClass('wbs-right').appendTo(statement);
|
var right = $('<div></div>').addClass('wbs-right').appendTo(statement);
|
||||||
$('<div></div>').addClass('wbs-qualifier-container').appendTo(right);
|
|
||||||
|
// If we are in a mainsnak, add qualifiers and references
|
||||||
|
if (container.parents('.wbs-statement').length == 0) {
|
||||||
|
var qualifierContainer = $('<div></div>').addClass('wbs-qualifier-container').appendTo(right);
|
||||||
var toolbar2 = $('<div></div>').addClass('wbs-toolbar').appendTo(right);
|
var toolbar2 = $('<div></div>').addClass('wbs-toolbar').appendTo(right);
|
||||||
$('<a></a>').addClass('wbs-add-qualifier').text('add qualifier').appendTo(toolbar2);
|
$('<a></a>').addClass('wbs-add-qualifier').text('add qualifier').click(function() {
|
||||||
|
SchemaAlignmentDialog._addQualifier(qualifierContainer, null);
|
||||||
|
}).appendTo(toolbar2);
|
||||||
|
if (qualifiers) {
|
||||||
|
for (var i = 0; i != qualifiers.length; i++) {
|
||||||
|
SchemaAlignmentDialog._addQualifier(qualifierContainer, qualifiers[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
container.append(statement);
|
container.append(statement);
|
||||||
}
|
}
|
||||||
|
|
||||||
SchemaAlignmentDialog._statementToJSON = function (statement) {
|
SchemaAlignmentDialog._statementToJSON = function (statement) {
|
||||||
var inputContainer = statement.find(".wbs-target-input").first();
|
var inputContainer = statement.find(".wbs-target-input").first();
|
||||||
|
var qualifiersList = new Array();
|
||||||
|
statement.find('.wbs-qualifier').each(function () {
|
||||||
|
qualifiersList.push(SchemaAlignmentDialog._qualifierToJSON($(this)));
|
||||||
|
});
|
||||||
return {
|
return {
|
||||||
value:SchemaAlignmentDialog._inputContainerToJSON(inputContainer),
|
value:SchemaAlignmentDialog._inputContainerToJSON(inputContainer),
|
||||||
qualifiers:[],
|
qualifiers: qualifiersList,
|
||||||
references:[],
|
references:[],
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
SchemaAlignmentDialog._addQualifier = function(container, json) {
|
||||||
|
var property = null;
|
||||||
|
if (json) {
|
||||||
|
property = json.property;
|
||||||
|
}
|
||||||
|
|
||||||
|
var qualifier = $('<div></div>').addClass('wbs-qualifier').appendTo(container);
|
||||||
|
var toolbar1 = $('<div></div>').addClass('wbs-toolbar').appendTo(qualifier);
|
||||||
|
var inputContainer = $('<div></div>').addClass('wbs-prop-input').appendTo(qualifier);
|
||||||
|
var right = $('<div></div>').addClass('wbs-right').appendTo(qualifier);
|
||||||
|
var statementContainer = $('<div></div>').addClass('wbs-statement-container').appendTo(right);
|
||||||
|
SchemaAlignmentDialog._initPropertyField(inputContainer, statementContainer, property);
|
||||||
|
}
|
||||||
|
|
||||||
|
SchemaAlignmentDialog._removeQualifier = function(qualifier) {
|
||||||
|
qualifier.remove();
|
||||||
|
}
|
||||||
|
|
||||||
|
SchemaAlignmentDialog._qualifierToJSON = function(elem) {
|
||||||
|
var prop = elem.find(".wbs-prop-input").first();
|
||||||
|
var target = elem.find(".wbs-target-input").first();
|
||||||
|
return {
|
||||||
|
prop: SchemaAlignmentDialog._inputContainerToJSON(prop),
|
||||||
|
value: SchemaAlignmentDialog._inputContainerToJSON(target),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
SchemaAlignmentDialog._getPropertyType = function(pid, callback) {
|
SchemaAlignmentDialog._getPropertyType = function(pid, callback) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url:'https://www.wikidata.org/w/api.php',
|
url:'https://www.wikidata.org/w/api.php',
|
||||||
@ -350,7 +390,7 @@ SchemaAlignmentDialog._initPropertyField = function(inputContainer, targetContai
|
|||||||
|
|
||||||
input.suggestP(suggestConfig).bind("fb-select", function(evt, data) {
|
input.suggestP(suggestConfig).bind("fb-select", function(evt, data) {
|
||||||
// Fetch the type of this property and add the appropriate target value type
|
// Fetch the type of this property and add the appropriate target value type
|
||||||
var statementGroup = inputContainer.parents(".wbs-statement-group").first();
|
var statementGroup = inputContainer.parents(".wbs-statement-group, .wbs-qualifier").first();
|
||||||
SchemaAlignmentDialog._getPropertyType(data.id, function(datatype) {
|
SchemaAlignmentDialog._getPropertyType(data.id, function(datatype) {
|
||||||
inputContainer.data("jsonValue", {
|
inputContainer.data("jsonValue", {
|
||||||
type : "wbpropconstant",
|
type : "wbpropconstant",
|
||||||
@ -400,7 +440,7 @@ SchemaAlignmentDialog._initField = function(inputContainer, mode, initialValue)
|
|||||||
});
|
});
|
||||||
SchemaAlignmentDialog._hasChanged();
|
SchemaAlignmentDialog._hasChanged();
|
||||||
});
|
});
|
||||||
} else if (mode === "external-id") {
|
} else { /* if (mode === "external-id") { */
|
||||||
var propagateValue = function(val) {
|
var propagateValue = function(val) {
|
||||||
inputContainer.data("jsonValue", {
|
inputContainer.data("jsonValue", {
|
||||||
type: "wbstringconstant",
|
type: "wbstringconstant",
|
||||||
@ -471,11 +511,16 @@ SchemaAlignmentDialog._initField = function(inputContainer, mode, initialValue)
|
|||||||
}
|
}
|
||||||
|
|
||||||
SchemaAlignmentDialog._inputContainerToJSON = function (inputContainer) {
|
SchemaAlignmentDialog._inputContainerToJSON = function (inputContainer) {
|
||||||
return inputContainer.data().jsonValue;
|
var data = inputContainer.data();
|
||||||
|
if (data) {
|
||||||
|
return data.jsonValue;
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SchemaAlignmentDialog._removeStatement = function(statement) {
|
SchemaAlignmentDialog._removeStatement = function(statement) {
|
||||||
var statementGroup = statement.parents('.wbs-statement-group').first();
|
var statementGroup = statement.parents('.wbs-statement-group, .wbs-qualifier').first();
|
||||||
statement.remove();
|
statement.remove();
|
||||||
var remainingStatements = statementGroup.find('.wbs-statement').length;
|
var remainingStatements = statementGroup.find('.wbs-statement').length;
|
||||||
if (remainingStatements === 0) {
|
if (remainingStatements === 0) {
|
||||||
|
@ -82,6 +82,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
width: 120px;
|
width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wbs-qualifier .wbs-prop-input, .wbs-reference .wbs-prop-input {
|
||||||
|
width: 85px;
|
||||||
|
}
|
||||||
|
|
||||||
.wbs-item-input input, .wbs-prop-input input, .wbs-target-input input {
|
.wbs-item-input input, .wbs-prop-input input, .wbs-target-input input {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
@ -107,7 +111,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wbs-item, .wbs-statement-group, .wbs-statement {
|
.wbs-item, .wbs-statement-group, .wbs-statement, .wbs-qualifier {
|
||||||
display: block;
|
display: block;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
@ -123,9 +127,36 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
|
|
||||||
.wbs-right {
|
.wbs-right {
|
||||||
float: right;
|
float: right;
|
||||||
|
width: 75%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wbs-statement-group .wbs-right {
|
||||||
width: 70%;
|
width: 70%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.wbs-statement .wbs-right {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wbs-qualifier, .wbs-reference {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wbs-qualifier .wbs-right, .wbs-reference .wbs-right {
|
||||||
|
width: 70%;
|
||||||
|
position: absolute;
|
||||||
|
top: 0px;
|
||||||
|
margin-left: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wbs-qualifier .wbs-target-input {
|
||||||
|
width: 90px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.wbs-qualifier .wbs-statement {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
.schema-alignment-columns-header {
|
.schema-alignment-columns-header {
|
||||||
margin-bottom: 0.3em;
|
margin-bottom: 0.3em;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,8 @@ import org.wikidata.wdtk.datamodel.interfaces.ItemDocument;
|
|||||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.MonolingualTextValue;
|
import org.wikidata.wdtk.datamodel.interfaces.MonolingualTextValue;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.QuantityValue;
|
import org.wikidata.wdtk.datamodel.interfaces.QuantityValue;
|
||||||
|
import org.wikidata.wdtk.datamodel.interfaces.Snak;
|
||||||
|
import org.wikidata.wdtk.datamodel.interfaces.SnakGroup;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.StatementGroup;
|
import org.wikidata.wdtk.datamodel.interfaces.StatementGroup;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.StringValue;
|
import org.wikidata.wdtk.datamodel.interfaces.StringValue;
|
||||||
@ -83,7 +85,30 @@ public class QuickStatementsExporter implements WriterExporter {
|
|||||||
ValueVisitor<String> vv = new ValuePrinter();
|
ValueVisitor<String> vv = new ValuePrinter();
|
||||||
String targetValue = val.accept(vv);
|
String targetValue = val.accept(vv);
|
||||||
if (targetValue != null) {
|
if (targetValue != null) {
|
||||||
writer.write(qid + "\t" + pid + "\t" + targetValue + "\n");
|
writer.write(qid + "\t" + pid + "\t" + targetValue);
|
||||||
|
for(SnakGroup q : claim.getQualifiers()) {
|
||||||
|
translateSnakGroup(q, false, writer);
|
||||||
|
}
|
||||||
|
writer.write("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void translateSnakGroup(SnakGroup sg, boolean reference, Writer writer) throws IOException {
|
||||||
|
for(Snak s : sg.getSnaks()) {
|
||||||
|
translateSnak(s, reference, writer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void translateSnak(Snak s, boolean reference, Writer writer) throws IOException {
|
||||||
|
String pid = s.getPropertyId().getId();
|
||||||
|
if (reference) {
|
||||||
|
pid = pid.replace('P', 'S');
|
||||||
|
}
|
||||||
|
Value val = s.getValue();
|
||||||
|
ValueVisitor<String> vv = new ValuePrinter();
|
||||||
|
String valStr = val.accept(vv);
|
||||||
|
if(valStr != null) {
|
||||||
|
writer.write("\t" + pid + "\t" + valStr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,6 +96,9 @@ public class WbStatementExpr extends BiJsonizable {
|
|||||||
Value mainSnakValue = mainSnakValueExpr.evaluate(ctxt);
|
Value mainSnakValue = mainSnakValueExpr.evaluate(ctxt);
|
||||||
Snak mainSnak = Datamodel.makeValueSnak(propertyId, mainSnakValue);
|
Snak mainSnak = Datamodel.makeValueSnak(propertyId, mainSnakValue);
|
||||||
List<Snak> qualifiers = new ArrayList<Snak>(qualifierExprs.size());
|
List<Snak> qualifiers = new ArrayList<Snak>(qualifierExprs.size());
|
||||||
|
for (WbSnakExpr qExpr : qualifierExprs) {
|
||||||
|
qualifiers.add(qExpr.evaluate(ctxt));
|
||||||
|
}
|
||||||
List<SnakGroup> groupedQualifiers = groupSnaks(qualifiers);
|
List<SnakGroup> groupedQualifiers = groupSnaks(qualifiers);
|
||||||
Claim claim = Datamodel.makeClaim(subject, mainSnak, groupedQualifiers);
|
Claim claim = Datamodel.makeClaim(subject, mainSnak, groupedQualifiers);
|
||||||
List<Reference> references = new ArrayList<Reference>();
|
List<Reference> references = new ArrayList<Reference>();
|
||||||
|
Loading…
Reference in New Issue
Block a user