view onto/doc/mapping.n3 @ 0:1e44d666ced1

Import site from parrot
author Chris Cannam
date Fri, 13 Oct 2017 09:23:49 +0100
parents
children
line wrap: on
line source
@prefix map: <file:///stdout#> .
@prefix d2r: <http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2r-server/config.rdf#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix foaf: <http://xmlns.com/foaf/0.1/>.
@prefix vs: <http://www.w3.org/2003/06/sw-vocab-status/ns#>.
@prefix tl: <http://purl.org/NET/c4dm/timeline.owl#>.
@prefix event: <http://purl.org/NET/c4dm/event.owl#>.
@prefix dc: <http://purl.org/dc/elements/1.1/>.
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>.
@prefix tags: <http://www.holygoat.co.uk/owl/redwood/0.1/tags/>.
@prefix po: <http://purl.org/ontology/po/>.
@prefix skos: <http://www.w3.org/2004/02/skos/core#>.
@prefix owl: <http://www.w3.org/2002/07/owl#>.

#
# A D2R mapping for the /programmes database,
# allowing to map this database to RDF designed
# according to the Programme ontology available at
#
# http://purl.org/ontology/po/
#
# This mapping is available under a Creative Commons
# Attribution License (CCBY). 
#
# Copyright (c) Yves Raimond, BBC, November 2007
#


<> a d2r:Server;
	rdfs:label "PIPS RDF view";
	d2r:port "2021";
	d2r:documentMetadata [
		rdfs:comment "This instance of a D2R server provides a RDF view of the PIPS database";
	];
	.

map:database a d2rq:Database;
	d2rq:jdbcDriver "com.mysql.jdbc.Driver";
	d2rq:jdbcDSN "jdbc:mysql://localhost/pips";
	d2rq:username "moustaki";
	d2rq:resultSizeLimit "500"; # Just for my laptop to not die horribly
	.


# Dropped from the database dump, for now:
#   * Versioning info
#   * Collections
#   * opt_out_url
#   * brands_occurence
#   * pip_formatid
#   * all ids (in URI)
#   * pip_genreid
#   * api_public_name
#   * is_publication_outlet
#   * pit_id


# Mapping of the brands table

# mysql> describe brands;
# +-----------------+--------------+------+-----+---------+----------------+
# | Field           | Type         | Null | Key | Default | Extra          |
# +-----------------+--------------+------+-----+---------+----------------+
# | id              | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | pid             | varchar(8)   | NO   | UNI |         |                | 
# | title           | varchar(255) | NO   |     |         |                | 
# | short_synopsis  | text         | YES  |     | NULL    |                | 
# | medium_synopsis | text         | YES  |     | NULL    |                | 
# | long_synopsis   | text         | YES  |     | NULL    |                | 
# | occurrence      | text         | YES  |     | NULL    |                | 
# | service_id      | int(11)      | YES  | MUL | NULL    |                | 
# | opt_out_url     | varchar(255) | YES  |     | NULL    |                | 
# | created_at      | datetime     | NO   |     |         |                | 
# | updated_at      | datetime     | NO   |     |         |                | 
# +-----------------+--------------+------+-----+---------+----------------+


# To :
#
# po:Brand
#	rdfs:label
#	foaf:homepage
#	po:pid
#	dc:title
#	po:short_synopsis
# 	po:medium_synopsis
#	po:long_synopsis
#	po:service
#	po:creation_date
#	po:update_date
#

map:brands a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "brand/@@brands.id@@";
	d2rq:class po:Brand;
	.
map:brands__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property rdfs:label;
	d2rq:column "brands.title";
	.
map:brands_html a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property foaf:homepage;
	d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@brands.pid@@";
	.
map:brands_pid a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:pid;
	d2rq:column "brands.pid";
	.
map:brands_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property dc:title;
	d2rq:column "brands.title";
	.
map:brands_short_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:short_synopsis;
	d2rq:column "brands.short_synopsis";
	.
map:brands_medium_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:medium_synopsis;
	d2rq:column "brands.medium_synopsis";
	.
map:brands_long_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:long_synopsis;
	d2rq:column "brands.long_synopsis";
	.
map:brands_service_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:service;
	d2rq:refersToClassMap map:services;
	d2rq:join "brands.service_id = services.id";
	.
map:brands_created_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:creation_date;
	d2rq:column "brands.created_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "brands.created_at != '0000'";
	.
map:brands_updated_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:update_date;
	d2rq:column "brands.updated_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "brands.updated_at != '0000'";
	.
# Mapping the table brand_titles

# mysql> describe brand_titles;
# +-------------+--------------+------+-----+---------+----------------+
# | Field       | Type         | Null | Key | Default | Extra          |
# +-------------+--------------+------+-----+---------+----------------+
# | id          | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | brand_id    | int(11)      | NO   | MUL | 0       |                | 
# | title       | varchar(255) | NO   |     |         |                | 
# | slice_title | varchar(255) | NO   | MUL |         |                | 
# | letter      | char(1)      | NO   | MUL |         |                | 
# +-------------+--------------+------+-----+---------+----------------+

