summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2013-05-20 23:37:32 +0200
committerJonas Smedegaard <dr@jones.dk>2013-05-20 23:37:32 +0200
commitc2f6227e773263be2aeaf65057c01aac9d1b101b (patch)
treeb0f72764b5b29c5760a41e4a05bf4040acc0ef1e
Initial commit.
-rw-r--r--TODO23
-rwxr-xr-xbin/rdf2events213
-rwxr-xr-xbin/rdf2hours336
-rw-r--r--data/2013/dronning.ttl10
-rw-r--r--data/2013/kunstneruge.ttl11
-rw-r--r--data/2013/oroedag.ttl12
-rw-r--r--data/2013/togtet.ttl12
-rw-r--r--data/org/2012/folkedans.ttl68
-rw-r--r--data/org/2013/cykelklub.ttl19
-rw-r--r--data/org/2013/hestebedgaard.ttl50
-rw-r--r--data/org/2013/kirke.ttl14
-rw-r--r--data/org/2013/marlieses.ttl20
-rw-r--r--data/org/2013/mc.ttl15
-rw-r--r--data/org/artdoor.ttl24
-rw-r--r--data/org/bibliotek.ttl30
-rw-r--r--data/org/brugsen.ttl50
-rw-r--r--data/org/camping.ttl24
-rw-r--r--data/org/faergeHoebaek.ttl169
-rw-r--r--data/org/faergeOest.ttl23
-rw-r--r--data/org/folkedans.ttl29
-rw-r--r--data/org/gaardstronomi.ttl94
-rw-r--r--data/org/genbrugsplads.ttl56
-rw-r--r--data/org/hal.ttl25
-rw-r--r--data/org/havnegrill.ttl22
-rw-r--r--data/org/hestebedgaard.ttl42
-rw-r--r--data/org/kirke.ttl24
-rw-r--r--data/org/kro.ttl24
-rw-r--r--data/org/kunst.ttl10
-rw-r--r--data/org/marlieses.ttl43
-rw-r--r--data/org/mc.ttl14
-rw-r--r--data/org/oreokontor.ttl22
-rw-r--r--data/org/oroestrand.ttl30
-rw-r--r--data/org/ouroeminder.ttl21
-rw-r--r--data/org/spisestedet.ttl124
-rw-r--r--data/org/urtehaven.ttl36
-rw-r--r--data/person/JonasSmedegaard.ttl23
-rwxr-xr-xexamples/mkevents64
-rwxr-xr-xexamples/mkhours64
38 files changed, 1890 insertions, 0 deletions
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..a7f3884
--- /dev/null
+++ b/TODO
@@ -0,0 +1,23 @@
+ * Tilføje noter om opdateringsdato og kilde.
+ * Checke at "sommerhalvåret" for Galleri ArtDoor er maj-august.
+ * Checke om Orø_Camping_Ishuset er årstidsbegrænset
+ * Checke kilde for Dagli'Brugsen#mail
+ * Tilføje kategorier: interesseområde, institutionelt/kommercielt/frivilligt, etc.
+
+ * join hours for related entities (e.g. church + church office)
+ * include data from surrounding mainland
+
+ * scrape from <http://www.virk.dk/soeg.html?x=orø>
+ * scrape from <http://openhours.dk/spots?q=orø>
+ * scrape/verify from <http://www.oroe.s-10.dk/>
+ * scrape/verify from <http://www.kulturholbaek.dk/>
+ * scrape/verify from <http://holbaekonline.dk/>
+
+ * verify Orø_Bibliotek saturday hours from <http://www.holbaek.dk/Service/Nyheder/2013/Kommunikationssekretariatet/OroBibliotekErAabent.aspx>
+
+ * fix tie only gr:location (not gr:BusinessEntity) directly to gr:hasOpeningHourSpecification
+ * fix use gr:description instead of rdfs:comment
+
+ * encode output as RDFa
+ * add CSS styling
+ * publish data as LOD site.
diff --git a/bin/rdf2events b/bin/rdf2events
new file mode 100755
index 0000000..865afe9
--- /dev/null
+++ b/bin/rdf2events
@@ -0,0 +1,213 @@
+#!/usr/bin/perl
+#
+# Copyright © 2013 Jonas Smedegaard <dr@jones.dk>
+# Description: render events webpage from RDF data
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+use 5.010;
+use strictures 1;
+use utf8::all;
+#use DDP alias => 'Dumper';
+
+use DateTimeX::Easy;
+use DateTime::Format::W3CDTF;
+use Carp;
+use Try::Tiny;
+use URI;
+use RDF::Query;
+use RDF::TrineX::Functions qw[curie model parse];
+use HTML::HTML5::Builder qw[:standard];
+use HTML::HTML5::Writer;
+
+# TODO: add options --verbose and --debug
+
+# TODO: add override options --from, --through and --theme
+#my $globalfrom = DateTimeX::Easy->new('now');
+# TODO: teach DTX::Easy / DT::F::Natural DT::F::Flexible words "current" and "present" (as alternatives to this)
+my $globalfrom = DateTimeX::Easy->new('first day of this month');
+# TODO: teach DTX::Easy / DT::F::Natural DT::F::Flexible these:
+# last day of month three months from now
+# last day of month in three months
+# last day of (the) month three months ahead
+# ... in the future
+# ... into the future
+# ... from now
+# ... later <- this last one for changing object, not create new
+#my $globalthrough = DateTimeX::Easy->new('last day of month in 3 months');
+my $globalthrough = DateTimeX::Easy->new($globalfrom);
+$globalthrough->add( months => 4 )->subtract( days => 1 );
+
+# TODO: add Getopt option --preset as shortcut to --category, --from and --through
+
+my $parser = RDF::Trine::Parser::Turtle->new;
+my $model = model();
+
+# TODO: throw sensible error if no (non-opt) args provided
+while (my $data = shift @ARGV) {
+ try {
+ parse($data, using => $parser, into => $model);
+ } catch {
+ say STDERR "Failed to parse file \"$data\": $_";
+ die;
+ }
+}
+
+# TODO: handle multi-site events-in-events (e.g. Orødagen)
+
+# compose query for hourspec data at least partly within a "window" of time
+# (yes, comparing global dates against opposite spec dates is deliberate)
+my $w3c = DateTime::Format::W3CDTF->new;
+my $globalfrom_w3c = $w3c->format_datetime($globalfrom);
+my $globalthrough_w3c = $w3c->format_datetime($globalthrough);
+# TODO: restructure SPARQL query to only need injecting each date once
+my $query = qurie( sprintf(<<'SPARQL', $globalfrom_w3c, $globalthrough_w3c, $globalfrom_w3c, $globalthrough_w3c ));
+SELECT *
+WHERE {
+ ?event
+ a schema:SocialEvent ;
+ schema:name ?eventname ;
+ schema:location ?place ;
+ schema:startDate ?start .
+ ?place
+ a schema:Place ;
+ gr:name|schema:name ?placename .
+ OPTIONAL {
+ ?event schema:endDate ?end .
+ }
+ OPTIONAL {
+ ?event foaf:Homepage ?eventpage .
+ }
+ OPTIONAL {
+ { ?organizer a schema:Organization }
+ UNION
+ { ?organizer a gr:BusinessEntity }
+ ?organizer
+ gr:name|schema:name ?organizername ;
+ schema:event ?event .
+ OPTIONAL {
+ ?organizer foaf:Homepage ?organizerpage .
+ }
+ }
+ OPTIONAL {
+ { ?host a schema:Organization }
+ UNION
+ { ?host a gr:BusinessEntity }
+ ?host
+ gr:name|schema:name ?hostname ;
+ schema:location ?place .
+ OPTIONAL {
+ ?host foaf:Homepage ?hostpage .
+ }
+ } .
+ FILTER (
+ ( ! bound(?end) && ?start >= "%s"^^xsd:dateTime && ?start <= "%s"^^xsd:dateTime )
+ ||
+ ( ?start < ?end && ?end > "%s"^^xsd:dateTime && ?start <= "%s"^^xsd:dateTime )
+ )
+}
+ORDER BY ?start ?eventname ?placename
+SPARQL
+# FILTER ( ?start > "%s"^^xsd:dateTime && ?start <= "%s"^^xsd:dateTime )
+
+my $title = 'Begivenheder';
+my $intro = sprintf(
+ 'Begivenheder på Orø i perioden %s.',
+ daterangedescribe($globalfrom, $globalthrough),
+);
+
+# TODO: make simplified html (preferred for Scribus) optional
+#push my @content, "\n", h1($title), p($intro);
+push my @content, "\n", h1($title), $intro;
+
+my $iterator = $query->execute($model);
+while ( my $row = $iterator->next ) {
+
+ # TODO: iterate over potentially plural entries
+ # TODO: include also foaf:page, and support multiple pages
+ # TODO: handle dcterms:audience (including lack thereof)
+ push @content, "\n", h2($row->{eventname}->literal_value);
+ push @content, thingdescribe( 'Begivenhed', daterangedescribe( $row->{start}->datetime, $row->{end} ? $row->{end}->datetime : '' ), node2uri($row->{eventpage}) );
+ push @content, objectdescribe( 'Sted', $row->{placename}, $row->{placepage} );
+ push @content, objectdescribe( 'Vært', $row->{hostname}, $row->{hostpage} );
+ push @content, objectdescribe( 'Arrangør', $row->{organizername}, $row->{organizerpage} );
+}
+
+my $writer = HTML::HTML5::Writer->new;
+say $writer->document( html(
+ -lang => 'da',
+ head(
+ title($title),
+ Meta(-charset => 'utf-8'),
+ ),
+ body(
+ @content
+ ),
+));
+
+# create query object from curied SPARQL string
+sub qurie {
+ my $sparql = shift;
+ $sparql =~ s/\b([a-z]+):([a-zA-Z]+)\b/curie("$1_$2")/eg;
+ my $query = RDF::Query->new( $sparql );
+ if (!$query) {
+ say STDERR $sparql;
+ say STDERR RDF::Query->error;
+ croak "failed to prepare SPARQL query";
+ }
+ return $query;
+}
+
+sub daterangedescribe {
+ my ($from, $through) = @_;
+
+ return $from->format_cldr('d/M')
+ unless ($through);
+ return sprintf( '%s - %s',
+ $from->format_cldr('d/M'),
+ $through->format_cldr('d/M'),
+ );
+}
+
+sub thingdescribe {
+ my ($title, $thing, $uri) = @_;
+ my $string;
+
+ return undef unless ($thing);
+
+ $string = ($uri)
+ ? a('-href', $uri, $thing)
+ : $thing;
+
+ return "\n", br, div( "$title: ", $string );
+}
+
+sub objectdescribe {
+ my ($title, $thing, $uri) = @_;
+
+ return undef unless ($thing);
+ return thingdescribe( $title, $thing->literal_value, undef )
+ unless ($uri);
+ return thingdescribe( $title, $thing->literal_value, node2uri($uri) );
+}
+
+# TODO: report as bug against RDF::Trine RDF::Trine::Node->uri_value not utf8
+# i.e. choking on punycode if fed to HTML::HTML5::Builder
+sub node2uri {
+ my $node = shift;
+
+ return ($node) ? URI->new($node->uri_value)->as_string : undef;
+}
+
+1;
diff --git a/bin/rdf2hours b/bin/rdf2hours
new file mode 100755
index 0000000..dea675a
--- /dev/null
+++ b/bin/rdf2hours
@@ -0,0 +1,336 @@
+#!/usr/bin/perl
+#
+# Copyright © 2013 Jonas Smedegaard <dr@jones.dk>
+# Description: render opening hours webpage from RDF data
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+use 5.010;
+use strictures 1;
+use utf8::all;
+#use DDP alias => 'Dumper';
+
+use DateTimeX::Easy;
+use DateTime::Format::W3CDTF;
+use Carp;
+use Try::Tiny;
+use RDF::Query;
+use RDF::TrineX::Functions qw[curie model parse];
+use HTML::HTML5::Builder qw[:standard];
+use HTML::HTML5::Writer;
+
+# TODO: add options --verbose and --debug
+
+# TODO: add override options --theme and (multivalued) --category
+my @category = <<LIST =~ m/(\S.*\S)/g;
+ restaurant
+ groceries
+ attraction
+ transport
+ public service
+LIST
+
+# TODO: add override options --from, --through and --theme
+#my $globalfrom = DateTimeX::Easy->new('now');
+# TODO: teach DTX::Easy / DT::F::Natural DT::F::Flexible words "current" and "present" (as alternatives to this)
+my $globalfrom = DateTimeX::Easy->new('first day of this month');
+# TODO: teach DTX::Easy / DT::F::Natural DT::F::Flexible these:
+# last day of month three months from now
+# last day of month in three months
+# last day of (the) month three months ahead
+# ... in the future
+# ... into the future
+# ... from now
+# ... later <- this last one for changing object, not create new
+#my $globalthrough = DateTimeX::Easy->new('last day of month in 3 months');
+my $globalthrough = DateTimeX::Easy->new($globalfrom);
+$globalthrough->add( months => 4 )->subtract( days => 1 );
+
+# TODO: add Getopt option --preset as shortcut to --category, --from and --through
+
+my $parser = RDF::Trine::Parser::Turtle->new;
+my $model = model();
+
+# TODO: throw sensible error if no (non-opt) args provided
+while (my $data = shift @ARGV) {
+ try {
+ parse($data, using => $parser, into => $model);
+ } catch {
+ say STDERR "Failed to parse file \"$data\": $_";
+ die;
+ }
+}
+
+# compose query for hourspec data at least partly within a "window" of time
+# (yes, comparing global dates against opposite spec dates is deliberate)
+my $w3c = DateTime::Format::W3CDTF->new;
+my $query = qurie( sprintf(<<'SPARQL', $w3c->format_datetime($globalthrough), $w3c->format_datetime($globalfrom) ));
+SELECT *
+WHERE {
+ {
+ ?location
+ a schema:Place ;
+ gr:category ?category ;
+ gr:name ?name ;
+ gr:hasOpeningHourSpecification ?spec .
+ ?spec
+ gr:opens ?opens ;
+ gr:closes ?closes ;
+ rdfs:label ?speclabel ;
+ gr:validFrom ?specfrom ;
+ gr:validThrough ?specthrough .
+ OPTIONAL { ?spec rdfs:comment ?speccomment } .
+ OPTIONAL { ?location gr:description ?locationcomment } .
+ FILTER ( ?specfrom <= "%s"^^xsd:dateTime ) .
+ FILTER ( ?specthrough > "%s"^^xsd:dateTime )
+ } UNION {
+ ?location
+ gr:category ?category ;
+ gr:name ?name ;
+ gr:hasOpeningHourSpecification ?spec .
+ ?spec
+ gr:opens ?opens ;
+ gr:closes ?closes .
+ OPTIONAL {
+ ?spec
+ rdfs:label ?speclabel ;
+ gr:validFrom ?specfrom ;
+ gr:validThrough ?specthrough .
+ } .
+ OPTIONAL { ?spec rdfs:comment ?speccomment } .
+ OPTIONAL { ?location gr:description ?locationcomment } .
+ FILTER (!bound(?specfrom)) .
+ FILTER (!bound(?specthrough))
+ }
+}
+SPARQL
+# TODO: sort using SPARQL instead of perl
+# ORDER BY ?category ?name ?specfrom ?specthrough ?opens ?closes
+
+my %data;
+my $iterator = $query->execute($model);
+while ( my $row = $iterator->next ) {
+ my $category = $row->{category}->literal_value;
+ my $name = $row->{name}->literal_value;
+ my $locationcomment = $row->{locationcomment} ? $row->{locationcomment}->literal_value : '';
+
+ my $speclabel = $row->{speclabel} ? $row->{speclabel}->literal_value : '';
+
+ # merge identically named locations, tying varying descriptions to spec instead
+# my $name_key = titledescribe( $name, $locationcomment );
+# my $specbundle_key = $speclabel;
+ my $name_key = $name;
+ my $specbundle_key = titledescribe( $speclabel, $locationcomment );
+
+ my $specfrom = $row->{specfrom} ? $row->{specfrom}->datetime : '';
+ my $specthrough = $row->{specthrough} ? $row->{specthrough}->datetime : '';
+
+ my $speccomment = $row->{speccomment} ? $row->{speccomment}->literal_value : '';
+
+ # TODO: use DateTime objects instead.
+ my $opens = $row->{opens}->literal_value;
+ $opens =~ s/:\d\d$//;
+ my $closes = $row->{closes}->literal_value;
+ $closes =~ s/:\d\d$//;
+ $closes =~ s/^23:59/24/;
+
+ my @weekdays;
+ my $iterator = $model->get_statements($row->{spec}, curie('gr_hasOpeningHoursDayOfWeek'), undef);
+ while (my $statement = $iterator->next) {
+ my $label = $statement->object;
+
+ given ($label->as_string) {
+ when (/Monday/) { push @weekdays, 1 };
+ when (/Tuesday/) { push @weekdays, 2 };
+ when (/Wednesday/) { push @weekdays, 3 };
+ when (/Thursday/) { push @weekdays, 4 };
+ when (/Friday/) { push @weekdays, 5 };
+ when (/Saturday/) { push @weekdays, 6 };
+ when (/Sunday/) { push @weekdays, 7 };
+ when (/PublicHolidays/) { push @weekdays, 8 };
+ default { die "failed to parse weekday: ", $label->as_string };
+ }
+ }
+ my $weekdays = join ', ', sort @weekdays;
+ $weekdays = 0 unless ($weekdays);
+ my $weekdays_key = titledescribe( $weekdays, $speccomment );
+
+# FIXME: support multiple specbundles on same days (e.g. Gaardstronomi sommer siesta)
+# $weekdays_key .= daterangedescribe($specfrom, $specthrough)
+# if ( ($specfrom) and ($specthrough) );
+
+ $data{$category}{$name_key}{name} = $name;
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{locationcomment} = $locationcomment;
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{speclabel} = $speclabel;
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{specfrom} = $specfrom;
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{specthrough} = $specthrough;
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{spec}{$weekdays_key}{weekdays} = $weekdays;
+ # TODO: extend SPARQL to cover specs without opens/closes, or drop below check
+ if ($opens and $closes) {
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{spec}{$weekdays_key}{spec} = "$opens - $closes";
+ $data{$category}{$name_key}{specbundle}{$specbundle_key}{spec}{$weekdays_key}{speccomment} = $speccomment;
+ }
+}
+
+my $title = 'Åbningstider';
+my $intro = sprintf(
+ 'Åbningstider på Orø indenfor udvalgte kategorier, dækkende perioden %s.',
+ daterangedescribe($globalfrom, $globalthrough),
+);
+
+# TODO: make simplified html (preferred for Scribus) optional
+#push my @content, h1($title), "\n", p($intro);
+push my @content, h1($title), "\n", $intro;
+
+for my $category ( @category ) {
+ push @content, "\n", h2( categorydescribe($category) ), "\n";
+ for my $name ( sort keys %{ $data{$category} } ) {
+ push @content, "\n", h3($name);
+ my @bundle = keys %{ $data{$category}{$name}{specbundle} };
+ # FIXME: respect locale when sorting (Galleri before Gaardstronomi)
+ for my $specbundle ( sort {
+ $data{$category}{$name}{specbundle}{$a}{specfrom}
+ <=> $data{$category}{$name}{specbundle}{$b}{specfrom}
+ || $a cmp $b
+ } @bundle ) {
+ # TODO: when global limits shown, show only speclabel plural spec bundles
+ my $speclabel = speclabeldescribe(
+ $data{$category}{$name}{specbundle}{$specbundle}{speclabel},
+ $data{$category}{$name}{specbundle}{$specbundle}{locationcomment},
+ $data{$category}{$name}{specbundle}{$specbundle}{specfrom},
+ $data{$category}{$name}{specbundle}{$specbundle}{specthrough},
+ scalar @bundle,
+ );
+ push @content, "\n", h4($speclabel) if ($speclabel);
+ my @specbundle;
+ for my $weekdays ( sort keys %{ $data{$category}{$name}{specbundle}{$specbundle}{spec} } ) {
+ my $specdescription = specdescribe(
+ $data{$category}{$name}{specbundle}{$specbundle}{spec}{$weekdays}{weekdays},
+ $data{$category}{$name}{specbundle}{$specbundle}{spec}{$weekdays}{speccomment},
+ );
+ push @specbundle, br if (@specbundle);
+ push @specbundle, "\n", span(
+ span($specdescription, ":"),
+ "\t",
+ span($data{$category}{$name}{specbundle}{$specbundle}{spec}{$weekdays}{spec}),
+ );
+ }
+ # TODO: make simplified html (preferred for Scribus) optional
+# push @content, p("\n", @specbundle) if (@specbundle);
+ push @content, @specbundle if (@specbundle);
+ }
+ }
+}
+
+#Dumper %data;
+#die;
+
+my $writer = HTML::HTML5::Writer->new;
+say $writer->document( html(
+ -lang => 'da',
+ head(
+ title($title),
+ Meta(-charset => 'utf-8'),
+ ),
+ body(
+ "\n", @content
+ ),
+));
+
+# create query object from curied SPARQL string
+sub qurie {
+ my $sparql = shift;
+ $sparql =~ s/(?<=\s|\^)([a-z]+):([a-zA-Z]+)(?=\s)/curie("$1_$2")/eg;
+ my $query = RDF::Query->new( $sparql );
+ if (!$query) {
+ say STDERR $sparql;
+ say STDERR RDF::Query->error;
+ croak "failed to prepare SPARQL query";
+ }
+ return $query;
+}
+
+sub daterangedescribe {
+ my ($from, $through) = @_;
+
+ return sprintf( '%s - %s',
+ $from->format_cldr('d/M'),
+ $through->format_cldr('d/M'),
+ );
+}
+
+sub categorydescribe {
+ my $cat = shift;
+
+ $cat =~ s/restaurant/spisesteder/;
+ $cat =~ s/groceries/dagligvarer/;
+ $cat =~ s/attraction/attraktioner og museer/;
+ $cat =~ s/public service/offentlige services/;
+
+ return ucfirst($cat);
+}
+
+sub titledescribe {
+ my ($title, $comment) = @_;
+
+ return ($comment) ? "$title ($comment)" : $title;
+}
+
+sub speclabeldescribe {
+ my ($label, $comment, $from, $through, $size) = @_;
+
+ # TODO: support optionally enabling descriptive label
+ my $compact = 1;
+
+ return '' if ( ($compact) and ( $size == 1 ) );
+
+ my $daterange = daterangedescribe($from, $through);
+ if (($from) and ($through)) {
+ return titledescribe( $daterange, $comment )
+ if ($compact);
+ return $label, ' (', $daterange, ' - ', $comment, ')'
+ if ($comment);
+ return $label, ' (', $daterange, ')';
+ }
+ warn "gr:validFrom and gr:validThrough missing for label \"$label\"";
+ return ($compact) ? '' : titledescribe( $label, $comment );
+}
+
+sub specdescribe {
+ my ($weekdays, $comment) = @_;
+
+ # TODO: translate properly
+ $weekdays =~ s/1, 2, 3, 4, 5, 6, 7/alle ugedage/;
+ $weekdays =~ s/1, 2, 3, 4, 5/mandag-fredag/;
+ $weekdays =~ s/1, 2, 3, 4/mandag-torsdag/;
+ $weekdays =~ s/2, 3, 4, 5, 6, 7/tirsdag-søndag/;
+ $weekdays =~ s/3, 4, 5/onsdag-fredag/;
+ $weekdays =~ s/^2, 3, 4(|, [^5].*)$/tirsdag-torsdag$1/;
+ $weekdays =~ s/^(|.*?[\d^5], |.*?(?!fredag, ))6, 7(.*)$/$1weekend$2/;
+ $weekdays =~ s/1/mandag/;
+ $weekdays =~ s/2/tirsdag/;
+ $weekdays =~ s/3/onsdag/;
+ $weekdays =~ s/4/torsdag/;
+ $weekdays =~ s/5/fredag/;
+ $weekdays =~ s/6/lørdag/;
+ $weekdays =~ s/7/søndag/;
+ $weekdays =~ s/8/helligdage/;
+
+ if ( $weekdays eq "0" and ($comment) ) {
+ return $comment;
+ }
+ return titledescribe( $weekdays, $comment );
+}
+
+1;
diff --git a/data/2013/dronning.ttl b/data/2013/dronning.ttl
new file mode 100644
index 0000000..3a48925
--- /dev/null
+++ b/data/2013/dronning.ttl
@@ -0,0 +1,10 @@
+@prefix hestebedgaard: <http://data.biks.dk/hestebedgård/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:SocialEvent ;
+ schema:name "Dronningevisit"@da ;
+ schema:startDate "2013-06-03T00:00:00Z"^^xsd:dateTime ;
+ schema:event hestebedgaard:dronning .
diff --git a/data/2013/kunstneruge.ttl b/data/2013/kunstneruge.ttl
new file mode 100644
index 0000000..166599d
--- /dev/null
+++ b/data/2013/kunstneruge.ttl
@@ -0,0 +1,11 @@
+@prefix marliese: <http://data.biks.dk/marliese/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:SocialEvent ;
+ schema:name "Kunstneruge 2013"@da ;
+ schema:startDate "2013-06-30T00:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-07-06T00:00:00Z"^^xsd:dateTime ;
+ schema:location marliese:home .
diff --git a/data/2013/oroedag.ttl b/data/2013/oroedag.ttl
new file mode 100644
index 0000000..f325a28
--- /dev/null
+++ b/data/2013/oroedag.ttl
@@ -0,0 +1,12 @@
+@prefix hestebedgaard: <http://data.biks.dk/hestebedgård/> .
+@prefix kirke: <http://data.biks.dk/kirke/> .
+@prefix marliese: <http://data.biks.dk/marliese/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:SocialEvent ;
+ schema:name "Orødagen"@da ;
+ schema:startDate "2013-06-02T00:00:00Z"^^xsd:dateTime ;
+ schema:event hestebedgaard:oroedag2013, kirke:oroedag2013, marliese:oroedag2013 .
diff --git a/data/2013/togtet.ttl b/data/2013/togtet.ttl
new file mode 100644
index 0000000..1d4a618
--- /dev/null
+++ b/data/2013/togtet.ttl
@@ -0,0 +1,12 @@
+@prefix marliese: <http://data.biks.dk/marliese/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:SocialEvent ;
+ schema:name "Da Danmark blev til - Togtet"@da ;
+ foaf:Homepage <http://dadanmarkblevtil.dk/oplev/togtet-2013/> ;
+ schema:startDate "2013-07-22T00:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-07-24T00:00:00Z"^^xsd:dateTime .
+# schema:event marliese:togtet .
diff --git a/data/org/2012/folkedans.ttl b/data/org/2012/folkedans.ttl
new file mode 100644
index 0000000..2e1ad6f
--- /dev/null
+++ b/data/org/2012/folkedans.ttl
@@ -0,0 +1,68 @@
+@prefix : <http://data.biks.dk/folkedans/> .
+@prefix hal: <http://data.biks.dk/hal/> .
+@prefix dcterms: <http://purl.org/dc/terms/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:staevne2013
+ a schema:SocialEvent, schema:DanceEvent, schema:Festival ;
+# dcterms:audience :members ;
+ schema:name "Sommerstævne"@da ;
+ foaf:Homepage <http://www.orøfolkedansere.dk/8835/Stævne 2013> ;
+ schema:startDate "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-06-02T00:00:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:dans
+ a schema:SocialEvent, schema:DanceEvent ;
+ dcterms:audience :members ;
+ schema:name "Danseaften"@da ;
+ foaf:page <http://www.orøfolkedansere.dk/8842/Kalender 2012-13> ;
+ schema:startDate
+ "2012-10-08T19:30:00Z"^^xsd:dateTime,
+ "2012-11-05T19:30:00Z"^^xsd:dateTime,
+ "2012-12-03T19:30:00Z"^^xsd:dateTime,
+ "2013-01-07T19:30:00Z"^^xsd:dateTime,
+ "2013-02-04T19:30:00Z"^^xsd:dateTime,
+ "2013-03-04T19:30:00Z"^^xsd:dateTime,
+ "2013-03-18T19:30:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:dansogkaffe
+ a schema:SocialEvent, schema:DanceEvent ;
+ dcterms:audience :members ;
+ schema:name "Danseaften og kaffe"@da ;
+ foaf:page <http://www.orøfolkedansere.dk/8842/Kalender 2012-13> ;
+ schema:startDate
+ "2012-10-22T19:30:00Z"^^xsd:dateTime,
+ "2012-11-19T19:30:00Z"^^xsd:dateTime,
+ "2013-01-21T19:30:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:juleafslutning
+ a schema:SocialEvent, schema:DanceEvent ;
+ dcterms:audience :members ;
+ schema:name "Juleafslutning"@da ;
+ foaf:page <http://www.orøfolkedansere.dk/8842/Kalender 2012-13> ;
+ schema:startDate "2013-12-14T18:00:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:generalformsaling
+ a schema:SocialEvent, schema:DanceEvent ;
+ dcterms:audience :members ;
+ schema:name "Danseaften, generalforsamling og kaffe"@da ;
+ foaf:page <http://www.orøfolkedansere.dk/8842/Kalender 2012-13> ;
+ schema:startDate "2013-02-18T19:30:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:afslutning
+ a schema:SocialEvent, schema:DanceEvent ;
+ dcterms:audience :members ;
+ schema:name "Afslutning"@da ;
+ foaf:page <http://www.orøfolkedansere.dk/8842/Kalender 2012-13> ;
+ schema:startDate "2013-03-22T18:00:00Z"^^xsd:dateTime ;
+ schema:location hal:home .
+
+:org
+ schema:event :staevne2013, :dans, :dansogkaffe, :juleafslutning, :generalforsamling, :afslutning .
diff --git a/data/org/2013/cykelklub.ttl b/data/org/2013/cykelklub.ttl
new file mode 100644
index 0000000..4f294fc
--- /dev/null
+++ b/data/org/2013/cykelklub.ttl
@@ -0,0 +1,19 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+_:cykelklubOrg
+ a schema:Organization ;
+ schema:name "Orø Cykelklub"@da ;
+ foaf:Homepage <http://orøcykelklub.dk/> ;
+ schema:event [
+ a schema:SocialEvent ;
+ schema:name "Store Cykeldag"@da ;
+ foaf:Homepage <http://orøcykelklub.dk/program.html> ;
+ schema:startDate "2013-06-09T10:15:00Z"^^xsd:dateTime ;
+ schema:location [
+ a schema:Place ;
+ schema:name "P-pladsen v/ Orø Kirke"@da ;
+ ] ;
+ ] .
diff --git a/data/org/2013/hestebedgaard.ttl b/data/org/2013/hestebedgaard.ttl
new file mode 100644
index 0000000..a4e55f1
--- /dev/null
+++ b/data/org/2013/hestebedgaard.ttl
@@ -0,0 +1,50 @@
+@prefix : <http://data.biks.dk/hestebedgård/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:org
+ schema:event :dronning, :oroedag2013, [
+ a schema:SocialEvent ;
+ schema:name "Kulturaften - vikingetidens levevilkår"@da ;
+ schema:comment "Grillaften og fortæller Ole Nielsen fortæller om vikingetidens levevilkår" ;
+ schema:startDate "2013-07-12T19:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ], [
+ a schema:SocialEvent ;
+ schema:name "Kulturaften - kvindearbejde i Afrika"@da ;
+ schema:comment "Forsøges arrangeret et foredrag om kvindearbejde i Afrika syd for Sahara" ;
+ schema:startDate "2013-07-17T19:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ], [
+ a schema:SocialEvent ;
+ schema:name "Kulturaften - kvindearbejde i Vietnam"@da ;
+ schema:comment "Katrine Dolleris fortæller om kvindearbejde i landbruget i Vietnam" ;
+ schema:startDate "2013-08-01T19:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ], [
+ a schema:SocialEvent ;
+ schema:name "Pileflet"@da ;
+ schema:startDate "2013-08-17T10:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-08-17T14:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ], [
+ a schema:SocialEvent ;
+ schema:name "Høstfet"@da ;
+ schema:startDate "2013-09-14T10:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ] .
+
+:dronning
+ a schema:SocialEvent ;
+ schema:name "Dronningevisit - folkedans"@da ;
+ foaf:page <http://hestebedgård.dk/html/Aktuelt.html> ;
+ schema:startDate "2013-06-03T11:20:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-06-03T11:40:00Z"^^xsd:dateTime ;
+ schema:location :home .
+
+:oroedag2013
+ a schema:SocialEvent ;
+ foaf:page <http://hestebedgård.dk/html/Orødagen.html> ;
+ schema:startDate "2013-06-02T00:00:00Z"^^xsd:dateTime ;
+ schema:location :home .
diff --git a/data/org/2013/kirke.ttl b/data/org/2013/kirke.ttl
new file mode 100644
index 0000000..ce6a4ac
--- /dev/null
+++ b/data/org/2013/kirke.ttl
@@ -0,0 +1,14 @@
+@prefix : <http://data.biks.dk/kirke/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:oroedag2013
+ a schema:SocialEvent ;
+ schema:name "Orødagen - folkedans"@da ;
+ foaf:page <http://www.oroekirke.dk/html/Arrangementer.htm> ;
+ schema:startDate "2013-06-02T10:00:00Z"^^xsd:dateTime ;
+ schema:location :home .
+
+:org
+ schema:event :oroedag2013 .
diff --git a/data/org/2013/marlieses.ttl b/data/org/2013/marlieses.ttl
new file mode 100644
index 0000000..b74957e
--- /dev/null
+++ b/data/org/2013/marlieses.ttl
@@ -0,0 +1,20 @@
+@prefix : <http://data.biks.dk/marliese/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:org
+ schema:event :oroedag2013, [
+ a schema:SocialEvent ;
+ schema:name "Vinsmagning"@da ;
+ foaf:Homepage <http://marliesesgaardcafe.dk/vinsmagning/> ;
+ schema:startDate "2013-07-11T00:00:00Z"^^xsd:dateTime, "2013-07-25T00:00:00Z"^^xsd:dateTime, "2013-08-08T00:00:00Z"^^xsd:dateTime ;
+ schema:location :home ;
+ ] .
+
+:oroedag2013
+ a schema:SocialEvent ;
+ foaf:page <http://marliesesgaardcafe.dk/aktiviteter/> ;
+ schema:startDate "2013-06-02T11:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-06-02T00:17:00Z"^^xsd:dateTime ;
+ schema:location <http://data.biks.dk/marliese/home> .
diff --git a/data/org/2013/mc.ttl b/data/org/2013/mc.ttl
new file mode 100644
index 0000000..fde57b2
--- /dev/null
+++ b/data/org/2013/mc.ttl
@@ -0,0 +1,15 @@
+@prefix : <http://data.biks.dk/mcisland/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:rally
+ a schema:SocialEvent ;
+ schema:name "Motorcykeltræf"@da ;
+ foaf:Homepage <http://www.mcisland.dk/da/rally.php> ;
+ schema:startDate "2013-08-30T00:00:00Z"^^xsd:dateTime ;
+ schema:endDate "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ schema:location :home .
+
+:org
+ schema:event :rally .
diff --git a/data/org/artdoor.ttl b/data/org/artdoor.ttl
new file mode 100644
index 0000000..dba7446
--- /dev/null
+++ b/data/org/artdoor.ttl
@@ -0,0 +1,24 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity .
+
+_:artdoorGallery
+ a schema:Place;
+ gr:category "shop", "gallery", "restaurant" ;
+ gr:name "Galleri ArtDoor"@da;
+ foaf:Homepage <http://www.galleriartdoor.dk/>;
+ gr:hasOpeningHourSpecification _:artdoorHours .
+
+_:artdoorHours
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommerhalvår" ;
+ gr:validFrom "2013-05-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time .
diff --git a/data/org/bibliotek.ttl b/data/org/bibliotek.ttl
new file mode 100644
index 0000000..fb40faa
--- /dev/null
+++ b/data/org/bibliotek.ttl
@@ -0,0 +1,30 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:Place;
+ gr:category "public service";
+ gr:name "Orø Bibliotek";
+ foaf:Homepage <https://bibliotek.holbaek.dk/web/arena/aabningstider>;
+ schema:email "holbib@holb.dk";
+ schema:telephone "+45-72367519";
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Bygaden 50, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday ;
+ gr:opens "16:00:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:comment "første lørdag i måneden"@da;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "12:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/brugsen.ttl b/data/org/brugsen.ttl
new file mode 100644
index 0000000..90e54a2
--- /dev/null
+++ b/data/org/brugsen.ttl
@@ -0,0 +1,50 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity, schema:Place;
+ gr:category "groceries";
+ gr:name "Dagli'Brugsen";
+ foaf:page <https://om.coop.dk/om+coop/vores+butikker/find+butik.aspx?id=4369> ;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Brøndevej 34 C, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ schema:telephone "+45-59470053";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday ;
+ gr:opens "7:30:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday ;
+ gr:opens "7:30:00"^^xsd:time ;
+ gr:closes "19:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "7:30:00"^^xsd:time ;
+ gr:closes "16:30:00"^^xsd:time ;
+ ] .
+
+_:mail
+ a schema:Place;
+ gr:category "public service";
+ gr:name "Dagli'Brugsen - Postbutik";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "7:30:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "7:30:00"^^xsd:time ;
+ gr:closes "14:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/camping.ttl b/data/org/camping.ttl
new file mode 100644
index 0000000..d260665
--- /dev/null
+++ b/data/org/camping.ttl
@@ -0,0 +1,24 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "accomodation";
+ gr:name "Orø Camping"@da;
+ foaf:Homepage <http://www.oroecamping.dk/>.
+
+_:ishuset
+ a schema:Place;
+ gr:category "restaurant";
+ schema:telephone "+45-23353458";
+ gr:name "Orø Camping - Ishuset"@da;
+ foaf:page <http://www.oroecamping.dk/50-ishus.htm>;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday, gr:PublicHolidays ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/faergeHoebaek.ttl b/data/org/faergeHoebaek.ttl
new file mode 100644
index 0000000..f4a4ddf
--- /dev/null
+++ b/data/org/faergeHoebaek.ttl
@@ -0,0 +1,169 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "transport";
+ gr:name "Færgen Orø-Holbæk";
+ foaf:page <http://www.holbaek.dk/Kommunen/TransportOgVeje/FaergenOro-Holbaek.aspx>;
+ schema:telephone "+45-72362300";
+ schema:email "hopp@golbaek.dk".
+
+_:oroe
+ gr:category "transport";
+ a schema:Place;
+ gr:name "Færgen Orø-Holbæk";
+ gr:description "afgang fra Orø"@da ;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "vinter og forår"@da ;
+ gr:validFrom "2013-01-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "vinter og forår"@da ;
+ gr:validFrom "2013-01-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "8:30:00"^^xsd:time ;
+ gr:closes "20:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer"@da ;
+ gr:validFrom "2013-06-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer"@da ;
+ gr:validFrom "2013-06-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "8:50:00"^^xsd:time ;
+ gr:closes "21:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter"@da ;
+ rdfs:comment "undtagen 24/12 - 26/12 og 31/12"@da;
+ gr:validFrom "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter"@da ;
+ rdfs:comment "undtagen 24/12 - 26/12 og 31/12"@da;
+ gr:validFrom "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "8:30:00"^^xsd:time ;
+ gr:closes "20:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "24/12"@da ;
+ gr:validFrom "2013-12-24T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-24T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "16:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "25/12 og 26/12"@da ;
+ gr:validFrom "2013-12-25T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-26T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "8:50:00"^^xsd:time ;
+ gr:closes "21:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "31/12"@da ;
+ gr:validFrom "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "16:20:00"^^xsd:time ;
+ ] .
+
+_:holbaek
+ gr:category "transport";
+ a schema:Place;
+ gr:name "Færgen Orø-Holbæk";
+ gr:description "afgang fra Holbæk"@da ;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "vinter og forår"@da ;
+ gr:validFrom "2013-01-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:35:00"^^xsd:time ;
+ gr:closes "22:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "vinter og forår"@da ;
+ gr:validFrom "2013-01-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "9:50:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer"@da ;
+ gr:validFrom "2013-06-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:35:00"^^xsd:time ;
+ gr:closes "22:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer"@da ;
+ gr:validFrom "2013-06-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "9:35:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter"@da ;
+ rdfs:comment "undtagen 24/12 - 26/12 og 31/12"@da;
+ gr:validFrom "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "6:35:00"^^xsd:time ;
+ gr:closes "22:20:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter"@da ;
+ rdfs:comment "undtagen 24/12 - 26/12 og 31/12"@da;
+ gr:validFrom "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "9:50:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "24/12"@da ;
+ gr:validFrom "2013-12-24T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-24T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "6:35:00"^^xsd:time ;
+ gr:closes "16:55:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "25/12 og 26/12"@da ;
+ gr:validFrom "2013-12-25T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-26T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "9:25:00"^^xsd:time ;
+ gr:closes "21:50:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "31/12"@da ;
+ gr:validFrom "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-05-31T00:00:00Z"^^xsd:dateTime ;
+ gr:opens "6:35:00"^^xsd:time ;
+ gr:closes "16:55:00"^^xsd:time ;
+ ] .
diff --git a/data/org/faergeOest.ttl b/data/org/faergeOest.ttl
new file mode 100644
index 0000000..cf480e6
--- /dev/null
+++ b/data/org/faergeOest.ttl
@@ -0,0 +1,23 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity, schema:Place;
+ gr:category "transport";
+ gr:name "Østre Færge";
+ foaf:page <http://www.oestrefaerge.dk/>;
+ schema:telephone "+45-59470015", "+45-40467013";
+ schema:email "mail@oestrefaerge.dk";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "5:30:00"^^xsd:time ;
+ gr:closes "23:59:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "6:00:00"^^xsd:time ;
+ gr:closes "23:59:00"^^xsd:time ;
+ ] .
diff --git a/data/org/folkedans.ttl b/data/org/folkedans.ttl
new file mode 100644
index 0000000..741f678
--- /dev/null
+++ b/data/org/folkedans.ttl
@@ -0,0 +1,29 @@
+@prefix : <http://data.biks.dk/folkedans/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:org
+ a gr:BusinessEntity ;
+ gr:name "Orø Folkedansere" ;
+ foaf:Homepage <http://www.orøfolkedansere.dk/> ;
+ schema:location <http://data.biks.dk/hal/home> ;
+ schema:location :formandHome .
+
+:formand
+ a gr:Person ;
+ gr:name "Knud Noppenau" ;
+ schema:telephone "+45-59470084" ;
+ schema:location :formandHome .
+
+:formandHome
+ a schema:Place;
+ schema:address :address .
+
+:address
+ a schema:PostalAddress;
+ schema:streetAddress "Syvvejen 15, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da .
diff --git a/data/org/gaardstronomi.ttl b/data/org/gaardstronomi.ttl
new file mode 100644
index 0000000..fac9286
--- /dev/null
+++ b/data/org/gaardstronomi.ttl
@@ -0,0 +1,94 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity, schema:Place;
+ gr:category "restaurant";
+ gr:name "Gaardstronomi";
+ foaf:Homepage <http://www.gaardstronomi.dk/> ;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Langdalgård, Næsbyvej 13, Orø, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da ;
+ ];
+ schema:telephone "+45-22366555";
+ schema:email "kontakt@gaardstronomi.dk";
+ gr:taxID "33336217";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "tidlig sommer" ;
+ gr:validFrom "2013-05-24T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-07-06T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday ;
+ gr:opens "17:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "tidlig sommer" ;
+ gr:validFrom "2013-05-24T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-07-06T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "9:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ rdfs:comment "kræver forudbestilling" ;
+ gr:validFrom "2013-07-10T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday ;
+ gr:opens "18:00:00"^^xsd:time ;
+ gr:closes "19:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-10T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Thursday, gr:Friday ;
+ gr:opens "9:00:00"^^xsd:time ;
+ gr:closes "14:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-10T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Thursday, gr:Friday ;
+ gr:opens "17:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-10T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "9:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-16T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday ;
+ gr:opens "17:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-16T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "9:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår" ;
+ gr:validFrom "2013-10-12T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-19T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday, gr:Saturday ;
+ gr:opens "9:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/genbrugsplads.ttl b/data/org/genbrugsplads.ttl
new file mode 100644
index 0000000..06f7b42
--- /dev/null
+++ b/data/org/genbrugsplads.ttl
@@ -0,0 +1,56 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "public service";
+ gr:legalName "Holbæk Forsyning A/S";
+ foaf:Homepage <http://www.holfor.dk/>;
+ schema:email "kundeservice@holfor.dk";
+ schema:telephone "+45-70111250";
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Kalvemosevej 1"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ].
+
+_:genbrugspladsen
+ a schema:Place;
+ gr:category "public service";
+ gr:name "Genbrugspladsen - Orø";
+ foaf:page <http://www.holfor.dk/affald/genbrugspladser>;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Nørrestængevej, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "forår, sommer og efterår" ;
+ gr:validFrom "2013-04-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday ;
+ gr:opens "13:00:00"^^xsd:time ;
+ gr:closes "15:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "forår, sommer og efterår" ;
+ gr:validFrom "2013-04-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "12:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "vinter" ;
+ gr:validFrom "2013-11-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2014-03-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "12:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/hal.ttl b/data/org/hal.ttl
new file mode 100644
index 0000000..5eadd2b
--- /dev/null
+++ b/data/org/hal.ttl
@@ -0,0 +1,25 @@
+@prefix : <http://data.biks.dk/hal/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:home
+ a schema:Place;
+# gr:category "" ;
+ gr:name "Orø Hallen" ;
+ foaf:Homepage <http://www.oroehallen.dk/html/Hallen.htm> ;
+ schema:address :address .
+
+:org
+ a gr:BusinessEntity ;
+ gr:name "Orø Hallen" ;
+ foaf:Homepage <http://www.oroehallen.dk/> ;
+ schema:location :home .
+
+:address
+ a schema:PostalAddress;
+ schema:streetAddress "Brøndevej 15, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da .
diff --git a/data/org/havnegrill.ttl b/data/org/havnegrill.ttl
new file mode 100644
index 0000000..49cc5b1
--- /dev/null
+++ b/data/org/havnegrill.ttl
@@ -0,0 +1,22 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity, schema:Place ;
+ gr:category "restaurant" ;
+ gr:name "Havnegrillen Orø Havn"@da ;
+ foaf:page <http://cvr.dk/Site/Forms/CompanySearch/CompanySearch.aspx?cvrnr=29437386> ;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "24:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/hestebedgaard.ttl b/data/org/hestebedgaard.ttl
new file mode 100644
index 0000000..d179793
--- /dev/null
+++ b/data/org/hestebedgaard.ttl
@@ -0,0 +1,42 @@
+@prefix : <http://data.biks.dk/hestebedgård/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:home
+ a schema:Place;
+ gr:category "museum", "attraction" ;
+ gr:name "Hestebedgård" ;
+ foaf:Homepage <http://hestebedgård.dk/> ;
+ schema:email "kontakt@xn--hestebedgrd-58a.dk" ;
+ schema:telephone "+45-59470225" ;
+ schema:address :address ;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:validFrom "2013-03-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday ;
+ gr:opens "14:00:00"^^xsd:time ;
+ gr:closes "16:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:validFrom "2013-03-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "12:00:00"^^xsd:time ;
+ ] .
+
+:org
+ a gr:BusinessEntity ;
+ gr:name "Hestebedgårds Venneforening" ;
+ foaf:Homepage <http://hestebedgård.dk/html/Selvejende_institution.html> ;
+ schema:location :home .
+
+:address
+ a schema:PostalAddress;
+ schema:streetAddress "Kattekærstrædet 10, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da .
diff --git a/data/org/kirke.ttl b/data/org/kirke.ttl
new file mode 100644
index 0000000..264e825
--- /dev/null
+++ b/data/org/kirke.ttl
@@ -0,0 +1,24 @@
+@prefix : <http://data.biks.dk/kirke/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:home
+ a schema:Place;
+ gr:category "public service";
+ gr:name "Orø Kirke"@da;
+ foaf:Homepage <http://www.oroekirke.dk/>;
+ schema:email "kontakt@oroekirke.dk";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday, gr:Saturday, gr:Sunday ;
+ gr:opens "8:00:00"^^xsd:time ;
+ gr:closes "16:00:00"^^xsd:time ;
+ ] .
+
+:org
+ a schema:Organization ;
+ gr:name "Orø Kirkes menighedsråd"@da ;
+ foaf:Homepage <http://www.oroekirke.dk/html/Menighedsråd.htm> ;
+ schema:email "menighedsraad@oroekirke.dk" .
diff --git a/data/org/kro.ttl b/data/org/kro.ttl
new file mode 100644
index 0000000..207c65c
--- /dev/null
+++ b/data/org/kro.ttl
@@ -0,0 +1,24 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "restaurant", "accomodation";
+ gr:name "Hotel Orø Kro";
+ foaf:page <http://www.oroekro.dk/>;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Bygaden 57, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ schema:telephone "+45-59470006";
+ schema:email "reception@oroekro.dk";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday, gr:Saturday, gr:Sunday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/kunst.ttl b/data/org/kunst.ttl
new file mode 100644
index 0000000..785307a
--- /dev/null
+++ b/data/org/kunst.ttl
@@ -0,0 +1,10 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:name "Kunst på Orø"@da;
+ foaf:Homepage <http://kunstpåorø.dk/>.
diff --git a/data/org/marlieses.ttl b/data/org/marlieses.ttl
new file mode 100644
index 0000000..6f497ea
--- /dev/null
+++ b/data/org/marlieses.ttl
@@ -0,0 +1,43 @@
+@prefix : <http://data.biks.dk/marliese/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:home
+ a schema:Place;
+ gr:category "restaurant";
+ schema:telephone "+45-59470744";
+ gr:name "Marliese’s Gårdcafé"@da;
+ foaf:Homepage <http://marliesesgaardcafe.dk/>;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "tidlig sommer" ;
+ gr:validFrom "2013-05-04T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-06-30T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "13:00:00"^^xsd:time ;
+ gr:closes "17:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday, gr:Saturday, gr:Sunday ;
+ gr:opens "13:00:00"^^xsd:time ;
+ gr:closes "17:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-12T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-09-15T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday, gr:Sunday ;
+ gr:opens "13:00:00"^^xsd:time ;
+ gr:closes "17:00:00"^^xsd:time ;
+ ] .
+
+:org
+ a gr:BusinessEntity ;
+ gr:name "Marliese’s Gårdcafé"@da ;
+ schema:location :home .
diff --git a/data/org/mc.ttl b/data/org/mc.ttl
new file mode 100644
index 0000000..f3414a1
--- /dev/null
+++ b/data/org/mc.ttl
@@ -0,0 +1,14 @@
+@prefix : <http://data.biks.dk/mcisland/> .
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+:home
+ a schema:Place ;
+ schema:name "MC Island" .
+
+:org
+ a schema:Organization ;
+ schema:name "MC Island"@da ;
+ foaf:Homepage <http://www.mcisland.dk/> ;
+ schema:location :home .
diff --git a/data/org/oreokontor.ttl b/data/org/oreokontor.ttl
new file mode 100644
index 0000000..00b0bc0
--- /dev/null
+++ b/data/org/oreokontor.ttl
@@ -0,0 +1,22 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:Place;
+ gr:category "public service";
+ gr:name "OrØkontoret"@da;
+ foaf:Homepage <http://www.oroe.dk/orokontoret.html>;
+ schema:email "info@oroe.dk";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday, gr:Thursday, gr:Friday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "14:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "11:00:00"^^xsd:time ;
+ gr:closes "13:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/oroestrand.ttl b/data/org/oroestrand.ttl
new file mode 100644
index 0000000..35e8b47
--- /dev/null
+++ b/data/org/oroestrand.ttl
@@ -0,0 +1,30 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "school";
+ gr:name "Skole- og Behandlingshjemmet Orøstrand";
+ foaf:Homepage <http://oroestrand.dk/>;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Stænget 6, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ schema:telephone "+45-59470004", "+45-40214130";
+ schema:email "post@oroestrand.dk".
+
+_:dyreparken
+ a schema:Place;
+ gr:category "attraction";
+ gr:name "Orøstrand - Dyreparken"@da;
+ foaf:Homepage <http://oroestrand.dk/dyreparken/>;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday, gr:Saturday, gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "16:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/ouroeminder.ttl b/data/org/ouroeminder.ttl
new file mode 100644
index 0000000..6a3fb37
--- /dev/null
+++ b/data/org/ouroeminder.ttl
@@ -0,0 +1,21 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:Place;
+ gr:category "museum", "attraction";
+ schema:telephone "+45-59470068", "+45-59470024", "+45-59470225";
+ gr:name "Ourø Minder"@da;
+ foaf:page <http://www.oroe.dk/museet-ouro-minder.html>;
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer" ;
+ gr:validFrom "2013-06-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Saturday, gr:Sunday ;
+ gr:opens "14:00:00"^^xsd:time ;
+ gr:closes "17:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/spisestedet.ttl b/data/org/spisestedet.ttl
new file mode 100644
index 0000000..9c96c5e
--- /dev/null
+++ b/data/org/spisestedet.ttl
@@ -0,0 +1,124 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a schema:Place;
+ gr:category "restaurant";
+ gr:name "Spisestedet Orø";
+ foaf:Homepage <http://www.spisestedet-orø.dk/> ;
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Esmosevej 11, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ schema:telephone "+45-59474796";
+ schema:email "kontakt@xn--spisestedet-or-3qb.dk";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "forår og sommer" ;
+ gr:validFrom "2013-04-29T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-06-30T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday, gr:Thursday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "forår og sommer" ;
+ gr:validFrom "2013-04-29T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-06-30T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday, gr:Saturday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "forår og sommer" ;
+ gr:validFrom "2013-04-29T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-06-30T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "19:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday, gr:Thursday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday, gr:Saturday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "midsommer" ;
+ gr:validFrom "2013-07-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-08-11T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-12T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday, gr:Thursday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-12T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday, gr:Saturday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sensommer" ;
+ gr:validFrom "2013-08-12T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-09-01T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "19:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter" ;
+ gr:validFrom "2013-09-02T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Wednesday, gr:Thursday ;
+ gr:opens "15:00:00"^^xsd:time ;
+ gr:closes "20:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter" ;
+ gr:validFrom "2013-09-02T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Friday ;
+ gr:opens "15:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter" ;
+ gr:validFrom "2013-09-02T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Saturday ;
+ gr:opens "12:00:00"^^xsd:time ;
+ gr:closes "21:00:00"^^xsd:time ;
+ ], [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "efterår og vinter" ;
+ gr:validFrom "2013-09-02T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-12-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "18:00:00"^^xsd:time ;
+ ] .
diff --git a/data/org/urtehaven.ttl b/data/org/urtehaven.ttl
new file mode 100644
index 0000000..d7eaff3
--- /dev/null
+++ b/data/org/urtehaven.ttl
@@ -0,0 +1,36 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix schema: <http://schema.org/> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a gr:BusinessEntity;
+ gr:category "accomodation";
+ gr:name "ORØ B&B bo-i-haven";
+ foaf:page <http://www.langdal5.dk/>;
+ schema:email "jensjohan@langdal5.dk";
+ schema:telephone "+45-59474705";
+ schema:address [
+ a schema:PostalAddress;
+ schema:streetAddress "Langdal 5, Orø"@da;
+ schema:postalCode "4300";
+ schema:addressLocality "Holbæk, Danmark"@da;
+ ];
+ gr:taxID "35012672".
+
+_:urtehaven
+ a schema:Place;
+ gr:category "attraction";
+ gr:name "Urtehaven på Orø";
+ schema:latitude "55.784417";
+ schema:longitude "11.78553";
+ gr:hasOpeningHourSpecification [
+ a gr:OpeningHourSpecification ;
+ rdfs:label "sommer og efterår" ;
+ gr:validFrom "2013-05-01T00:00:00Z"^^xsd:dateTime ;
+ gr:validThrough "2013-10-31T00:00:00Z"^^xsd:dateTime ;
+ gr:hasOpeningHoursDayOfWeek gr:Monday, gr:Tuesday, gr:Wednesday, gr:Thursday, gr:Friday, gr:Saturday, gr:Sunday ;
+ gr:opens "10:00:00"^^xsd:time ;
+ gr:closes "17:00:00"^^xsd:time ;
+ ] .
diff --git a/data/person/JonasSmedegaard.ttl b/data/person/JonasSmedegaard.ttl
new file mode 100644
index 0000000..9467eef
--- /dev/null
+++ b/data/person/JonasSmedegaard.ttl
@@ -0,0 +1,23 @@
+@prefix foaf: <http://xmlns.com/foaf/0.1/> .
+@prefix gr: <http://purl.org/goodrelations/v1#> .
+@prefix hcard: <http://purl.org/uF/hCard/terms/> .
+@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
+@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
+@prefix s: <http://schema.org/> .
+@prefix vcard: <http://www.w3.org/2006/vcard/ns#> .
+@prefix vcardx: <http://buzzword.org.uk/rdf/vcardx#> .
+@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
+
+[]
+ a foaf:Person;
+ foaf:mbox <mailto:dr@jones.dk>;
+ foaf:name "Jonas Smedegaard";
+ foaf:Homepage <http://dr.jones.dk/>;
+ s:address [
+ a s:PostalAddress;
+ s:streetAddress "Stauninggårdsvej 25, Orø"@da;
+ s:postalCode "4300";
+ s:addressLocality "Holbæk, Danmark"@da
+ ];
+ s:telephone "+45-40843136";
+ s:email "dr@jones.dk".
diff --git a/examples/mkevents b/examples/mkevents
new file mode 100755
index 0000000..0c25233
--- /dev/null
+++ b/examples/mkevents
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Copyright © 2013 Jonas Smedegaard <dr@jones.dk>
+# Description: render and publish event webpage from RDF data
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+# defaults sensible for the author when invoked from project root
+outfile=events.html
+infiles="data/*/*.ttl data/*/*/*.ttl"
+rsync_credentials=coreander
+rsync_path=/home/jonas/public_websites/data.biks.dk/events/index.html
+script=bin/rdf2events
+
+# make backup of eventual existing output
+if [ -f $outfile~ ]; then
+ echo >&2 "ERROR: old tempfile $outfile~ exist!"
+ echo >&2 "Check that script isn't already running, remove the file, and try again."
+ exit 1
+fi
+
+echo "Rendering $outfile..."
+$script $infiles > $outfile~
+
+if [ -f $outfile ]; then
+ echo "Comparing $outfile against older version..."
+ errorcode=0
+ diff -ruN $outfile $outfile~ || errorcode=$?
+ case $errorcode in
+ 0) echo "No changes from previous version"; exit;;
+ 1) printf "Above are changes from previous version. ";;
+ *) echo >&2 "ERROR: internal diff error!"; exit $errorcode;;
+ esac
+fi
+
+# ask, publish, and update on-disk file for later comparison
+printf "OK to publish (y/N)? "
+read do_update
+case $do_update in
+ y|Y)
+ echo "Publishing $outfile..."
+ rsync -a $outfile~ $rsync_credentials:$rsync_path
+ mv -f $outfile~ $outfile
+ echo "Done: $outfile published succesfully!"
+ ;;
+ *)
+ rm $outfile~
+ echo "Cancelled, as requested."
+ exit
+ ;;
+esac
diff --git a/examples/mkhours b/examples/mkhours
new file mode 100755
index 0000000..1e0168a
--- /dev/null
+++ b/examples/mkhours
@@ -0,0 +1,64 @@
+#!/bin/sh
+#
+# Copyright © 2013 Jonas Smedegaard <dr@jones.dk>
+# Description: render and publish opening hours webpage from RDF data
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+set -e
+
+# defaults sensible for the author when invoked from project root
+outfile=hours.html
+infiles="data/*/*.ttl data/*/*/*.ttl"
+rsync_credentials=coreander
+rsync_path=/home/jonas/public_websites/data.biks.dk/hours/index.html
+script=bin/rdf2hours
+
+# make backup of eventual existing output
+if [ -f $outfile~ ]; then
+ echo >&2 "ERROR: old tempfile $outfile~ exist!"
+ echo >&2 "Check that script isn't already running, remove the file, and try again."
+ exit 1
+fi
+
+echo "Rendering $outfile..."
+$script $infiles > $outfile~
+
+if [ -f $outfile ]; then
+ echo "Comparing $outfile against older version..."
+ errorcode=0
+ diff -ruN $outfile $outfile~ || errorcode=$?
+ case $errorcode in
+ 0) echo "No changes from previous version"; exit;;
+ 1) printf "Above are changes from previous version. ";;
+ *) echo >&2 "ERROR: internal diff error!"; exit $errorcode;;
+ esac
+fi
+
+# ask, publish, and update on-disk file for later comparison
+printf "OK to publish (y/N)? "
+read do_update
+case $do_update in
+ y|Y)
+ echo "Publishing $outfile..."
+ rsync -a $outfile~ $rsync_credentials:$rsync_path
+ mv -f $outfile~ $outfile
+ echo "Done: $outfile published succesfully!"
+ ;;
+ *)
+ rm $outfile~
+ echo "Cancelled, as requested."
+ exit
+ ;;
+esac