Start schema classes
This commit is contained in:
parent
19a1e5e007
commit
ad475849b9
@ -0,0 +1,27 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import com.google.refine.model.Cell;
|
||||
import com.google.refine.model.ColumnModel;
|
||||
import com.google.refine.model.Row;
|
||||
|
||||
|
||||
public class ExpressionContext {
|
||||
private String baseIRI;
|
||||
private Row row;
|
||||
private ColumnModel columnModel;
|
||||
|
||||
public ExpressionContext(String baseIRI, Row row, ColumnModel columnModel) {
|
||||
this.baseIRI = baseIRI;
|
||||
this.row = row;
|
||||
this.columnModel = columnModel;
|
||||
}
|
||||
|
||||
public String getBaseIRI() {
|
||||
return baseIRI;
|
||||
}
|
||||
|
||||
public Cell getCellByName(String name) {
|
||||
int idx = columnModel.getColumnByName(name).getCellIndex();
|
||||
return row.getCell(idx);
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import com.google.refine.Jsonizable;
|
||||
|
||||
|
||||
public interface WbChangeExpr extends Jsonizable {
|
||||
/* Represents a change on an item: adding a statement,
|
||||
* adding a label, adding a sitelink…
|
||||
*/
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Claim;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Snak;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.SnakGroup;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
|
||||
|
||||
public class WbClaimExpr implements WbChangeExpr {
|
||||
|
||||
private WbItemExpr subjectExpr;
|
||||
private WbSnakExpr mainSnakExpr;
|
||||
private List<WbSnakExpr> qualifierExprs;
|
||||
// TODO: references
|
||||
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("subject");
|
||||
subjectExpr.write(writer, options);
|
||||
writer.key("mainsnak");
|
||||
mainSnakExpr.write(writer, options);
|
||||
writer.key("qualifiers");
|
||||
writer.array();
|
||||
for (WbSnakExpr expr : qualifierExprs) {
|
||||
expr.write(writer, options);
|
||||
}
|
||||
writer.endArray();
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
public static List<SnakGroup> groupSnaks(List<Snak> snaks) {
|
||||
Map<PropertyIdValue, List<Snak> > map = new HashMap<PropertyIdValue, List<Snak>>();
|
||||
for (Snak snak : snaks) {
|
||||
PropertyIdValue pid = snak.getPropertyId();
|
||||
if (!map.containsKey(pid)) {
|
||||
map.put(pid, new ArrayList<Snak>());
|
||||
}
|
||||
map.get(pid).add(snak);
|
||||
}
|
||||
List<SnakGroup> snakGroups = new ArrayList<SnakGroup>();
|
||||
for (List<Snak> snaksGroup : map.values()) {
|
||||
snakGroups.add(Datamodel.makeSnakGroup(snaksGroup));
|
||||
}
|
||||
return snakGroups;
|
||||
}
|
||||
|
||||
public Claim evaluate(ExpressionContext ctxt) {
|
||||
ItemIdValue subject = subjectExpr.evaluate(ctxt);
|
||||
Snak mainSnak = mainSnakExpr.evaluate(ctxt);
|
||||
List<Snak> qualifiers = new ArrayList<Snak>(qualifierExprs.size());
|
||||
List<SnakGroup> groupedQualifiers = groupSnaks(qualifiers);
|
||||
return Datamodel.makeClaim(subject, mainSnak, groupedQualifiers);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,39 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.implementation.ItemIdValueImpl;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||
|
||||
|
||||
public class WbItemConstant implements WbItemExpr {
|
||||
/* Represents an item that does not vary,
|
||||
* it is independent of the row. */
|
||||
|
||||
private String qid;
|
||||
private String label;
|
||||
|
||||
public WbItemConstant(String qid, String label) {
|
||||
this.qid = qid;
|
||||
this.label = label;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("qid");
|
||||
writer.value(qid);
|
||||
writer.key("label");
|
||||
writer.value(label);
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemIdValue evaluate(ExpressionContext ctxt) {
|
||||
return ItemIdValueImpl.create(qid, ctxt.getBaseIRI());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import org.openrefine.wikidata.schema.ExpressionContext;
|
||||
import org.openrefine.wikidata.schema.WbValueExpr;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||
|
||||
public interface WbItemExpr extends WbValueExpr {
|
||||
public ItemIdValue evaluate(ExpressionContext ctxt);
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.implementation.ItemIdValueImpl;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||
|
||||
import com.google.refine.model.Cell;
|
||||
import com.google.refine.model.ReconCandidate;
|
||||
|
||||
public class WbItemVariable implements WbItemExpr {
|
||||
/* An item that depends on a reconciled value in a column */
|
||||
|
||||
private String columnName;
|
||||
|
||||
public WbItemVariable(String columnName) {
|
||||
this.columnName = columnName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("columnName");
|
||||
writer.value(columnName);
|
||||
writer.endObject();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public ItemIdValue evaluate(ExpressionContext ctxt) {
|
||||
Cell cell = ctxt.getCellByName(columnName);
|
||||
if (cell != null && cell.recon != null && cell.recon.match != null) {
|
||||
ReconCandidate match = cell.recon.match;
|
||||
return ItemIdValueImpl.create(match.id, ctxt.getBaseIRI());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.implementation.PropertyIdValueImpl;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
|
||||
|
||||
public class WbPropConstant implements WbPropExpr {
|
||||
/* A constant property, that does not change depending on the row */
|
||||
|
||||
private String pid;
|
||||
|
||||
public WbPropConstant(String pid) {
|
||||
this.pid = pid;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("pid");
|
||||
writer.value(pid);
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PropertyIdValue evaluate(ExpressionContext ctxt) {
|
||||
return PropertyIdValueImpl.create(pid, ctxt.getBaseIRI());
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
|
||||
|
||||
public interface WbPropExpr extends WbValueExpr {
|
||||
/* An expression that represents a property */
|
||||
|
||||
public PropertyIdValue evaluate(ExpressionContext ctxt);
|
||||
|
||||
}
|
@ -0,0 +1,42 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Snak;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Value;
|
||||
|
||||
import com.google.refine.Jsonizable;
|
||||
|
||||
|
||||
public class WbSnakExpr implements Jsonizable {
|
||||
|
||||
private WbPropExpr propExpr;
|
||||
private WbValueExpr valueExpr;
|
||||
|
||||
public WbSnakExpr(WbPropExpr propExpr, WbValueExpr valueExpr) {
|
||||
this.propExpr = propExpr;
|
||||
this.valueExpr = valueExpr;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("prop");
|
||||
propExpr.write(writer, options);
|
||||
writer.key("value");
|
||||
valueExpr.write(writer, options);
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
public Snak evaluate(ExpressionContext ctxt) {
|
||||
PropertyIdValue propertyId = propExpr.evaluate(ctxt);
|
||||
Value value = valueExpr.evaluate(ctxt);
|
||||
return Datamodel.makeValueSnak(propertyId, value);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONWriter;
|
||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||
import org.wikidata.wdtk.datamodel.implementation.StringValueImpl;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Value;
|
||||
|
||||
|
||||
public class WbStringConstant implements WbValueExpr {
|
||||
|
||||
private String value;
|
||||
|
||||
public WbStringConstant(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void write(JSONWriter writer, Properties options)
|
||||
throws JSONException {
|
||||
writer.object();
|
||||
writer.key("value");
|
||||
writer.value(value);
|
||||
writer.endObject();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Value evaluate(ExpressionContext ctxt) {
|
||||
return Datamodel.makeStringValue(value);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
package org.openrefine.wikidata.schema;
|
||||
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Value;
|
||||
|
||||
import com.google.refine.Jsonizable;
|
||||
|
||||
|
||||
public interface WbValueExpr extends Jsonizable {
|
||||
/* An expression that represents a Wikibase value,
|
||||
* i.e. anything that can be on the right-hand side
|
||||
* of a statement.
|
||||
*/
|
||||
|
||||
public Value evaluate(ExpressionContext ctxt);
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user