<?php
/* Include ARC2 classes. */
include_once("arc/ARC2.php");

/* Configure the app to use DBPedia. */
$dbpconfig = array(
  "remote_store_endpoint" => "http://dbpedia.org/sparql",
);

/* Create the 'remote store' */
$dbpedia = ARC2::getRemoteStore($dbpconfig);

/* Configure the app to use DBTune. */
$dbtconfig = array(
  "remote_store_endpoint" => "http://dbtune.org/musicbrainz/sparql",
);

/* Create the 'remote store' */
$dbtune = ARC2::getRemoteStore($dbtconfig);

/* Let's start with some genre (Art rock). */
$genre = "Art_rock";
if ($_GET['genre']) {
  $genre = urlencode($_GET['genre']);
}
$genreLink = $genre;
$uri = "http://dbpedia.org/resource/$genre";

/* Let's query DBPedia for some genre info. */
$q = "
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX dbpprop: <http://dbpedia.org/property/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?popularity ?abstract ?wikipedia ?img
WHERE
 { <$uri> rdfs:label ?name ;
          rdfs:comment ?abstract ;
          foaf:page ?wikipedia .
   OPTIONAL { <$uri> dbpprop:popularity ?popularity . }
   OPTIONAL { <$uri> foaf:depiction ?img . }
   FILTER ( langMatches(lang(?name), \"EN\") &&
            langMatches(lang(?abstract), \"EN\") ) }
";
$genre = $dbpedia->query($q, 'row');

/* Let's also grab related genres. */
$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { <$uri> dbpedia-owl-musicgenre:musicSubgenre ?genreuri .
   ?genreuri rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$subgenres = $dbpedia->query($q, 'rows');

$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { <$uri> dbpedia-owl-musicgenre:stylisticOrigin ?genreuri .
   ?genreuri rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$stylisticOrigins = $dbpedia->query($q, 'rows');

$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { ?genreuri dbpedia-owl-musicgenre:musicSubgenre <$uri> ;
             rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$parentGenres = $dbpedia->query($q, 'rows');

$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { ?genreuri dbpedia-owl-musicgenre:stylisticOrigin <$uri> ;
             rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$stylisticChildren = $dbpedia->query($q, 'rows');

$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { <$uri> dbpedia-owl-musicgenre:derivative ?genreuri .
   ?genreuri rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$derivatives = $dbpedia->query($q, 'rows');

$q = "
PREFIX dbpedia-owl-musicgenre: <http://dbpedia.org/ontology/MusicGenre/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT DISTINCT ?genre ?genreuri
WHERE
 { ?genreuri dbpedia-owl-musicgenre:derivative <$uri> ;
             rdfs:label ?genre . 
   FILTER ( langMatches(lang(?genre), \"EN\") ) }
";
$derivativeOf = $dbpedia->query($q, 'rows');

/* See if there's a tag in MusicBrainz... */
$q = "
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX tags: <http://www.holygoat.co.uk/owl/redwood/0.1/tags/>
SELECT DISTINCT ?taguri
WHERE
 { ?taguri a tags:Tag ;
           rdfs:label ?tag .
   FILTER ( str(?tag) = '" . mb_strtolower($genre['name'], 'UTF-8') . "' ) }
";
$tags = $dbtune->query($q, 'rows');
if (count($tags) > 0) {
  $musicbrainzURI = 'http://musicbrainz.org/show/tag/?tag=' . urlencode(mb_strtolower($genre['name'], 'UTF-8')) . '&show=all';
} else {
  $musicbrainzURI = false;
}

?>
<html>
<head>
<title>Genre: <?=$genre['name']?></title>
<link rel="stylesheet" href="music.css"/>
<script type="text/javascript">var genre = "<?=$genreLink?>";</script>
<script type="text/javascript" src="scriptaculous/lib/prototype.js"></script>
<script type="text/javascript" src="genre.js"></script>
</head>
<body id="body">
<h1 id="genreName"><?=$genre['name']?></h1>
<?php
if ($genre['img']) {
?>
<div id="image">
<img src="<?=$genre['img']?>"/>
<p id="imageCaption"><?=$genre['name']?></p>
</div>
<?php
}
if ($genre['popularity']) {
?>
<p id="popularity" class="dataline"><strong>Popularity:</strong> <?=$genre['popularity']?></p>
<?php
}
if (count($parentGenres) > 0) {
?>
<p id="supergenres" class="dataline"><strong>Supergenres:</strong> <?php $i = 0; foreach ($parentGenres as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
if (count($stylisticOrigins) > 0) {
?>
<p id="origins" class="dataline"><strong>Stylistic Origins:</strong> <?php $i = 0; foreach ($stylisticOrigins as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
if (count($derivativeOf) > 0) {
?>
<p id="derivativeOf" class="dataline"><strong>Derivative Of:</strong> <?php $i = 0; foreach ($derivativeOf as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
if (count($subgenres) > 0) {
?>
<p id="subgenres" class="dataline"><strong>Subgenres:</strong> <?php $i = 0; foreach ($subgenres as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
if (count($derivatives) > 0) {
?>
<p id="derivatives" class="dataline"><strong>Derivatives:</strong> <?php $i = 0; foreach ($derivatives as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
if (count($stylisticChildren) > 0) {
?>
<p id="stylisticChildren" class="dataline"><strong>Stylistic Children:</strong> <?php $i = 0; foreach ($stylisticChildren as $genreLink) { print (($i++ != 0) ? ", " : "") . "<a href=\"genre.php?genre=" . substr($genreLink['genreuri'], 28) . "\">" . $genreLink['genre'] . "</a>"; } ?></p>
<?php
}
?>
<p id="abstract"><?=$genre['abstract']?></p>
<?php
if ($genre['wikipedia'] || $musicbrainzURI) {
?>
<p id="links">
<?php
if ($musicbrainzURI) {
?>
<a href="<?=$musicbrainzURI?>">Musicbrainz</a>
<?php
}
if ($genre['wikipedia']) {
?>
<a href="<?=$genre['wikipedia']?>">Wikipedia</a>
<?php
}
?>
</p>
<?php
}
?>
<table id="artists">
<thead>
<tr>
<th>Artist</th>
<th>Years Active</th>
<th>Number of Records</th>
</tr>
</thead>
<tbody>
<tr id="loadingArtists" class="loading">
<td colspan="3">
<img src="loading.gif"/>
<br/>
Loading Artists...
</td>
</tbody>
</table>
</body>
</html>