Skip to content

Commit

Permalink
Merge branch 'master' of github.com:binary-array-ld/net.binary_array_…
Browse files Browse the repository at this point in the history
…ld.bald
  • Loading branch information
simonoakesepimorphics committed Aug 27, 2021
2 parents f9626bc + f96aaf3 commit 7a2c799
Show file tree
Hide file tree
Showing 69 changed files with 1,076 additions and 92 deletions.
36 changes: 36 additions & 0 deletions binary-array-ld-api/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>binary-array-ld</artifactId>
<groupId>net.binary-array-ld</groupId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>binary-array-ld-api</artifactId>
<packaging>jar</packaging>

<name>Binary Array Linked Data - API</name>
<description>API for Binary Array LD functionality.</description>

<dependencies>
<!-- LIB -->
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-core</artifactId>
<version>${jena.version}</version>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
27 changes: 27 additions & 0 deletions binary-array-ld-api/src/main/kotlin/net/bald/Converter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package net.bald

import org.apache.jena.rdf.model.Model
import java.net.URI

/**
* A binary array to linked data converter.
*/
interface Converter {
/**
* Convert a binary array file to a linked data graph.
* @param input The location of the NetCDF binary array file to convert.
* @param uri The URI that identifies the binary array.
* @param contexts The location of files containing JSON-LD contexts.
* @param aliases The location of files containing alias definitions.
* @param downloadUrl The URL from which the NetCDF file can be downloaded, if one exists. Otherwise, null.
* @return The linked data graph.
*/
fun convert(
input: URI,
uri: String? = null,
contexts: List<URI>? = null,
aliases: List<URI>? = null,
downloadUrl: String? = null
): Model
}

10 changes: 10 additions & 0 deletions binary-array-ld-cli/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@
<groupId>org.apache.jena</groupId>
<artifactId>jena-arq</artifactId>
<version>${jena.version}</version>
<exclusions>
<exclusion>
<artifactId>jackson-core</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-databind</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>net.binary-array-ld</groupId>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package net.bald

import net.bald.alias.AliasDefinition
import net.bald.context.ModelContext
import net.bald.alias.ModelAliasDefinition
import net.bald.model.ModelBinaryArrayConverter
import net.bald.netcdf.NetCdfBinaryArray
import net.bald.netcdf.NetCdfLdConverter
import org.apache.commons.cli.DefaultParser
import org.apache.commons.cli.HelpFormatter
import org.apache.commons.cli.Options
import org.apache.jena.rdf.model.ModelFactory
import java.io.*
import java.io.File
import java.io.FilterOutputStream
import java.io.OutputStream
import java.net.URI
import kotlin.system.exitProcess