# To:
#
# po:Brand
#	po:sort_title
#	po:slice_title
#	po:letter
#

map:brand_titles_title a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:brands;
        d2rq:property po:sort_title;
        d2rq:column "brand_titles.title";
	d2rq:join "brand_titles.brand_id = brands.id";
        .
map:brand_titles_slice_title a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:brands;
        d2rq:property po:slice_title;
        d2rq:column "brand_titles.slice_title";
	d2rq:join "brand_titles.brand_id = brands.id";
        .
map:brand_titles_letter a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:brands;
        d2rq:property po:letter;
        d2rq:column "brand_titles.letter";
	d2rq:join "brand_titles.brand_id = brands.id";
        .

# Mapping the table collections

# mysql> describe collections;
# +----------------+---------+------+-----+---------+----------------+
# | Field          | Type    | Null | Key | Default | Extra          |
# +----------------+---------+------+-----+---------+----------------+
# | id             | int(11) | NO   | PRI | NULL    | auto_increment | 
# | episode_id     | int(11) | NO   | UNI | 0       |                | 
# | brand_id       | int(11) | YES  | MUL | NULL    |                | 
# | series_id      | int(11) | YES  | MUL | NULL    |                | 
# | base_series_id | int(11) | YES  | MUL | NULL    |                | 
# +----------------+---------+------+-----+---------+----------------+

# To :
# 
# po:Brand
# 	po:episode
# po:Series
#	po:episode
# po:Brand
#	po:series

# TODO:
#  * is that right to consider base_series_id as being implicit
#    in the series hierarchy?

map:brand_collection_episode a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:episode;
	d2rq:uriPattern "episode/@@collections.episode_id@@";
	d2rq:join "collections.brand_id = brands.id";
	.
map:series_collection_episode a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:episode;
	d2rq:uriPattern "episode/@@collections.episode_id@@";
	d2rq:join "collections.series_id = series.id";
	.
map:brands_collection_series a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:brands;
	d2rq:property po:series;
	d2rq:uriPattern "series/@@collections.series_id@@";
	d2rq:join "collections.brand_id = brands.id";
	.
map:series_collection_baseseries a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:episode;
	d2rq:uriPattern "episode/@@collections.episode_id@@";
	d2rq:join "collections.base_series_id = series.id";
	.


# Mapping the table broadcasts

# mysql> describe broadcasts;
# +---------------+--------------+------+-----+---------------------+----------------+
# | Field         | Type         | Null | Key | Default             | Extra          |
# +---------------+--------------+------+-----+---------------------+----------------+
# | id            | int(11)      | NO   | PRI | NULL                | auto_increment | 
# | start         | datetime     | NO   | MUL | 0000-00-00 00:00:00 |                | 
# | end           | datetime     | NO   | MUL | 0000-00-00 00:00:00 |                | 
# | duration      | int(11)      | NO   |     | 0                   |                | 
# | is_repeat     | tinyint(1)   | YES  |     | NULL                |                | 
# | schedule_date | date         | NO   |     | 0000-00-00          |                | 
# | version_id    | int(11)      | NO   | MUL | 0                   |                | 
# | service_id    | int(11)      | NO   | MUL | 0                   |                | 
# | pid_imi       | varchar(255) | NO   | UNI |                     |                | 
# | created_at    | datetime     | NO   |     |                     |                | 
# | updated_at    | datetime     | NO   |     |                     |                | 
# +---------------+--------------+------+-----+---------------------+----------------+

# To:
# po:Broadcast
#	rdfs:label
#	event:time
#	po:schedule_date
#	po:broadcast_of
#	po:broadcasted_on
#	po:pid_imi
#	po:creation_date
#	po:update_date
# tl:Interval
#	tl:start
#	tl:end
#	tl:duration
# po:FirstBroadcast
# po:RepeatBroadcast

# TODO:
#  * Should the schedule date be a factor of the broadcast event?

map:broadcasts a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "broadcast/@@broadcasts.id@@";
	d2rq:class po:Broadcast;
	.
map:broadcasts__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property rdfs:label;
	d2rq:pattern "broadcasts #@@broadcasts.id@@"; # <<<<<<<<
	.
map:broadcast_event_time a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property event:time;
	d2rq:uriPattern "time/@@broadcasts.id@@"; # <<<<<<<<<<<<<< PROBLEM
	.
map:broadcast_time a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "time/@@broadcasts.id@@";
	d2rq:class tl:Interval;
	.
map:broadcasts_start a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcast_time;
	d2rq:property tl:start;
	d2rq:column "broadcasts.start";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "broadcasts.start != '0000'";
	.
map:broadcasts_end a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcast_time;
	d2rq:property tl:end;
	d2rq:column "broadcasts.end";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "broadcasts.end != '0000'";
	.
map:broadcasts_duration a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcast_time;
	d2rq:property tl:duration;
	d2rq:column "broadcasts.duration";
	d2rq:datatype xsd:int;
	.
