Unverified Commit 52ee7bc6 authored by Sebastian Schüpbach's avatar Sebastian Schüpbach
Browse files

externalise locator logic in own lib

parent 9e8efbe7
Pipeline #18866 passed with stages
in 5 minutes and 21 seconds
...@@ -26,12 +26,16 @@ lazy val root = (project in file(".")) ...@@ -26,12 +26,16 @@ lazy val root = (project in file("."))
oldStrategy(x) oldStrategy(x)
}, },
mainClass in assembly := Some("ch.memobase.App"), mainClass in assembly := Some("ch.memobase.App"),
resolvers ++= Seq(
"Memobase Utils" at "https://dl.bintray.com/memoriav/memobase"
),
libraryDependencies ++= Seq( libraryDependencies ++= Seq(
kafkaStreams, kafkaStreams,
log4jApi, log4jApi,
log4jCore, log4jCore,
log4jSlf4j, log4jSlf4j,
log4jScala, log4jScala,
mediaMetadataUtils,
scalaUri, scalaUri,
kafkaStreamsTestUtils % Test, kafkaStreamsTestUtils % Test,
scalaTest % Test scalaTest % Test
......
...@@ -30,6 +30,7 @@ object Dependencies { ...@@ -30,6 +30,7 @@ object Dependencies {
lazy val log4jCore = "org.apache.logging.log4j" % "log4j-core" % log4jV lazy val log4jCore = "org.apache.logging.log4j" % "log4j-core" % log4jV
lazy val log4jScala = "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0" lazy val log4jScala = "org.apache.logging.log4j" %% "log4j-api-scala" % "11.0"
lazy val log4jSlf4j = "org.apache.logging.log4j" % "log4j-slf4j-impl" % log4jV lazy val log4jSlf4j = "org.apache.logging.log4j" % "log4j-slf4j-impl" % log4jV
lazy val mediaMetadataUtils = "ch.memobase" %% "media-metadata-utils" % "0.1.0"
lazy val scalaTest = "org.scalatest" %% "scalatest" % scalatestV lazy val scalaTest = "org.scalatest" %% "scalatest" % scalatestV
lazy val scalaUri = "io.lemonlabs" %% "scala-uri" % "2.2.3" lazy val scalaUri = "io.lemonlabs" %% "scala-uri" % "2.2.3"
} }
/*
* media-metadata-preprocessor
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
package ch.memobase
final case class UrlParseException(private val message: String = "",
private val cause: Throwable = None.orNull)
extends Exception(message, cause)
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package ch.memobase package ch.memobase
import ch.memobase.models._ import ch.memobase.models._
import ch.memobase.LocatorExtraction._
import org.apache.kafka.streams.Topology import org.apache.kafka.streams.Topology
import org.apache.kafka.streams.scala.ImplicitConversions._ import org.apache.kafka.streams.scala.ImplicitConversions._
import org.apache.kafka.streams.scala.kstream.KStream import org.apache.kafka.streams.scala.kstream.KStream
...@@ -28,7 +29,6 @@ import org.apache.logging.log4j.scala.Logging ...@@ -28,7 +29,6 @@ import org.apache.logging.log4j.scala.Logging
class KafkaTopology extends Logging { class KafkaTopology extends Logging {
import KafkaTopologyUtils._
import Serdes._ import Serdes._
def build: Topology = { def build: Topology = {
......
/*
* media-metadata-preprocessor
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
package ch.memobase
import ch.memobase.models._
import io.lemonlabs.uri._
import org.apache.logging.log4j.scala.Logging
import scala.util.{Failure, Success, Try}
object KafkaTopologyUtils extends Logging {
private val EbucoreLocator =
"<http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator>"
private val RicoType = "<https://www.ica.org/standards/RiC/ontology#type>"
def filterEnrichableResources(
resources: List[ResourceWithLocator]
): List[ResourceWithLocator] = {
resources.filter(resource => resource.player.isInstanceOf[MemobasePlayer])
}
def getEbucoreLocators(
key: String,
msg: String
): (String, List[ResourceWithLocator]) = {
val recordType = getRecordType(msg)
val ebucoreLocators = msg
.split("(\r\n|\r|\n)")
.filter(_ contains EbucoreLocator)
.map(line => {
val elements = line.split(" ")
val resource = elements(0).substring(1, elements(0).length - 1)
val locator = elements(2).substring(1, elements(2).length - 1)
val mediaPlayer = if (isPreviewImage(resource)) {
ImageViewer
} else {
mapToMediaPlayer(locator, recordType)
}
ResourceWithLocator(key, resource, locator, mediaPlayer)
})
.toList
if (ebucoreLocators.isEmpty) {
logger.warn(
"Can't find resource locator in record. Is this a resource-less metadata object?"
)
}
(msg, ebucoreLocators)
}
private def isPreviewImage(uri: String): Boolean = uri.endsWith("/derived")
private def getRecordType(msg: String): Option[String] =
msg
.split("\r\n|\r|\n")
.collectFirst(isRecordTypeStatement)
private def isRecordTypeStatement: PartialFunction[String, String] =
new PartialFunction[String, String] {
def apply(line: String): String = line.split(" ")(2).replaceAll("\"", "")
def isDefinedAt(line: String): Boolean = {
val splitLine = line.split(" ")
splitLine(0).startsWith("<https://memobase.ch/record") &&
splitLine(1) == RicoType
}
}
//noinspection ScalaStyle
private def mapToMediaPlayer(
mediaUrl: String,
recordType: Option[String]
): MediaPlayer = {
if (mediaUrl.startsWith("sftp:")) {
getMemobasePlayerType(recordType)
} else {
getApexDomain(mediaUrl) match {
case Success(apexDomain) if apexDomain == "srgssr.ch" =>
recordType match {
case Some("Film") => SRFVideoPlayer
case Some("Radio") => SRFAudioPlayer
case Some("Ton") => SRFAudioPlayer
case Some("Tonbildschau") => SRFVideoPlayer
case Some("TV") => SRFVideoPlayer
case Some("Video") => SRFVideoPlayer
case Some(x) =>
logger.warn(
s"Unknown rico:type $x found! Setting player type to default SRFVideoPlayer"
)
SRFVideoPlayer
case None =>
logger.warn(
"No rico:type on record found! Setting player type to default SRFVideoPlayer"
)
SRFVideoPlayer
}
case Success(apexDomain) if apexDomain == "vimeo.com" => VimeoPlayer
case Success(apexDomain)
if apexDomain == "youtu.be" || apexDomain == "youtube.com" =>
YoutubePlayer
// TODO: Activate zem player as soon as it is in active use
// case Success(apexDomain) if apexDomain == "zem.ch" => ZEMPlayer
case Success(_) =>
getMemobasePlayerType(recordType)
case Failure(_) =>
logger.warn(
s"Couldn't identify apex domain of url $mediaUrl. Setting player type to default MemobasePlayer"
)
getMemobasePlayerType(recordType)
}
}
}
private def getMemobasePlayerType(recordType: Option[String]): MediaPlayer =
recordType match {
case Some("Film") => VideoPlayer
case Some("Foto") => ImageViewer
case Some("Radio") => AudioPlayer
case Some("Ton") => AudioPlayer
case Some("Tonbildschau") => VideoPlayer
case Some("TV") => VideoPlayer
case Some("Video") => VideoPlayer
case Some(x) =>
logger.warn(
s"Unknown rico:type $x found! Setting player type to default VideoPlayer"
)
VideoPlayer
case None =>
logger.warn(
"No rico:type on record found! Setting player type to default VideoPlayer"
)
VideoPlayer
}
private def getApexDomain(uri: String): Try[String] = {
Url.parseOption(uri) match {
case Some(u: AbsoluteUrl) =>
getHostValue(u.hostOption, uri)
case Some(_: RelativeUrl) =>
Success("")
case Some(_) => Failure(UrlParseException(s"Can't handle url $uri"))
case None =>
Failure(UrlParseException(s"Can't parse url $uri"))
}
}
private def getHostValue(host: Option[Host], uri: String): Try[String] =
host match {
case Some(h: DomainName) =>
h.apexDomain match {
case Some(d) => Success(d)
case None =>
Failure(UrlParseException(s"Can't extract apex domain from $uri"))
}
case Some(ip: IpV4) =>
Success(ip.value)
case Some(ip: IpV6) =>
Success(ip.value)
case None => Failure(UrlParseException(s"Can't parse host from $uri"))
}
}
/*
* media-metadata-preprocessor
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
package ch.memobase.models
sealed trait MediaPlayer {
val name: String
}
trait MemobasePlayer extends MediaPlayer
case object AudioPlayer extends MemobasePlayer {
val name = "audio"
}
case object ImageViewer extends MemobasePlayer {
val name = "image"
}
case object VideoPlayer extends MemobasePlayer {
val name = "video"
}
case object SRFAudioPlayer extends MediaPlayer {
val name = "srfaudio"
}
case object SRFVideoPlayer extends MediaPlayer {
val name = "srfvideo"
}
case object VimeoPlayer extends MediaPlayer {
val name = "vimeo"
}
case object YoutubePlayer extends MediaPlayer {
val name = "youtube"
}
case object ZEMPlayer extends MediaPlayer {
val name = "zem"
}
/*
* media-metadata-preprocessor
* Copyright (C) 2020 Memoriav
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
package ch.memobase.models
case class ResourceWithLocator(
recordId: String,
resource: String,
locator: String,
player: MediaPlayer
)
_:Bc4db8c992d5bc80f050f11835289e96c <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:Bc4db8c992d5bc80f050f11835289e96c <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:Bc4db8c992d5bc80f050f11835289e96c <https://www.ica.org/standards/RiC/ontology#identifier> "FHNW_HGK-vww-8808-1" .
_:B35d3bc1d6dd81488aa4c4e65f889bb73 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B35d3bc1d6dd81488aa4c4e65f889bb73 <https://www.ica.org/standards/RiC/ontology#type> "holder" .
_:B35d3bc1d6dd81488aa4c4e65f889bb73 <https://www.ica.org/standards/RiC/ontology#name> "Die Urheberrechte der Werke liegen bei den KünstlerInnen." .
_:B35d3bc1d6dd81488aa4c4e65f889bb73 <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
_:B82127a3050cf8add4500730db9e58004 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B82127a3050cf8add4500730db9e58004 <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B82127a3050cf8add4500730db9e58004 <https://www.ica.org/standards/RiC/ontology#identifier> "FHNW_HGK-vww-8808" .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "https://example.com/FHNW_HGK-vww-8808" .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#hasDerivedInstantiation> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#type> "digitalObject" .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:Bc4db8c992d5bc80f050f11835289e96c .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:Bf4e5ad90c02f1466c3a16088eb957a81 .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/physical/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#duration> "00:00:28" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#hasDerivedInstantiation> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B4ce09a31afbcebf57e485f93d0541acc .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B6a500f5afd57417a34eed1c7ef0ba156 .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#hasCarrierType> _:B44b34a99ec1f4975cb7650d3fc585a0a .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#physicalCharacteristics> "Tonaufnahmeverfahren: Stereo" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <http://rdaregistry.info/Elements/u/P60558> "Farbe" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B14aa36245ee6b33bbe2aa669e38be5c5 .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#type> "physicalObject" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#physicalCharacteristics> "TV Norm: PAL" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <https://www.ica.org/standards/RiC/ontology#physicalCharacteristics> "Bemerkung: Generation: Schnittband; <br> Kassetten Typ: KCA-60XBR" .
<https://memobase.ch/physical/FHNW_HGK-vww-8808-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
_:B4075a15ef41daa6b10b6e8bfbbd563f6 <https://www.ica.org/standards/RiC/ontology#type> "creator" .
_:B4075a15ef41daa6b10b6e8bfbbd563f6 <https://www.ica.org/standards/RiC/ontology#name> "Author" .
_:B4075a15ef41daa6b10b6e8bfbbd563f6 <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
_:B4075a15ef41daa6b10b6e8bfbbd563f6 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B4075a15ef41daa6b10b6e8bfbbd563f6 <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B7788d5a65e4822ecfde2438a1c4d9ae7 .
_:B024945feb35927f5ccbd410fb4940b18 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B024945feb35927f5ccbd410fb4940b18 <https://www.ica.org/standards/RiC/ontology#type> "oldMemobase" .
_:B024945feb35927f5ccbd410fb4940b18 <https://www.ica.org/standards/RiC/ontology#identifier> "FHNW_HGK-vww-8808" .
_:B69e3c94311dd820405c38e65f60179f8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
_:B69e3c94311dd820405c38e65f60179f8 <http://www.w3.org/2004/02/skos/core#prefLabel> "Videokunst" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#hasInstantiation> <https://memobase.ch/physical/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#hasInstantiation> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B35d3bc1d6dd81488aa4c4e65f889bb73 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B795e144ca4b01d4944cda52a75592698 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#isPartOf> <https://memobase.ch/recordSet/FHNW_HGK> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#hasInstantiation> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#conditionsOfUse> "Die Nachnutzung der Werke ist beschänkt. Sichtungsrecht: Internet" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Record> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#title> "Video - Observation - Installation" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B82127a3050cf8add4500730db9e58004 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#hasGenre> _:B69e3c94311dd820405c38e65f60179f8 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#type> "Video" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#hasSubject> _:Be509c0e21bff886af71aadda16b5e250 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B80a4383013e92947bf86a2e342d66acd .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://memobase.ch/internal/isPublished> "false"^^<http://www.w3.org/2001/XMLSchema#boolean> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#heldBy> <https://memobase.ch/institution/FHNW_HGK-VWW> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B024945feb35927f5ccbd410fb4940b18 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://schema.org/sameAs> "http://hdl.handle.net/20.500.11806/mediathek/vww-8808" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://rdaregistry.info/Elements/u/P60451> <https://memobase.ch/institution/mrv> .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#scopeAndContent> "Workshoparbeit" .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://purl.org/dc/terms/abstract> "Zum Thema \"Hören-Sagen\" nahmen die Workshopteilnehmer eine Führung des Kunsthistorikers Werner Jehle zu den Bildtafeln von Konrad Witz aus dem 16. Jahrhundert im Kunstmuseum Basel auf. <br> <br> Die Workshop-Produktion wurde integriert in die Präsentation von Dieter Froese zum Thema \"Hören-Sagen\", einer kritischen Reflexion aus der Welt der Kunst und der Gerüchte." .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#recordResourceOrInstantiationIsSourceOfCreationRelation> _:B4075a15ef41daa6b10b6e8bfbbd563f6 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <https://www.ica.org/standards/RiC/ontology#hasTitle> _:B73fd056d6fcac46adfa1fbd5ef77a94e .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://purl.org/dc/terms/temporal> _:Ba702a003c5fe2fd73a81c88e0e848e23 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://purl.org/dc/terms/spatial> _:Bf8fe9938d9328668ae8e5829b12bdd98 .
<https://memobase.ch/record/FHNW_HGK-vww-8808> <http://purl.org/dc/terms/created> _:B76f55c31437f13d98d87e089c74a22f9 .
_:B44b34a99ec1f4975cb7650d3fc585a0a <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CarrierType> .
_:B44b34a99ec1f4975cb7650d3fc585a0a <https://www.ica.org/standards/RiC/ontology#name> "U-Matic Low Band" .
_:B795e144ca4b01d4944cda52a75592698 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B795e144ca4b01d4944cda52a75592698 <https://www.ica.org/standards/RiC/ontology#type> "original" .
_:B795e144ca4b01d4944cda52a75592698 <https://www.ica.org/standards/RiC/ontology#identifier> "vww-8808" .
_:B80a4383013e92947bf86a2e342d66acd <https://www.ica.org/standards/RiC/ontology#type> "contributor" .
_:B80a4383013e92947bf86a2e342d66acd <https://www.ica.org/standards/RiC/ontology#name> "Kunsthistoriker" .
_:B80a4383013e92947bf86a2e342d66acd <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
_:B80a4383013e92947bf86a2e342d66acd <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B80a4383013e92947bf86a2e342d66acd <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B66f5aa3ff0a717058b4c32cf91eb3191 .
_:B66f5aa3ff0a717058b4c32cf91eb3191 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B66f5aa3ff0a717058b4c32cf91eb3191 <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B80a4383013e92947bf86a2e342d66acd .
_:B66f5aa3ff0a717058b4c32cf91eb3191 <https://www.ica.org/standards/RiC/ontology#name> "Jehle, Werner" .
_:B7788d5a65e4822ecfde2438a1c4d9ae7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B7788d5a65e4822ecfde2438a1c4d9ae7 <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:B4075a15ef41daa6b10b6e8bfbbd563f6 .
_:B7788d5a65e4822ecfde2438a1c4d9ae7 <https://www.ica.org/standards/RiC/ontology#name> "Froese, Dieter" .
_:Ba702a003c5fe2fd73a81c88e0e848e23 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#DateSet> .
_:Ba702a003c5fe2fd73a81c88e0e848e23 <https://www.ica.org/standards/RiC/ontology#expressedDate> "1988" .
_:Bf8fe9938d9328668ae8e5829b12bdd98 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Place> .
_:Bf8fe9938d9328668ae8e5829b12bdd98 <https://www.ica.org/standards/RiC/ontology#name> "Wenkenpark Riehen" .
_:Be509c0e21bff886af71aadda16b5e250 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
_:Be509c0e21bff886af71aadda16b5e250 <http://www.w3.org/2004/02/skos/core#prefLabel> "Dokumentation, Experiment; Installationsband" .
_:B6a500f5afd57417a34eed1c7ef0ba156 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B6a500f5afd57417a34eed1c7ef0ba156 <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B6a500f5afd57417a34eed1c7ef0ba156 <https://www.ica.org/standards/RiC/ontology#name> "onsite" .
_:B6a500f5afd57417a34eed1c7ef0ba156 <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/physical/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/FHNW_HGK-vww-8808> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "sftp:/swissbib_index/mb_sftp/FHNW_HGK-VWW/thumbnails/vww-8808.png" .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> <https://www.ica.org/standards/RiC/ontology#type> "thumbnail" .
<https://memobase.ch/digital/FHNW_HGK-vww-8808-1/derived> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
_:B73fd056d6fcac46adfa1fbd5ef77a94e <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Title> .
_:B73fd056d6fcac46adfa1fbd5ef77a94e <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B73fd056d6fcac46adfa1fbd5ef77a94e <https://www.ica.org/standards/RiC/ontology#title> "Video - Observation - Installation" .
_:B4ce09a31afbcebf57e485f93d0541acc <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B4ce09a31afbcebf57e485f93d0541acc <https://www.ica.org/standards/RiC/ontology#type> "callNumber" .
_:B4ce09a31afbcebf57e485f93d0541acc <https://www.ica.org/standards/RiC/ontology#identifier> "8808" .
_:B14aa36245ee6b33bbe2aa669e38be5c5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Identifier> .
_:B14aa36245ee6b33bbe2aa669e38be5c5 <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B14aa36245ee6b33bbe2aa669e38be5c5 <https://www.ica.org/standards/RiC/ontology#identifier> "FHNW_HGK-vww-8808-1" .
_:B76f55c31437f13d98d87e089c74a22f9 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#DateSet> .
_:B76f55c31437f13d98d87e089c74a22f9 <https://www.ica.org/standards/RiC/ontology#expressedDate> "1988" .
_:Bf4e5ad90c02f1466c3a16088eb957a81 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:Bf4e5ad90c02f1466c3a16088eb957a81 <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:Bf4e5ad90c02f1466c3a16088eb957a81 <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:Bf4e5ad90c02f1466c3a16088eb957a81 <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/FHNW_HGK-vww-8808-1> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "/data/bestand/test_record_set_1/media/MEI_49885.jpg" .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/BAZ-MEI_49885> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/instantiation/physical/BAZ-MEI_49885-0> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#type> "digitalObject" .
_:B <http://schema.org/sameAs> "http://rightsstatements.org/vocab/InC/1.0/" .
_: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#Rule> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "MEI_49885" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/digital/BAZ-MEI_49885-1" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "original" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "usage" .
\ No newline at end of file
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "/data/bestand/test_record_set_1/media/MEI_49885.jpg" .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/BAZ-MEI_49885> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/instantiation/physical/BAZ-MEI_49885-0> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#type> "digitalObject" .
<https://memobase.ch/digital/BAZ-MEI_49885-1/derived> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "/data/bestand/test_record_set_1/media/MEI_49885-0.jpg" .
<https://memobase.ch/digital/BAZ-MEI_49885-1/derived> <https://www.ica.org/standards/RiC/ontology#type> "thumbnail" .
<https://memobase.ch/digital/BAZ-MEI_49885-1/derived> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1/derived> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/BAZ-MEI_49885> .
<https://memobase.ch/digital/BAZ-MEI_49885-1/derived> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/instantiation/physical/BAZ-MEI_49885-0> .
_:B <http://schema.org/sameAs> "http://rightsstatements.org/vocab/InC/1.0/" .
_: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#Rule> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "MEI_49885" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/digital/BAZ-MEI_49885-1" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "original" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "usage" .
\ No newline at end of file
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/BAZ-MEI_49885> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/instantiation/physical/BAZ-MEI_49885-0> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#type> "digitalObject" .
_:B <http://schema.org/sameAs> "http://rightsstatements.org/vocab/InC/1.0/" .
_: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#Rule> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "MEI_49885" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/digital/BAZ-MEI_49885-1" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "original" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "usage" .
\ No newline at end of file
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.ebu.ch/metadata/ontologies/ebucore/ebucore#locator> "sftp:/swissbib_index/bestand//test_record_set_1/media/MEI_49885.jpg" .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Instantiation> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#identifiedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#instantiates> <https://memobase.ch/record/BAZ-MEI_49885> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#isDerivedFromInstantiation> <https://memobase.ch/instantiation/physical/BAZ-MEI_49885-0> .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#regulatedBy> _:B .
<https://memobase.ch/digital/BAZ-MEI_49885-1> <https://www.ica.org/standards/RiC/ontology#type> "digitalObject" .
_:B <http://schema.org/sameAs> "http://rightsstatements.org/vocab/InC/1.0/" .
_: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#Rule> .
_:B <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Rule> .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "MEI_49885" .
_:B <https://www.ica.org/standards/RiC/ontology#identifier> "https://memobase.ch/digital/BAZ-MEI_49885-1" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "In Copyright (InC)" .
_:B <https://www.ica.org/standards/RiC/ontology#name> "public" .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#regulates> <https://memobase.ch/digital/BAZ-MEI_49885-1> .
_:B <https://www.ica.org/standards/RiC/ontology#type> "access" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "main" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "original" .
_:B <https://www.ica.org/standards/RiC/ontology#type> "usage" .
\ No newline at end of file
"_:Bb3581fc6490c57f399f6dfc16fcb21c7 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Place> .
_:Bb3581fc6490c57f399f6dfc16fcb21c7 <https://www.ica.org/standards/RiC/ontology#name> "SZ" .
_:Bfbb87f7ff89579b64cf5006207d564d8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CorporateBody> .
_:Bfbb87f7ff89579b64cf5006207d564d8 <https://www.ica.org/standards/RiC/ontology#name> "Fritz Burri" .
_:B3195dcabbd4b6ba346542a7ea71b03e8 <https://www.ica.org/standards/RiC/ontology#type> "creator" .
_:B3195dcabbd4b6ba346542a7ea71b03e8 <https://www.ica.org/standards/RiC/ontology#name> "Author" .
_:B3195dcabbd4b6ba346542a7ea71b03e8 <https://www.ica.org/standards/RiC/ontology#creationRelationHasSource> <https://memobase.ch/record/LS-film-199808> .
_:B3195dcabbd4b6ba346542a7ea71b03e8 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#CreationRelation> .
_:B3195dcabbd4b6ba346542a7ea71b03e8 <https://www.ica.org/standards/RiC/ontology#creationRelationHasTarget> _:B1f07239a3c98c324b3b19a4a0d462dc6 .
_:B0d036345ce104e338e773c707644c037 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/ontology#Person> .
_:B0d036345ce104e338e773c707644c037 <https://www.ica.org/standards/RiC/ontology#agentIsTargetOfCreationRelation> _:Bae8d4ced8930cae658979b1dbbdb125b .
_:B0d036345ce104e338e773c707644c037 <https://www.ica.org/standards/RiC/ontology#name> "Kurt Zimmermann" .
_:Bbc1edd33d0611379eb991bda0c8a399f <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <https://www.ica.org/standards/RiC/on