/**
Expand Down Expand Up @@ -40,32 +38,20 @@ class BinaryArrayConvertCli {
}

private fun doRun(opts: CommandLineOptions) {
val context = context(opts.contextLocs)
val alias = alias(opts.aliasLocs)
val inputLoc = opts.inputLoc ?: throw IllegalArgumentException("First argument is required: NetCDF file to convert.")
val ba = NetCdfBinaryArray.create(inputLoc, opts.uri, context, alias, opts.downloadUrl)
val model = ba.use(ModelBinaryArrayConverter::convert)
val input = opts.inputLoc?.let(::URI) ?: throw IllegalArgumentException("First argument is required: NetCDF file to convert.")
val uri = opts.uri
val context = opts.contextLocs.map(::URI)
val alias = opts.aliasLocs.map(::URI)
val downloadUrl = opts.downloadUrl

val model = NetCdfLdConverter.getInstance().convert(input, uri, context, alias, downloadUrl)
val outputFormat = opts.outputFormat ?: "ttl"

modelOutput(opts.outputLoc).use { output ->
model.write(output, outputFormat)
}
}

private fun context(contextLocs: List<String>): ModelContext {
val prefixes = contextLocs.map { contextLoc ->
ModelFactory.createDefaultModel().read(contextLoc, "json-ld")
}

return ModelContext.create(prefixes)
}

private fun alias(aliasLocs: List<String>): AliasDefinition {
return ModelFactory.createDefaultModel().apply {
aliasLocs.forEach(::read)
}.let(ModelAliasDefinition::create)
}

private fun options(opts: Options, vararg args: String): CommandLineOptions {
return DefaultParser().parse(opts, args).let(::CommandLineOptions)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package net.bald

import bald.spec.BaseSpecTest
import net.bald.netcdf.NetCdfLdConverter

class BinaryArrayConvertSpecTest: BaseSpecTest() {
override val converter: Converter = NetCdfLdConverter.getInstance()
}
40 changes: 23 additions & 17 deletions binary-array-ld-demo/src/main/java/net/bald/NetCdfConvertJava.java
Original file line number Diff line number Diff line change
@@ -1,45 +1,51 @@
package net.bald;

import net.bald.alias.AliasDefinition;
import net.bald.context.ModelContext;
import net.bald.alias.ModelAliasDefinition;
import net.bald.model.ModelBinaryArrayConverter;
import net.bald.netcdf.NetCdfBinaryArray;
import net.bald.netcdf.NetCdfLdConverter;
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
import org.apache.jena.shared.PrefixMapping;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URI;
import java.util.Arrays;

/**
* Demonstration of how to call the API in Java code.
*/
public class NetCdfConvertJava {
public static void convert() throws Exception {
BinaryArray ba = NetCdfBinaryArray.create("/path/to/input.nc", "http://test.binary-array-ld.net/example");
Model model = ModelBinaryArrayConverter.convert(ba);
URI input = new File("/path/to/input.nc").toURI();
Model model = NetCdfLdConverter.Companion.getInstance().convert(input, "http://test.binary-array-ld.net/example", null, null, null);

try (OutputStream output = new FileOutputStream("/path/to/output.ttl")) {
model.write(output, "ttl");
}
}

public static void convertWithExternalPrefixes() throws Exception {
PrefixMapping prefix = ModelFactory.createDefaultModel().read("/path/to/context.json", "json-ld");
ModelContext context = ModelContext.create(prefix);
BinaryArray ba = NetCdfBinaryArray.create("/path/to/input.nc", "http://test.binary-array-ld.net/example", context, null, null);
Model model = ModelBinaryArrayConverter.convert(ba);
URI input = new File("/path/to/input.nc").toURI();
URI context = new File("/path/to/context.json").toURI();
Model model = NetCdfLdConverter.Companion.getInstance().convert(input, "http://test.binary-array-ld.net/example", Arrays.asList(context), null, null);

try (OutputStream output = new FileOutputStream("/path/to/output.ttl")) {
model.write(output, "ttl");
}
}

public static void convertWithAliases() throws Exception {
Model aliasModel = ModelFactory.createDefaultModel().read("/path/to/alias.ttl", "ttl");
AliasDefinition alias = ModelAliasDefinition.create(aliasModel);
BinaryArray ba = NetCdfBinaryArray.create("/path/to/input.nc", "http://test.binary-array-ld.net/example", null, alias, null);
Model model = ModelBinaryArrayConverter.convert(ba);
URI input = new File("/path/to/input.nc").toURI();
URI alias = new File("/path/to/alias.ttl").toURI();
Model model = NetCdfLdConverter.Companion.getInstance().convert(input, "http://test.binary-array-ld.net/example", null, Arrays.asList(alias), null);

try (OutputStream output = new FileOutputStream("/path/to/output.ttl")) {
model.write(output, "ttl");
}
}

public static void convertWithDownloadUrl() throws Exception {
String downloadUrl = "http://test.binary-array-ld.net/download/netcdf.nc";
URI input = new File("/path/to/input.nc").toURI();
Model model = NetCdfLdConverter.Companion.getInstance().convert(input, "http://test.binary-array-ld.net/example", null, null, downloadUrl);

try (OutputStream output = new FileOutputStream("/path/to/output.ttl")) {
model.write(output, "ttl");
Expand Down
12 changes: 12 additions & 0 deletions binary-array-ld-lib/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@

<dependencies>
<!-- LIB -->
<dependency>
<groupId>net.binary-array-ld</groupId>
<artifactId>binary-array-ld-api</artifactId>
<version>${project.parent.version}</version>
</dependency>
<dependency>
<groupId>org.apache.jena</groupId>
<artifactId>jena-core</artifactId>
Expand Down Expand Up @@ -47,6 +52,13 @@
<plugin>
<groupId>org.jetbrains.dokka</groupId>
<artifactId>dokka-maven-plugin</artifactId>
<configuration>
<externalDocumentationLinks>
<link>
<url>http://kotlin.binary-array-ld.net/javadoc/binary-array-ld-api</url>
</link>
</externalDocumentationLinks>
</configuration>
</plugin>
</plugins>
</build>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.bald.alias
package net.bald.model

import net.bald.alias.AliasDefinition
import net.bald.vocab.BALD
import org.apache.jena.rdf.model.*
import org.apache.jena.riot.RDFLanguages
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
package net.bald.model

import net.bald.BinaryArray
import net.bald.vocab.BALD
import org.apache.jena.rdf.model.Literal
import org.apache.jena.rdf.model.Model
import org.apache.jena.rdf.model.Resource
import org.apache.jena.rdf.model.ResourceFactory.createResource
import org.apache.jena.rdf.model.ResourceFactory.createStringLiteral
import org.apache.jena.shared.PrefixMapping
import org.apache.jena.vocabulary.DCAT
import org.apache.jena.vocabulary.DCTerms
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package net.bald.model
import net.bald.BinaryArray
import org.apache.jena.rdf.model.Model
import org.apache.jena.rdf.model.ModelFactory
import org.apache.jena.shared.PrefixMapping

/**
* API for converting a [BinaryArray] to a linked data [Model].
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@ package net.bald.model
import net.bald.Dimension
import net.bald.Var
import net.bald.vocab.BALD
import org.apache.jena.datatypes.xsd.XSDDatatype
import org.apache.jena.rdf.model.Literal
import org.apache.jena.rdf.model.Resource
import org.apache.jena.rdf.model.ResourceFactory
import org.apache.jena.rdf.model.ResourceFactory.createTypedLiteral
import org.apache.jena.vocabulary.RDF

class ModelReferenceBuilder(
Expand Down Expand Up @@ -40,13 +41,15 @@ class ModelReferenceBuilder(

fun shape(dimIds: List<String>): Iterator<Literal> {
return dimIds.asSequence().map { dimId ->
dimsById[dimId]?.size?.let(ResourceFactory::createTypedLiteral) ?: unitNode
dimsById[dimId]?.size?.let { size ->
createTypedLiteral(size.toString(), XSDDatatype.XSDinteger)
} ?: unitNode
}.iterator()
}
}

companion object {
private val unitNode = ResourceFactory.createTypedLiteral(1)
private val unitNode = createTypedLiteral("1", XSDDatatype.XSDinteger)
}

open class Factory {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import net.bald.AttributeSource
import net.bald.Dimension
import net.bald.Var
import net.bald.vocab.BALD
import org.apache.jena.rdf.model.*
import org.apache.jena.datatypes.xsd.XSDDatatype
import org.apache.jena.rdf.model.RDFNode
import org.apache.jena.rdf.model.Resource
import org.apache.jena.rdf.model.ResourceFactory.createTypedLiteral

open class ModelVarBuilder(
Expand All @@ -24,9 +26,7 @@ open class ModelVarBuilder(

private fun addAttributes(source: AttributeSource, resource: Resource) {
val builder = attrFct.forResource(resource)
source.attributes().filterNot { attr ->
BALD.references.hasURI(attr.uri)
}.forEach(builder::addAttribute)
source.attributes().forEach(builder::addAttribute)
}

private fun addCoordinateRange(v: Var, resource: Resource) {
Expand Down Expand Up @@ -79,7 +79,7 @@ open class ModelVarBuilder(
}

private fun size(dim: Dimension): RDFNode {
return createTypedLiteral(dim.size)
return createTypedLiteral(dim.size.toString(), XSDDatatype.XSDinteger)
}

override fun addReferences(resource: Resource) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package net.bald.model

import net.bald.alias.ModelAliasDefinition
import net.bald.vocab.BALD
import org.apache.jena.rdf.model.ModelFactory
import org.apache.jena.rdf.model.ResourceFactory.createProperty
Expand All @@ -9,7 +8,6 @@ import org.apache.jena.vocabulary.RDFS
import org.apache.jena.vocabulary.SKOS
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import java.lang.IllegalStateException
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertNull
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ import com.nhaarman.mockitokotlin2.mock
import com.nhaarman.mockitokotlin2.stub
import net.bald.Attribute
import org.apache.jena.rdf.model.ModelFactory
import org.apache.jena.rdf.model.ResourceFactory.*
import org.apache.jena.vocabulary.RDF
import org.apache.jena.rdf.model.ResourceFactory.createPlainLiteral
import org.apache.jena.rdf.model.ResourceFactory.createResource
import org.apache.jena.vocabulary.RDFS
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Test

class ModelAttributeBuilderTest {
private val uri = "http://test.binary-array-ld.net/example/var0"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import org.apache.jena.shared.PrefixMapping
import org.apache.jena.vocabulary.SKOS
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
import java.lang.IllegalArgumentException
import kotlin.test.assertEquals

class ModelBinaryArrayBuilderTest {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import org.apache.jena.shared.PrefixMapping
import org.apache.jena.vocabulary.DCTerms
import org.apache.jena.vocabulary.RDF
import org.apache.jena.vocabulary.SKOS
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Test

/**
* Test the full Binary Array -> Linked Data conversion process using a mock binary array.
Expand Down
Loading

0 comments on commit 7a2c799

Please sign in to comment.