map:first_broadcast a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "broadcast/@@broadcasts.id@@";
	d2rq:class po:FirstBroadcast;
	d2rq:condition "broadcasts.is_repeat = '0'";
	.
map:repeated_broadcast a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "broadcast/@@broadcasts.id@@";
	d2rq:class po:RepeatBroadcast;
	d2rq:condition "broadcasts.is_repeat = '1'";
	.
map:broadcasts_schedule_date a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:schedule_date;
	d2rq:column "broadcasts.schedule_date";
	d2rq:datatype xsd:date;
	d2rq:condition "broadcasts.schedule_date != '0000'";
	.
map:broadcasts_version_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:broadcast_of;
	d2rq:refersToClassMap map:versions;
	d2rq:join "broadcasts.version_id = versions.id";
	.
map:broadcasts_service_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:broadcasted_on;
	d2rq:refersToClassMap map:services;
	d2rq:join "broadcasts.service_id = services.id";
	.
map:broadcasts_pid_imi a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:pid_imi;
	d2rq:column "broadcasts.pid_imi";
	.
map:broadcasts_created_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:creation_date;
	d2rq:column "broadcasts.created_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "broadcasts.created_at != '0000'";
	.
map:broadcasts_updated_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:broadcasts;
	d2rq:property po:update_date;
	d2rq:column "broadcasts.updated_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "broadcasts.updated_at != '0000'";
	.

# Mapping the table episodes

# mysql> describe episodes;
# +-----------------+--------------+------+-----+---------+----------------+
# | Field           | Type         | Null | Key | Default | Extra          |
# +-----------------+--------------+------+-----+---------+----------------+
# | id              | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | title           | varchar(255) | NO   |     |         |                | 
# | short_synopsis  | text         | YES  |     | NULL    |                | 
# | medium_synopsis | text         | YES  |     | NULL    |                | 
# | long_synopsis   | text         | YES  |     | NULL    |                | 
# | pid             | varchar(8)   | NO   | UNI |         |                | 
# | position        | int(11)      | YES  |     | NULL    |                | 
# | service_id      | int(11)      | YES  | MUL | NULL    |                | 
# | opt_out_url     | varchar(255) | YES  |     | NULL    |                | 
# | created_at      | datetime     | NO   |     |         |                | 
# | updated_at      | datetime     | NO   |     |         |                | 
# +-----------------+--------------+------+-----+---------+----------------+

# To :
# po:Episode
#	rdfs:label
#	foaf:homepage
#	dc:title
#	po:short_synopsis
#	po:medium_synopsis
#	po:long_synopsis
#	po:pid
#	po:position
#	po:service
#	po:creation_date
#	po:update_date

map:episodes a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "episode/@@episodes.id@@";
	d2rq:class po:Episode;
	.
map:episodes__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property rdfs:label;
	d2rq:column "episodes.title";
	.
map:episodes_html a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property foaf:homepage;
	d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@episodes.pid@@";
	.
map:episodes_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property dc:title;
	d2rq:column "episodes.title";
	.
map:episodes_short_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:short_synopsis;
	d2rq:column "episodes.short_synopsis";
	.
map:episodes_medium_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:medium_synopsis;
	d2rq:column "episodes.medium_synopsis";
	.
map:episodes_long_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:long_synopsis;
	d2rq:column "episodes.long_synopsis";
	.
map:episodes_pid a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:pid;
	d2rq:column "episodes.pid";
	.
map:episodes_position a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:position;
	d2rq:column "episodes.position";
	d2rq:datatype xsd:int;
	.
map:episodes_service_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:service;
	d2rq:refersToClassMap map:services;
	d2rq:join "episodes.service_id = services.id";
	.
map:episodes_created_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:creation_date;
	d2rq:column "episodes.created_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "episodes.created_at != '0000'";
	.
map:episodes_updated_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:update_date;
	d2rq:column "episodes.updated_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "episodes.updated_at != '0000'";
	.
# Mapping the table episode_title

# mysql> describe episode_titles;
# +-------------+--------------+------+-----+---------+----------------+
# | Field       | Type         | Null | Key | Default | Extra          |
# +-------------+--------------+------+-----+---------+----------------+
# | id          | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | episode_id  | int(11)      | NO   | MUL | 0       |                | 
# | title       | varchar(255) | NO   |     |         |                | 
# | slice_title | varchar(255) | NO   | MUL |         |                | 
# | letter      | char(1)      | NO   | MUL |         |                | 
# +-------------+--------------+------+-----+---------+----------------+

# To:
# po:Episode
#	po:sort_title
#	po:slice_title
#	po:letter

map:episode_titles_title a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:episodes;
        d2rq:property po:sort_title;
        d2rq:column "episode_titles.title";
	d2rq:join "episode_titles.episode_id = episodes.id";
        .
map:episode_titles_slice_title a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:episodes;
        d2rq:property po:slice_title;
        d2rq:column "episode_titles.slice_title";
	d2rq:join "episode_titles.episode_id = episodes.id";
        .
map:episode_titles_letter a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:episodes;
        d2rq:property po:letter;
        d2rq:column "episode_titles.letter";
	d2rq:join "episode_titles.episode_id = episodes.id";
        .
