package eu.fbk.knowledgestore.client;
import java.util.Set;
import com.google.common.base.Joiner;
import com.google.common.base.Throwables;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Ordering;
import com.google.common.collect.Sets;
import org.junit.Ignore;
import org.junit.Test;
import org.openrdf.model.URI;
import org.openrdf.model.impl.URIImpl;
import org.openrdf.model.vocabulary.DCTERMS;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import eu.fbk.knowledgestore.KnowledgeStore;
import eu.fbk.knowledgestore.Session;
import eu.fbk.knowledgestore.data.Criteria;
import eu.fbk.knowledgestore.data.Data;
import eu.fbk.knowledgestore.data.Record;
import eu.fbk.knowledgestore.data.Representation;
import eu.fbk.knowledgestore.data.Stream;
import eu.fbk.knowledgestore.internal.Util;
import eu.fbk.knowledgestore.vocabulary.KS;
public class KnowledgeStoreClientTest {
private static final Logger LOGGER = LoggerFactory.getLogger(Client.class);
// TODO: intercept client-side connection close
@Ignore
@Test
public void test2() throws Throwable {
final Set<String> namespaces = Sets.newHashSet();
final String query = "" //
+ "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>\n"
+ "PREFIX owl: <http://www.w3.org/2002/07/owl#>\n" //
+ "select distinct ?t\n" //
+ "where {\n" //
+ " { ?s a ?t } union { ?t a rdfs:Class } union { ?t a owl:Class }\n" //
+ " union { ?t rdfs:subClassOf ?x } union { ?y rdfs:subClassOf ?t }\n" //
+ " filter (isIRI(?t))" + "}";
final KnowledgeStore store = Client.builder("http://localhost:8080/")
.maxConnections(2).validateServer(false).build();
try {
final Session session = store.newSession();
final Stream<URI> uris = session.sparql(query).execTuples()
.transform(URI.class, true, "t");
int index = 0;
for (final URI uri : uris) {
namespaces.add(uri.getNamespace());
++index;
if (index % 10000 == 0) {
System.out.println(index + " URIs found");
}
}
System.out.println(Joiner.on('\n').join(Ordering.natural().sortedCopy(namespaces)));
uris.close();
} finally {
store.close();
}
}
@Test
public void test() throws Throwable {
final KnowledgeStore store = Client.builder("http://localhost:8080/")
.maxConnections(2).validateServer(false).build();
try {
final URI exampleID = new URIImpl("ex:test");
final URI resourceID = new URIImpl(
"http://www.newsreader-project.eu/2013/4/30/589F-S2Y1-JD34-V1MC.xml");
final Session session = store.newSession("ks", "kspass");
System.out.println(serialize(session.retrieve(KS.RESOURCE)
.condition("not(dct:creator = 'Francesco')").exec()));
session.count(KS.RESOURCE).condition("not(dct:creator = 'Francesco')").exec();
// System.err.println(session.upload(exampleID).representation(null).exec());
session.delete(KS.RESOURCE).ids(exampleID).exec();
final Record record = Record.create(exampleID, KS.RESOURCE).set(DCTERMS.CREATOR,
"Francesco");
session.merge(KS.RESOURCE).records(record).criteria(Criteria.overwrite()).exec();
System.out.println(session.sparql("select (count(*) as ?n) where { ?s ?p ?o }")
.execTuples().transform(Integer.class, true, "n").getUnique());
System.out.println(session
.sparql("describe <http://dbpedia.org/resource/Michael_Schumacher>")
.execTriples().count());
session.merge(KS.RESOURCE).records(record).criteria(Criteria.overwrite()).exec();
System.out.println(session.sparql(
"ask { <http://dbpedia.org/resource/David_Beckam> ?p ?o }").execBoolean());
final Representation representation = session.download(resourceID).exec();
System.out.println(representation.writeToString());
System.out.println(serialize(ImmutableList.of(representation.getMetadata())));
session.download(new URIImpl("ex:does-not-exist")).exec();
System.out.println(session
.upload(exampleID)
.representation(
Representation.create("Nel bel mezzo del cammin di nostra vita"))
.exec());
} catch (final Throwable ex) {
LOGGER.error("Test failed", ex);
Throwables.propagate(ex);
} finally {
store.close();
}
}
private String serialize(final Iterable<Record> records) {
final StringBuilder builder = new StringBuilder();
try {
int index = 0;
for (final Record record : records) {
builder.append("(").append(++index)
.append(") -----------------------------------------------------\n");
builder.append(record.toString(Data.getNamespaceMap(), true)).append("\n\n");
}
return builder.toString();
} finally {
Util.closeQuietly(records);
}
// final ByteArrayOutputStream out = new ByteArrayOutputStream();
// RDFUtil.writeRDF(RDFFormat.TURTLE, out, Data.getNamespaceMap(),
// Record.encode(Stream.create(records), ImmutableSet.<URI>of()));
// return new String(out.toByteArray());
}
}