Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 24 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,29 @@ There are Message Properties which can be set in the message.properties file:
| project.form.agreement | The text which will be displayed as a legend for the agreement in the editor | Einverständniserklärung |
| project.form.validation.agreement | The text which will be displayed as a validation error if the agreement is not accepted | Sie müssen der Einverständniserklärung zustimmen. |

### Codemeta

#### Metadata
Codemeta metadata view and export can be enabled via mycore.properties:

```properties
MIR.Layout.End=%MIR.Layout.End%,export-extension
MIR.Layout.Start=%MIR.Layout.Start%,reposis-metadata-extension
MIR.Layout.Display.Div=%MIR.Layout.Display.Div%,reposis-export-extension
MCR.URIResolver.xslImports.modsmeta=%MCR.URIResolver.xslImports.modsmeta%,metadata/reposis-export-extension.xsl,metadata/reposis-metadata-extension.xsl
```

#### OAI
OAI Codemeta set can be enabled via mycore.properties:

```properties
MCR.ContentTransformer.oai-codemeta.Stylesheet=xslt/mycoreobject2codemeta-jsonld.xsl,xslt/codemeta-jsonld2rdf.xsl
MCR.ContentTransformer.oai-codemeta.TransformerFactoryClass=net.sf.saxon.TransformerFactoryImpl
MCR.OAIDataProvider.MetadataFormat.codemeta.Schema=http://www.openarchives.org/OAI/2.0/rdf.xsd
MCR.OAIDataProvider.MetadataFormat.codemeta.Namespace=http://www.w3.org/1999/02/22-rdf-syntax-ns#
MCR.OAIDataProvider.OAI2.Sets.codemeta.URI=webapp:oai/set_codemeta.xml
MCR.OAIDataProvider.OAI2.Sets.codemeta.Query=mods.genre:software
```

## Development

Expand All @@ -291,4 +314,4 @@ MCR.Developer.Resource.Override=/path/to/reposis_common/src/main/resources
MCR.LayoutService.LastModifiedCheckPeriod=0
MCR.UseXSLTemplateCache=false
MCR.SASS.DeveloperMode=true
```
```
51 changes: 42 additions & 9 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -105,20 +105,30 @@
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.jsonld-java</groupId>
<artifactId>jsonld-java</artifactId>
<version>0.13.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<!-- enable theese if you write code using them
<dependency>
<groupId>org.mycore</groupId>
<artifactId>mycore-pi</artifactId>
</dependency>
-->
<dependency>
<groupId>org.mycore</groupId>
<artifactId>mycore-pi</artifactId>
</dependency>
-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
Expand All @@ -127,6 +137,14 @@
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-model</artifactId>
</dependency>
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-model-api</artifactId>
</dependency>
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom2</artifactId>
Expand All @@ -151,10 +169,25 @@
<groupId>org.mycore</groupId>
<artifactId>mycore-user2</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-rio-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-rio-jsonld</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.eclipse.rdf4j</groupId>
<artifactId>rdf4j-rio-rdfxml</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package de.gbv.reposis.codemeta;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

import javax.xml.transform.Source;
import javax.xml.transform.TransformerException;
import javax.xml.transform.URIResolver;

import org.apache.commons.io.IOUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.rdf4j.model.Model;
import org.eclipse.rdf4j.model.impl.LinkedHashModel;
import org.eclipse.rdf4j.rio.Rio;
import org.eclipse.rdf4j.rio.helpers.JSONLDSettings;
import org.eclipse.rdf4j.rio.helpers.StatementCollector;
import org.eclipse.rdf4j.rio.jsonld.JSONLDParser;
import org.eclipse.rdf4j.rio.rdfxml.RDFXMLWriter;
import org.jdom2.Document;
import org.jdom2.input.SAXBuilder;
import org.jdom2.transform.JDOMSource;

import com.github.jsonldjava.core.DocumentLoader;

public class CodeMetaRDFConverterResolver implements URIResolver {

private static final Logger LOGGER = LogManager.getLogger();

private static final String CODEMETA_JSONLD_PATH = "/jsonld/codemeta.jsonld";

private static final String CODEMETA_JSONLD_URL = "https://doi.org/10.5063/schema/codemeta-2.0";

/**
* Converts CodeMeta JSON-LD to RDF.
* <p>
* Syntax: <code>codemeta2rdf:{baseURI}:{json}</code>
*
* @param href the URI in the syntax above
* @param base not used
* @return a document containing the converted RDF
* @see javax.xml.transform.URIResolver
*/
@Override
public Source resolve(final String href, final String base) throws TransformerException {
final String[] hrefParts = href.split(":", 3);
if (hrefParts.length > 2) {
final String baseURI = hrefParts[1];
final String json = hrefParts[2];
try (final InputStream input = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8));
final ByteArrayOutputStream out = new ByteArrayOutputStream()) {
final String codemetaJsonld = IOUtils.resourceToString(CODEMETA_JSONLD_PATH, StandardCharsets.UTF_8);
final DocumentLoader docLoader = new DocumentLoader();
docLoader.addInjectedDoc(CODEMETA_JSONLD_URL, codemetaJsonld);
final JSONLDParser parser = new JSONLDParser();
parser.getParserConfig().set(JSONLDSettings.DOCUMENT_LOADER, docLoader);
final Model model = new LinkedHashModel();
parser.setRDFHandler(new StatementCollector(model));
if (baseURI.isEmpty()) {
parser.parse(input, null);
} else {
parser.parse(input, baseURI);
}
final RDFXMLWriter writer = new RDFXMLWriter(out);
Rio.write(model, writer);
final Document result = new SAXBuilder().build(new ByteArrayInputStream(out.toByteArray()));
return new JDOMSource(result);
} catch (Exception e) {
LOGGER.error("Unable to convert to rdf", e);
}
}
throw new IllegalArgumentException("Invalid format of uri for retrieval of json2rdf: " + href);
}
}
17 changes: 17 additions & 0 deletions src/main/java/de/gbv/reposis/util/ValidationHelper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package de.gbv.reposis.util;

import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

public class ValidationHelper {

public static boolean validateUrl(String url) {
try {
new URL(url).toURI();
} catch (MalformedURLException | URISyntaxException e) {
return false;
}
return true;
}
}
Loading