# Mapping the table rpps_links (start/end date?)

# mysql> describe rpps_links;
# +-----------------+-------------+------+-----+---------+----------------+
# | Field           | Type        | Null | Key | Default | Extra          |
# +-----------------+-------------+------+-----+---------+----------------+
# | id              | int(11)     | NO   | PRI | NULL    | auto_increment | 
# | episode_id      | int(11)     | NO   | UNI |         |                | 
# | rpps_id         | int(11)     | NO   | UNI |         |                | 
# | network_key     | varchar(32) | NO   | MUL |         |                | 
# | file_key        | varchar(64) | NO   |     |         |                | 
# | available_start | datetime    | NO   |     |         |                | 
# | available_end   | datetime    | YES  |     | NULL    |                | 
# +-----------------+-------------+------+-----+---------+----------------+

# To :
# po:Episode
#	po:available_as

# TODO: 
#  * Dealing with start/end date?
#  * It should surely be attached to a particular version!!!

map:episode_rpps a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:available_as;
	d2rq:uriPattern "http://www.bbc.co.uk/radio/aod/@@rpps_links.network_key@@_aod.shtml?@@rpps_links.network_key@@/@@rpps_links.file_key@@";
	d2rq:join "rpps_links.episode_id = episodes.id";
	.


# Mapping the table formats

# mysql> describe formats;
# +--------------+--------------+------+-----+---------+----------------+
# | Field        | Type         | Null | Key | Default | Extra          |
# +--------------+--------------+------+-----+---------+----------------+
# | id           | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | title        | varchar(255) | NO   |     |         |                | 
# | url_key      | varchar(255) | NO   | UNI |         |                | 
# | pip_formatid | varchar(8)   | NO   | UNI |         |                | 
# +--------------+--------------+------+-----+---------+----------------+

# To :
# po:Format
#	rdfs:label
#	dc:title
#	foaf:homepage

map:formats a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "format/@@formats.id@@";
	d2rq:class po:Format;
	.
map:formats__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:formats;
	d2rq:property rdfs:label;
	d2rq:column "formats.title";
	.
map:formats_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:formats;
	d2rq:property dc:title;
	d2rq:column "formats.title";
	.
map:formats_html a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:formats;
	d2rq:property foaf:homepage;
	d2rq:uriPattern "http://www.bbc.co.uk/programmes/formats/@@formats.url_key@@";
	.

# mapping the table formats_versions

# mysql> describe formats_versions;
# +------------+---------+------+-----+---------+-------+
# | Field      | Type    | Null | Key | Default | Extra |
# +------------+---------+------+-----+---------+-------+
# | version_id | int(11) | NO   | PRI | 0       |       | 
# | format_id  | int(11) | NO   | PRI | 0       |       | 
# +------------+---------+------+-----+---------+-------+

# To :
# po:Version
#	po:format

map:formats_versions a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:format;
	d2rq:refersToClassMap map:formats;
	d2rq:join "formats.id = formats_versions.format_id";
	d2rq:join "formats_versions.version_id = versions.id";
	.

# Mapping the table genres

# mysql> describe genres;
# +-----------------+--------------+------+-----+---------+----------------+
# | Field           | Type         | Null | Key | Default | Extra          |
# +-----------------+--------------+------+-----+---------+----------------+
# | id              | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | parent_genre_id | int(11)      | YES  | MUL | NULL    |                | 
# | title           | varchar(255) | NO   |     |         |                | 
# | url_key         | varchar(255) | NO   | MUL |         |                | 
# | pip_genreid     | varchar(8)   | NO   | UNI |         |                | 
# +-----------------+--------------+------+-----+---------+----------------+

# To :
# skos:Concept
#	rdfs:label
#	skos:inScheme
#	skos:narrower
#	dc:title
#	foaf:homepage

map:genres a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "genre/@@genres.id@@";
	d2rq:class skos:Concept;
	.
map:genres_inscheme a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genres;
	d2rq:property skos:inScheme;
	d2rq:uriPattern "http://purl.org/ontology/po/Genre";
	.
map:genres__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genres;
	d2rq:property rdfs:label;
	d2rq:column "genres.title";
	.
map:genres_html a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genres;
	d2rq:property foaf:homepage;
	d2rq:uriPattern "http://www.bbc.co.uk/programmes/genres/@@genres.url_key@@";
	.
map:genres_parent_genre_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genres;
	d2rq:property skos:narrower;
	d2rq:refersToClassMap map:genres;
	d2rq:alias "genres AS genres__alias";
	d2rq:join "genres__alias.parent_genre_id = genres.id";
	.
map:genres_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:genres;
	d2rq:property dc:title;
	d2rq:column "genres.title";
	.

# Mapping the table genres_versions

