Skip to content

Commit

Permalink
Started handing out well-known prefix names.
Browse files Browse the repository at this point in the history
  • Loading branch information
Fuchs-David committed Nov 6, 2019
1 parent 64780b7 commit 97e8355
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 15 deletions.
1 change: 1 addition & 0 deletions security/auth.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"users":[{"email":"[email protected]","salt":"-358365752","passwordHash":"QKiqdyVfGLrqzVRedri+qVKfL/XrVIzu037Mfcb7UIA="}]}
52 changes: 38 additions & 14 deletions src/main/java/com/github/fuchsdavid/annotator/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.json.Json;
Expand Down Expand Up @@ -66,6 +67,8 @@
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.Resource;
import org.apache.jena.shared.PrefixMapping;
import org.apache.jena.update.UpdateExecutionFactory;
import org.apache.jena.update.UpdateRequest;
import org.w3c.dom.DOMException;
Expand All @@ -84,6 +87,7 @@ public class Main {
private static final String AUTH = "/www/auth.xhtml";
private static final String PASSWD = "./security/auth.json";
private static final String CONSTRUCT = "/sparql/construct.sparql";
private static final String PREFIXES = "/config/known_prefixes.conf";
private static final Random RNG = new Random();

private static final Map<String,Collection<Model>> ID2MODEL_LIST = new HashMap<>();
Expand All @@ -93,6 +97,8 @@ public class Main {
private static final Map<String,User> EMAIL2USER = new HashMap<>();
private static final Map<String,Document> CACHED_FILES = new HashMap<>();

private static final PrefixMapping PM = PrefixMapping.Factory.create();

private static final TransformerFactory TF = TransformerFactory.newInstance();
private static JsonBuilderFactory JF = Json.createBuilderFactory(null);

Expand Down Expand Up @@ -139,6 +145,13 @@ public class Main {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}));
Scanner scanner = new Scanner(Main.class.getResourceAsStream(PREFIXES));
while(scanner.hasNextLine()){
String[] line = scanner.nextLine().split("\\t");
if(line.length != 2)
throw new Exception("Failed to parse prefix list");
PM.setNsPrefix(line[0], new URL(line[1]).toExternalForm());
}
}
catch(MalformedURLException | NoSuchAlgorithmException | ParserConfigurationException | SAXException ex){
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
Expand All @@ -147,6 +160,9 @@ public class Main {
catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
System.exit(1);
} catch (Exception ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
System.exit(1);
}
}

Expand Down Expand Up @@ -183,7 +199,7 @@ public static HttpServer runHTTPServer() {
server = null;
}
finally{
return server;
return Main.server = server;
}
}

