Project

General

Profile

1
<?php
2
require_once dirname(__FILE__)."/util.php";
3

    
4
# config
5
$alias = "j.mp/vegpath";
6

    
7
function by_prefix($url, $main_url=null)
8
{
9
	if (!isset($main_url)) $main_url = $url;
10
	
11
	return function($path) use($url, $main_url)
12
	{
13
		return $path ? $url.$path : $main_url;
14
	};
15
}
16

    
17
$h_level = 4;
18
$path = parse_mixed_path($_SERVER["QUERY_STRING"]);
19
$ref = strtolower($path->head);
20

    
21
function add_ref($name, $suffix, $url_func)
22
{
23
	global $alias, $h_level, $path, $ref;
24
	if (is_string($url_func)) $url_func = by_prefix($url_func);
25
	
26
	print("<h".$h_level."><code>".$alias.'#<big><a href="http://'.$alias
27
		."#".$name.'">'.$name."</a></big><i>".$suffix."</i></code></h".$h_level.">\n");
28
	if ($ref === strtolower($name)) # found match, so redirect
29
	{
30
		header("Location: ".strip_url($url_func($path->tail)));
31
		ob_end_flush();
32
		print('<h4 class="progress">Loading '.$name."...</h4>\n");
33
		exit;
34
	}
35
}
36

    
37
function fragment_override($url, $fragment=null)
38
{
39
	return function($path) use($url, $fragment)
40
	{
41
		if (!isset($fragment))
42
		{
43
			$path = parse_dot_path($path);
44
			$fragment = $path->head;
45
			$path = $path->tail;
46
		}
47
		if ($path) $url .= "?".$path;
48
		return $url."#".$fragment;
49
	};
50
}
51

    
52
function phpPgAdmin($url)
53
{
54
	return function($path) use($url)
55
	{
56
		$path = parse_dot_path($path);
57
		$subject = "schema";
58
		if ($path->head)
59
		{
60
			$url .= "&table=".$path->head;
61
			if ($path->tail)
62
			{
63
				$url .= "&column=".$path->tail;
64
				$subject = "column";
65
			}
66
			else $subject = "table";
67
		}
68
		return $url."&subject=".$subject;
69
	};
70
}
71

    
72
function VegBank($url)
73
{
74
	return function($path) use($url)
75
	{
76
		$path = parse_dot_path($path);
77
		if ($path->head) $url .= "/vegbank/views/dba_tabledescription_detail.jsp?view=detail&entity=dba_tabledescription&where=where_table$name&wparam=".$path->head."#".$path->tail;
78
		else $url .= "/get/index/dba_tabledescription";
79
		return $url;
80
	};
81
}
82

    
83
ob_start(); // delay output in case there is a redirect
84
?>
85
<html>
86
	<head>
87
		<title>VegPath</title>
88
		<link rel="stylesheet" type="text/css" href="main.css" />
89
		<style type="text/css">
90
h1 {color: green;}
91
		</style>
92
		<script type="text/javascript" src="util.js"></script>
93
	</head>
94
	<body>
95
		<h1>VegPath&nbsp;&nbsp; <small>human-readable URLs for vegetation resources</small></h1>
96
		<div>Supported URL patterns:&nbsp;&nbsp; <small><i>(elements can be left out successively from the end of the URL)</i></small></div>
97
		<blockquote>
98
<?php
99
# add and list URLs
100
print("<h2>Terms</h2>");
101
{
102
	print("<blockquote>\n");
103
	print("<h3>Exchange schemas</h3>");
104
	{
105
		print("<blockquote>\n");
106
		add_ref("VegCore", ".table.column", "https://projects.nceas.ucsb.edu/nceas/projects/bien/wiki/VegCore#");
107
		add_ref("DwC", ".term", "http://rs.tdwg.org/dwc/terms/#");
108
		{
109
			print("<blockquote>\n"); $h_level++;
110
			add_ref("DwC-history", ".term", "http://rs.tdwg.org/dwc/terms/history/#");
111
			print("</blockquote>\n"); $h_level--;
112
		}
113
		add_ref("TCS", "/XPath", "http://www.tdwg.org/standards/117/download/#/v101.xsd#");
114
		add_ref("VegX", "/XPath", "http://wiki.tdwg.org/twiki/pub/Vegetation/WebHome/VegX_Schema_1.5.3_proposed.zip#/veg.xsd#");
115
		print("</blockquote>\n");
116
	}
117
	print("<h3>Aggregators</h3>");
118
	{
119
		print("<blockquote>\n");
120
		add_ref("VegBank", ".table.column", VegBank("http://vegbank.org"));
121
		add_ref("SALVIAS", ".table.column", "http://salvias.net/Documents/salvias_data_dictionary.html#");
122
		add_ref("BIEN2", ".table.column", phpPgAdmin("http://vegbiendev.nceas.ucsb.edu/phppgadmin/redirect.php?server=localhost%3A5432%3Aallow&database=vegbien&schema=public"));
123
		add_ref("VegBIEN", ".table.column", phpPgAdmin("http://vegbiendev.nceas.ucsb.edu/phppgadmin/redirect.php?server=localhost%3A5432%3Aallow&database=vegbien&schema=public"));
124
		print("</blockquote>\n");
125
	}
126
	print("<h3>Primary databases</h3>");
127
	{
128
		print("<blockquote>\n");
129
		add_ref("TNRS", ".term", fragment_override("http://tnrs.iplantcollaborative.org/instructions.html", "download_results"));
130
		print("</blockquote>\n");
131
	}
132
	print("</blockquote>\n");
133
}
134
print("<h2>Data</h2>");
135
{
136
	print("<blockquote>\n");
137
	add_ref("IH", ".herbarium_code", by_prefix("http://sweetgum.nybg.org/ih/herbarium_list.php?QueryName=DetailedQuery&Restriction=NamPartyType+%3D+%27IH+Herbarium%27&col_NamOrganisationAcronym=",
138
			"http://sweetgum.nybg.org/ih/"));
139
	print("</blockquote>\n");
140
}
141
?>
142
			<script type="text/javascript">
143
var loc = document.location
144
if (loc.hash)
145
{
146
	var fragment = rm_prefix('#', loc.hash)
147
	document.write('<h4 class="progress">Loading '+fragment+'...</h4>')
148
	document.location = '?'+fragment
149
}
150
			</script>
151
		</blockquote>
152
	</body>
153
</html>
154
<?php
155
ob_end_flush();
156
?>
(2-2/5)