# mysql> describe genres_versions;
# +------------+---------+------+-----+---------+----------------+
# | Field      | Type    | Null | Key | Default | Extra          |
# +------------+---------+------+-----+---------+----------------+
# | id         | int(11) | NO   | PRI | NULL    | auto_increment | 
# | version_id | int(11) | NO   | MUL | 0       |                | 
# | genre_id   | int(11) | NO   | MUL | 0       |                | 
# | genre1_id  | int(11) | NO   | MUL | 0       |                | 
# | genre2_id  | int(11) | YES  | MUL | NULL    |                | 
# | genre3_id  | int(11) | YES  | MUL | NULL    |                | 
# +------------+---------+------+-----+---------+----------------+

# To :
# po:Version
#	po:genre

# TODO:
#  * Different `genre' properties for each degree of association
#  * Should be linked to episode, instead of genre? 

map:genres_versions_genre_1 a d2rq:PropertyBridge; # <<<<< there should be different genre properties
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:genre;
	d2rq:refersToClassMap map:genres;
	d2rq:join "genres_versions.genre_id = genres.id";
	d2rq:join "genres_versions.version_id = versions.id";
	.
map:genres_versions_genre1_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:genre;
	d2rq:refersToClassMap map:genres;
	d2rq:join "genres_versions.genre1_id = genres.id";
	d2rq:join "genres_versions.version_id = versions.id";
	.
map:genres_versions_genre2_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:genre;
	d2rq:refersToClassMap map:genres;
	d2rq:join "genres_versions.genre2_id = genres.id";
	d2rq:join "genres_versions.version_id = versions.id";
	.
map:genres_versions_genre3_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:genre;
	d2rq:refersToClassMap map:genres;
	d2rq:join "genres_versions.genre3_id = genres.id";
	d2rq:join "genres_versions.version_id = versions.id";
	.


# Mapping the table series

# mysql> describe series;
# +------------------+--------------+------+-----+---------+----------------+
# | Field            | Type         | Null | Key | Default | Extra          |
# +------------------+--------------+------+-----+---------+----------------+
# | id               | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | parent_series_id | int(11)      | YES  | MUL | NULL    |                | 
# | pid              | varchar(8)   | NO   | UNI |         |                | 
# | title            | varchar(255) | NO   |     |         |                | 
# | short_synopsis   | text         | YES  |     | NULL    |                | 
# | medium_synopsis  | text         | YES  |     | NULL    |                | 
# | long_synopsis    | text         | YES  |     | NULL    |                | 
# | position         | int(11)      | YES  |     | NULL    |                | 
# | service_id       | int(11)      | YES  | MUL | NULL    |                | 
# | opt_out_url      | varchar(255) | YES  |     | NULL    |                | 
# | created_at       | datetime     | NO   |     |         |                | 
# | updated_at       | datetime     | NO   |     |         |                | 
# +------------------+--------------+------+-----+---------+----------------+

# To :
# po:Series
#	rdfs:label
#	po:series
#	po:pid
#	dc:title
#	po:short_synopsis
#	po:medium_synopsis
#	po:long_synopsis
#	po:position
#	po:service
#	po:creation_date
#	po:update_date

# TODO:
#  * Filter out synopsis that do have an empty value (true for all other concepts
#    holding such synopsis)

map:series a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "series/@@series.id@@";
	d2rq:class po:Series;
	.
map:series__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property rdfs:label;
	d2rq:column "series.title";
	.
map:series_html a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property foaf:homepage;
	d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@series.pid@@";
	.
map:series_parent_series_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:series;
	d2rq:refersToClassMap map:series;
	d2rq:alias "series AS series__alias";
	d2rq:join "series.id =  series__alias.parent_series_id";
	.
map:series_pid a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:pid;
	d2rq:column "series.pid";
	.
map:series_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property dc:title;
	d2rq:column "series.title";
	.
map:series_short_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:short_synopsis;
	d2rq:column "series.short_synopsis";
	.
map:series_medium_synopsis a d2rq:PropertyBridge; # <<< condition on existence
	d2rq:belongsToClassMap map:series;
	d2rq:property po:medium_synopsis;
	d2rq:column "series.medium_synopsis";
	.
map:series_long_synopsis a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:long_synopsis;
	d2rq:column "series.long_synopsis";
	.
map:series_position a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:position;
	d2rq:column "series.position";
	d2rq:datatype xsd:int;
	.
map:series_service_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:service;
	d2rq:refersToClassMap map:services;
	d2rq:join "series.service_id = services.id";
	.
map:series_created_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:creation_date;
	d2rq:column "series.created_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "series.created_at != '0000'";
	.
map:series_updated_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:update_date;
	d2rq:column "series.updated_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "series.updated_at != '0000'";
	.

# Mapping the table series_titles

# mysql> describe series_titles;
# +-------------+--------------+------+-----+---------+----------------+
# | Field       | Type         | Null | Key | Default | Extra          |
# +-------------+--------------+------+-----+---------+----------------+
# | id          | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | series_id   | int(11)      | NO   | MUL | 0       |                | 
# | title       | varchar(255) | NO   |     |         |                | 
# | slice_title | varchar(255) | NO   | MUL |         |                | 
# | letter      | char(1)      | NO   | MUL |         |                | 
# +-------------+--------------+------+-----+---------+----------------+

