annotate onto/doc/mapping.n3 @ 19:1e79ce3ff5f5 tip

Simplify and cut some non-working resource paths
author Chris Cannam
date Wed, 08 Nov 2017 15:27:23 +0000
parents 1e44d666ced1
children
rev   line source
Chris@0 1 @prefix map: <file:///stdout#> .
Chris@0 2 @prefix d2r: <http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2r-server/config.rdf#> .
Chris@0 3 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
Chris@0 4 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
Chris@0 5 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
Chris@0 6 @prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .
Chris@0 7 @prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
Chris@0 8 @prefix foaf: <http://xmlns.com/foaf/0.1/>.
Chris@0 9 @prefix vs: <http://www.w3.org/2003/06/sw-vocab-status/ns#>.
Chris@0 10 @prefix tl: <http://purl.org/NET/c4dm/timeline.owl#>.
Chris@0 11 @prefix event: <http://purl.org/NET/c4dm/event.owl#>.
Chris@0 12 @prefix dc: <http://purl.org/dc/elements/1.1/>.
Chris@0 13 @prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>.
Chris@0 14 @prefix tags: <http://www.holygoat.co.uk/owl/redwood/0.1/tags/>.
Chris@0 15 @prefix po: <http://purl.org/ontology/po/>.
Chris@0 16 @prefix skos: <http://www.w3.org/2004/02/skos/core#>.
Chris@0 17 @prefix owl: <http://www.w3.org/2002/07/owl#>.
Chris@0 18
Chris@0 19 #
Chris@0 20 # A D2R mapping for the /programmes database,
Chris@0 21 # allowing to map this database to RDF designed
Chris@0 22 # according to the Programme ontology available at
Chris@0 23 #
Chris@0 24 # http://purl.org/ontology/po/
Chris@0 25 #
Chris@0 26 # This mapping is available under a Creative Commons
Chris@0 27 # Attribution License (CCBY).
Chris@0 28 #
Chris@0 29 # Copyright (c) Yves Raimond, BBC, November 2007
Chris@0 30 #
Chris@0 31
Chris@0 32
Chris@0 33 <> a d2r:Server;
Chris@0 34 rdfs:label "PIPS RDF view";
Chris@0 35 d2r:port "2021";
Chris@0 36 d2r:documentMetadata [
Chris@0 37 rdfs:comment "This instance of a D2R server provides a RDF view of the PIPS database";
Chris@0 38 ];
Chris@0 39 .
Chris@0 40
Chris@0 41 map:database a d2rq:Database;
Chris@0 42 d2rq:jdbcDriver "com.mysql.jdbc.Driver";
Chris@0 43 d2rq:jdbcDSN "jdbc:mysql://localhost/pips";
Chris@0 44 d2rq:username "moustaki";
Chris@0 45 d2rq:resultSizeLimit "500"; # Just for my laptop to not die horribly
Chris@0 46 .
Chris@0 47
Chris@0 48
Chris@0 49 # Dropped from the database dump, for now:
Chris@0 50 # * Versioning info
Chris@0 51 # * Collections
Chris@0 52 # * opt_out_url
Chris@0 53 # * brands_occurence
Chris@0 54 # * pip_formatid
Chris@0 55 # * all ids (in URI)
Chris@0 56 # * pip_genreid
Chris@0 57 # * api_public_name
Chris@0 58 # * is_publication_outlet
Chris@0 59 # * pit_id
Chris@0 60
Chris@0 61
Chris@0 62 # Mapping of the brands table
Chris@0 63
Chris@0 64 # mysql> describe brands;
Chris@0 65 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 66 # | Field | Type | Null | Key | Default | Extra |
Chris@0 67 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 68 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 69 # | pid | varchar(8) | NO | UNI | | |
Chris@0 70 # | title | varchar(255) | NO | | | |
Chris@0 71 # | short_synopsis | text | YES | | NULL | |
Chris@0 72 # | medium_synopsis | text | YES | | NULL | |
Chris@0 73 # | long_synopsis | text | YES | | NULL | |
Chris@0 74 # | occurrence | text | YES | | NULL | |
Chris@0 75 # | service_id | int(11) | YES | MUL | NULL | |
Chris@0 76 # | opt_out_url | varchar(255) | YES | | NULL | |
Chris@0 77 # | created_at | datetime | NO | | | |
Chris@0 78 # | updated_at | datetime | NO | | | |
Chris@0 79 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 80
Chris@0 81
Chris@0 82 # To :
Chris@0 83 #
Chris@0 84 # po:Brand
Chris@0 85 # rdfs:label
Chris@0 86 # foaf:homepage
Chris@0 87 # po:pid
Chris@0 88 # dc:title
Chris@0 89 # po:short_synopsis
Chris@0 90 # po:medium_synopsis
Chris@0 91 # po:long_synopsis
Chris@0 92 # po:service
Chris@0 93 # po:creation_date
Chris@0 94 # po:update_date
Chris@0 95 #
Chris@0 96
Chris@0 97 map:brands a d2rq:ClassMap;
Chris@0 98 d2rq:dataStorage map:database;
Chris@0 99 d2rq:uriPattern "brand/@@brands.id@@";
Chris@0 100 d2rq:class po:Brand;
Chris@0 101 .
Chris@0 102 map:brands__label a d2rq:PropertyBridge;
Chris@0 103 d2rq:belongsToClassMap map:brands;
Chris@0 104 d2rq:property rdfs:label;
Chris@0 105 d2rq:column "brands.title";
Chris@0 106 .
Chris@0 107 map:brands_html a d2rq:PropertyBridge;
Chris@0 108 d2rq:belongsToClassMap map:brands;
Chris@0 109 d2rq:property foaf:homepage;
Chris@0 110 d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@brands.pid@@";
Chris@0 111 .
Chris@0 112 map:brands_pid a d2rq:PropertyBridge;
Chris@0 113 d2rq:belongsToClassMap map:brands;
Chris@0 114 d2rq:property po:pid;
Chris@0 115 d2rq:column "brands.pid";
Chris@0 116 .
Chris@0 117 map:brands_title a d2rq:PropertyBridge;
Chris@0 118 d2rq:belongsToClassMap map:brands;
Chris@0 119 d2rq:property dc:title;
Chris@0 120 d2rq:column "brands.title";
Chris@0 121 .
Chris@0 122 map:brands_short_synopsis a d2rq:PropertyBridge;
Chris@0 123 d2rq:belongsToClassMap map:brands;
Chris@0 124 d2rq:property po:short_synopsis;
Chris@0 125 d2rq:column "brands.short_synopsis";
Chris@0 126 .
Chris@0 127 map:brands_medium_synopsis a d2rq:PropertyBridge;
Chris@0 128 d2rq:belongsToClassMap map:brands;
Chris@0 129 d2rq:property po:medium_synopsis;
Chris@0 130 d2rq:column "brands.medium_synopsis";
Chris@0 131 .
Chris@0 132 map:brands_long_synopsis a d2rq:PropertyBridge;
Chris@0 133 d2rq:belongsToClassMap map:brands;
Chris@0 134 d2rq:property po:long_synopsis;
Chris@0 135 d2rq:column "brands.long_synopsis";
Chris@0 136 .
Chris@0 137 map:brands_service_id a d2rq:PropertyBridge;
Chris@0 138 d2rq:belongsToClassMap map:brands;
Chris@0 139 d2rq:property po:service;
Chris@0 140 d2rq:refersToClassMap map:services;
Chris@0 141 d2rq:join "brands.service_id = services.id";
Chris@0 142 .
Chris@0 143 map:brands_created_at a d2rq:PropertyBridge;
Chris@0 144 d2rq:belongsToClassMap map:brands;
Chris@0 145 d2rq:property po:creation_date;
Chris@0 146 d2rq:column "brands.created_at";
Chris@0 147 d2rq:datatype xsd:dateTime;
Chris@0 148 d2rq:condition "brands.created_at != '0000'";
Chris@0 149 .
Chris@0 150 map:brands_updated_at a d2rq:PropertyBridge;
Chris@0 151 d2rq:belongsToClassMap map:brands;
Chris@0 152 d2rq:property po:update_date;
Chris@0 153 d2rq:column "brands.updated_at";
Chris@0 154 d2rq:datatype xsd:dateTime;
Chris@0 155 d2rq:condition "brands.updated_at != '0000'";
Chris@0 156 .
Chris@0 157 # Mapping the table brand_titles
Chris@0 158
Chris@0 159 # mysql> describe brand_titles;
Chris@0 160 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 161 # | Field | Type | Null | Key | Default | Extra |
Chris@0 162 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 163 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 164 # | brand_id | int(11) | NO | MUL | 0 | |
Chris@0 165 # | title | varchar(255) | NO | | | |
Chris@0 166 # | slice_title | varchar(255) | NO | MUL | | |
Chris@0 167 # | letter | char(1) | NO | MUL | | |
Chris@0 168 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 169
Chris@0 170 # To:
Chris@0 171 #
Chris@0 172 # po:Brand
Chris@0 173 # po:sort_title
Chris@0 174 # po:slice_title
Chris@0 175 # po:letter
Chris@0 176 #
Chris@0 177
Chris@0 178 map:brand_titles_title a d2rq:PropertyBridge;
Chris@0 179 d2rq:belongsToClassMap map:brands;
Chris@0 180 d2rq:property po:sort_title;
Chris@0 181 d2rq:column "brand_titles.title";
Chris@0 182 d2rq:join "brand_titles.brand_id = brands.id";
Chris@0 183 .
Chris@0 184 map:brand_titles_slice_title a d2rq:PropertyBridge;
Chris@0 185 d2rq:belongsToClassMap map:brands;
Chris@0 186 d2rq:property po:slice_title;
Chris@0 187 d2rq:column "brand_titles.slice_title";
Chris@0 188 d2rq:join "brand_titles.brand_id = brands.id";
Chris@0 189 .
Chris@0 190 map:brand_titles_letter a d2rq:PropertyBridge;
Chris@0 191 d2rq:belongsToClassMap map:brands;
Chris@0 192 d2rq:property po:letter;
Chris@0 193 d2rq:column "brand_titles.letter";
Chris@0 194 d2rq:join "brand_titles.brand_id = brands.id";
Chris@0 195 .
Chris@0 196
Chris@0 197 # Mapping the table collections
Chris@0 198
Chris@0 199 # mysql> describe collections;
Chris@0 200 # +----------------+---------+------+-----+---------+----------------+
Chris@0 201 # | Field | Type | Null | Key | Default | Extra |
Chris@0 202 # +----------------+---------+------+-----+---------+----------------+
Chris@0 203 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 204 # | episode_id | int(11) | NO | UNI | 0 | |
Chris@0 205 # | brand_id | int(11) | YES | MUL | NULL | |
Chris@0 206 # | series_id | int(11) | YES | MUL | NULL | |
Chris@0 207 # | base_series_id | int(11) | YES | MUL | NULL | |
Chris@0 208 # +----------------+---------+------+-----+---------+----------------+
Chris@0 209
Chris@0 210 # To :
Chris@0 211 #
Chris@0 212 # po:Brand
Chris@0 213 # po:episode
Chris@0 214 # po:Series
Chris@0 215 # po:episode
Chris@0 216 # po:Brand
Chris@0 217 # po:series
Chris@0 218
Chris@0 219 # TODO:
Chris@0 220 # * is that right to consider base_series_id as being implicit
Chris@0 221 # in the series hierarchy?
Chris@0 222
Chris@0 223 map:brand_collection_episode a d2rq:PropertyBridge;
Chris@0 224 d2rq:belongsToClassMap map:brands;
Chris@0 225 d2rq:property po:episode;
Chris@0 226 d2rq:uriPattern "episode/@@collections.episode_id@@";
Chris@0 227 d2rq:join "collections.brand_id = brands.id";
Chris@0 228 .
Chris@0 229 map:series_collection_episode a d2rq:PropertyBridge;
Chris@0 230 d2rq:belongsToClassMap map:series;
Chris@0 231 d2rq:property po:episode;
Chris@0 232 d2rq:uriPattern "episode/@@collections.episode_id@@";
Chris@0 233 d2rq:join "collections.series_id = series.id";
Chris@0 234 .
Chris@0 235 map:brands_collection_series a d2rq:PropertyBridge;
Chris@0 236 d2rq:belongsToClassMap map:brands;
Chris@0 237 d2rq:property po:series;
Chris@0 238 d2rq:uriPattern "series/@@collections.series_id@@";
Chris@0 239 d2rq:join "collections.brand_id = brands.id";
Chris@0 240 .
Chris@0 241 map:series_collection_baseseries a d2rq:PropertyBridge;
Chris@0 242 d2rq:belongsToClassMap map:series;
Chris@0 243 d2rq:property po:episode;
Chris@0 244 d2rq:uriPattern "episode/@@collections.episode_id@@";
Chris@0 245 d2rq:join "collections.base_series_id = series.id";
Chris@0 246 .
Chris@0 247
Chris@0 248
Chris@0 249 # Mapping the table broadcasts
Chris@0 250
Chris@0 251 # mysql> describe broadcasts;
Chris@0 252 # +---------------+--------------+------+-----+---------------------+----------------+
Chris@0 253 # | Field | Type | Null | Key | Default | Extra |
Chris@0 254 # +---------------+--------------+------+-----+---------------------+----------------+
Chris@0 255 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 256 # | start | datetime | NO | MUL | 0000-00-00 00:00:00 | |
Chris@0 257 # | end | datetime | NO | MUL | 0000-00-00 00:00:00 | |
Chris@0 258 # | duration | int(11) | NO | | 0 | |
Chris@0 259 # | is_repeat | tinyint(1) | YES | | NULL | |
Chris@0 260 # | schedule_date | date | NO | | 0000-00-00 | |
Chris@0 261 # | version_id | int(11) | NO | MUL | 0 | |
Chris@0 262 # | service_id | int(11) | NO | MUL | 0 | |
Chris@0 263 # | pid_imi | varchar(255) | NO | UNI | | |
Chris@0 264 # | created_at | datetime | NO | | | |
Chris@0 265 # | updated_at | datetime | NO | | | |
Chris@0 266 # +---------------+--------------+------+-----+---------------------+----------------+
Chris@0 267
Chris@0 268 # To:
Chris@0 269 # po:Broadcast
Chris@0 270 # rdfs:label
Chris@0 271 # event:time
Chris@0 272 # po:schedule_date
Chris@0 273 # po:broadcast_of
Chris@0 274 # po:broadcasted_on
Chris@0 275 # po:pid_imi
Chris@0 276 # po:creation_date
Chris@0 277 # po:update_date
Chris@0 278 # tl:Interval
Chris@0 279 # tl:start
Chris@0 280 # tl:end
Chris@0 281 # tl:duration
Chris@0 282 # po:FirstBroadcast
Chris@0 283 # po:RepeatBroadcast
Chris@0 284
Chris@0 285 # TODO:
Chris@0 286 # * Should the schedule date be a factor of the broadcast event?
Chris@0 287
Chris@0 288 map:broadcasts a d2rq:ClassMap;
Chris@0 289 d2rq:dataStorage map:database;
Chris@0 290 d2rq:uriPattern "broadcast/@@broadcasts.id@@";
Chris@0 291 d2rq:class po:Broadcast;
Chris@0 292 .
Chris@0 293 map:broadcasts__label a d2rq:PropertyBridge;
Chris@0 294 d2rq:belongsToClassMap map:broadcasts;
Chris@0 295 d2rq:property rdfs:label;
Chris@0 296 d2rq:pattern "broadcasts #@@broadcasts.id@@"; # <<<<<<<<
Chris@0 297 .
Chris@0 298 map:broadcast_event_time a d2rq:PropertyBridge;
Chris@0 299 d2rq:belongsToClassMap map:broadcasts;
Chris@0 300 d2rq:property event:time;
Chris@0 301 d2rq:uriPattern "time/@@broadcasts.id@@"; # <<<<<<<<<<<<<< PROBLEM
Chris@0 302 .
Chris@0 303 map:broadcast_time a d2rq:ClassMap;
Chris@0 304 d2rq:dataStorage map:database;
Chris@0 305 d2rq:uriPattern "time/@@broadcasts.id@@";
Chris@0 306 d2rq:class tl:Interval;
Chris@0 307 .
Chris@0 308 map:broadcasts_start a d2rq:PropertyBridge;
Chris@0 309 d2rq:belongsToClassMap map:broadcast_time;
Chris@0 310 d2rq:property tl:start;
Chris@0 311 d2rq:column "broadcasts.start";
Chris@0 312 d2rq:datatype xsd:dateTime;
Chris@0 313 d2rq:condition "broadcasts.start != '0000'";
Chris@0 314 .
Chris@0 315 map:broadcasts_end a d2rq:PropertyBridge;
Chris@0 316 d2rq:belongsToClassMap map:broadcast_time;
Chris@0 317 d2rq:property tl:end;
Chris@0 318 d2rq:column "broadcasts.end";
Chris@0 319 d2rq:datatype xsd:dateTime;
Chris@0 320 d2rq:condition "broadcasts.end != '0000'";
Chris@0 321 .
Chris@0 322 map:broadcasts_duration a d2rq:PropertyBridge;
Chris@0 323 d2rq:belongsToClassMap map:broadcast_time;
Chris@0 324 d2rq:property tl:duration;
Chris@0 325 d2rq:column "broadcasts.duration";
Chris@0 326 d2rq:datatype xsd:int;
Chris@0 327 .
Chris@0 328 map:first_broadcast a d2rq:ClassMap;
Chris@0 329 d2rq:dataStorage map:database;
Chris@0 330 d2rq:uriPattern "broadcast/@@broadcasts.id@@";
Chris@0 331 d2rq:class po:FirstBroadcast;
Chris@0 332 d2rq:condition "broadcasts.is_repeat = '0'";
Chris@0 333 .
Chris@0 334 map:repeated_broadcast a d2rq:ClassMap;
Chris@0 335 d2rq:dataStorage map:database;
Chris@0 336 d2rq:uriPattern "broadcast/@@broadcasts.id@@";
Chris@0 337 d2rq:class po:RepeatBroadcast;
Chris@0 338 d2rq:condition "broadcasts.is_repeat = '1'";
Chris@0 339 .
Chris@0 340 map:broadcasts_schedule_date a d2rq:PropertyBridge;
Chris@0 341 d2rq:belongsToClassMap map:broadcasts;
Chris@0 342 d2rq:property po:schedule_date;
Chris@0 343 d2rq:column "broadcasts.schedule_date";
Chris@0 344 d2rq:datatype xsd:date;
Chris@0 345 d2rq:condition "broadcasts.schedule_date != '0000'";
Chris@0 346 .
Chris@0 347 map:broadcasts_version_id a d2rq:PropertyBridge;
Chris@0 348 d2rq:belongsToClassMap map:broadcasts;
Chris@0 349 d2rq:property po:broadcast_of;
Chris@0 350 d2rq:refersToClassMap map:versions;
Chris@0 351 d2rq:join "broadcasts.version_id = versions.id";
Chris@0 352 .
Chris@0 353 map:broadcasts_service_id a d2rq:PropertyBridge;
Chris@0 354 d2rq:belongsToClassMap map:broadcasts;
Chris@0 355 d2rq:property po:broadcasted_on;
Chris@0 356 d2rq:refersToClassMap map:services;
Chris@0 357 d2rq:join "broadcasts.service_id = services.id";
Chris@0 358 .
Chris@0 359 map:broadcasts_pid_imi a d2rq:PropertyBridge;
Chris@0 360 d2rq:belongsToClassMap map:broadcasts;
Chris@0 361 d2rq:property po:pid_imi;
Chris@0 362 d2rq:column "broadcasts.pid_imi";
Chris@0 363 .
Chris@0 364 map:broadcasts_created_at a d2rq:PropertyBridge;
Chris@0 365 d2rq:belongsToClassMap map:broadcasts;
Chris@0 366 d2rq:property po:creation_date;
Chris@0 367 d2rq:column "broadcasts.created_at";
Chris@0 368 d2rq:datatype xsd:dateTime;
Chris@0 369 d2rq:condition "broadcasts.created_at != '0000'";
Chris@0 370 .
Chris@0 371 map:broadcasts_updated_at a d2rq:PropertyBridge;
Chris@0 372 d2rq:belongsToClassMap map:broadcasts;
Chris@0 373 d2rq:property po:update_date;
Chris@0 374 d2rq:column "broadcasts.updated_at";
Chris@0 375 d2rq:datatype xsd:dateTime;
Chris@0 376 d2rq:condition "broadcasts.updated_at != '0000'";
Chris@0 377 .
Chris@0 378
Chris@0 379 # Mapping the table episodes
Chris@0 380
Chris@0 381 # mysql> describe episodes;
Chris@0 382 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 383 # | Field | Type | Null | Key | Default | Extra |
Chris@0 384 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 385 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 386 # | title | varchar(255) | NO | | | |
Chris@0 387 # | short_synopsis | text | YES | | NULL | |
Chris@0 388 # | medium_synopsis | text | YES | | NULL | |
Chris@0 389 # | long_synopsis | text | YES | | NULL | |
Chris@0 390 # | pid | varchar(8) | NO | UNI | | |
Chris@0 391 # | position | int(11) | YES | | NULL | |
Chris@0 392 # | service_id | int(11) | YES | MUL | NULL | |
Chris@0 393 # | opt_out_url | varchar(255) | YES | | NULL | |
Chris@0 394 # | created_at | datetime | NO | | | |
Chris@0 395 # | updated_at | datetime | NO | | | |
Chris@0 396 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 397
Chris@0 398 # To :
Chris@0 399 # po:Episode
Chris@0 400 # rdfs:label
Chris@0 401 # foaf:homepage
Chris@0 402 # dc:title
Chris@0 403 # po:short_synopsis
Chris@0 404 # po:medium_synopsis
Chris@0 405 # po:long_synopsis
Chris@0 406 # po:pid
Chris@0 407 # po:position
Chris@0 408 # po:service
Chris@0 409 # po:creation_date
Chris@0 410 # po:update_date
Chris@0 411
Chris@0 412 map:episodes a d2rq:ClassMap;
Chris@0 413 d2rq:dataStorage map:database;
Chris@0 414 d2rq:uriPattern "episode/@@episodes.id@@";
Chris@0 415 d2rq:class po:Episode;
Chris@0 416 .
Chris@0 417 map:episodes__label a d2rq:PropertyBridge;
Chris@0 418 d2rq:belongsToClassMap map:episodes;
Chris@0 419 d2rq:property rdfs:label;
Chris@0 420 d2rq:column "episodes.title";
Chris@0 421 .
Chris@0 422 map:episodes_html a d2rq:PropertyBridge;
Chris@0 423 d2rq:belongsToClassMap map:episodes;
Chris@0 424 d2rq:property foaf:homepage;
Chris@0 425 d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@episodes.pid@@";
Chris@0 426 .
Chris@0 427 map:episodes_title a d2rq:PropertyBridge;
Chris@0 428 d2rq:belongsToClassMap map:episodes;
Chris@0 429 d2rq:property dc:title;
Chris@0 430 d2rq:column "episodes.title";
Chris@0 431 .
Chris@0 432 map:episodes_short_synopsis a d2rq:PropertyBridge;
Chris@0 433 d2rq:belongsToClassMap map:episodes;
Chris@0 434 d2rq:property po:short_synopsis;
Chris@0 435 d2rq:column "episodes.short_synopsis";
Chris@0 436 .
Chris@0 437 map:episodes_medium_synopsis a d2rq:PropertyBridge;
Chris@0 438 d2rq:belongsToClassMap map:episodes;
Chris@0 439 d2rq:property po:medium_synopsis;
Chris@0 440 d2rq:column "episodes.medium_synopsis";
Chris@0 441 .
Chris@0 442 map:episodes_long_synopsis a d2rq:PropertyBridge;
Chris@0 443 d2rq:belongsToClassMap map:episodes;
Chris@0 444 d2rq:property po:long_synopsis;
Chris@0 445 d2rq:column "episodes.long_synopsis";
Chris@0 446 .
Chris@0 447 map:episodes_pid a d2rq:PropertyBridge;
Chris@0 448 d2rq:belongsToClassMap map:episodes;
Chris@0 449 d2rq:property po:pid;
Chris@0 450 d2rq:column "episodes.pid";
Chris@0 451 .
Chris@0 452 map:episodes_position a d2rq:PropertyBridge;
Chris@0 453 d2rq:belongsToClassMap map:episodes;
Chris@0 454 d2rq:property po:position;
Chris@0 455 d2rq:column "episodes.position";
Chris@0 456 d2rq:datatype xsd:int;
Chris@0 457 .
Chris@0 458 map:episodes_service_id a d2rq:PropertyBridge;
Chris@0 459 d2rq:belongsToClassMap map:episodes;
Chris@0 460 d2rq:property po:service;
Chris@0 461 d2rq:refersToClassMap map:services;
Chris@0 462 d2rq:join "episodes.service_id = services.id";
Chris@0 463 .
Chris@0 464 map:episodes_created_at a d2rq:PropertyBridge;
Chris@0 465 d2rq:belongsToClassMap map:episodes;
Chris@0 466 d2rq:property po:creation_date;
Chris@0 467 d2rq:column "episodes.created_at";
Chris@0 468 d2rq:datatype xsd:dateTime;
Chris@0 469 d2rq:condition "episodes.created_at != '0000'";
Chris@0 470 .
Chris@0 471 map:episodes_updated_at a d2rq:PropertyBridge;
Chris@0 472 d2rq:belongsToClassMap map:episodes;
Chris@0 473 d2rq:property po:update_date;
Chris@0 474 d2rq:column "episodes.updated_at";
Chris@0 475 d2rq:datatype xsd:dateTime;
Chris@0 476 d2rq:condition "episodes.updated_at != '0000'";
Chris@0 477 .
Chris@0 478 # Mapping the table episode_title
Chris@0 479
Chris@0 480 # mysql> describe episode_titles;
Chris@0 481 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 482 # | Field | Type | Null | Key | Default | Extra |
Chris@0 483 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 484 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 485 # | episode_id | int(11) | NO | MUL | 0 | |
Chris@0 486 # | title | varchar(255) | NO | | | |
Chris@0 487 # | slice_title | varchar(255) | NO | MUL | | |
Chris@0 488 # | letter | char(1) | NO | MUL | | |
Chris@0 489 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 490
Chris@0 491 # To:
Chris@0 492 # po:Episode
Chris@0 493 # po:sort_title
Chris@0 494 # po:slice_title
Chris@0 495 # po:letter
Chris@0 496
Chris@0 497 map:episode_titles_title a d2rq:PropertyBridge;
Chris@0 498 d2rq:belongsToClassMap map:episodes;
Chris@0 499 d2rq:property po:sort_title;
Chris@0 500 d2rq:column "episode_titles.title";
Chris@0 501 d2rq:join "episode_titles.episode_id = episodes.id";
Chris@0 502 .
Chris@0 503 map:episode_titles_slice_title a d2rq:PropertyBridge;
Chris@0 504 d2rq:belongsToClassMap map:episodes;
Chris@0 505 d2rq:property po:slice_title;
Chris@0 506 d2rq:column "episode_titles.slice_title";
Chris@0 507 d2rq:join "episode_titles.episode_id = episodes.id";
Chris@0 508 .
Chris@0 509 map:episode_titles_letter a d2rq:PropertyBridge;
Chris@0 510 d2rq:belongsToClassMap map:episodes;
Chris@0 511 d2rq:property po:letter;
Chris@0 512 d2rq:column "episode_titles.letter";
Chris@0 513 d2rq:join "episode_titles.episode_id = episodes.id";
Chris@0 514 .
Chris@0 515 # Mapping the table rpps_links (start/end date?)
Chris@0 516
Chris@0 517 # mysql> describe rpps_links;
Chris@0 518 # +-----------------+-------------+------+-----+---------+----------------+
Chris@0 519 # | Field | Type | Null | Key | Default | Extra |
Chris@0 520 # +-----------------+-------------+------+-----+---------+----------------+
Chris@0 521 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 522 # | episode_id | int(11) | NO | UNI | | |
Chris@0 523 # | rpps_id | int(11) | NO | UNI | | |
Chris@0 524 # | network_key | varchar(32) | NO | MUL | | |
Chris@0 525 # | file_key | varchar(64) | NO | | | |
Chris@0 526 # | available_start | datetime | NO | | | |
Chris@0 527 # | available_end | datetime | YES | | NULL | |
Chris@0 528 # +-----------------+-------------+------+-----+---------+----------------+
Chris@0 529
Chris@0 530 # To :
Chris@0 531 # po:Episode
Chris@0 532 # po:available_as
Chris@0 533
Chris@0 534 # TODO:
Chris@0 535 # * Dealing with start/end date?
Chris@0 536 # * It should surely be attached to a particular version!!!
Chris@0 537
Chris@0 538 map:episode_rpps a d2rq:PropertyBridge;
Chris@0 539 d2rq:belongsToClassMap map:episodes;
Chris@0 540 d2rq:property po:available_as;
Chris@0 541 d2rq:uriPattern "http://www.bbc.co.uk/radio/aod/@@rpps_links.network_key@@_aod.shtml?@@rpps_links.network_key@@/@@rpps_links.file_key@@";
Chris@0 542 d2rq:join "rpps_links.episode_id = episodes.id";
Chris@0 543 .
Chris@0 544
Chris@0 545
Chris@0 546 # Mapping the table formats
Chris@0 547
Chris@0 548 # mysql> describe formats;
Chris@0 549 # +--------------+--------------+------+-----+---------+----------------+
Chris@0 550 # | Field | Type | Null | Key | Default | Extra |
Chris@0 551 # +--------------+--------------+------+-----+---------+----------------+
Chris@0 552 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 553 # | title | varchar(255) | NO | | | |
Chris@0 554 # | url_key | varchar(255) | NO | UNI | | |
Chris@0 555 # | pip_formatid | varchar(8) | NO | UNI | | |
Chris@0 556 # +--------------+--------------+------+-----+---------+----------------+
Chris@0 557
Chris@0 558 # To :
Chris@0 559 # po:Format
Chris@0 560 # rdfs:label
Chris@0 561 # dc:title
Chris@0 562 # foaf:homepage
Chris@0 563
Chris@0 564 map:formats a d2rq:ClassMap;
Chris@0 565 d2rq:dataStorage map:database;
Chris@0 566 d2rq:uriPattern "format/@@formats.id@@";
Chris@0 567 d2rq:class po:Format;
Chris@0 568 .
Chris@0 569 map:formats__label a d2rq:PropertyBridge;
Chris@0 570 d2rq:belongsToClassMap map:formats;
Chris@0 571 d2rq:property rdfs:label;
Chris@0 572 d2rq:column "formats.title";
Chris@0 573 .
Chris@0 574 map:formats_title a d2rq:PropertyBridge;
Chris@0 575 d2rq:belongsToClassMap map:formats;
Chris@0 576 d2rq:property dc:title;
Chris@0 577 d2rq:column "formats.title";
Chris@0 578 .
Chris@0 579 map:formats_html a d2rq:PropertyBridge;
Chris@0 580 d2rq:belongsToClassMap map:formats;
Chris@0 581 d2rq:property foaf:homepage;
Chris@0 582 d2rq:uriPattern "http://www.bbc.co.uk/programmes/formats/@@formats.url_key@@";
Chris@0 583 .
Chris@0 584
Chris@0 585 # mapping the table formats_versions
Chris@0 586
Chris@0 587 # mysql> describe formats_versions;
Chris@0 588 # +------------+---------+------+-----+---------+-------+
Chris@0 589 # | Field | Type | Null | Key | Default | Extra |
Chris@0 590 # +------------+---------+------+-----+---------+-------+
Chris@0 591 # | version_id | int(11) | NO | PRI | 0 | |
Chris@0 592 # | format_id | int(11) | NO | PRI | 0 | |
Chris@0 593 # +------------+---------+------+-----+---------+-------+
Chris@0 594
Chris@0 595 # To :
Chris@0 596 # po:Version
Chris@0 597 # po:format
Chris@0 598
Chris@0 599 map:formats_versions a d2rq:PropertyBridge;
Chris@0 600 d2rq:belongsToClassMap map:versions;
Chris@0 601 d2rq:property po:format;
Chris@0 602 d2rq:refersToClassMap map:formats;
Chris@0 603 d2rq:join "formats.id = formats_versions.format_id";
Chris@0 604 d2rq:join "formats_versions.version_id = versions.id";
Chris@0 605 .
Chris@0 606
Chris@0 607 # Mapping the table genres
Chris@0 608
Chris@0 609 # mysql> describe genres;
Chris@0 610 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 611 # | Field | Type | Null | Key | Default | Extra |
Chris@0 612 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 613 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 614 # | parent_genre_id | int(11) | YES | MUL | NULL | |
Chris@0 615 # | title | varchar(255) | NO | | | |
Chris@0 616 # | url_key | varchar(255) | NO | MUL | | |
Chris@0 617 # | pip_genreid | varchar(8) | NO | UNI | | |
Chris@0 618 # +-----------------+--------------+------+-----+---------+----------------+
Chris@0 619
Chris@0 620 # To :
Chris@0 621 # skos:Concept
Chris@0 622 # rdfs:label
Chris@0 623 # skos:inScheme
Chris@0 624 # skos:narrower
Chris@0 625 # dc:title
Chris@0 626 # foaf:homepage
Chris@0 627
Chris@0 628 map:genres a d2rq:ClassMap;
Chris@0 629 d2rq:dataStorage map:database;
Chris@0 630 d2rq:uriPattern "genre/@@genres.id@@";
Chris@0 631 d2rq:class skos:Concept;
Chris@0 632 .
Chris@0 633 map:genres_inscheme a d2rq:PropertyBridge;
Chris@0 634 d2rq:belongsToClassMap map:genres;
Chris@0 635 d2rq:property skos:inScheme;
Chris@0 636 d2rq:uriPattern "http://purl.org/ontology/po/Genre";
Chris@0 637 .
Chris@0 638 map:genres__label a d2rq:PropertyBridge;
Chris@0 639 d2rq:belongsToClassMap map:genres;
Chris@0 640 d2rq:property rdfs:label;
Chris@0 641 d2rq:column "genres.title";
Chris@0 642 .
Chris@0 643 map:genres_html a d2rq:PropertyBridge;
Chris@0 644 d2rq:belongsToClassMap map:genres;
Chris@0 645 d2rq:property foaf:homepage;
Chris@0 646 d2rq:uriPattern "http://www.bbc.co.uk/programmes/genres/@@genres.url_key@@";
Chris@0 647 .
Chris@0 648 map:genres_parent_genre_id a d2rq:PropertyBridge;
Chris@0 649 d2rq:belongsToClassMap map:genres;
Chris@0 650 d2rq:property skos:narrower;
Chris@0 651 d2rq:refersToClassMap map:genres;
Chris@0 652 d2rq:alias "genres AS genres__alias";
Chris@0 653 d2rq:join "genres__alias.parent_genre_id = genres.id";
Chris@0 654 .
Chris@0 655 map:genres_title a d2rq:PropertyBridge;
Chris@0 656 d2rq:belongsToClassMap map:genres;
Chris@0 657 d2rq:property dc:title;
Chris@0 658 d2rq:column "genres.title";
Chris@0 659 .
Chris@0 660
Chris@0 661 # Mapping the table genres_versions
Chris@0 662
Chris@0 663 # mysql> describe genres_versions;
Chris@0 664 # +------------+---------+------+-----+---------+----------------+
Chris@0 665 # | Field | Type | Null | Key | Default | Extra |
Chris@0 666 # +------------+---------+------+-----+---------+----------------+
Chris@0 667 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 668 # | version_id | int(11) | NO | MUL | 0 | |
Chris@0 669 # | genre_id | int(11) | NO | MUL | 0 | |
Chris@0 670 # | genre1_id | int(11) | NO | MUL | 0 | |
Chris@0 671 # | genre2_id | int(11) | YES | MUL | NULL | |
Chris@0 672 # | genre3_id | int(11) | YES | MUL | NULL | |
Chris@0 673 # +------------+---------+------+-----+---------+----------------+
Chris@0 674
Chris@0 675 # To :
Chris@0 676 # po:Version
Chris@0 677 # po:genre
Chris@0 678
Chris@0 679 # TODO:
Chris@0 680 # * Different `genre' properties for each degree of association
Chris@0 681 # * Should be linked to episode, instead of genre?
Chris@0 682
Chris@0 683 map:genres_versions_genre_1 a d2rq:PropertyBridge; # <<<<< there should be different genre properties
Chris@0 684 d2rq:belongsToClassMap map:versions;
Chris@0 685 d2rq:property po:genre;
Chris@0 686 d2rq:refersToClassMap map:genres;
Chris@0 687 d2rq:join "genres_versions.genre_id = genres.id";
Chris@0 688 d2rq:join "genres_versions.version_id = versions.id";
Chris@0 689 .
Chris@0 690 map:genres_versions_genre1_id a d2rq:PropertyBridge;
Chris@0 691 d2rq:belongsToClassMap map:versions;
Chris@0 692 d2rq:property po:genre;
Chris@0 693 d2rq:refersToClassMap map:genres;
Chris@0 694 d2rq:join "genres_versions.genre1_id = genres.id";
Chris@0 695 d2rq:join "genres_versions.version_id = versions.id";
Chris@0 696 .
Chris@0 697 map:genres_versions_genre2_id a d2rq:PropertyBridge;
Chris@0 698 d2rq:belongsToClassMap map:versions;
Chris@0 699 d2rq:property po:genre;
Chris@0 700 d2rq:refersToClassMap map:genres;
Chris@0 701 d2rq:join "genres_versions.genre2_id = genres.id";
Chris@0 702 d2rq:join "genres_versions.version_id = versions.id";
Chris@0 703 .
Chris@0 704 map:genres_versions_genre3_id a d2rq:PropertyBridge;
Chris@0 705 d2rq:belongsToClassMap map:versions;
Chris@0 706 d2rq:property po:genre;
Chris@0 707 d2rq:refersToClassMap map:genres;
Chris@0 708 d2rq:join "genres_versions.genre3_id = genres.id";
Chris@0 709 d2rq:join "genres_versions.version_id = versions.id";
Chris@0 710 .
Chris@0 711
Chris@0 712
Chris@0 713 # Mapping the table series
Chris@0 714
Chris@0 715 # mysql> describe series;
Chris@0 716 # +------------------+--------------+------+-----+---------+----------------+
Chris@0 717 # | Field | Type | Null | Key | Default | Extra |
Chris@0 718 # +------------------+--------------+------+-----+---------+----------------+
Chris@0 719 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 720 # | parent_series_id | int(11) | YES | MUL | NULL | |
Chris@0 721 # | pid | varchar(8) | NO | UNI | | |
Chris@0 722 # | title | varchar(255) | NO | | | |
Chris@0 723 # | short_synopsis | text | YES | | NULL | |
Chris@0 724 # | medium_synopsis | text | YES | | NULL | |
Chris@0 725 # | long_synopsis | text | YES | | NULL | |
Chris@0 726 # | position | int(11) | YES | | NULL | |
Chris@0 727 # | service_id | int(11) | YES | MUL | NULL | |
Chris@0 728 # | opt_out_url | varchar(255) | YES | | NULL | |
Chris@0 729 # | created_at | datetime | NO | | | |
Chris@0 730 # | updated_at | datetime | NO | | | |
Chris@0 731 # +------------------+--------------+------+-----+---------+----------------+
Chris@0 732
Chris@0 733 # To :
Chris@0 734 # po:Series
Chris@0 735 # rdfs:label
Chris@0 736 # po:series
Chris@0 737 # po:pid
Chris@0 738 # dc:title
Chris@0 739 # po:short_synopsis
Chris@0 740 # po:medium_synopsis
Chris@0 741 # po:long_synopsis
Chris@0 742 # po:position
Chris@0 743 # po:service
Chris@0 744 # po:creation_date
Chris@0 745 # po:update_date
Chris@0 746
Chris@0 747 # TODO:
Chris@0 748 # * Filter out synopsis that do have an empty value (true for all other concepts
Chris@0 749 # holding such synopsis)
Chris@0 750
Chris@0 751 map:series a d2rq:ClassMap;
Chris@0 752 d2rq:dataStorage map:database;
Chris@0 753 d2rq:uriPattern "series/@@series.id@@";
Chris@0 754 d2rq:class po:Series;
Chris@0 755 .
Chris@0 756 map:series__label a d2rq:PropertyBridge;
Chris@0 757 d2rq:belongsToClassMap map:series;
Chris@0 758 d2rq:property rdfs:label;
Chris@0 759 d2rq:column "series.title";
Chris@0 760 .
Chris@0 761 map:series_html a d2rq:PropertyBridge;
Chris@0 762 d2rq:belongsToClassMap map:series;
Chris@0 763 d2rq:property foaf:homepage;
Chris@0 764 d2rq:uriPattern "http://www.bbc.co.uk/programmes/@@series.pid@@";
Chris@0 765 .
Chris@0 766 map:series_parent_series_id a d2rq:PropertyBridge;
Chris@0 767 d2rq:belongsToClassMap map:series;
Chris@0 768 d2rq:property po:series;
Chris@0 769 d2rq:refersToClassMap map:series;
Chris@0 770 d2rq:alias "series AS series__alias";
Chris@0 771 d2rq:join "series.id = series__alias.parent_series_id";
Chris@0 772 .
Chris@0 773 map:series_pid a d2rq:PropertyBridge;
Chris@0 774 d2rq:belongsToClassMap map:series;
Chris@0 775 d2rq:property po:pid;
Chris@0 776 d2rq:column "series.pid";
Chris@0 777 .
Chris@0 778 map:series_title a d2rq:PropertyBridge;
Chris@0 779 d2rq:belongsToClassMap map:series;
Chris@0 780 d2rq:property dc:title;
Chris@0 781 d2rq:column "series.title";
Chris@0 782 .
Chris@0 783 map:series_short_synopsis a d2rq:PropertyBridge;
Chris@0 784 d2rq:belongsToClassMap map:series;
Chris@0 785 d2rq:property po:short_synopsis;
Chris@0 786 d2rq:column "series.short_synopsis";
Chris@0 787 .
Chris@0 788 map:series_medium_synopsis a d2rq:PropertyBridge; # <<< condition on existence
Chris@0 789 d2rq:belongsToClassMap map:series;
Chris@0 790 d2rq:property po:medium_synopsis;
Chris@0 791 d2rq:column "series.medium_synopsis";
Chris@0 792 .
Chris@0 793 map:series_long_synopsis a d2rq:PropertyBridge;
Chris@0 794 d2rq:belongsToClassMap map:series;
Chris@0 795 d2rq:property po:long_synopsis;
Chris@0 796 d2rq:column "series.long_synopsis";
Chris@0 797 .
Chris@0 798 map:series_position a d2rq:PropertyBridge;
Chris@0 799 d2rq:belongsToClassMap map:series;
Chris@0 800 d2rq:property po:position;
Chris@0 801 d2rq:column "series.position";
Chris@0 802 d2rq:datatype xsd:int;
Chris@0 803 .
Chris@0 804 map:series_service_id a d2rq:PropertyBridge;
Chris@0 805 d2rq:belongsToClassMap map:series;
Chris@0 806 d2rq:property po:service;
Chris@0 807 d2rq:refersToClassMap map:services;
Chris@0 808 d2rq:join "series.service_id = services.id";
Chris@0 809 .
Chris@0 810 map:series_created_at a d2rq:PropertyBridge;
Chris@0 811 d2rq:belongsToClassMap map:series;
Chris@0 812 d2rq:property po:creation_date;
Chris@0 813 d2rq:column "series.created_at";
Chris@0 814 d2rq:datatype xsd:dateTime;
Chris@0 815 d2rq:condition "series.created_at != '0000'";
Chris@0 816 .
Chris@0 817 map:series_updated_at a d2rq:PropertyBridge;
Chris@0 818 d2rq:belongsToClassMap map:series;
Chris@0 819 d2rq:property po:update_date;
Chris@0 820 d2rq:column "series.updated_at";
Chris@0 821 d2rq:datatype xsd:dateTime;
Chris@0 822 d2rq:condition "series.updated_at != '0000'";
Chris@0 823 .
Chris@0 824
Chris@0 825 # Mapping the table series_titles
Chris@0 826
Chris@0 827 # mysql> describe series_titles;
Chris@0 828 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 829 # | Field | Type | Null | Key | Default | Extra |
Chris@0 830 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 831 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 832 # | series_id | int(11) | NO | MUL | 0 | |
Chris@0 833 # | title | varchar(255) | NO | | | |
Chris@0 834 # | slice_title | varchar(255) | NO | MUL | | |
Chris@0 835 # | letter | char(1) | NO | MUL | | |
Chris@0 836 # +-------------+--------------+------+-----+---------+----------------+
Chris@0 837
Chris@0 838 # To :
Chris@0 839 # po:Series
Chris@0 840 # po:sort_title
Chris@0 841 # po:slice_title
Chris@0 842 # po:letter
Chris@0 843
Chris@0 844 map:series_titles_title a d2rq:PropertyBridge;
Chris@0 845 d2rq:belongsToClassMap map:series;
Chris@0 846 d2rq:property po:sort_title;
Chris@0 847 d2rq:column "series_titles.title";
Chris@0 848 d2rq:join "series_titles.series_id = series.id";
Chris@0 849 .
Chris@0 850 map:series_titles_slice_title a d2rq:PropertyBridge;
Chris@0 851 d2rq:belongsToClassMap map:series;
Chris@0 852 d2rq:property po:slice_title;
Chris@0 853 d2rq:column "series_titles.slice_title";
Chris@0 854 d2rq:join "series_titles.series_id = series.id";
Chris@0 855 .
Chris@0 856 map:series_titles_letter a d2rq:PropertyBridge;
Chris@0 857 d2rq:belongsToClassMap map:series;
Chris@0 858 d2rq:property po:letter;
Chris@0 859 d2rq:column "series_titles.letter";
Chris@0 860 d2rq:join "series_titles.series_id = series.id";
Chris@0 861 .
Chris@0 862
Chris@0 863 # Mapping the table services
Chris@0 864
Chris@0 865 # mysql> describe services;
Chris@0 866 # +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+
Chris@0 867 # | Field | Type | Null | Key | Default | Extra |
Chris@0 868 # +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+
Chris@0 869 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 870 # | parent_service_id | int(11) | YES | MUL | NULL | |
Chris@0 871 # | title | varchar(64) | NO | | | |
Chris@0 872 # | api_public_name | varchar(32) | NO | UNI | | |
Chris@0 873 # | url_key | varchar(32) | NO | MUL | | |
Chris@0 874 # | outlet_url_key | varchar(32) | YES | MUL | NULL | |
Chris@0 875 # | is_publication_outlet | tinyint(4) | NO | | 1 | |
Chris@0 876 # | region | varchar(64) | YES | | NULL | |
Chris@0 877 # | service_type | enum('Local Radio','National Radio','Regional Radio','TV','Web Only','Master Brand Only') | YES | | NULL | |
Chris@0 878 # +-----------------------+-------------------------------------------------------------------------------------------+------+-----+---------+----------------+
Chris@0 879
Chris@0 880 # To:
Chris@0 881 # po:Service
Chris@0 882 # rdfs:label
Chris@0 883 # po:parent_service
Chris@0 884 # dc:title
Chris@0 885 # po:location
Chris@0 886 # po:TV
Chris@0 887 # po:LocalRadio
Chris@0 888 # po:RegionalRadio
Chris@0 889 # po:NationalRadio
Chris@0 890 # po:Web
Chris@0 891 # po:MasterBrand
Chris@0 892
Chris@0 893 # TODO:
Chris@0 894 # * All services are self-contained - this might not be a real issue, though
Chris@0 895 # * Sort out foaf:homepage
Chris@0 896
Chris@0 897 map:services a d2rq:ClassMap;
Chris@0 898 d2rq:dataStorage map:database;
Chris@0 899 d2rq:uriPattern "service/@@services.id@@";
Chris@0 900 d2rq:class po:Service;
Chris@0 901 .
Chris@0 902 map:services__label a d2rq:PropertyBridge;
Chris@0 903 d2rq:belongsToClassMap map:services;
Chris@0 904 d2rq:property rdfs:label;
Chris@0 905 d2rq:column "services.title";
Chris@0 906 .
Chris@0 907 #map:services_html a d2rq:PropertyBridge;
Chris@0 908 # d2rq:belongsToClassMap map:services;
Chris@0 909 # d2rq:property foaf:homepage;
Chris@0 910 # d2rq:uriPattern "http://www.bbc.co.uk/programmes/services/@@services.url_key@@";
Chris@0 911 # .
Chris@0 912 map:services_parent_service_id a d2rq:PropertyBridge; # <<<<< Why are all services self-contained??
Chris@0 913 d2rq:belongsToClassMap map:services;
Chris@0 914 d2rq:property po:parent_service;
Chris@0 915 d2rq:refersToClassMap map:services;
Chris@0 916 d2rq:alias "services AS services__alias";
Chris@0 917 d2rq:join "services.parent_service_id = services__alias.id";
Chris@0 918 .
Chris@0 919 map:services_title a d2rq:PropertyBridge;
Chris@0 920 d2rq:belongsToClassMap map:services;
Chris@0 921 d2rq:property dc:title;
Chris@0 922 d2rq:column "services.title";
Chris@0 923 .
Chris@0 924 map:services_region a d2rq:PropertyBridge; # <<<<<<<
Chris@0 925 d2rq:belongsToClassMap map:services;
Chris@0 926 d2rq:property po:location;
Chris@0 927 d2rq:translateWith map:location_table;
Chris@0 928 d2rq:uriColumn "services.region";
Chris@0 929 .
Chris@0 930 map:tv_service a d2rq:ClassMap;
Chris@0 931 d2rq:dataStorage map:database;
Chris@0 932 d2rq:uriPattern "service/@@services.id@@";
Chris@0 933 d2rq:class po:TV;
Chris@0 934 d2rq:condition "services.service_type = 'TV'";
Chris@0 935 .
Chris@0 936 map:local_service a d2rq:ClassMap;
Chris@0 937 d2rq:dataStorage map:database;
Chris@0 938 d2rq:uriPattern "service/@@services.id@@";
Chris@0 939 d2rq:class po:LocalRadio;
Chris@0 940 d2rq:condition "services.service_type = 'Local Radio'";
Chris@0 941 .
Chris@0 942 map:regional_service a d2rq:ClassMap;
Chris@0 943 d2rq:dataStorage map:database;
Chris@0 944 d2rq:uriPattern "service/@@services.id@@";
Chris@0 945 d2rq:class po:RegionalRadio;
Chris@0 946 d2rq:condition "services.service_type = 'Regional Radio'";
Chris@0 947 .
Chris@0 948 map:national_service a d2rq:ClassMap;
Chris@0 949 d2rq:dataStorage map:database;
Chris@0 950 d2rq:uriPattern "service/@@services.id@@";
Chris@0 951 d2rq:class po:NationalRadio;
Chris@0 952 d2rq:condition "services.service_type = 'National Radio'";
Chris@0 953 .
Chris@0 954 map:web_service a d2rq:ClassMap;
Chris@0 955 d2rq:dataStorage map:database;
Chris@0 956 d2rq:uriPattern "service/@@services.id@@";
Chris@0 957 d2rq:class po:Web;
Chris@0 958 d2rq:condition "services.service_type = 'Web Only'";
Chris@0 959 .
Chris@0 960 map:master_service a d2rq:ClassMap; # <<<< ?
Chris@0 961 d2rq:dataStorage map:database;
Chris@0 962 d2rq:uriPattern "service/@@services.id@@";
Chris@0 963 d2rq:class po:MasterBrand;
Chris@0 964 d2rq:condition "services.service_type = 'Master Brand Only'";
Chris@0 965 .
Chris@0 966
Chris@0 967 # Table for location mapping
Chris@0 968 map:location_table a d2rq:TranslationTable;
Chris@0 969 d2rq:translation [
Chris@0 970 d2rq:databaseValue "All regions";
Chris@0 971 d2rq:rdfValue <http://sws.geonames.org/2635167/>;
Chris@0 972 ];
Chris@0 973 d2rq:translation [
Chris@0 974 d2rq:databaseValue "All English Regions";
Chris@0 975 d2rq:rdfValue <http://sws.geonames.org/2635167/>; #??
Chris@0 976 ];
Chris@0 977 d2rq:translation [
Chris@0 978 d2rq:databaseValue "Northern Ireland";
Chris@0 979 d2rq:rdfValue <http://sws.geonames.org/2635167/>;
Chris@0 980 ];
Chris@0 981 d2rq:translation [
Chris@0 982 d2rq:databaseValue "Wales";
Chris@0 983 d2rq:rdfValue <http://sws.geonames.org/2635167/>;
Chris@0 984 ];
Chris@0 985 d2rq:translation [
Chris@0 986 d2rq:databaseValue "South West";
Chris@0 987 d2rq:rdfValue <http://sws.geonames.org/2637294/>; #South West peninsula?
Chris@0 988 ];
Chris@0 989 d2rq:translation [
Chris@0 990 d2rq:databaseValue "West Midlands";
Chris@0 991 d2rq:rdfValue <http://sws.geonames.org/2634343/>;
Chris@0 992 ];
Chris@0 993 d2rq:translation [
Chris@0 994 d2rq:databaseValue "East Midlands";
Chris@0 995 d2rq:rdfValue <http://sws.geonames.org/6296613/>;
Chris@0 996 ];
Chris@0 997 d2rq:translation [
Chris@0 998 d2rq:databaseValue "North East & Cumbria";
Chris@0 999 d2rq:rdfValue <http://sws.geonames.org/2651712/>;
Chris@0 1000 ];
Chris@0 1001 d2rq:translation [
Chris@0 1002 d2rq:databaseValue "Scotland";
Chris@0 1003 d2rq:rdfValue <http://sws.geonames.org/2638360/>;
Chris@0 1004 ];
Chris@0 1005 d2rq:translation [
Chris@0 1006 d2rq:databaseValue "Yorkshire";
Chris@0 1007 d2rq:rdfValue <http://sws.geonames.org/2641209/>;
Chris@0 1008 ];
Chris@0 1009 d2rq:translation [
Chris@0 1010 d2rq:databaseValue "Oxfordshire";
Chris@0 1011 d2rq:rdfValue <http://sws.geonames.org/2640726/>;
Chris@0 1012 ];
Chris@0 1013 d2rq:translation [
Chris@0 1014 d2rq:databaseValue "South East";
Chris@0 1015 d2rq:rdfValue <http://sws.geonames.org/2637438/>;
Chris@0 1016 ];
Chris@0 1017 d2rq:translation [
Chris@0 1018 d2rq:databaseValue "Cambridgeshire";
Chris@0 1019 d2rq:rdfValue <http://sws.geonames.org/2653940/>;
Chris@0 1020 ];
Chris@0 1021 d2rq:translation [
Chris@0 1022 d2rq:databaseValue "Channel Islands";
Chris@0 1023 d2rq:rdfValue <http://sws.geonames.org/3042400/>;
Chris@0 1024 ];
Chris@0 1025 d2rq:translation [
Chris@0 1026 d2rq:databaseValue "East Yorkshire & Lincolnshire";
Chris@0 1027 d2rq:rdfValue <http://sws.geonames.org/2644486/>;
Chris@0 1028 ];
Chris@0 1029 d2rq:translation [
Chris@0 1030 d2rq:databaseValue "Northern Ireland";
Chris@0 1031 d2rq:rdfValue <http://sws.geonames.org/2641364/>;
Chris@0 1032 ];
Chris@0 1033 d2rq:translation [
Chris@0 1034 d2rq:databaseValue "London";
Chris@0 1035 d2rq:rdfValue <http://sws.geonames.org/2643744/>;
Chris@0 1036 ];
Chris@0 1037 .
Chris@0 1038
Chris@0 1039 # Mapping the table taggings
Chris@0 1040
Chris@0 1041 # mysql> describe taggings;
Chris@0 1042 # +------------+----------+------+-----+---------------------+----------------+
Chris@0 1043 # | Field | Type | Null | Key | Default | Extra |
Chris@0 1044 # +------------+----------+------+-----+---------------------+----------------+
Chris@0 1045 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 1046 # | episode_id | int(11) | NO | MUL | 0 | |
Chris@0 1047 # | tag_id | int(11) | NO | MUL | 0 | |
Chris@0 1048 # | created | datetime | NO | | 0000-00-00 00:00:00 | |
Chris@0 1049 # | pit_id | int(11) | NO | UNI | 0 | |
Chris@0 1050 # +------------+----------+------+-----+---------------------+----------------+
Chris@0 1051
Chris@0 1052 # To:
Chris@0 1053 # tags:Tagging
Chris@0 1054 # rdfs:label
Chris@0 1055 # tags:tag
Chris@0 1056 # tags:associatedTag
Chris@0 1057 # tags:taggedOn
Chris@0 1058
Chris@0 1059 map:taggings a d2rq:ClassMap;
Chris@0 1060 d2rq:dataStorage map:database;
Chris@0 1061 d2rq:uriPattern "tagging/@@taggings.id@@";
Chris@0 1062 d2rq:class tags:Tagging;
Chris@0 1063 .
Chris@0 1064 map:taggings__label a d2rq:PropertyBridge;
Chris@0 1065 d2rq:belongsToClassMap map:taggings;
Chris@0 1066 d2rq:property rdfs:label;
Chris@0 1067 d2rq:pattern "taggings #@@taggings.id@@";
Chris@0 1068 .
Chris@0 1069 map:taggings_episode_id a d2rq:PropertyBridge;
Chris@0 1070 d2rq:belongsToClassMap map:episodes;
Chris@0 1071 d2rq:property tags:tag;
Chris@0 1072 d2rq:refersToClassMap map:taggings;
Chris@0 1073 d2rq:join "taggings.episode_id = episodes.id";
Chris@0 1074 .
Chris@0 1075 map:taggings_tag_id a d2rq:PropertyBridge;
Chris@0 1076 d2rq:belongsToClassMap map:taggings;
Chris@0 1077 d2rq:property tags:associatedTag;
Chris@0 1078 d2rq:refersToClassMap map:tags;
Chris@0 1079 d2rq:join "taggings.tag_id = tags.id";
Chris@0 1080 .
Chris@0 1081 map:taggings_created a d2rq:PropertyBridge;
Chris@0 1082 d2rq:belongsToClassMap map:taggings;
Chris@0 1083 d2rq:property tags:taggedOn;
Chris@0 1084 d2rq:column "taggings.created";
Chris@0 1085 d2rq:datatype xsd:dateTime;
Chris@0 1086 d2rq:condition "taggings.created != '0000'";
Chris@0 1087 .
Chris@0 1088
Chris@0 1089 # Mapping the table tags
Chris@0 1090
Chris@0 1091 # mysql> describe tags;
Chris@0 1092 # +---------+--------------+------+-----+---------+----------------+
Chris@0 1093 # | Field | Type | Null | Key | Default | Extra |
Chris@0 1094 # +---------+--------------+------+-----+---------+----------------+
Chris@0 1095 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 1096 # | title | varchar(255) | NO | | | |
Chris@0 1097 # | url_key | varchar(255) | NO | MUL | | |
Chris@0 1098 # | pit_id | int(11) | NO | UNI | 0 | |
Chris@0 1099 # +---------+--------------+------+-----+---------+----------------+
Chris@0 1100
Chris@0 1101 # To :
Chris@0 1102 # tags:Tag
Chris@0 1103 # rdfs:label
Chris@0 1104 # dc:title
Chris@0 1105
Chris@0 1106 # TODO:
Chris@0 1107 # * investigate the weird thing happening at http://www.bbc.co.uk/programmes/tags/john%20o'farrell
Chris@0 1108 # * most of the foaf:homepage point to non yet existing pages
Chris@0 1109
Chris@0 1110 map:tags a d2rq:ClassMap;
Chris@0 1111 d2rq:dataStorage map:database;
Chris@0 1112 d2rq:uriPattern "tag/@@tags.id@@";
Chris@0 1113 d2rq:class tags:Tag;
Chris@0 1114 .
Chris@0 1115 map:tags__label a d2rq:PropertyBridge;
Chris@0 1116 d2rq:belongsToClassMap map:tags;
Chris@0 1117 d2rq:property rdfs:label;
Chris@0 1118 d2rq:column "tags.title";
Chris@0 1119 .
Chris@0 1120 map:taggings_html a d2rq:PropertyBridge;
Chris@0 1121 d2rq:belongsToClassMap map:tags;
Chris@0 1122 d2rq:property foaf:homepage;
Chris@0 1123 d2rq:uriPattern "http://www.bbc.co.uk/programmes/tags/@@tags.url_key@@";
Chris@0 1124 .
Chris@0 1125 map:tags_title a d2rq:PropertyBridge;
Chris@0 1126 d2rq:belongsToClassMap map:tags;
Chris@0 1127 d2rq:property dc:title;
Chris@0 1128 d2rq:column "tags.title";
Chris@0 1129 .
Chris@0 1130
Chris@0 1131 # Mapping the table version_types
Chris@0 1132
Chris@0 1133 # mysql> describe version_types;
Chris@0 1134 # +---------------------+--------------+------+-----+---------+----------------+
Chris@0 1135 # | Field | Type | Null | Key | Default | Extra |
Chris@0 1136 # +---------------------+--------------+------+-----+---------+----------------+
Chris@0 1137 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 1138 # | pip_version_type_id | varchar(32) | NO | UNI | | |
Chris@0 1139 # | title | varchar(128) | YES | | | |
Chris@0 1140 # | synopsis | varchar(128) | YES | | NULL | |
Chris@0 1141 # +---------------------+--------------+------+-----+---------+----------------+
Chris@0 1142
Chris@0 1143 # And the table version_types_versions ...
Chris@0 1144
Chris@0 1145 # mysql> describe version_types_versions;
Chris@0 1146 # +-----------------+---------+------+-----+---------+-------+
Chris@0 1147 # | Field | Type | Null | Key | Default | Extra |
Chris@0 1148 # +-----------------+---------+------+-----+---------+-------+
Chris@0 1149 # | version_id | int(11) | NO | PRI | 0 | |
Chris@0 1150 # | version_type_id | int(11) | NO | PRI | 0 | |
Chris@0 1151 # +-----------------+---------+------+-----+---------+-------+
Chris@0 1152
Chris@0 1153 # To :
Chris@0 1154 # po:OriginalVersion
Chris@0 1155 # po:AudioDescribedVersion
Chris@0 1156 # po:SignedVersion
Chris@0 1157 # po:ShortenedVersion
Chris@0 1158
Chris@0 1159 map:original_version a d2rq:ClassMap;
Chris@0 1160 d2rq:dataStorage map:database;
Chris@0 1161 d2rq:uriPattern "version/@@versions.id@@";
Chris@0 1162 d2rq:class po:OriginalVersion;
Chris@0 1163 d2rq:condition "versions.id = version_types_versions.version_id";
Chris@0 1164 d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
Chris@0 1165 d2rq:condition "version_types.pip_version_type_id = 'Original'";
Chris@0 1166 .
Chris@0 1167 map:audiodesc_version a d2rq:ClassMap;
Chris@0 1168 d2rq:dataStorage map:database;
Chris@0 1169 d2rq:uriPattern "version/@@versions.id@@";
Chris@0 1170 d2rq:class po:AudioDescribedVersion;
Chris@0 1171 d2rq:condition "versions.id = version_types_versions.version_id";
Chris@0 1172 d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
Chris@0 1173 d2rq:condition "version_types.pip_version_type_id = 'AudioDescribed'";
Chris@0 1174 .
Chris@0 1175 map:signed_version a d2rq:ClassMap;
Chris@0 1176 d2rq:dataStorage map:database;
Chris@0 1177 d2rq:uriPattern "version/@@versions.id@@";
Chris@0 1178 d2rq:class po:SignedVersion;
Chris@0 1179 d2rq:condition "versions.id = version_types_versions.version_id";
Chris@0 1180 d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
Chris@0 1181 d2rq:condition "version_types.pip_version_type_id = 'Signed'";
Chris@0 1182 .
Chris@0 1183 map:shortened_version a d2rq:ClassMap;
Chris@0 1184 d2rq:dataStorage map:database;
Chris@0 1185 d2rq:uriPattern "version/@@versions.id@@";
Chris@0 1186 d2rq:class po:ShortenedVersion;
Chris@0 1187 d2rq:condition "versions.id = version_types_versions.version_id";
Chris@0 1188 d2rq:condition "version_types_versions.version_type_id = version_types.id" ;
Chris@0 1189 d2rq:condition "version_types.pip_version_type_id = 'Shortened'";
Chris@0 1190 .
Chris@0 1191
Chris@0 1192 # Mapping the table versions
Chris@0 1193
Chris@0 1194 # mysql> describe versions;
Chris@0 1195 # +-----------------------+-----------------------+------+-----+---------+----------------+
Chris@0 1196 # | Field | Type | Null | Key | Default | Extra |
Chris@0 1197 # +-----------------------+-----------------------+------+-----+---------+----------------+
Chris@0 1198 # | id | int(11) | NO | PRI | NULL | auto_increment |
Chris@0 1199 # | pid | varchar(8) | NO | UNI | | |
Chris@0 1200 # | episode_id | int(11) | NO | MUL | 0 | |
Chris@0 1201 # | duration | int(11) | YES | | NULL | |
Chris@0 1202 # | aspect_ratio | varchar(16) | YES | | NULL | |
Chris@0 1203 # | sound_format | varchar(64) | YES | | NULL | |
Chris@0 1204 # | subtitle_type | enum('open','closed') | YES | | NULL | |
Chris@0 1205 # | subtitle_supplemental | tinyint(1) | YES | | NULL | |
Chris@0 1206 # | subtitle_language | varchar(8) | YES | | NULL | |
Chris@0 1207 # | created_at | datetime | NO | | | |
Chris@0 1208 # | updated_at | datetime | NO | | | |
Chris@0 1209 # +-----------------------+-----------------------+------+-----+---------+----------------+
Chris@0 1210
Chris@0 1211 # To:
Chris@0 1212 # po:Version
Chris@0 1213 # rdfs:label
Chris@0 1214 # po:pid
Chris@0 1215 # po:version
Chris@0 1216 # po:duration
Chris@0 1217 # po:aspect_ratio
Chris@0 1218 # po:sound_format
Chris@0 1219 # po:creation_date
Chris@0 1220 # po:update_date
Chris@0 1221 # po:subtitle
Chris@0 1222 # po:Subtitle
Chris@0 1223 # po:subtitle_type
Chris@0 1224 # po:subtitle_supplemental
Chris@0 1225 # po:subtitle_language
Chris@0 1226
Chris@0 1227 map:versions a d2rq:ClassMap;
Chris@0 1228 d2rq:dataStorage map:database;
Chris@0 1229 d2rq:uriPattern "version/@@versions.id@@";
Chris@0 1230 d2rq:class po:Version;
Chris@0 1231 .
Chris@0 1232 map:versions__label a d2rq:PropertyBridge;
Chris@0 1233 d2rq:belongsToClassMap map:versions;
Chris@0 1234 d2rq:property rdfs:label;
Chris@0 1235 d2rq:pattern "versions #@@versions.id@@";
Chris@0 1236 .
Chris@0 1237 map:versions_pid a d2rq:PropertyBridge;
Chris@0 1238 d2rq:belongsToClassMap map:versions;
Chris@0 1239 d2rq:property po:pid;
Chris@0 1240 d2rq:column "versions.pid";
Chris@0 1241 .
Chris@0 1242 map:versions_episode_id a d2rq:PropertyBridge;
Chris@0 1243 d2rq:belongsToClassMap map:episodes;
Chris@0 1244 d2rq:property po:version;
Chris@0 1245 d2rq:refersToClassMap map:versions;
Chris@0 1246 d2rq:join "versions.episode_id = episodes.id";
Chris@0 1247 .
Chris@0 1248 map:versions_duration a d2rq:PropertyBridge;
Chris@0 1249 d2rq:belongsToClassMap map:versions;
Chris@0 1250 d2rq:property po:duration;
Chris@0 1251 d2rq:column "versions.duration";
Chris@0 1252 d2rq:datatype xsd:int;
Chris@0 1253 .
Chris@0 1254 map:versions_aspect_ratio a d2rq:PropertyBridge;
Chris@0 1255 d2rq:belongsToClassMap map:versions;
Chris@0 1256 d2rq:property po:aspect_ratio;
Chris@0 1257 d2rq:column "versions.aspect_ratio";
Chris@0 1258 .
Chris@0 1259 map:versions_sound_format a d2rq:PropertyBridge;
Chris@0 1260 d2rq:belongsToClassMap map:versions;
Chris@0 1261 d2rq:property po:sound_format;
Chris@0 1262 d2rq:column "versions.sound_format";
Chris@0 1263 .
Chris@0 1264 map:versions_subtitle a d2rq:PropertyBridge;
Chris@0 1265 d2rq:belongsToClassMap map:versions;
Chris@0 1266 d2rq:property po:subtitle;
Chris@0 1267 d2rq:uriPattern "subtitle/@@versions.id@@";
Chris@0 1268 .
Chris@0 1269 map:subtitle a d2rq:ClassMap;
Chris@0 1270 d2rq:dataStorage map:database;
Chris@0 1271 d2rq:uriPattern "subtitle/@@versions.id@@";
Chris@0 1272 d2rq:class po:Subtitle;
Chris@0 1273 .
Chris@0 1274 map:versions_subtitle_type a d2rq:PropertyBridge;
Chris@0 1275 d2rq:belongsToClassMap map:subtitle;
Chris@0 1276 d2rq:property po:subtitle_type;
Chris@0 1277 d2rq:column "versions.subtitle_type";
Chris@0 1278 .
Chris@0 1279 map:versions_subtitle_supplemental a d2rq:PropertyBridge;
Chris@0 1280 d2rq:belongsToClassMap map:subtitle;
Chris@0 1281 d2rq:property po:subtitle_supplemental;
Chris@0 1282 d2rq:column "versions.subtitle_supplemental";
Chris@0 1283 .
Chris@0 1284 map:versions_subtitle_language a d2rq:PropertyBridge;
Chris@0 1285 d2rq:belongsToClassMap map:subtitle;
Chris@0 1286 d2rq:property po:subtitle_language;
Chris@0 1287 d2rq:column "versions.subtitle_language";
Chris@0 1288 .
Chris@0 1289 map:versions_created_at a d2rq:PropertyBridge;
Chris@0 1290 d2rq:belongsToClassMap map:versions;
Chris@0 1291 d2rq:property po:creation_date;
Chris@0 1292 d2rq:column "versions.created_at";
Chris@0 1293 d2rq:datatype xsd:dateTime;
Chris@0 1294 d2rq:condition "versions.created_at != '0000'";
Chris@0 1295 .
Chris@0 1296 map:versions_updated_at a d2rq:PropertyBridge;
Chris@0 1297 d2rq:belongsToClassMap map:versions;
Chris@0 1298 d2rq:property po:update_date;
Chris@0 1299 d2rq:column "versions.updated_at";
Chris@0 1300 d2rq:datatype xsd:dateTime;
Chris@0 1301 d2rq:condition "versions.updated_at != '0000'";
Chris@0 1302 .
Chris@0 1303