Skip to content

Commit 7f46ab1

Browse files
Add Model context concept combining prefix mappings and aliases
Move alias definition class to context package
1 parent e08a5d5 commit 7f46ab1

File tree

11 files changed

+166
-7
lines changed

11 files changed

+166
-7
lines changed

binary-array-ld-demo/src/main/java/net/bald/NetCdfConvertJava.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.bald;
22

33
import net.bald.alias.AliasBinaryArray;
4-
import net.bald.alias.AliasDefinition;
4+
import net.bald.context.AliasDefinition;
55
import net.bald.model.ModelAliasDefinition;
66
import net.bald.context.ContextBinaryArray;
77
import net.bald.model.ModelBinaryArrayConverter;

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasAttribute.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package net.bald.alias
22

33
import net.bald.Attribute
4+
import net.bald.context.AliasDefinition
45
import org.apache.jena.rdf.model.RDFNode
5-
import org.apache.jena.rdf.model.ResourceFactory
66

77
/**
88
* Decorator for [Attribute] which supports attribute aliasing.

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasAttributeSource.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.bald.alias
22

33
import net.bald.*
4+
import net.bald.context.AliasDefinition
45
import org.apache.jena.shared.PrefixMapping
56

67
/**

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasBinaryArray.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package net.bald.alias
22

33
import net.bald.BinaryArray
44
import net.bald.Container
5+
import net.bald.context.AliasDefinition
56
import org.apache.jena.shared.PrefixMapping
67

78
/**

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasContainer.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package net.bald.alias
22

33
import net.bald.Container
44
import net.bald.Var
5+
import net.bald.context.AliasDefinition
56

67
/**
78
* Decorator for [Container] which supports attribute aliasing.

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasVar.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package net.bald.alias
22

33
import net.bald.Var
4+
import net.bald.context.AliasDefinition
45

56
/**
67
* Decorator for [Var] which supports attribute aliasing.

binary-array-ld-lib/src/main/kotlin/net/bald/alias/AliasDefinition.kt renamed to binary-array-ld-lib/src/main/kotlin/net/bald/context/AliasDefinition.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package net.bald.alias
1+
package net.bald.context
22

33
import org.apache.jena.rdf.model.Property
44
import org.apache.jena.rdf.model.Resource
@@ -20,4 +20,14 @@ interface AliasDefinition {
2020
* @return The corresponding alias, if it exists. Otherwise, null.
2121
*/
2222
fun resource(identifier: String): Resource?
23+
24+
object Empty: AliasDefinition {
25+
override fun property(identifier: String): Property? {
26+
return null
27+
}
28+
29+
override fun resource(identifier: String): Resource? {
30+
return null
31+
}
32+
}
2333
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package net.bald.context
2+
3+
import org.apache.jena.rdf.model.Property
4+
import org.apache.jena.rdf.model.Resource
5+
import org.apache.jena.shared.PrefixMapping
6+
7+
/**
8+
* TODO
9+
* @see AliasDefinition
10+
*/
11+
interface ModelContext: AliasDefinition {
12+
/**
13+
* TODO
14+
*/
15+
val prefixMapping: PrefixMapping
16+
17+
object Empty: ModelContext {
18+
override val prefixMapping: PrefixMapping get() = PrefixMapping.Factory.create()
19+
override fun property(identifier: String): Property? = null
20+
override fun resource(identifier: String): Resource? = null
21+
}
22+
23+
class Base(
24+
override val prefixMapping: PrefixMapping,
25+
private val alias: AliasDefinition
26+
): ModelContext {
27+
override fun property(identifier: String): Property? {
28+
return alias.property(identifier)
29+
}
30+
31+
override fun resource(identifier: String): Resource? {
32+
return alias.resource(identifier)
33+
}
34+
}
35+
36+
companion object {
37+
/**
38+
* Instantiate a wrapper for the external elements which contextualise a binary array conversion.
39+
* @throws IllegalArgumentException If there are conflicting definitions in the prefix mappings.
40+
* @param prefixes The contextual prefix mappings.
41+
* @param alias The contextual alias definition.
42+
* @return The [ModelContext].
43+
*/
44+
@JvmStatic
45+
fun create(prefixes: List<PrefixMapping>, alias: AliasDefinition? = null): ModelContext {
46+
val prefix = if (prefixes.isEmpty()) {
47+
PrefixMapping.Factory.create()
48+
} else {
49+
prefixes.reduce { acc, context ->
50+
val accKeys = acc.nsPrefixMap.keys
51+
val contextKeys = context.nsPrefixMap.keys
52+
val conflicts = accKeys.intersect(contextKeys).filterNot { prefix ->
53+
acc.getNsPrefixURI(prefix) == context.getNsPrefixURI(prefix)
54+
}
55+
56+
if (conflicts.isEmpty()) {
57+
acc.setNsPrefixes(context)
58+
} else {
59+
throw IllegalArgumentException("The namespace prefixes $conflicts have conflicting definitions in contexts.")
60+
}
61+
}
62+
}
63+
return create(prefix, alias)
64+
}
65+
66+
/**
67+
* @see create
68+
*/
69+
@JvmStatic
70+
fun create(prefix: PrefixMapping, alias: AliasDefinition? = null): ModelContext {
71+
return Base(prefix, alias ?: AliasDefinition.Empty)
72+
}
73+
}
74+
}

binary-array-ld-lib/src/main/kotlin/net/bald/model/ModelAliasDefinition.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
package net.bald.model
22

3-
import net.bald.alias.AliasDefinition
3+
import net.bald.context.AliasDefinition
44
import org.apache.jena.rdf.model.Model
55
import org.apache.jena.rdf.model.Property
66
import org.apache.jena.rdf.model.Resource
7-
import org.apache.jena.rdf.model.ResourceFactory
87
import org.apache.jena.rdf.model.ResourceFactory.createProperty
98
import org.apache.jena.vocabulary.DCTerms
109
import org.apache.jena.vocabulary.OWL

binary-array-ld-lib/src/test/kotlin/net/bald/alias/AliasAttributeTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ package net.bald.alias
22

33
import com.nhaarman.mockitokotlin2.*
44
import net.bald.Attribute
5+
import net.bald.context.AliasDefinition
56
import org.apache.jena.rdf.model.RDFNode
6-
import org.apache.jena.rdf.model.ResourceFactory
77
import org.apache.jena.rdf.model.ResourceFactory.*
8-
import org.junit.jupiter.api.*
8+
import org.junit.jupiter.api.Test
99
import kotlin.test.assertEquals
1010
import kotlin.test.assertNull
1111

0 commit comments

Comments
 (0)