# To :
# po:Series
#	po:sort_title
#	po:slice_title
#	po:letter

map:series_titles_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:sort_title;
	d2rq:column "series_titles.title";
	d2rq:join "series_titles.series_id = series.id";
	.
map:series_titles_slice_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:slice_title;
	d2rq:column "series_titles.slice_title";
	d2rq:join "series_titles.series_id = series.id";
	.
map:series_titles_letter a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:series;
	d2rq:property po:letter;
	d2rq:column "series_titles.letter";
	d2rq:join "series_titles.series_id = series.id";
	.

# Mapping the table services

# mysql> describe services;
# +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+
# | Field                 | Type                                                                                      | Null | Key | Default | Extra          |
# +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+
# | id                    | int(11)                                                                                   | NO   | PRI | NULL    | auto_increment | 
# | parent_service_id     | int(11)                                                                                   | YES  | MUL | NULL    |                | 
# | title                 | varchar(64)                                                                               | NO   |     |         |                | 
# | api_public_name       | varchar(32)                                                                               | NO   | UNI |         |                | 
# | url_key               | varchar(32)                                                                               | NO   | MUL |         |                | 
# | outlet_url_key        | varchar(32)                                                                               | YES  | MUL | NULL    |                | 
# | is_publication_outlet | tinyint(4)                                                                                | NO   |     | 1       |                | 
# | region                | varchar(64)                                                                               | YES  |     | NULL    |                | 
# | service_type          | enum('Local Radio','National Radio','Regional Radio','TV','Web Only','Master Brand Only') | YES  |     | NULL    |                | 
# +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+

# To:
# po:Service
#	rdfs:label
#	po:parent_service
#	dc:title
#	po:location
# po:TV
# po:LocalRadio
# po:RegionalRadio
# po:NationalRadio
# po:Web
# po:MasterBrand

# TODO:
#  * All services are self-contained - this might not be a real issue, though
#  * Sort out foaf:homepage 

map:services a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "service/@@services.id@@";
	d2rq:class po:Service;
	.
map:services__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:services;
	d2rq:property rdfs:label;
	d2rq:column "services.title";
	.
#map:services_html a d2rq:PropertyBridge;
#	d2rq:belongsToClassMap map:services;
#	d2rq:property foaf:homepage;
#	d2rq:uriPattern "http://www.bbc.co.uk/programmes/services/@@services.url_key@@";
#	.
map:services_parent_service_id a d2rq:PropertyBridge; # <<<<< Why are all services self-contained??
	d2rq:belongsToClassMap map:services;
	d2rq:property po:parent_service;
	d2rq:refersToClassMap map:services;
	d2rq:alias "services AS services__alias";
	d2rq:join "services.parent_service_id = services__alias.id";
	.
map:services_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:services;
	d2rq:property dc:title;
	d2rq:column "services.title";
	.
map:services_region a d2rq:PropertyBridge; # <<<<<<<
	d2rq:belongsToClassMap map:services;
	d2rq:property po:location;
	d2rq:translateWith map:location_table;
	d2rq:uriColumn "services.region";
	.
map:tv_service a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "service/@@services.id@@";
	d2rq:class po:TV;
	d2rq:condition "services.service_type = 'TV'";
	.
map:local_service a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "service/@@services.id@@";
        d2rq:class po:LocalRadio;
        d2rq:condition "services.service_type = 'Local Radio'";
        .
map:regional_service a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "service/@@services.id@@";
        d2rq:class po:RegionalRadio;
        d2rq:condition "services.service_type = 'Regional Radio'";
        .
map:national_service a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "service/@@services.id@@";
        d2rq:class po:NationalRadio;
        d2rq:condition "services.service_type = 'National Radio'";
        .
map:web_service a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "service/@@services.id@@";
        d2rq:class po:Web;
        d2rq:condition "services.service_type = 'Web Only'";
        .
map:master_service a d2rq:ClassMap; # <<<< ?
        d2rq:dataStorage map:database;
        d2rq:uriPattern "service/@@services.id@@";
        d2rq:class po:MasterBrand;
        d2rq:condition "services.service_type = 'Master Brand Only'";
        .

