Commit 1e5a08e6 authored by Jonas Waeber's avatar Jonas Waeber
Browse files

Fix creation relation mapping

parent 07c79224
Pipeline #11575 passed with stages
in 4 minutes and 57 seconds
......@@ -26,7 +26,7 @@ interface IResource {
fun addSkosConcept(type: String, properties: List<Pair<String, Literal>>)
fun addPlace(type: String, properties: List<Pair<String, Literal>>)
fun addDate(property: String, value: String)
fun addCreationRelation(type: String, agentType: String, properties: List<Pair<String, Literal>>)
fun addCreationRelation(relationType: String, relationName: List<Literal>, agentClass: String, properties: List<Pair<String, Literal>>)
fun addRule(type: String, value: List<Pair<String, List<Literal>>>)
fun addAgent(relation: String, agentType: String, properties: List<Pair<String, Literal>>)
fun langLiteral(text: String, language: String): Literal
......
......@@ -110,13 +110,20 @@ abstract class RecordResource(institutionId: String) : IResource {
resource.addProperty(KEYS.keysToPropertyMap[property], blank)
}
override fun addCreationRelation(type: String, agentType: String, properties: List<Pair<String, Literal>>) {
override fun addCreationRelation(relationType: String, relationName: List<Literal>, agentClass: String, properties: List<Pair<String, Literal>>) {
val relation = model.createResource()
relation.addProperty(RICO.type, type)
relation.addProperty(RICO.type, KEYS.relationTypeMap[relationType])
if (relationName.isEmpty()) {
relation.addProperty(RICO.name, "DUMMY-VALUE")
} else {
relationName.forEach {
relation.addProperty(RICO.name, it)
}
}
relation.addProperty(RICO.creationRelationHasSource, resource)
relation.addProperty(RDF.type, RICO.CreationRelation)
val agent = model.createResource()
agent.addProperty(RDF.type, KEYS.agentTypeMap[agentType])
agent.addProperty(RDF.type, KEYS.agentTypeMap[agentClass])
agent.addProperty(RICO.agentIsTargetOfCreationRelation, relation)
for (property in properties) {
agent.addProperty(KEYS.keysToPropertyMap[property.first], property.second)
......
......@@ -71,7 +71,15 @@ object KEYS {
// Agents
const val creators = "creators"
const val creatorType = "creatorType"
private const val creator = "creator"
const val contributors = "contributors"
private const val contributor = "contributor"
const val relationName = "relationName"
val relationTypeMap = mapOf(
Pair(creators, creator),
Pair(contributors, contributor)
)
const val producer = "producers"
const val relatedAgents = "relatedAgents"
......@@ -93,7 +101,7 @@ object KEYS {
Pair(corporateBody, RICO.CorporateBody),
Pair(person, RICO.Person)
)
val allowedAgentProperties = listOf("name")
val allowedAgentProperties = listOf("relationName", "name")
// skos:Concept
......
......@@ -125,7 +125,7 @@ class MappingConfig(directory: String) {
)
else -> throw InvalidMappingException("Dates only allow simple field assignment. Invalid mapping ${entry.key}.")
}
KEYS.producer, KEYS.relatedAgents, KEYS.creators, KEYS.publishedBy ->
KEYS.producer, KEYS.relatedAgents, KEYS.creators, KEYS.contributors, KEYS.publishedBy ->
recordFieldMappers.addAll(buildAgentMapper(key, entry.value))
else -> throw InvalidMappingException("Unknown key '$key' in record mapping.")
}
......@@ -205,13 +205,13 @@ class MappingConfig(directory: String) {
}
private fun buildAgentMapper(key: String, value: Any?): List<IFieldMapper> {
when (value) {
return when (value) {
is Map<*, *> -> {
return listOf(extractAgentTypeMapper(key, value as Map<String, Any>))
extractAgentTypeMapper(key, value as Map<String, Any>)
}
is List<*> -> {
return value.map {
return@map extractAgentTypeMapper(key, it as Map<String, Any>)
value.flatMap {
extractAgentTypeMapper(key, it as Map<String, Any>)
}
}
else -> throw InvalidMappingException("The section ${KEYS.creators} expects a map or list.")
......@@ -263,39 +263,14 @@ class MappingConfig(directory: String) {
}
}
private fun extractAgentTypeMapper(key: String, value: Map<String, Any>): IFieldMapper {
val mapper = when {
value.containsKey(KEYS.agent) -> {
extractEntityFields<AgentFieldMapper>(
KEYS.agent,
value[KEYS.agent] as Map<String, Any>,
KEYS.allowedAgentProperties
)
}
value.containsKey(KEYS.corporateBody) -> {
extractEntityFields<AgentFieldMapper>(
KEYS.corporateBody,
value[KEYS.corporateBody] as Map<String, Any>,
KEYS.allowedAgentProperties
)
}
value.containsKey(KEYS.person) -> {
extractEntityFields<AgentFieldMapper>(
KEYS.person,
value[KEYS.person] as Map<String, Any>,
KEYS.allowedAgentProperties
)
}
else -> {
throw InvalidMappingException("Creation relation requires a field agent, corporateBody or person.")
}
}
(mapper as AgentFieldMapper).property = key
if (value.containsKey(KEYS.creatorType)) {
mapper.creationType = parseSimpleAnnotationField(KEYS.creatorType, value.entries.first { i -> i.key == KEYS.creatorType }.value)
private fun extractAgentTypeMapper(key: String, value: Map<String, Any>): List<IFieldMapper> {
return value.entries.map {
extractEntityFields<AgentFieldMapper>(it.key, it.value as Map<String, Any>, KEYS.allowedAgentProperties)
}.map {
it as AgentFieldMapper
it.sourceKey = key
it
}
return mapper
}
private fun buildPlaceMapper(key: String, value: Any?): List<IFieldMapper> {
......
......@@ -19,25 +19,20 @@
package org.memobase.mapping.mappers
import org.memobase.builder.IResource
import org.memobase.mapping.fields.ConstantField
import org.memobase.mapping.fields.MappedAnnotationField
import org.memobase.mapping.fields.SimpleAnnotationField
import org.memobase.mapping.KEYS
class AgentFieldMapper : TypeFieldMapper() {
var creationType: SimpleAnnotationField? = null
var property: String = ""
var sourceKey: String = ""
override fun apply(source: Map<String, String>, subject: IResource) {
translateProperties(source, subject)
if (properties.size > 0) {
when (val creationTypeField = creationType) {
is ConstantField -> subject.addCreationRelation(creationTypeField.constant, type, properties)
is MappedAnnotationField ->
source[creationTypeField.key].let {
if (it != null) {
subject.addCreationRelation(it, type, properties)
}
}
else -> subject.addAgent(property, type, properties)
val relationNameField = properties.filter { it.first == KEYS.relationName }
val otherFields = properties.filterNot { it.first == KEYS.relationName }
if (relationNameField.isEmpty() && KEYS.agentPropertiesMap.containsKey(sourceKey)) {
subject.addAgent(sourceKey, agentClassType, otherFields)
} else {
val relationNameLiterals = relationNameField.map { it.second }
subject.addCreationRelation(sourceKey, relationNameLiterals, agentClassType, otherFields)
}
}
}
......
......@@ -24,7 +24,7 @@ class PlaceFieldMapper : TypeFieldMapper() {
override fun apply(source: Map<String, String>, subject: IResource) {
translateProperties(source, subject)
if (properties.size > 0) {
subject.addPlace(type, properties)
subject.addPlace(agentClassType, properties)
}
}
}
\ No newline at end of file
......@@ -25,7 +25,7 @@ class SkosConceptFieldMapper : TypeFieldMapper() {
override fun apply(source: Map<String, String>, subject: IResource) {
translateProperties(source, subject)
if (properties.any { value -> SKOS.labelProperties.contains(value.first) }) {
subject.addSkosConcept(type, properties)
subject.addSkosConcept(agentClassType, properties)
}
}
}
\ No newline at end of file
......@@ -27,11 +27,11 @@ import org.memobase.mapping.fields.ListField
import org.memobase.mapping.fields.MappedAnnotationField
abstract class TypeFieldMapper : IFieldMapper {
protected var type = ""
protected var agentClassType = ""
private val fields = mutableListOf<ConfigField>()
fun setFields(type: String, fields: List<ConfigField>) {
this.type = type
this.agentClassType = type
this.fields.clear()
this.fields.addAll(fields)
}
......
......@@ -237,6 +237,20 @@ class Tests {
"Successfully created a record from source."
)
)
),
KafkaTestParams(
7,
"ID_1",
listOf(
"https://memobase.ch/record/TEST-ID_1"
),
listOf(
Report(
"https://memobase.ch/record/TEST-ID_1",
"SUCCESS",
"Successfully created a record from source."
)
)
)
)
......
app:
institutionId: "TEST"
recordSetId: "TEST_RECORD_SET"
configs: src/test/resources/kafkaTests/7/config
kafka:
streams:
bootstrap.servers: localhost:12345
application.id: test-clinet-1234
topic:
in: test-topic-in
out: test-topic-out
process: test-topic-process
\ No newline at end of file
......@@ -35,22 +35,6 @@ record:
- corporateBody:
name:
de: publishedBy
creators: # a list of creators (with creationRelation rico:type)
- creatorType:
const: "Fotograf"
corporateBody:
name:
de: AutorIn
- creatorType:
const: "Auftraggeber"
agent:
name:
de: auftraggeber
- creatorType:
const: "Architekt"
agent:
name:
de: architekt
hasFindingAid: verwandte_dokumente # rdau:P60262 "has finding aid" (provisional field)
creationDate: erstellung # blank node rico:DateSet with rico:expressedDate
relatedPlaces: # blank node rico:Place with relation dcterms:spatial
......
......@@ -8,22 +8,6 @@ record:
de: beschreibung
scopeAndContent: # rico:scopeAndContent
de: kontext
creators: # a list of creators (with creationRelation rico:type)
- creatorType:
const: "Autor"
person:
name:
de: autor
- creatorType:
const: "Regie"
person:
name:
de: regie
- creatorType:
const: "Kamera"
person:
name:
de: kamera
producers: # rdau:P60441 has producer
corporateBody:
name:
......
......@@ -33,9 +33,6 @@
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#heldBy> <https://memobase.ch/institution/TEST> .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#isPartOf> <https://memobase.ch/recordSet/TEST_RECORD_SET> .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#scopeAndContent> "Kontext text"@de .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#title> "Das ist ein Titel"@de .
<https://memobase.ch/record/TEST-Sig_Han_1293> <https://www.ica.org/standards/RiC/ontology#type> "Tonbildschau" .
......@@ -45,16 +42,10 @@ _:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Agent> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CorporateBody> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Place> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
......@@ -65,15 +56,6 @@ _:B <http://www.w3.org/2004/02/skos/core#editorialNote> "Ursprungsfeld: Genre" .
_:B <http://www.w3.org/2004/02/skos/core#editorialNote> "Ursprungsfeld: Sachthemen" .
_:B <http://www.w3.org/2004/02/skos/core#prefLabel> "name"@de .
_:B <http://www.w3.org/2004/02/skos/core#prefLabel> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-Sig_Han_1293> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-Sig_Han_1293> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-Sig_Han_1293> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "Sig Han 1293" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/instantiation/digital/TEST-Sig_Han_1293-1" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/instantiation/physical/TEST-Sig_Han_1293-0" .
......@@ -83,9 +65,6 @@ _:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "name"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "person-körperschaft"@de .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
......@@ -94,9 +73,6 @@ _:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/instantiation/digital/TEST-Sig_Han_1293-1> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/instantiation/physical/TEST-Sig_Han_1293-0> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/instantiation/physical/TEST-Sig_Han_1293-0> .
_:B <https://www.ica.org/standards/RiC/ontology#type> "Autor" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "Kamera" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "Regie" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "callNumber" .
......
record:
uri: id
type:
const: Foto
creators:
person:
relationName:
const: Fotograf
name: fotograf
corporateBody:
relationName:
de: atelier_relation
name: atelier
agent:
relationName:
de: Agent
name: agent
contributors:
person:
relationName:
de: Fotograf
name: fotograf
corporateBody:
relationName:
de: Atelier
name: atelier
agent:
relationName:
de: Agent
name: agent
{
"id": "ID_1",
"fotograf": "person",
"atelier": "corporateBody",
"agent": "agent"
}
\ No newline at end of file
<https://memobase.ch/record/TEST-ID_1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Record> .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#heldBy> <https://memobase.ch/institution/TEST> .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#isPartOf> <https://memobase.ch/recordSet/TEST_RECORD_SET> .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B .
<https://memobase.ch/record/TEST-ID_1> <https://www.ica.org/standards/RiC/ontology#type> "Foto" .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Agent> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Agent> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CorporateBody> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CorporateBody> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/TEST-ID_1> .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/record/TEST-ID_1" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "DUMMY-VALUE" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "DUMMY-VALUE" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "DUMMY-VALUE" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "DUMMY-VALUE" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "DUMMY-VALUE" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "Fotograf" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "agent" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "agent" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "corporateBody" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "corporateBody" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "person" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "person" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "contributor" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "contributor" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "contributor" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "creator" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "creator" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "creator" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "main" .
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment