Skip to content

Commit

Permalink
multiple scopes
Browse files Browse the repository at this point in the history
  • Loading branch information
holycrab13 committed Nov 21, 2024
1 parent 5cd6667 commit b18a54e
Show file tree
Hide file tree
Showing 11 changed files with 136 additions and 36 deletions.
21 changes: 21 additions & 0 deletions config/layers/helmholtz/indexer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: "1.0"
indexMode: INDEX_SPARQL_ENDPOINT
sparqlEndpoint: http://virtuoso:8890/sparql
indexFields:
- fieldName: keyword
documentVariable: layer
type: uri
query: >
SELECT DISTINCT ?layer ?keyword WHERE {
GRAPH ?g {
?layer a <http://dataid.dbpedia.org/ns/moss#DatabusMetadataLayer> .
?layer <http://dataid.dbpedia.org/ns/moss#layerName> "helmholtz" .
?layer <http://dataid.dbpedia.org/ns/moss#content> ?content .
}
GRAPH ?content {
{
?_ <https://schema.org/keywords> ?keyword .
}
}
#VALUES#
}
7 changes: 7 additions & 0 deletions config/layers/helmholtz/template.jsonld
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"@context": {
"schema": "https://schema.org/"
},
"@id": "%DATABUS_RESOURCE%",
"schema:keywords": "helmholtz"
}
21 changes: 21 additions & 0 deletions config/layers/keyword/indexer.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
version: "1.0"
indexMode: INDEX_SPARQL_ENDPOINT
sparqlEndpoint: http://virtuoso:8890/sparql
indexFields:
- fieldName: keyword
documentVariable: layer
type: uri
query: >
SELECT DISTINCT ?layer ?keyword WHERE {
GRAPH ?g {
?layer a <http://dataid.dbpedia.org/ns/moss#DatabusMetadataLayer> .
?layer <http://dataid.dbpedia.org/ns/moss#layerName> "keyword" .
?layer <http://dataid.dbpedia.org/ns/moss#content> ?content .
}
GRAPH ?content {
{
?_ <https://schema.org/keywords> ?keyword .
}
}
#VALUES#
}
3 changes: 3 additions & 0 deletions config/layers/keyword/template.ttl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
PREFIX schema: <https://schema.org/>