# Table for location mapping
map:location_table a d2rq:TranslationTable;
	d2rq:translation [
		d2rq:databaseValue "All regions";
		d2rq:rdfValue <http://sws.geonames.org/2635167/>;
		];
	d2rq:translation [
		d2rq:databaseValue "All English Regions";
		d2rq:rdfValue <http://sws.geonames.org/2635167/>; #??
		];
	d2rq:translation [
		d2rq:databaseValue "Northern Ireland";
		d2rq:rdfValue <http://sws.geonames.org/2635167/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Wales";
		d2rq:rdfValue <http://sws.geonames.org/2635167/>;
		];
	d2rq:translation [
		d2rq:databaseValue "South West";
		d2rq:rdfValue <http://sws.geonames.org/2637294/>; #South West peninsula?
		];
	d2rq:translation [
		d2rq:databaseValue "West Midlands";
		d2rq:rdfValue <http://sws.geonames.org/2634343/>;
		];
	d2rq:translation [
		d2rq:databaseValue "East Midlands";
		d2rq:rdfValue <http://sws.geonames.org/6296613/>;
		];
	d2rq:translation [
		d2rq:databaseValue "North East & Cumbria";
		d2rq:rdfValue <http://sws.geonames.org/2651712/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Scotland";
		d2rq:rdfValue <http://sws.geonames.org/2638360/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Yorkshire";
		d2rq:rdfValue <http://sws.geonames.org/2641209/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Oxfordshire";
		d2rq:rdfValue <http://sws.geonames.org/2640726/>;
		];
	d2rq:translation [
		d2rq:databaseValue "South East";
		d2rq:rdfValue <http://sws.geonames.org/2637438/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Cambridgeshire";
		d2rq:rdfValue <http://sws.geonames.org/2653940/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Channel Islands";
		d2rq:rdfValue <http://sws.geonames.org/3042400/>;
		];
	d2rq:translation [
		d2rq:databaseValue "East Yorkshire & Lincolnshire";
		d2rq:rdfValue <http://sws.geonames.org/2644486/>;
		];
	d2rq:translation [
		d2rq:databaseValue "Northern Ireland";
		d2rq:rdfValue <http://sws.geonames.org/2641364/>;
		];
	d2rq:translation [
		d2rq:databaseValue "London";
		d2rq:rdfValue <http://sws.geonames.org/2643744/>;
		];
	.

# Mapping the table taggings

# mysql> describe taggings;
# +------------+----------+------+-----+---------------------+----------------+
# | Field      | Type     | Null | Key | Default             | Extra          |
# +------------+----------+------+-----+---------------------+----------------+
# | id         | int(11)  | NO   | PRI | NULL                | auto_increment | 
# | episode_id | int(11)  | NO   | MUL | 0                   |                | 
# | tag_id     | int(11)  | NO   | MUL | 0                   |                | 
# | created    | datetime | NO   |     | 0000-00-00 00:00:00 |                | 
# | pit_id     | int(11)  | NO   | UNI | 0                   |                | 
# +------------+----------+------+-----+---------------------+----------------+

# To:
# tags:Tagging
#	rdfs:label
#	tags:tag
#	tags:associatedTag
#	tags:taggedOn

map:taggings a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "tagging/@@taggings.id@@";
	d2rq:class tags:Tagging;
	.
map:taggings__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:taggings;
	d2rq:property rdfs:label;
	d2rq:pattern "taggings #@@taggings.id@@";
	.
map:taggings_episode_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property tags:tag;
	d2rq:refersToClassMap map:taggings;
	d2rq:join "taggings.episode_id = episodes.id";
	.
map:taggings_tag_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:taggings;
	d2rq:property tags:associatedTag;
	d2rq:refersToClassMap map:tags;
	d2rq:join "taggings.tag_id = tags.id";
	.
map:taggings_created a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:taggings;
	d2rq:property tags:taggedOn;
	d2rq:column "taggings.created";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "taggings.created != '0000'";
	.

# Mapping the table tags

# mysql> describe tags;
# +---------+--------------+------+-----+---------+----------------+
# | Field   | Type         | Null | Key | Default | Extra          |
# +---------+--------------+------+-----+---------+----------------+
# | id      | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | title   | varchar(255) | NO   |     |         |                | 
# | url_key | varchar(255) | NO   | MUL |         |                | 
# | pit_id  | int(11)      | NO   | UNI | 0       |                | 
# +---------+--------------+------+-----+---------+----------------+

# To :
# tags:Tag
#	rdfs:label
#	dc:title

# TODO:
#  * investigate the weird thing happening at http://www.bbc.co.uk/programmes/tags/john%20o'farrell
#  * most of the foaf:homepage point to non yet existing pages

map:tags a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "tag/@@tags.id@@";
	d2rq:class tags:Tag;
	.
map:tags__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:tags;
	d2rq:property rdfs:label;
	d2rq:column "tags.title";
	.
map:taggings_html a d2rq:PropertyBridge;
        d2rq:belongsToClassMap map:tags;
        d2rq:property foaf:homepage;
        d2rq:uriPattern "http://www.bbc.co.uk/programmes/tags/@@tags.url_key@@";
        .
map:tags_title a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:tags;
	d2rq:property dc:title;
	d2rq:column "tags.title";
	.

# Mapping the table version_types

# mysql> describe version_types;
# +---------------------+--------------+------+-----+---------+----------------+
# | Field               | Type         | Null | Key | Default | Extra          |
# +---------------------+--------------+------+-----+---------+----------------+
# | id                  | int(11)      | NO   | PRI | NULL    | auto_increment | 
# | pip_version_type_id | varchar(32)  | NO   | UNI |         |                | 
# | title               | varchar(128) | YES  |     |         |                | 
# | synopsis            | varchar(128) | YES  |     | NULL    |                | 
# +---------------------+--------------+------+-----+---------+----------------+

# And the table version_types_versions ...

