jenkins-bot has submitted this change and it was merged.

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/CliUtils.java
M tools/src/main/java/org/wikidata/query/rdf/tool/Munge.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/MungeIntegrationTest.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
15 files changed, 203 insertions(+), 284 deletions(-)

Approvals:
  Smalyshev: Looks good to me, approved
  jenkins-bot: Verified



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/CliUtils.java 
b/tools/src/main/java/org/wikidata/query/rdf/tool/CliUtils.java
index e73aa53..ae11351 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/CliUtils.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/CliUtils.java
@@ -22,8 +22,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.rdf.Munger;
 
 import ch.qos.logback.classic.LoggerContext;
@@ -107,7 +106,7 @@
      * Build a munger from a MungerOptions instance.
      */
     public static Munger mungerFromOptions(MungerOptions options) {
-        Munger munger = new Munger(new EntityData(options.wikibaseHost()), new 
Entity(options.wikibaseHost()));
+        Munger munger = new Munger(new WikibaseUris(options.wikibaseHost()));
         if (options.skipSiteLinks()) {
             munger = munger.removeSiteLinks();
         }
diff --git a/tools/src/main/java/org/wikidata/query/rdf/tool/Munge.java 
b/tools/src/main/java/org/wikidata/query/rdf/tool/Munge.java
index a9283f3..1bebee4 100644
--- a/tools/src/main/java/org/wikidata/query/rdf/tool/Munge.java
+++ b/tools/src/main/java/org/wikidata/query/rdf/tool/Munge.java
@@ -21,10 +21,9 @@
 import org.openrdf.rio.Rio;
 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.Ontology;
 import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
 import org.wikidata.query.rdf.tool.CliUtils.BasicOptions;
 import org.wikidata.query.rdf.tool.CliUtils.MungerOptions;
 import org.wikidata.query.rdf.tool.CliUtils.WikibaseOptions;
@@ -57,13 +56,12 @@
 
     public static void main(String[] args) {
         Options options = CliUtils.handleOptions(Options.class, args);
-        EntityData entityDataUris = new EntityData(options.wikibaseHost());
-        Entity entityUris = new Entity(options.wikibaseHost());
+        WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
         Munger munger = CliUtils.mungerFromOptions(options);
 
         if (options.to().startsWith("port:")) {
             int port = 
Integer.parseInt(options.to().substring("port:".length()));
-            Httpd http = new Httpd(port, entityDataUris, entityUris, munger, 
options.from());
+            Httpd http = new Httpd(port, uris, munger, options.from());
             try {
                 log.info("Starting embedded http server for munged rdf on port 
{}.", port);
                 http.start();
@@ -98,22 +96,20 @@
             return;
         }
         try {
-            Munge munge = new Munge(entityDataUris, entityUris, munger, from, 
to);
+            Munge munge = new Munge(uris, munger, from, to);
             munge.run();
         } catch (RuntimeException e) {
             log.error("Fatal error munging RDF", e);
         }
     }
 
-    private final EntityData entityDataUris;
-    private final Entity entityUris;
+    private final WikibaseUris uris;
     private final Munger munger;
     private final Reader from;
     private final Writer to;
 
-    public Munge(EntityData entityDataUris, Entity entityUris, Munger munger, 
Reader from, Writer to) {
-        this.entityDataUris = entityDataUris;
-        this.entityUris = entityUris;
+    public Munge(WikibaseUris uris, Munger munger, Reader from, Writer to) {
+        this.uris = uris;
         this.munger = munger;
         this.from = from;
         this.to = to;
@@ -124,11 +120,11 @@
         try {
             RDFParser parser = Rio.createParser(RDFFormat.TURTLE);
             RDFWriter writer = Rio.createWriter(RDFFormat.TURTLE, to);
-            RDFHandler handler = new EntityMungingRdfHandler(entityDataUris, 
munger, writer);
+            RDFHandler handler = new EntityMungingRdfHandler(uris, munger, 
writer);
             handler = new Normalizer(handler);
             parser.setRDFHandler(handler);
             try {
-                parser.parse(from, entityUris.namespace());
+                parser.parse(from, uris.entity());
             } catch (RDFParseException | RDFHandlerException | IOException e) {
                 throw new RuntimeException(e);
             }
@@ -160,15 +156,15 @@
      * This is how the files are built so that is OK.
      */
     private static class EntityMungingRdfHandler implements RDFHandler {
-        private final EntityData entityDataUris;
+        private final WikibaseUris uris;
         private final Munger munger;
         private final RDFHandler next;
         private final List<Statement> statements = new ArrayList<>();
         private boolean haveNonEntityDataStatements;
         private String entityId;
 
-        public EntityMungingRdfHandler(EntityData entityDataUris, Munger 
munger, RDFHandler next) {
-            this.entityDataUris = entityDataUris;
+        public EntityMungingRdfHandler(WikibaseUris uris, Munger munger, 
RDFHandler next) {
+            this.uris = uris;
             this.munger = munger;
             this.next = next;
         }
@@ -194,7 +190,7 @@
         @Override
         public void handleStatement(Statement statement) throws 
RDFHandlerException {
             String subject = statement.getSubject().stringValue();
-            if (subject.startsWith(entityDataUris.namespace())) {
+            if (subject.startsWith(uris.entityData())) {
                 if (haveNonEntityDataStatements) {
                     munge();
                 }
@@ -243,15 +239,13 @@
      * this removes the need to create a temporary file.
      */
     public static class Httpd extends NanoHTTPD {
-        private final EntityData entityDataUris;
-        private final Entity entityUris;
+        private final WikibaseUris uris;
         private final Munger munger;
         private final String source;
 
-        public Httpd(int port, EntityData entityDataUris, Entity entityUris, 
Munger munger, String source) {
+        public Httpd(int port, WikibaseUris uris, Munger munger, String 
source) {
             super(port);
-            this.entityDataUris = entityDataUris;
-            this.entityUris = entityUris;
+            this.uris = uris;
             this.munger = munger;
             this.source = source;
         }
@@ -262,7 +256,7 @@
                 PipedInputStream sentToResponse = new PipedInputStream();
                 Reader from = new 
InputStreamReader(CliUtils.inputStream(source), Charsets.UTF_8);
                 final Writer to = new OutputStreamWriter(new 
PipedOutputStream(sentToResponse), Charsets.UTF_8);
-                final Munge munge = new Munge(entityDataUris, entityUris, 
munger, from, to);
+                final Munge munge = new Munge(uris, munger, from, to);
                 Thread thread = new Thread(munge);
                 
thread.setUncaughtExceptionHandler(CliUtils.loggingUncaughtExceptionHandler("Error
 serving rdf", log));
                 thread.start();
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 3ae9107..012ebab 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
@@ -21,7 +21,6 @@
 import org.openrdf.model.Statement;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.wikidata.query.rdf.common.uri.Entity;
 import org.wikidata.query.rdf.tool.CliUtils.BasicOptions;
 import org.wikidata.query.rdf.tool.CliUtils.MungerOptions;
 import org.wikidata.query.rdf.tool.CliUtils.WikibaseOptions;
@@ -29,6 +28,7 @@
 import org.wikidata.query.rdf.tool.change.Change.Batch;
 import org.wikidata.query.rdf.tool.change.IdChangeSource;
 import org.wikidata.query.rdf.tool.change.RecentChangesPoller;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
 import org.wikidata.query.rdf.tool.exception.ContainedException;
 import org.wikidata.query.rdf.tool.exception.RetryableException;
 import org.wikidata.query.rdf.tool.rdf.Munger;
@@ -75,8 +75,8 @@
             log.error("Invalid url:  " + options.sparqlUrl() + " caused by " + 
e.getMessage());
             return;
         }
-        Entity entityUris = new Entity(options.wikibaseHost());
-        RdfRepository rdfRepository = new RdfRepository(sparqlUri, entityUris);
+        WikibaseUris uris = new WikibaseUris(options.wikibaseHost());
+        RdfRepository rdfRepository = new RdfRepository(sparqlUri, uris);
         Change.Source<? extends Change.Batch> changeSource = 
buildChangeSource(options, rdfRepository,
                 wikibaseRepository);
         if (changeSource == null) {
@@ -87,7 +87,6 @@
                 new LinkedBlockingQueue<Runnable>(), threadFactory.build());
 
         Munger munger = CliUtils.mungerFromOptions(options);
-
         new Update<>(changeSource, wikibaseRepository, rdfRepository, munger, 
executor).
           setPollDelay(options.pollDelay()).
           run();
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 f941f88..e17199d 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);
     }
 
     /**
@@ -177,7 +174,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();
@@ -210,16 +207,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();
@@ -282,7 +279,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.
@@ -307,7 +304,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;
@@ -420,7 +417,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);
@@ -501,10 +498,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 aabbc60..25e774a 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 f48a09e..e468846 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
@@ -1,12 +1,10 @@
 package org.wikidata.query.rdf.tool;
 
 import java.net.URI;
-import java.net.URISyntaxException;
 
 import org.junit.Before;
 import org.junit.runner.RunWith;
-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.rdf.RdfRepository;
 
 import com.carrotsearch.randomizedtesting.RandomizedRunner;
@@ -18,26 +16,20 @@
  */
 @RunWith(RandomizedRunner.class)
 public abstract class AbstractRdfRepositoryIntegrationTestBase extends 
RandomizedTest {
-    protected final EntityData entityDataUris;
-    protected final Entity entityUris;
+    protected final WikibaseUris uris;
     protected final RdfRepositoryForTesting rdfRepository;
 
     /**
      * Build the test against prod wikidata.
      */
     public AbstractRdfRepositoryIntegrationTestBase() {
-        this(EntityData.WIKIDATA, Entity.WIKIDATA);
+        this(WikibaseUris.WIKIDATA);
     }
 
-    public AbstractRdfRepositoryIntegrationTestBase(EntityData entityDataUris, 
Entity entityUris) {
-        this.entityDataUris = entityDataUris;
-        this.entityUris = entityUris;
-        try {
-            rdfRepository = new RdfRepositoryForTesting(new 
URI("http://localhost:9999/bigdata/namespace/kb/sparql";),
-                    entityUris);
-        } catch (URISyntaxException e) {
-            throw new RuntimeException(e);
-        }
+    public AbstractRdfRepositoryIntegrationTestBase(WikibaseUris uris) {
+        this.uris = uris;
+        rdfRepository = new 
RdfRepositoryForTesting(URI.create("http://localhost:9999/bigdata/namespace/kb/sparql";),
+            uris);
     }
 
     @Before
@@ -50,8 +42,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/MungeIntegrationTest.java 
b/tools/src/test/java/org/wikidata/query/rdf/tool/MungeIntegrationTest.java
index 3ba2976..ab28b8f 100644
--- a/tools/src/test/java/org/wikidata/query/rdf/tool/MungeIntegrationTest.java
+++ b/tools/src/test/java/org/wikidata/query/rdf/tool/MungeIntegrationTest.java
@@ -3,11 +3,10 @@
 import java.io.IOException;
 
 import org.junit.Test;
-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.RDFS;
 import org.wikidata.query.rdf.common.uri.SchemaDotOrg;
+import org.wikidata.query.rdf.common.uri.WikibaseUris;
 import org.wikidata.query.rdf.tool.rdf.Munger;
 
 import com.google.common.io.Resources;
@@ -17,7 +16,7 @@
  */
 public class MungeIntegrationTest extends 
AbstractRdfRepositoryIntegrationTestBase {
     public MungeIntegrationTest() {
-        super(new EntityData("test.wikidata.org"), new 
Entity("test.wikidata.org"));
+        super(WikibaseUris.TEST_WIKIDATA);
     }
 
     /**
@@ -26,15 +25,14 @@
     @Test
     public void loadTest() throws IOException {
         String source = Resources.getResource(MungeIntegrationTest.class, 
"test.ttl").toString();
-        Munge.Httpd http = new Munge.Httpd(10999, entityDataUris, entityUris,
-                new Munger(entityDataUris, entityUris).singleLabelMode("en"), 
source);
+        Munge.Httpd http = new Munge.Httpd(10999, uris, new 
Munger(uris).singleLabelMode("en"), source);
         http.start();
         try {
             assertEquals(907, rdfRepository.loadUrl("http://localhost:10999";));
         } finally {
             http.stop();
         }
-        assertTrue(rdfRepository.ask(RDFS.prefixes(entityUris.prefixes(new 
StringBuilder()))
+        assertTrue(rdfRepository.ask(RDFS.prefixes(uris.prefixes(new 
StringBuilder()))
                 .append("ASK { entity:Q10 rdfs:label \"Wikidata\"@en 
}").toString()));
         assertTrue(rdfRepository.ask(SchemaDotOrg.prefix(Ontology.prefix(new 
StringBuilder()))
                 .append("ASK { ontology:Dump schema:dateModified 
\"2015-04-02T10:54:56Z\"^^xsd:dateTime }").toString()));
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 6fca560..885e466 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")
@@ -100,7 +100,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: merged
Gerrit-Change-Id: I91b362b4a3164134caa79c9ca8d1955deae52a79
Gerrit-PatchSet: 2
Gerrit-Project: wikidata/query/rdf
Gerrit-Branch: master
Gerrit-Owner: Manybubbles <[email protected]>
Gerrit-Reviewer: Jdouglas <[email protected]>
Gerrit-Reviewer: Manybubbles <[email protected]>
Gerrit-Reviewer: Smalyshev <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to