Expand Down Expand Up @@ -295,14 +311,14 @@ private static void fillTable(String session_id, Document document) throws DOMEx
final Node c = document.createElement("strong");
c.appendChild(document.createTextNode("You are currently annotating resource:"));
caption.appendChild(c);
caption.appendChild(document.createTextNode(" <" + m.listSubjects().next().getURI() + ">"));
caption.appendChild(document.createTextNode(" " + getPrefixedName(m.listSubjects().next())));
m.listStatements().forEachRemaining(statement -> {
Node tr = tbody.appendChild(document.createElement("tr"));
Node p = tr.appendChild(document.createElement("td"));
p.setTextContent(statement.getPredicate().getURI());
p.setTextContent(getPrefixedName(statement.getPredicate()));
Node o = tr.appendChild(document.createElement("td"));
if(statement.getObject().isResource())
o.setTextContent(statement.getObject().toString());
o.setTextContent(getPrefixedName(statement.getObject().asResource()));
else
o.setTextContent(statement.getObject().asLiteral().getLexicalForm());
});
Expand Down Expand Up @@ -369,18 +385,14 @@ private static void doGetData(HttpExchange exchange, String session_id) throws I
JsonObjectBuilder object = JF.createObjectBuilder();
JsonArrayBuilder array = JF.createArrayBuilder();
m.listStatements().forEachRemaining(statement -> {
JsonObjectBuilder createTriple = JF.createObjectBuilder()
.add("subject",getPrefixedName(statement.getSubject()));
createTriple.add("predicate", getPrefixedName(statement.getPredicate()));
if(statement.getObject().isResource())
array.add(JF.createObjectBuilder()
.add("subject", statement.getSubject().toString())
.add("predicate",statement.getPredicate().toString())
.add("object", statement.getObject().toString())
.build());
createTriple.add("object", getPrefixedName(statement.getObject().asResource()));
else
array.add(JF.createObjectBuilder()
.add("subject", statement.getSubject().toString())
.add("predicate",statement.getPredicate().toString())
.add("object", statement.getObject().asLiteral().getLexicalForm())
.build());
createTriple.add("object",statement.getObject().asLiteral().getLexicalForm());
array.add(createTriple.build());
});
object.add("triples", array);
json = object.build().toString();
Expand Down Expand Up @@ -617,6 +629,7 @@ private static Model retrieveTriples(HttpExchange exchange,InputStream file) thr
pss.setLiteral("limit", 1);
Query query = pss.asQuery();
m = QueryExecutionFactory.sparqlService(SPARQLendpoint,query).execConstruct();
m.setNsPrefixes(PM);
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
exchange.sendResponseHeaders(500, 0);
Expand All @@ -628,6 +641,17 @@ private static Model retrieveTriples(HttpExchange exchange,InputStream file) thr
}
return m;
}

/**
* Get prefixed name of a URI resource.
*
* @param resource
* @return
*/
private static String getPrefixedName(Resource resource){
String prefix = PM.getNsURIPrefix(resource.getNameSpace());
return (prefix == null ? resource.getURI() : prefix + ":" + resource.getLocalName());
}

/**
* Retrieves session ID from HTTP request header.
Expand Down
11 changes: 11 additions & 0 deletions src/main/resources/config/known_prefixes.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
dbo http://dbpedia.org/ontology/
dbp http://dbpedia.org/property/
dbr http://dbpedia.org/resource/
dcterms http://purl.org/dc/terms/
foaf http://xmlns.com/foaf/0.1/
rdf http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs http://www.w3.org/2000/01/rdf-schema#
owl http://www.w3.org/2002/07/owl#
foaf http://xmlns.com/foaf/0.1/
dcterms http://purl.org/dc/terms/
skos http://www.w3.org/2004/02/skos/core#
2 changes: 2 additions & 0 deletions src/main/resources/sparql/construct.sparql
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ CONSTRUCT {
}
WHERE {
?dbr owl:sameAs ?wdr.
FILTER (!isBlank(?dbr)).
{
SELECT ?dbr ?wdr
WHERE {
Expand All @@ -17,5 +18,6 @@ WHERE {
SERVICE <http://dbpedia.org/sparql> {
?dbr ?dbp ?dbo.
FILTER(!strstarts(str(?dbo),"http://www.wikidata.org/")&&!strstarts(str(?dbo),"http://wikidata.dbpedia.org/")).
FILTER (!isBlank(?dbo)).
}
}
2 changes: 1 addition & 1 deletion src/main/resources/www/annotator.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ getData.onreadystatechange = function(){
let tbody = data.getElementsByTagName("tbody").item(0);
data.removeChild(thead);
data.removeChild(tbody);
data.getElementsByTagName("caption").item(0).innerHTML="<strong>You are currently annotating resource:</strong> &lt;" + triples[0].subject + "&gt;";
data.getElementsByTagName("caption").item(0).innerHTML="<strong>You are currently annotating resource:</strong> " + triples[0].subject;
try{
for(var i=0;i<triples.length;i++){
let triple = triples[i];
Expand Down

0 comments on commit 97e8355

Please sign in to comment.