# mysql> describe version_types_versions;
# +-----------------+---------+------+-----+---------+-------+
# | Field           | Type    | Null | Key | Default | Extra |
# +-----------------+---------+------+-----+---------+-------+
# | version_id      | int(11) | NO   | PRI | 0       |       | 
# | version_type_id | int(11) | NO   | PRI | 0       |       | 
# +-----------------+---------+------+-----+---------+-------+

# To :
# po:OriginalVersion
# po:AudioDescribedVersion
# po:SignedVersion
# po:ShortenedVersion

map:original_version a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "version/@@versions.id@@";
	d2rq:class po:OriginalVersion;
	d2rq:condition "versions.id = version_types_versions.version_id";
	d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
	d2rq:condition "version_types.pip_version_type_id = 'Original'";
	.
map:audiodesc_version a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "version/@@versions.id@@";
	d2rq:class po:AudioDescribedVersion;
	d2rq:condition "versions.id = version_types_versions.version_id";
	d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
	d2rq:condition "version_types.pip_version_type_id = 'AudioDescribed'";
	.
map:signed_version a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "version/@@versions.id@@";
        d2rq:class po:SignedVersion;
        d2rq:condition "versions.id = version_types_versions.version_id";
	d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
	d2rq:condition "version_types.pip_version_type_id = 'Signed'";
        .
map:shortened_version a d2rq:ClassMap;
        d2rq:dataStorage map:database;
        d2rq:uriPattern "version/@@versions.id@@";
        d2rq:class po:ShortenedVersion;
        d2rq:condition "versions.id = version_types_versions.version_id";
	d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
	d2rq:condition "version_types.pip_version_type_id = 'Shortened'";
        .

# Mapping the table versions

# mysql> describe versions;
# +-----------------------+-----------------------+------+-----+---------+----------------+
# | Field                 | Type                  | Null | Key | Default | Extra          |
# +-----------------------+-----------------------+------+-----+---------+----------------+
# | id                    | int(11)               | NO   | PRI | NULL    | auto_increment | 
# | pid                   | varchar(8)            | NO   | UNI |         |                | 
# | episode_id            | int(11)               | NO   | MUL | 0       |                | 
# | duration              | int(11)               | YES  |     | NULL    |                | 
# | aspect_ratio          | varchar(16)           | YES  |     | NULL    |                | 
# | sound_format          | varchar(64)           | YES  |     | NULL    |                | 
# | subtitle_type         | enum('open','closed') | YES  |     | NULL    |                | 
# | subtitle_supplemental | tinyint(1)            | YES  |     | NULL    |                | 
# | subtitle_language     | varchar(8)            | YES  |     | NULL    |                | 
# | created_at            | datetime              | NO   |     |         |                | 
# | updated_at            | datetime              | NO   |     |         |                | 
# +-----------------------+-----------------------+------+-----+---------+----------------+

# To:
# po:Version
#	rdfs:label
#	po:pid
#	po:version
#	po:duration
#	po:aspect_ratio
#	po:sound_format
#	po:creation_date
#	po:update_date
#	po:subtitle
# po:Subtitle
#	po:subtitle_type
#	po:subtitle_supplemental
#	po:subtitle_language

map:versions a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "version/@@versions.id@@";
	d2rq:class po:Version;
	.
map:versions__label a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property rdfs:label;
	d2rq:pattern "versions #@@versions.id@@";
	.
map:versions_pid a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:pid;
	d2rq:column "versions.pid";
	.
map:versions_episode_id a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:episodes;
	d2rq:property po:version;
	d2rq:refersToClassMap map:versions;
	d2rq:join "versions.episode_id = episodes.id";
	.
map:versions_duration a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:duration;
	d2rq:column "versions.duration";
	d2rq:datatype xsd:int;
	.
map:versions_aspect_ratio a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:aspect_ratio;
	d2rq:column "versions.aspect_ratio";
	.
map:versions_sound_format a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:sound_format;
	d2rq:column "versions.sound_format";
	.
map:versions_subtitle a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:subtitle;
	d2rq:uriPattern "subtitle/@@versions.id@@";
	.
map:subtitle a d2rq:ClassMap;
	d2rq:dataStorage map:database;
	d2rq:uriPattern "subtitle/@@versions.id@@";
	d2rq:class po:Subtitle;
	.
map:versions_subtitle_type a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:subtitle;
	d2rq:property po:subtitle_type;
	d2rq:column "versions.subtitle_type";
	.
map:versions_subtitle_supplemental a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:subtitle;
	d2rq:property po:subtitle_supplemental;
	d2rq:column "versions.subtitle_supplemental";
	.
map:versions_subtitle_language a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:subtitle;
	d2rq:property po:subtitle_language;
	d2rq:column "versions.subtitle_language";
	.
map:versions_created_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:creation_date;
	d2rq:column "versions.created_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "versions.created_at != '0000'";
	.
map:versions_updated_at a d2rq:PropertyBridge;
	d2rq:belongsToClassMap map:versions;
	d2rq:property po:update_date;
	d2rq:column "versions.updated_at";
	d2rq:datatype xsd:dateTime;
	d2rq:condition "versions.updated_at != '0000'";
	.