<%DATABUS_RESOURCE%> schema:keywords "simple" .
24 changes: 21 additions & 3 deletions config/moss-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,36 @@ loaders:
indexer:
configPath: ./indexers/ontology-indexer.yml
layers:
- name: keyword
formatMimeType: text/turtle
templatePath: layers/keyword/template.ttl
resourceTypes:
- https://dataid.dbpedia.org/databus#Artifact
- https://dataid.dbpedia.org/databus#Group
- https://dataid.dbpedia.org/databus#Version
indexers:
- layers/keyword/indexer.yml
- name: openenergy
formatMimeType: application/ld+json
resourceType: https://dataid.dbpedia.org/databus#Version
templatePath: layers/openenergy/template.jsonld
shaclPath: layers/openenergy/shapes.shacl
resourceTypes:
- https://dataid.dbpedia.org/databus#Version
indexers:
- layers/openenergy/indexer.yml
- indexers/annotate-count-indexer.yml
- name: opentransport
formatMimeType: application/ld+json
resourceType: https://dataid.dbpedia.org/databus#Version
templatePath: layers/opentransport/template.jsonld
resourceTypes:
- https://dataid.dbpedia.org/databus#Version
indexers:
- layers/opentransport/indexer.yml
- indexers/annotate-count-indexer.yml
- indexers/annotate-count-indexer.yml
- name: helmholtz
formatMimeType: application/ld+json
templatePath: layers/helmholtz/template.jsonld
resourceTypes:
- https://dataid.dbpedia.org/databus#Artifact
indexers:
- layers/helmholtz/indexer.yml
20 changes: 11 additions & 9 deletions src/main/java/org/dbpedia/moss/GstoreConnector.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,16 +114,18 @@ public MossLayerHeader getOrCreateLayerHeader(String requestBaseURL, String laye
URL url = new URI(headerDocumentURL).toURL();
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(REQ_METHOD_GET);
connection.setRequestProperty(HEADER_ACCEPT, TEXT_TURTLE);

// Parse the response to a Jena Model
Model model = ModelFactory.createDefaultModel();
RDFParser.source(connection.getInputStream()).forceLang(language).parse(model); // forceLang(language)
connection.setRequestProperty(HEADER_ACCEPT, language.getHeaderString());

// Parse values from model
Resource layerResource = model.getResource(layerURI);
header.setCreatedTime(RDFUtils.getPropertyValue(model, layerResource, RDFUris.DCT_CREATED));
// TODO...
if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
// Parse the response to a Jena Model
Model model = ModelFactory.createDefaultModel();
RDFParser.source(connection.getInputStream()).forceLang(language).parse(model); // forceLang(language)

// Parse values from model
Resource layerResource = model.getResource(layerURI);
header.setCreatedTime(RDFUtils.getPropertyValue(model, layerResource, RDFUris.DCT_CREATED));
// TODO...
}

} catch (IOException e) {
// Layer might not exist yet.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/dbpedia/moss/MossConfiguration.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ public void validate() throws ConfigurationException {

System.out.println("Language: " + lang.toLongString());

if(layer.getResourceType() == null) {
if(layer.getResourceTypes() == null) {
throw new ConfigurationException("Resource type not specified for layer " + layer.getName() + ".");
}

Expand Down
10 changes: 5 additions & 5 deletions src/main/java/org/dbpedia/moss/indexer/MossLayer.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ public class MossLayer {

private String name;
private String formatMimeType;
private String resourceType;
private String[] resourceTypes;
private String templatePath;
private String shaclPath;
private String[] indexers;
Expand Down Expand Up @@ -33,12 +33,12 @@ public void setShaclPath(String shaclPath) {
this.shaclPath = shaclPath;
}

public String getResourceType() {
return resourceType;
public String[] getResourceTypes() {
return resourceTypes;
}

public void setResourceType(String scope) {
this.resourceType = scope;
public void setResourceTypes(String[] resourceTypes) {
this.resourceTypes = resourceTypes;
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se
layerObject.put("name", layer.getName());
layerObject.put("format", layer.getFormatMimeType());
layerObject.put("formatExtension", formatExtension);
layerObject.put("resourceType", layer.getResourceType());
layerObject.put("resourceTypes", layer.getResourceTypes());
layerObject.put("hasSHACL", layer.getShaclPath() != null);
layerObject.put("hasTemplate", layer.getTemplatePath() != null);
layers.add(layerObject);
Expand Down
43 changes: 32 additions & 11 deletions src/main/java/org/dbpedia/moss/servlets/MetadataReadServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RDFLanguages;
import org.dbpedia.moss.utils.MossEnvironment;
Expand Down Expand Up @@ -47,36 +49,55 @@ protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Se

try {

Lang requestedLanguage = RDFLanguages.contentTypeToLang(req.getHeader("Accept"));

URL url = new URI(requestURI).toURL();

HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");

// Get the response code
int responseCode = connection.getResponseCode();

if (responseCode != HttpURLConnection.HTTP_OK) {
resp.sendError(responseCode, "Failed to fetch the resource from the external server.");
return;
}

// Determine the content type based on the file extension of the request URI
// Determine the content type based on the file extension of the request URI (the content type of the response is always json -> BUG?)
String fileExtension = requestURI.substring(requestURI.lastIndexOf('.') + 1);
Lang language = RDFLanguages.fileExtToLang(fileExtension);
Lang savedLanguage = RDFLanguages.fileExtToLang(fileExtension);

// Set the content type header for the response
if(language != null) {
resp.setContentType(language.getHeaderString());
if(requestedLanguage != null) {
resp.setContentType(requestedLanguage.getHeaderString());
}

// CHECK WHETHER REQUESTED TYPE IS ACTUAL SAVED TYPE, IF NOT CONVERT
if(requestedLanguage != null && requestedLanguage != savedLanguage) {
// Load the content into a Jena Model
try (InputStream inputStream = connection.getInputStream()) {
Model model = ModelFactory.createDefaultModel();
model.read(inputStream, null, savedLanguage.getName());

// Convert and write the content to the response output stream
try (OutputStream outputStream = resp.getOutputStream()) {
// Convert the model into the requested language format and write to output
model.write(outputStream, requestedLanguage.getName());
}
}

// Read the response from the external server
try (InputStream inputStream = connection.getInputStream();
OutputStream outputStream = resp.getOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
} else {
// Read the response from the external server
try (InputStream inputStream = connection.getInputStream(); OutputStream outputStream = resp.getOutputStream()) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
}
}

} catch (MalformedURLException e) {
resp.sendError(400, "Failed to fetch the resource from the external server.");
e.printStackTrace();
Expand Down
19 changes: 13 additions & 6 deletions src/main/java/org/dbpedia/moss/servlets/MetadataWriteServlet.java
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S
private void validateResourceForLayer(String resource, MossLayer layer) {

try {
String resourceType = layer.getResourceType();
String[] resourceTypes = layer.getResourceTypes();
Model databusModel = RDFDataMgr.loadModel(resource);

Resource rdfResource = databusModel.getResource(resource);
Expand All @@ -185,14 +185,21 @@ private void validateResourceForLayer(String resource, MossLayer layer) {
if (typeNode.isResource()) {
Resource type = typeNode.asResource();
foundType = type.getURI();
if (type.getURI().equals(resourceType)) {
return;

for(int i = 0; i < resourceTypes.length; i++) {
if (type.getURI().equals(resourceTypes[i])) {
// Found a matching type!
return;
}
}


}
}

throw new IllegalArgumentException("Databus resource <" + resource + "> does not have the required type <"
+ resourceType + "> (detected type: <" + foundType + ">).");
String typesString = String.join(">, <", resourceTypes);
throw new IllegalArgumentException("Databus resource <" + resource + "> does not have one of the required types: <"
+ typesString + "> (detected type: <" + foundType + ">).");

} catch(RiotNotFoundException e) {
throw new IllegalArgumentException("Databus resource " + resource + " is not reachable");
Expand All @@ -207,7 +214,7 @@ private void validateInputForLayer(MossLayer layer, String rdfString, Lang langu
if(shaclPath == null) {
return;
}

Model shaclModel = RDFDataMgr.loadModel(shaclPath, RDFLanguages.TURTLE);

// Load the RDF data from the provided RDF string
Expand Down

0 comments on commit b18a54e

Please sign in to comment.