Manybubbles has uploaded a new change for review.
https://gerrit.wikimedia.org/r/202669
Change subject: Compress Entity and EntityData into WikibaseUris
......................................................................
Compress Entity and EntityData into WikibaseUris
WikibaseUris now has all the host-variable uris in one object for easy
use.
Change-Id: I91b362b4a3164134caa79c9ca8d1955deae52a79
---
D common/src/main/java/org/wikidata/query/rdf/common/uri/Entity.java
D common/src/main/java/org/wikidata/query/rdf/common/uri/EntityData.java
A common/src/main/java/org/wikidata/query/rdf/common/uri/WikibaseUris.java
M tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
M tools/src/main/java/org/wikidata/query/rdf/tool/rdf/Munger.java
M tools/src/main/java/org/wikidata/query/rdf/tool/rdf/RdfRepository.java
M
tools/src/test/java/org/wikidata/query/rdf/tool/AbstractRdfRepositoryIntegrationTestBase.java
M
tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdateIntegrationTestBase.java
M tools/src/test/java/org/wikidata/query/rdf/tool/StatementHelper.java
M tools/src/test/java/org/wikidata/query/rdf/tool/rdf/MungerUnitTest.java
M
tools/src/test/java/org/wikidata/query/rdf/tool/rdf/RdfRepositoryIntegrationTest.java
M
tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
12 files changed, 177 insertions(+), 242 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/wikidata/query/rdf
refs/changes/69/202669/1
diff --git a/common/src/main/java/org/wikidata/query/rdf/common/uri/Entity.java
b/common/src/main/java/org/wikidata/query/rdf/common/uri/Entity.java
deleted file mode 100644
index 0d52d1a..0000000
--- a/common/src/main/java/org/wikidata/query/rdf/common/uri/Entity.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.wikidata.query.rdf.common.uri;
-
-/**
- * Used to prefix entities in Wikibase.
- */
-public class Entity {
- /**
- * An Entity instance for wikidata.org.
- */
- public static Entity WIKIDATA = new Entity("www.wikidata.org");
-
- private final String namespace;
- private final Statement statement;
- private final Value value;
- private final Reference reference;
- private final Qualifier qualifier;
-
- public Entity(String host) {
- namespace = "http://" + host + "/entity/";
- statement = new Statement(this);
- value = new Value(this);
- reference = new Reference(this);
- qualifier = new Qualifier(this);
- }
-
- /**
- * Namespace of entities.
- */
- public String namespace() {
- return namespace;
- }
-
- /**
- * Statements prefix which wikibase uses to prefix statements.
- */
- public Statement statement() {
- return statement;
- }
-
- /**
- * Value prefix which wikibase uses to export values in statements.
- */
- public Value value() {
- return value;
- }
-
- /**
- * Reference prefix which wikibase uses to export references.
- */
- public Reference reference() {
- return reference;
- }
-
- /**
- * Qualifier prefix which wikibase uses to export qualifiers.
- */
- public Qualifier qualifier() {
- return qualifier;
- }
-
- /**
- * Adds SPARQL PREFIX declarations for all useful namespaces.
- */
- public StringBuilder prefixes(StringBuilder query) {
- query.append("PREFIX entity: <").append(namespace).append(">\n");
- query.append("PREFIX s: <").append(statement.namespace).append(">\n");
- query.append("PREFIX v: <").append(value.namespace).append(">\n");
- query.append("PREFIX r: <").append(reference.namespace).append(">\n");
- query.append("PREFIX q: <").append(qualifier.namespace).append(">\n");
- return query;
- }
-
- public static class Statement {
- private final String namespace;
-
- public Statement(Entity entity) {
- namespace = entity.namespace() + "statement/";
- }
-
- public String namespace() {
- return namespace;
- }
- }
-
- public static class Value {
- private final String namespace;
-
- public Value(Entity entity) {
- namespace = entity.namespace() + "value/";
- }
-
- public String namespace() {
- return namespace;
- }
- }
-
- public static class Reference {
- private final String namespace;
-
- public Reference(Entity entity) {
- namespace = entity.namespace() + "reference/";
- }
-
- public String namespace() {
- return namespace;
- }
- }
-
- public static class Qualifier {
- private final String namespace;
-
- public Qualifier(Entity entity) {
- namespace = entity.namespace() + "qualifier/";
- }
-
- public String namespace() {
- return namespace;
- }
- }
-}
diff --git
a/common/src/main/java/org/wikidata/query/rdf/common/uri/EntityData.java
b/common/src/main/java/org/wikidata/query/rdf/common/uri/EntityData.java
deleted file mode 100644
index 83877dc..0000000
--- a/common/src/main/java/org/wikidata/query/rdf/common/uri/EntityData.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.wikidata.query.rdf.common.uri;
-
-/**
- * Used by Wikibase RDF export to refer to information about the export itself.
- */
-public class EntityData {
- /**
- * An EntityData instance for wikidata.org.
- */
- public static EntityData WIKIDATA = new EntityData("www.wikidata.org");
-
- private final String namespace;
-
- public EntityData(String host) {
- this.namespace = "http://" + host + "/wiki/Special:EntityData/";
- }
-
- public String namespace() {
- return namespace;
- }
-}
diff --git
a/common/src/main/java/org/wikidata/query/rdf/common/uri/WikibaseUris.java
b/common/src/main/java/org/wikidata/query/rdf/common/uri/WikibaseUris.java
new file mode 100644
index 0000000..02bada2
--- /dev/null
+++ b/common/src/main/java/org/wikidata/query/rdf/common/uri/WikibaseUris.java
@@ -0,0 +1,84 @@
+package org.wikidata.query.rdf.common.uri;
+
+/**
+ * Uris wikibase uses that are relative to the wikibase instance.
+ */
+public class WikibaseUris {
+ /**
+ * An Entity instance for wikidata.org.
+ */
+ public static WikibaseUris WIKIDATA = new WikibaseUris("www.wikidata.org");
+ public static WikibaseUris TEST_WIKIDATA = new
WikibaseUris("test.wikidata.org");
+
+ private final String entityData;
+ private final String entity;
+ private final String statement;
+ private final String value;
+ private final String reference;
+ private final String qualifier;
+
+ public WikibaseUris(String host) {
+ String root = "http://" + host;
+ entityData = root + "/wiki/Special:EntityData/";
+ entity = root + "/entity/";
+ statement = entity + "statement/";
+ value = entity + "value/";
+ reference = entity + "reference/";
+ qualifier = entity + "qualifier/";
+ }
+
+ /**
+ * Add the prefixes for all related uris.
+ */
+ public StringBuilder prefixes(StringBuilder query) {
+ query.append("PREFIX data: <").append(entityData).append(">\n");
+ query.append("PREFIX entity: <").append(entity).append(">\n");
+ query.append("PREFIX s: <").append(statement).append(">\n");
+ query.append("PREFIX v: <").append(value).append(">\n");
+ query.append("PREFIX ref: <").append(reference).append(">\n");
+ query.append("PREFIX q: <").append(qualifier).append(">\n");
+ return query;
+ }
+
+ /**
+ * Prefix wikibase uses for dump information about entities.
+ */
+ public String entityData() {
+ return entityData;
+ }
+
+ /**
+ * Prefix wikibase uses for entities.
+ */
+ public String entity() {
+ return entity;
+ }
+
+ /**
+ * Prefix wikibase uses for statements.
+ */
+ public String statement() {
+ return statement;
+ }
+
+ /**
+ * Prefix wikibase uses for values in statements.
+ */
+ public String value() {
+ return value;
+ }
+
+ /**
+ * Prefix wikibase uses for references.
+ */
+ public String reference() {
+ return reference;
+ }
+
+ /**
+ * Prefix wikibase uses for the predicates on qualifiers.
+ */
+ public String qualifier() {
+ return qualifier;
+ }
+}
diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
index bf532f5..35ded72 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/Update.java
@@ -20,8 +20,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.wikidata.query.rdf.common.uri.Entity;
-import org.wikidata.query.rdf.common.uri.EntityData;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.change.Change;
import org.wikidata.query.rdf.tool.change.Change.Batch;
import org.wikidata.query.rdf.tool.change.IdChangeSource;
@@ -125,9 +124,8 @@
log.error("Invalid url: " + options.sparqlUrl() + " caused by " +
e.getMessage());
return;
}
- Entity entityUris = new Entity(options.wikidataHost());
- EntityData entityDataUris = new EntityData(options.wikidataHost());
- RdfRepository rdfRepository = new RdfRepository(sparqlUri, entityUris);
+ WikibaseUris uris = new WikibaseUris(options.wikidataHost());
+ RdfRepository rdfRepository = new RdfRepository(sparqlUri, uris);
Change.Source<? extends Change.Batch> changeSource =
buildChangeSource(options, rdfRepository,
wikibaseRepository);
if (changeSource == null) {
@@ -137,7 +135,7 @@
ExecutorService executor = new ThreadPoolExecutor(10, 10, 0,
TimeUnit.SECONDS,
new LinkedBlockingQueue<Runnable>(), threadFactory.build());
- Munger munger = new Munger(entityDataUris, entityUris);
+ Munger munger = new Munger(uris);
if (options.skipSiteLinks()) {
munger = munger.removeSiteLinks();
}
diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/Munger.java
b/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/Munger.java
index f81c219..d8dc668 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/Munger.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/Munger.java
@@ -14,14 +14,13 @@
import org.openrdf.model.Statement;
import org.openrdf.model.impl.StatementImpl;
import org.openrdf.model.impl.URIImpl;
-import org.wikidata.query.rdf.common.uri.Entity;
-import org.wikidata.query.rdf.common.uri.EntityData;
import org.wikidata.query.rdf.common.uri.Ontology;
import org.wikidata.query.rdf.common.uri.Provenance;
import org.wikidata.query.rdf.common.uri.RDF;
import org.wikidata.query.rdf.common.uri.RDFS;
import org.wikidata.query.rdf.common.uri.SKOS;
import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.exception.ContainedException;
import com.google.common.collect.ArrayListMultimap;
@@ -34,8 +33,7 @@
* tightly coupled with Wikibase's export format.
*/
public class Munger {
- private final EntityData entityDataUris;
- private final Entity entityUris;
+ private final WikibaseUris uris;
/**
* Null if not in limit label languages mode and a set of allowed languages
* if in it.
@@ -52,14 +50,13 @@
*/
private final boolean removeSiteLinks;
- public Munger(EntityData entityDataUris, Entity entityUris) {
- this(entityDataUris, entityUris, null, null, false);
+ public Munger(WikibaseUris uris) {
+ this(uris, null, null, false);
}
- private Munger(EntityData entityDataUris, Entity entityUris, Set<String>
limitLabelLanguages,
+ private Munger(WikibaseUris uris, Set<String> limitLabelLanguages,
List<String> singleLabelModeLanguages, boolean removeSiteLinks) {
- this.entityDataUris = entityDataUris;
- this.entityUris = entityUris;
+ this.uris = uris;
this.limitLabelLanguages = limitLabelLanguages;
this.singleLabelModeLanguages = singleLabelModeLanguages;
this.removeSiteLinks = removeSiteLinks;
@@ -76,7 +73,7 @@
* Build a Munger that only imports labels in some languages.
*/
public Munger limitLabelLanguages(Collection<String> languages) {
- return new Munger(entityDataUris, entityUris,
ImmutableSet.copyOf(languages), singleLabelModeLanguages,
+ return new Munger(uris, ImmutableSet.copyOf(languages),
singleLabelModeLanguages,
removeSiteLinks);
}
@@ -97,7 +94,7 @@
* the most important
*/
public Munger singleLabelMode(Collection<String> languages) {
- return new Munger(entityDataUris, entityUris, limitLabelLanguages,
ImmutableList.copyOf(languages).reverse(),
+ return new Munger(uris, limitLabelLanguages,
ImmutableList.copyOf(languages).reverse(),
removeSiteLinks);
}
@@ -105,7 +102,7 @@
* Build a Munger that removes site links.
*/
public Munger removeSiteLinks() {
- return new Munger(entityDataUris, entityUris, limitLabelLanguages,
singleLabelModeLanguages, true);
+ return new Munger(uris, limitLabelLanguages, singleLabelModeLanguages,
true);
}
/**
@@ -178,7 +175,7 @@
public MungeOperation(String entityId, Collection<Statement>
statements) {
this.statements = statements;
- entityUri = entityUris.namespace() + entityId;
+ entityUri = uris.entity() + entityId;
entityUriImpl = new URIImpl(entityUri);
if (singleLabelModeLanguages != null) {
singleLabelModeWorkForLabel = new SingleLabelModeWork();
@@ -211,16 +208,16 @@
private boolean statement() throws ContainedException {
subject = statement.getSubject().stringValue();
predicate = statement.getPredicate().stringValue();
- if (subject.startsWith(entityDataUris.namespace())) {
+ if (subject.startsWith(uris.entityData())) {
return entityDataStatement();
}
- if (subject.startsWith(entityUris.statement().namespace())) {
+ if (subject.startsWith(uris.statement())) {
return entityStatementStatement();
}
- if (subject.startsWith(entityUris.reference().namespace())) {
+ if (subject.startsWith(uris.reference())) {
return entityReferenceStatement();
}
- if (subject.startsWith(entityUris.namespace())) {
+ if (subject.startsWith(uris.entity())) {
return entityStatement();
}
return unknownStatement();
@@ -283,7 +280,7 @@
// Lets just fall out to save some whitespace
}
String object = statement.getObject().stringValue();
- if (predicate.startsWith(entityUris.namespace()) &&
object.startsWith(entityUris.statement().namespace())) {
+ if (predicate.startsWith(uris.entity()) &&
object.startsWith(uris.statement())) {
registerExtraValidSubject(object);
}
// Most statements should be kept.
@@ -308,7 +305,7 @@
break;
case Provenance.WAS_DERIVED_FROM:
String object = statement.getObject().stringValue();
- if (object.startsWith(entityUris.reference().namespace())) {
+ if (object.startsWith(uris.reference())) {
registerExtraValidSubject(object);
}
return true;
@@ -421,7 +418,7 @@
*/
private void finishCommon() throws ContainedException {
if (!unknownSubjects.isEmpty()) {
- throw new BadSubjectException(unknownSubjects.keySet(),
entityDataUris, entityUris);
+ throw new BadSubjectException(unknownSubjects.keySet(), uris);
}
if (revisionId == null) {
throw new ContainedException("Didn't get a revision id for " +
statements);
@@ -502,10 +499,10 @@
public class BadSubjectException extends ContainedException {
private static final long serialVersionUID = -4869053066714948939L;
- public BadSubjectException(Set<String> badSubjects, EntityData
entityDataUris, Entity entityUris) {
+ public BadSubjectException(Set<String> badSubjects, WikibaseUris uris)
{
super(String.format(Locale.ROOT,
"Unrecognized subjects: %s. Expected only sitelinks and
subjects starting with %s and %s",
- badSubjects, entityDataUris.namespace(),
entityUris.namespace()));
+ badSubjects, uris.entityData(), uris.entity()));
}
}
}
diff --git
a/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/RdfRepository.java
b/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/RdfRepository.java
index a29653b..6d22618 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/RdfRepository.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/rdf/RdfRepository.java
@@ -39,9 +39,9 @@
import org.openrdf.query.resultio.binary.BinaryQueryResultParser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.wikidata.query.rdf.common.uri.Entity;
import org.wikidata.query.rdf.common.uri.Provenance;
import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.exception.ContainedException;
import com.google.common.base.Charsets;
@@ -53,11 +53,11 @@
private final CloseableHttpClient client =
HttpClients.custom().setMaxConnPerRoute(100).setMaxConnTotal(100)
.build();
private final URI uri;
- private final Entity entityUris;
+ private final WikibaseUris uris;
- public RdfRepository(URI uri, Entity entityUris) {
+ public RdfRepository(URI uri, WikibaseUris uris) {
this.uri = uri;
- this.entityUris = entityUris;
+ this.uris = uris;
}
/**
@@ -78,6 +78,7 @@
log.debug("Updating data for {}", entityId);
String entity = "entity:" + entityId;
UpdateBuilder siteLinksBuilder = updateBuilder();
+ siteLinksBuilder.prefix("schema", SchemaDotOrg.NAMESPACE);
siteLinksBuilder.delete("?s", "?p", "?o");
siteLinksBuilder.where("?s", "schema:about", "entity:" + entityId);
siteLinksBuilder.where("?s", "?p", "?o");
@@ -89,7 +90,7 @@
referencesBuilder.prefix("prov", Provenance.NAMESPACE);
referencesBuilder.delete("?s", "?p", "?o");
referencesBuilder.where(entity, "?statementPred", "?statement");
- referencesBuilder.where().add(startsWith("?statement",
entityUris.statement().namespace()));
+ referencesBuilder.where().add(startsWith("?statement",
uris.statement()));
referencesBuilder.where("?statement", "prov:wasDerivedFrom", "?s");
referencesBuilder.where("?s", "?p", "?o");
// We can't clear references that are still used elsewhere
@@ -104,7 +105,7 @@
UpdateBuilder expandedStatementsBuilder = updateBuilder();
expandedStatementsBuilder.delete("?s", "?p", "?o");
expandedStatementsBuilder.where(entity, "?statementPred", "?s");
- expandedStatementsBuilder.where().add(startsWith("?s",
entityUris.statement().namespace()));
+ expandedStatementsBuilder.where().add(startsWith("?s",
uris.statement()));
expandedStatementsBuilder.where("?s", "?p", "?o");
if (!statements.isEmpty()) {
expandedStatementsBuilder.where().notExists().values(statements,
"?s", "?p", "?o");
@@ -151,7 +152,7 @@
// TODO building queries with strings sucks because escaping....
StringBuilder prefixes = new StringBuilder();
prefixes.append("PREFIX schema:
<").append(SchemaDotOrg.NAMESPACE).append(">\n");
- prefixes.append("PREFIX entity:
<").append(entityUris.namespace()).append(">\n");
+ prefixes.append("PREFIX entity:
<").append(uris.entity()).append(">\n");
return ask(String.format(Locale.ROOT, "%sASK {\n entity:%s
schema:version ?v .\n FILTER (?v >= %s)\n}",
prefixes, entityId, revision));
}
@@ -237,8 +238,7 @@
private UpdateBuilder updateBuilder() {
UpdateBuilder b = new UpdateBuilder();
- b.prefix("entity", entityUris.namespace());
- b.prefix("schema", SchemaDotOrg.NAMESPACE);
+ b.prefix("entity", uris.entity());
return b;
}
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractRdfRepositoryIntegrationTestBase.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractRdfRepositoryIntegrationTestBase.java
index 0185d60..22ebc58 100644
---
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractRdfRepositoryIntegrationTestBase.java
+++
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractRdfRepositoryIntegrationTestBase.java
@@ -5,7 +5,7 @@
import org.junit.Before;
import org.junit.runner.RunWith;
-import org.wikidata.query.rdf.common.uri.Entity;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.rdf.RdfRepository;
import org.wikidata.query.rdf.tool.rdf.UpdateBuilder;
@@ -18,13 +18,13 @@
*/
@RunWith(RandomizedRunner.class)
public abstract class AbstractRdfRepositoryIntegrationTestBase extends
RandomizedTest {
- protected final Entity entityUris = Entity.WIKIDATA;
+ protected final WikibaseUris uris = WikibaseUris.WIKIDATA;
protected final RdfRepositoryForTesting rdfRepository;
public AbstractRdfRepositoryIntegrationTestBase() {
try {
rdfRepository = new RdfRepositoryForTesting(new
URI("http://localhost:9999/bigdata/namespace/kb/sparql"),
- entityUris);
+ uris);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
@@ -40,8 +40,8 @@
* accidentally use clear() so we don't put it in the repository.
*/
public static class RdfRepositoryForTesting extends RdfRepository {
- public RdfRepositoryForTesting(URI uri, Entity entityUris) {
- super(uri, entityUris);
+ public RdfRepositoryForTesting(URI uri, WikibaseUris uris) {
+ super(uri, uris);
}
/**
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdateIntegrationTestBase.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdateIntegrationTestBase.java
index 687a71d..b762b57 100644
---
a/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdateIntegrationTestBase.java
+++
b/tools/src/test/java/org/wikidata/query/rdf/tool/AbstractUpdateIntegrationTestBase.java
@@ -5,8 +5,7 @@
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
-import org.wikidata.query.rdf.common.uri.Entity;
-import org.wikidata.query.rdf.common.uri.EntityData;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.change.Change;
import org.wikidata.query.rdf.tool.change.IdChangeSource;
import org.wikidata.query.rdf.tool.rdf.Munger;
@@ -17,7 +16,7 @@
*/
public class AbstractUpdateIntegrationTestBase extends
AbstractRdfRepositoryIntegrationTestBase {
private WikibaseRepository wikibaseRepository = new
WikibaseRepository("https", "www.wikidata.org");
- private final Munger munger = new Munger(EntityData.WIKIDATA,
Entity.WIKIDATA).removeSiteLinks();
+ private final Munger munger = new
Munger(WikibaseUris.WIKIDATA).removeSiteLinks();
/**
* Update all ids from from to to.
*/
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/StatementHelper.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/StatementHelper.java
index 716968d..855359d 100644
--- a/tools/src/test/java/org/wikidata/query/rdf/tool/StatementHelper.java
+++ b/tools/src/test/java/org/wikidata/query/rdf/tool/StatementHelper.java
@@ -8,9 +8,9 @@
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.impl.StatementImpl;
import org.openrdf.model.impl.URIImpl;
-import org.wikidata.query.rdf.common.uri.Entity;
import org.wikidata.query.rdf.common.uri.RDF;
import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import com.google.common.collect.ImmutableList;
@@ -92,7 +92,7 @@
*/
public static URI uri(String r) {
if (r.startsWith("Q") || r.startsWith("P")) {
- return new URIImpl(Entity.WIKIDATA.namespace() + r);
+ return new URIImpl(WikibaseUris.WIKIDATA.entity() + r);
}
return new URIImpl(r);
}
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/MungerUnitTest.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/MungerUnitTest.java
index 40d0a35..21e9782 100644
--- a/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/MungerUnitTest.java
+++ b/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/MungerUnitTest.java
@@ -18,31 +18,27 @@
import org.openrdf.model.Statement;
import org.openrdf.model.impl.LiteralImpl;
import org.openrdf.model.vocabulary.XMLSchema;
-import org.wikidata.query.rdf.common.uri.Entity;
-import org.wikidata.query.rdf.common.uri.EntityData;
import org.wikidata.query.rdf.common.uri.Ontology;
import org.wikidata.query.rdf.common.uri.Provenance;
import org.wikidata.query.rdf.common.uri.RDF;
import org.wikidata.query.rdf.common.uri.RDFS;
import org.wikidata.query.rdf.common.uri.SKOS;
import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.exception.ContainedException;
import org.wikidata.query.rdf.tool.rdf.Munger.BadSubjectException;
import com.carrotsearch.randomizedtesting.RandomizedRunner;
import com.carrotsearch.randomizedtesting.RandomizedTest;
-import com.carrotsearch.randomizedtesting.annotations.Seed;
import com.google.common.collect.ImmutableList;
/**
* Tests Munger.
*/
@RunWith(RandomizedRunner.class)
-@Seed("23B559017FCF95D7:8D8A6D2BB13ADCAB")
public class MungerUnitTest extends RandomizedTest {
- private final EntityData entityDataUris = EntityData.WIKIDATA;
- private final Entity entityUris = Entity.WIKIDATA;
- private final Munger munger = new Munger(entityDataUris, entityUris);
+ private final WikibaseUris uris = WikibaseUris.WIKIDATA;
+ private final Munger munger = new Munger(uris);
@Test
public void mungesEntityDataOntoEntity() throws ContainedException {
@@ -121,9 +117,9 @@
@Test
public void basicExpandedStatement() throws ContainedException {
List<Statement> george = basicEntity("Q23");
- String statementUri = entityUris.statement().namespace() +
"Q23-ce976010-412f-637b-c687-9fd2d52dc140";
+ String statementUri = uris.statement() +
"Q23-ce976010-412f-637b-c687-9fd2d52dc140";
Statement statementTypeDecl = statement(george, statementUri,
RDF.TYPE, Ontology.STATEMENT);
- Statement valueDecl = statement(george, statementUri,
entityUris.value().namespace() + "P509", "Q356405");
+ Statement valueDecl = statement(george, statementUri, uris.value() +
"P509", "Q356405");
Statement rankDecl = statement(george, statementUri, Ontology.RANK,
Ontology.NORMAL_RANK);
Statement statementDecl = statement("Q23", "P509", statementUri);
if (randomBoolean()) {
@@ -143,14 +139,14 @@
@Test
public void expandedStatementWithReference() throws ContainedException {
List<Statement> george = basicEntity("Q23");
- String statementUri = entityUris.statement().namespace() +
"Q23-9D3713FF-7BCC-489F-9386-C7322C0AC284";
- String referenceUri = entityUris.reference().namespace() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
+ String statementUri = uris.statement() +
"Q23-9D3713FF-7BCC-489F-9386-C7322C0AC284";
+ String referenceUri = uris.reference() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
Statement statementDecl = statement(george, "Q23", "P19",
statementUri);
Statement statementTypeDecl = statement(george, statementUri,
RDF.TYPE, Ontology.STATEMENT);
- Statement valueDecl = statement(george, statementUri,
entityUris.value().namespace() + "P19", "Q494413");
+ Statement valueDecl = statement(george, statementUri, uris.value() +
"P19", "Q494413");
Statement rankDecl = statement(george, statementUri, Ontology.RANK,
Ontology.NORMAL_RANK);
Statement referenceTypeDecl = statement(george, referenceUri,
RDF.TYPE, Ontology.REFERENCE);
- Statement referenceValueDecl = statement(george, referenceUri,
entityUris.value().namespace() + "P854",
+ Statement referenceValueDecl = statement(george, referenceUri,
uris.value() + "P854",
"http://www.anb.org/articles/02/02-00332.html");
Statement referenceDecl = statement(statementUri,
Provenance.WAS_DERIVED_FROM, referenceUri);
if (randomBoolean()) {
@@ -171,12 +167,12 @@
@Test
public void expandedStatementWithQualifier() throws ContainedException {
List<Statement> george = basicEntity("Q23");
- String statementUri = entityUris.statement().namespace() +
"q23-8A2F4718-6159-4E58-A8F9-6F24F5EFEC42";
+ String statementUri = uris.statement() +
"q23-8A2F4718-6159-4E58-A8F9-6F24F5EFEC42";
Statement statementDecl = statement(george, "Q23", "P26",
statementUri);
Statement statementTypeDecl = statement(george, statementUri,
RDF.TYPE, Ontology.STATEMENT);
- Statement valueDecl = statement(george, statementUri,
entityUris.value().namespace() + "P26", "Q191789");
+ Statement valueDecl = statement(george, statementUri, uris.value() +
"P26", "Q191789");
Statement rankDecl = statement(george, statementUri, Ontology.RANK,
Ontology.NORMAL_RANK);
- Statement qualifierDecl = statement(george, statementUri,
entityUris.qualifier().namespace() + "P580",
+ Statement qualifierDecl = statement(george, statementUri,
uris.qualifier() + "P580",
new LiteralImpl("1759-01-06T00:00:00Z", XMLSchema.DATETIME));
munger.munge("Q23", george);
assertThat(george, hasItem(statementDecl));
@@ -300,7 +296,7 @@
private List<Statement> basicEntity(String entityId, Literal version) {
List<Statement> statements = new ArrayList<>();
- String entityDataUri = EntityData.WIKIDATA.namespace() + entityId;
+ String entityDataUri = uris.entityData() + entityId;
// EntityData is all munged onto Entity
statement(statements, entityDataUri, SchemaDotOrg.ABOUT, entityId);
statement(statements, entityDataUri, SchemaDotOrg.VERSION, version);
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/RdfRepositoryIntegrationTest.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/RdfRepositoryIntegrationTest.java
index 5206d87..8031391 100644
---
a/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/RdfRepositoryIntegrationTest.java
+++
b/tools/src/test/java/org/wikidata/query/rdf/tool/rdf/RdfRepositoryIntegrationTest.java
@@ -113,19 +113,19 @@
Statement onMartha = statement("Q191789", "P20", "Q731635");
rdfRepository.sync("Q23", ImmutableList.of(link, onGeorge));
rdfRepository.sync("Q191789", ImmutableList.of(onMartha));
- assertTrue(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertTrue(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q23 entity:P20 entity:Q494413
}").toString()));
- assertTrue(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertTrue(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q23 entity:P26 entity:Q191789
}").toString()));
- assertTrue(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertTrue(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q191789 entity:P20 entity:Q731635
}").toString()));
rdfRepository.sync("Q23", ImmutableList.of(onGeorge));
- assertTrue(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertTrue(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q23 entity:P20 entity:Q494413
}").toString()));
- assertFalse(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertFalse(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q23 entity:P26 entity:Q191789
}").toString()));
- assertTrue(rdfRepository.ask(entityUris.prefixes(new StringBuilder())
+ assertTrue(rdfRepository.ask(uris.prefixes(new StringBuilder())
.append("ASK {entity:Q191789 entity:P20 entity:Q731635
}").toString()));
}
@@ -154,7 +154,7 @@
List<Statement> george =
expandedStatement("ce976010-412f-637b-c687-9fd2d52dc140", "Q23", "P509",
"Q356405",
Ontology.NORMAL_RANK);
rdfRepository.sync("Q23", george);
- StringBuilder query = Ontology.prefix(entityUris.prefixes(new
StringBuilder()));
+ StringBuilder query = Ontology.prefix(uris.prefixes(new
StringBuilder()));
query.append("SELECT * WHERE { entity:Q23 entity:P509 [ v:P509 ?cause;
ontology:rank ontology:NormalRank ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
@@ -169,7 +169,7 @@
Ontology.NORMAL_RANK);
// Poor George Washington's cause of death is now duck
rdfRepository.sync("Q23", george);
- StringBuilder query = Ontology.prefix(entityUris.prefixes(new
StringBuilder()));
+ StringBuilder query = Ontology.prefix(uris.prefixes(new
StringBuilder()));
query.append("SELECT * WHERE { entity:Q23 entity:P509 [ v:P509 ?cause;
ontology:rank ontology:NormalRank ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
@@ -183,7 +183,7 @@
List<Statement> george =
expandedStatement("ce976010-412f-637b-c687-9fd2d52dc140", "Q23", "P509",
"Q356405",
Ontology.DEPRECATED_RANK);
rdfRepository.sync("Q23", george);
- StringBuilder query = Ontology.prefix(entityUris.prefixes(new
StringBuilder()));
+ StringBuilder query = Ontology.prefix(uris.prefixes(new
StringBuilder()));
query.append("SELECT * WHERE { entity:Q23 entity:P509 [ v:P509 ?cause;
ontology:rank ontology:DeprecatedRank ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
@@ -193,19 +193,19 @@
@Test
public void referencesOnExpandedStatements() throws
QueryEvaluationException {
- String referenceUri = entityUris.reference().namespace() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
+ String referenceUri = uris.reference() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
List<Statement> george =
expandedStatement("9D3713FF-7BCC-489F-9386-C7322C0AC284", "Q23", "P19",
"Q494413",
Ontology.NORMAL_RANK, referenceUri);
- statement(george, referenceUri, entityUris.value().namespace() +
"P854",
+ statement(george, referenceUri, uris.value() + "P854",
"http://www.anb.org/articles/02/02-00332.html");
rdfRepository.sync("Q23", george);
- StringBuilder query =
Provenance.prefix(Ontology.prefix(entityUris.prefixes(new StringBuilder())));
+ StringBuilder query =
Provenance.prefix(Ontology.prefix(uris.prefixes(new StringBuilder())));
query.append("SELECT * WHERE { entity:Q23 entity:P19 [ v:P19
?placeOfBirth; prov:wasDerivedFrom [ ?provP ?provO ] ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
binds("placeOfBirth", "Q494413"),//
- binds("provP", entityUris.value().namespace() + "P854"),//
+ binds("provP", uris.value() + "P854"),//
binds("provO",
"http://www.anb.org/articles/02/02-00332.html")));
assertFalse(r.hasNext());
}
@@ -213,18 +213,18 @@
@Test
public void referencesOnExpandedStatementsChangeValue() throws
QueryEvaluationException {
referencesOnExpandedStatements();
- String referenceUri = entityUris.reference().namespace() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
+ String referenceUri = uris.reference() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
List<Statement> george =
expandedStatement("9D3713FF-7BCC-489F-9386-C7322C0AC284", "Q23", "P19",
"Q494413",
Ontology.NORMAL_RANK, referenceUri);
- statement(george, referenceUri, entityUris.value().namespace() +
"P854", "http://example.com");
+ statement(george, referenceUri, uris.value() + "P854",
"http://example.com");
rdfRepository.sync("Q23", george);
- StringBuilder query =
Provenance.prefix(Ontology.prefix(entityUris.prefixes(new StringBuilder())));
+ StringBuilder query =
Provenance.prefix(Ontology.prefix(uris.prefixes(new StringBuilder())));
query.append("SELECT * WHERE { entity:Q23 entity:P19 [ v:P19
?placeOfBirth; prov:wasDerivedFrom [ ?provP ?provO ] ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
binds("placeOfBirth", "Q494413"),//
- binds("provP", entityUris.value().namespace() + "P854"),//
+ binds("provP", uris.value() + "P854"),//
binds("provO", "http://example.com")));
assertFalse(r.hasNext());
}
@@ -232,19 +232,19 @@
@Test
public void referencesOnExpandedStatementsChangePredicate() throws
QueryEvaluationException {
referencesOnExpandedStatements();
- String referenceUri = entityUris.reference().namespace() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
+ String referenceUri = uris.reference() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
List<Statement> george =
expandedStatement("9D3713FF-7BCC-489F-9386-C7322C0AC284", "Q23", "P19",
"Q494413",
Ontology.NORMAL_RANK, referenceUri);
- statement(george, referenceUri, entityUris.value().namespace() +
"P143",
+ statement(george, referenceUri, uris.value() + "P143",
"http://www.anb.org/articles/02/02-00332.html");
rdfRepository.sync("Q23", george);
- StringBuilder query =
Provenance.prefix(Ontology.prefix(entityUris.prefixes(new StringBuilder())));
+ StringBuilder query =
Provenance.prefix(Ontology.prefix(uris.prefixes(new StringBuilder())));
query.append("SELECT * WHERE { entity:Q23 entity:P19 [ v:P19
?placeOfBirth; prov:wasDerivedFrom [ ?provP ?provO ] ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
binds("placeOfBirth", "Q494413"),//
- binds("provP", entityUris.value().namespace() + "P143"),//
+ binds("provP", uris.value() + "P143"),//
binds("provO",
"http://www.anb.org/articles/02/02-00332.html")));
assertFalse(r.hasNext());
}
@@ -252,10 +252,10 @@
@Test
public void sharedReference() throws QueryEvaluationException {
// Load a shared reference
- String referenceUri = entityUris.reference().namespace() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
+ String referenceUri = uris.reference() +
"e36b7373814a0b74caa84a5fc2b1e3297060ab0f";
List<Statement> george =
expandedStatement("9D3713FF-7BCC-489F-9386-C7322C0AC284", "Q23", "P19",
"Q494413",
Ontology.NORMAL_RANK, referenceUri);
- Statement refDecl = statement(george, referenceUri,
entityUris.value().namespace() + "P854",
+ Statement refDecl = statement(george, referenceUri, uris.value() +
"P854",
"http://www.anb.org/articles/02/02-00332.html");
rdfRepository.sync("Q23", george);
List<Statement> dummy =
expandedStatement("9D3713FF-7BCC-489F-9386-C7322C0AC284", "Q1234134", "P19",
"Q494413",
@@ -264,13 +264,13 @@
rdfRepository.sync("Q1234134", dummy);
// Now query and make sure you can find it
- StringBuilder query =
Provenance.prefix(Ontology.prefix(entityUris.prefixes(new StringBuilder())));
+ StringBuilder query =
Provenance.prefix(Ontology.prefix(uris.prefixes(new StringBuilder())));
query.append("SELECT * WHERE { entity:Q23 entity:P19 [ v:P19
?placeOfBirth; prov:wasDerivedFrom [ ?provP ?provO ] ] }");
TupleQueryResult r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
binds("placeOfBirth", "Q494413"),//
- binds("provP", entityUris.value().namespace() + "P854"),//
+ binds("provP", uris.value() + "P854"),//
binds("provO",
"http://www.anb.org/articles/02/02-00332.html")));
assertFalse(r.hasNext());
@@ -280,24 +280,25 @@
rdfRepository.sync("Q1234134", dummy);
// Now query and find the reference still there because its shared!
- query = Provenance.prefix(Ontology.prefix(entityUris.prefixes(new
StringBuilder())));
+ query = Provenance.prefix(Ontology.prefix(uris.prefixes(new
StringBuilder())));
query.append("SELECT * WHERE { entity:Q23 entity:P19 [ v:P19
?placeOfBirth; prov:wasDerivedFrom [ ?provP ?provO ] ] }");
r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
binds("placeOfBirth", "Q494413"),//
- binds("provP", entityUris.value().namespace() + "P854"),//
+ binds("provP", uris.value() + "P854"),//
binds("provO",
"http://www.anb.org/articles/02/02-00332.html")));
assertFalse(r.hasNext());
// Query one more way just to be sure it works 10000%
- query = Ontology.prefix(entityUris.prefixes(new StringBuilder()));
+ query = Ontology.prefix(uris.prefixes(new StringBuilder()));
query.append("SELECT * WHERE { ?s ?p ?o . FILTER( STRSTARTS(STR(?s),
\"")
- .append(entityUris.reference().namespace()).append("\") ) .
}");
+.append(uris.reference())
+ .append("\") ) . }");
r = rdfRepository.query(query.toString());
assertTrue(r.hasNext());
assertThat(r.next(), allOf(//
- binds("p", entityUris.value().namespace() + "P854"),//
+ binds("p", uris.value() + "P854"),//
binds("o", "http://www.anb.org/articles/02/02-00332.html")));
assertFalse(r.hasNext());
@@ -310,9 +311,10 @@
* Now query and find the reference now gone because it isn't used
* anywhere.
*/
- query = Ontology.prefix(entityUris.prefixes(new StringBuilder()));
+ query = Ontology.prefix(uris.prefixes(new StringBuilder()));
query.append("SELECT * WHERE { ?s ?p ?o . FILTER( STRSTARTS(STR(?s),
\"")
- .append(entityUris.reference().namespace()).append("\") ) .
}");
+.append(uris.reference())
+ .append("\") ) . }");
r = rdfRepository.query(query.toString());
assertFalse(r.hasNext());
}
@@ -328,9 +330,9 @@
private List<Statement> expandedStatement(String statementId, String
subject, String predicate, String value,
String rank) {
List<Statement> statements = new ArrayList<>();
- String statementUri = entityUris.statement().namespace() + subject +
"-" + statementId;
+ String statementUri = uris.statement() + subject + "-" + statementId;
statement(statements, subject, predicate, statementUri);
- statement(statements, statementUri, entityUris.value().namespace() +
predicate, value);
+ statement(statements, statementUri, uris.value() + predicate, value);
statement(statements, statementUri, Ontology.RANK, rank);
return statements;
}
diff --git
a/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
b/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
index e02914e..92175b7 100644
---
a/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
+++
b/tools/src/test/java/org/wikidata/query/rdf/tool/wikibase/WikibaseRepositoryIntegrationTest.java
@@ -17,7 +17,7 @@
import org.json.simple.JSONObject;
import org.junit.Test;
import org.openrdf.model.Statement;
-import org.wikidata.query.rdf.common.uri.Entity;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
import org.wikidata.query.rdf.tool.exception.ContainedException;
import org.wikidata.query.rdf.tool.exception.RetryableException;
@@ -28,7 +28,7 @@
public class WikibaseRepositoryIntegrationTest {
private static final String HOST = "test.wikidata.org";
private final WikibaseRepository repo = new WikibaseRepository("http",
HOST);
- private final Entity entityUris = new Entity(HOST);
+ private final WikibaseUris uris = new WikibaseUris(HOST);
@Test
@SuppressWarnings("unchecked")
@@ -86,7 +86,7 @@
Collection<Statement> statements = repo.fetchRdfForEntity(entityId);
found = false;
for (Statement statement : statements) {
- if
(statement.getSubject().stringValue().equals(entityUris.namespace() +
entityId)) {
+ if (statement.getSubject().stringValue().equals(uris.entity() +
entityId)) {
found = true;
break;
}
--
To view, visit https://gerrit.wikimedia.org/r/202669
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I91b362b4a3164134caa79c9ca8d1955deae52a79
Gerrit-PatchSet: 1
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: Manybubbles <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits