|
|
(7 intermediate revisions by the same user not shown) |
Line 1: |
Line 1: |
| <div style="background-color: #337733; color: white; font-weight: bold; padding: 5px; margin-bottom: 5px;">
| | (This page is no longer in use - version 6 is now live and documented [[The_Database_API|here]]). |
| This page is currently being updated. Don't rely on it yet.
| |
| </div>
| |
| | |
| Please read [[Terms and conditions, Copyright, Fair Use, etc.]] if you are going to use this API.
| |
| | |
| There is an experimental [[Python Database API interface]] if you want to work with this API from Python.
| |
| | |
| ==Introduction==
| |
| | |
| The same information as provided by the [[The Map URL API]] is provided in machine readable form using URLs like this:
| |
| | |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>q=''search''[&partial=yes]
| |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>bb=''boundingbox''
| |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>ref=''ref''
| |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>inst=''inst''
| |
| | |
| with the same interpretation as in [[The Map URL API]] (note that one=list is not relevant in the q= and bb= variants, and the simple <em>name </em>variant is not available to the API - just use <strong><nowiki>http://map.cam.ac.uk/v6.json?</nowiki>q=<em>name</em></strong>).
| |
| <p>
| |
| An additional option <strong>?limit=<em>limit</em></strong> is also available on the ?q and ?bb forms which limits the number of results returned to the number given. For example</p>
| |
| | |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>q=saint&limit=15
| |
| | |
| Values of query parameters, such as <strong>?q=</strong> are limited to 2,000 characters. For <strong>?inst=</strong> and <strong>?ref=</strong> queries, a maximum of 25 may be requested at once (separating the requested codes with '|').
| |
| | |
| <p>Also, there is another query type available to the database API not available when using a consumer URL. <strong>?alpha=<em>letter</em></strong> will provide an alphabetically ordered listing of the entire index for that letter. This is used as the basis for the directory page and other alphabetic listings. Please cache the results of this search so that it does not place an unwarranted load on the database. You can also filter by type, for example:</p>
| |
| | |
| <nowiki>http://map.cam.ac.uk/v6.json?</nowiki>alpha=s&filter=college
| |
| | |
| <p>The version 6 API also supports discovery and navigation around the reference hierarchy. See [[The Database API reference discovery]] for more details.</p>
| |
| | |
| <p>
| |
| The 'v6' is a version number, allowing for potential backward compatibility if we change the spec at some point in the future. Only v6 is useful for now. v5 was deprecated in January 2013 and backward compatibility was not provided.</p>
| |
| <p>
| |
| The 'json' part indicates the results are provided in JSON format. We may produce other formats in future, in which case URLs such as <strong><nowiki>http://map.cam.ac.uk/v6.xml?</nowiki>...</strong> would be introduced, but for the time being, only JSON is supported.</p>
| |
| <p>
| |
| The result is a JSON array:</p>
| |
| <p style="margin-left: 40px; ">
| |
| [ { "type": <em>type0</em>, ... }, { "type": <em>type1</em>, ...<em> </em>}, ... ]</p>
| |
| <p>
| |
| where each object in the array is an entity matching the request. If there are <strong>no results</strong>, an empty array is produced. If there is <strong>only one result</strong>, it is still provided as an array (of one object), not as just the object. Note also that requests by inst and ref may occasionally also yield more than one result. </p>
| |
| <p>
| |
| The content of the rest of each object depends on:</p>
| |
| <ul>
| |
| <li>
| |
| <em>type</em></li>
| |
| <li>
| |
| what information is available for each result</li>
| |
| <li>
| |
| whether the request was a search (q=... or <em>name</em>) or direct look up (ref or inst URLs)</li>
| |
| </ul>
| |
| <p>
| |
| <i>type</i> is one of:</p>
| |
| <p style="margin-left: 40px; ">
| |
| <strong>error<br />
| |
| institution<br />
| |
| site<br />
| |
| college</strong><br />
| |
| <strong>building<br />
| |
| entrance</strong><br />
| |
| <strong>nonuniversity</strong><br />
| |
| <strong>street</strong><br />
| |
| <strong>more</strong></p>
| |
| | |
| ==Error reports==
| |
| | |
| <p>
| |
| If <em>type</em> is <strong>error</strong>, then the http request will also return an appropriate status code, typically 400 indicating the request is malformed (wrong combination of query parameters, for example) or 404 (api version or format not implemented for example). The consumer should also be prepared to handle other HTTP errors generated by the server which will not provide JSON data (500 for example). Apart from these, all correctly formed requests will generate status 200. Note that this includes requests with no results (which produce an empty array).</p>
| |
| <p>
| |
| Note also that if you mis-spell 'v6.json' (for example, say you incorrectly use a capital V), then the URL may be interpreted as the end-user form M:/<em>name</em> so you would get a stream of HTML!</p>
| |
| | |
| <p>v5.json, the now deprecated API, will always produce an error like this (actually an HTTP 410 error).</p>
| |
| | |
| ==Entity structure==
| |
| <p>
| |
| Contents of JSON objects representing entities found are as follows, by type.</p>
| |
| | |
| <p>In general, each request includes information about things linked to each result: the buildings for an institution, the entrances to a site and so on. This referencing only applies one level deep: those parts are excerpted: they do not themselves contain further entities to which they refer. If you need these, you would have to request the content by ref or inst from the parent. The fields omitted in the second level are indicated with an asterisk in the tables that follow.
| |
| | |
| ===error===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>error</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| code</td>
| |
| <td>
| |
| the HTTP status code</td>
| |
| <td>
| |
| int</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| error</td>
| |
| <td>
| |
| text describing the error</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===more===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>more</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| When the number of results is limited by <strong>?limit=<em>limit</em></strong>, the last element in the array of results may indicate "more", that there are more results that could be found but the limit was reached. Because certain results are redacted in some circumstances, note that the number of elements in the array may be fewer than limit+1 even if the limit is reached. "more" is not included if all the available results are returned. There isn't any way to page through the results: the search needs to be made more specific.</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===institution===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>institution</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| inst</td>
| |
| <td>
| |
| the institution code of the entity</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| role</td>
| |
| <td>
| |
| kind of institution</td>
| |
| <td>
| |
| string, one of:<br />
| |
| college<br />
| |
| academic<br />
| |
| admin<br />
| |
| nonacademic<br />
| |
| mrc<br />
| |
| library<br />
| |
| museum<br />
| |
| lecture</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| prefix</td>
| |
| <td>
| |
| the name prefix</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| for example, 'Department of', 'Centre for'</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| name</td>
| |
| <td>
| |
| the substantive part of the institution name</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| for example, 'Geography'. This is the field to sort on for alphabetically ordered institutions</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| suffix</td>
| |
| <td>
| |
| the name suffix</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| often an acronym or former name, which would often be presented in parentheses. For example, when name is 'Advanced Photonics and Electronics', prefix is 'Centre for ' and suffix would be 'CAPE'. The whole might be presented as 'Advanced Photonics and Electronics (CAPE), Centre for' or 'Centre for Advanced Photonics and Electronics (CAPE)'</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| parent*</td>
| |
| <td>
| |
| when the entity is subsidiary to another, this is the institution code of the parent institution</td>
| |
| <td>
| |
| entity</td>
| |
| <td>
| |
| for example the faculty of a department</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| options</td>
| |
| <td>
| |
| arbitrary space separated tokens indicating arbitrary options</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| sd</td>
| |
| <td>
| |
| the subdomain of the entity</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "lucy-cav"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| info</td>
| |
| <td>
| |
| contact information (etc)</td>
| |
| <td>
| |
| array of objects (see below)</td>
| |
| <td>
| |
| <p>
| |
| for example:</p>
| |
| <p>
| |
| "info": [<br/>
| |
| { "type": "founded", "founded": "1505" },<br/>
| |
| { "type": "address", "address": [<br/>
| |
| { "type": "street", "street": "St Andrew's Street" },<br/>
| |
| { "type": "place", "place": "Cambridge" },<br/>
| |
| { "type": "postcode", "postcode": "CB2 3BU" },<br/>
| |
| {"type": "location", "location": {<br/>
| |
| "type": "college", "ref": "CHRISTS", "name": "Christ's College",<br/>
| |
| "lat": 52.206145, "lon": 0.122944, "primitive": "w", "id": 147488000<br/>
| |
| }<br/>
| |
| },<br/>
| |
| ...<br/>
| |
| ]</p>
| |
|
| |
| <p>Note that all this contact information relates to the entity concerned. Subordinate entities will have their own contact information if relevant.</p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| sortasvia</td>
| |
| <td>
| |
| when result matched via an AKA field (see below) or from a role, the index of the info element which it matched against</td>
| |
| <td>
| |
| integer</td>
| |
| <td>
| |
| <td></td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===Fields common to all geographical objects===
| |
| | |
| The remainder are all geographical objects and share the following common fields:
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| ref</td>
| |
| <td>
| |
| the reference of the entity</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "H/FORVIE"<br />
| |
| See [[The Database API reference discovery]] for a discussion of reference formats,
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| name</td>
| |
| <td>
| |
| the name of the entity (assuming it has one)</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "Forvie Site", "Austin Building"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| lat</td>
| |
| <td>
| |
| the latitude of a representative position of the entity</td>
| |
| <td>
| |
| float</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| lon</td>
| |
| <td>
| |
| the longitude of a representative position of the entity</td>
| |
| <td>
| |
| float</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| primitive</td>
| |
| <td>
| |
| whether the building was dericved from an OSM way ("w") or node ("n")</td>
| |
| <td>
| |
| string (either "w" or "n")</td>
| |
| <td>
| |
| primitive and id can be used together to form a link to the OSM browser, as in http://osm.org/browse/way/1234567</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| id</td>
| |
| <td>
| |
| the OSM id of the node from which the entrance was derived</td>
| |
| <td>
| |
| int</td>
| |
| <td>
| |
| sites, colleges and buildings are always areas (ways) in OSM<br />
| |
| </td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===site===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>site</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| parent*</td>
| |
| <td>
| |
| when the site is a sub-site, this is the main site</td>
| |
| <td>
| |
| site object</td>
| |
| <td>
| |
| for example object for "Cambridge Biomedical Campus" when name is "Forvie Site"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| entrances*</td>
| |
| <td>
| |
| to the site</td>
| |
| <td>
| |
| array of entrance objects</td>
| |
| <td>
| |
| see below</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===college===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>college</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| This is the geographical entity for a college site or sub-site, not the institutional information which is an inst. This is very similar to <strong>site</strong>.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| parent*</td>
| |
| <td>
| |
| when the college item is a subsidiary site, the main site</td>
| |
| <td>
| |
| college object</td>
| |
| <td>
| |
| e.g. object for "Magdalene College" when site is ref MAGD/CRIPPS</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| entrances*</td>
| |
| <td>
| |
| as for site</td>
| |
| <td>
| |
| array of entrance objects</td>
| |
| <td>
| |
| see below</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| institution*</td>
| |
| <td>
| |
| the institution information associated with this college area</td>
| |
| <td>
| |
| institution object</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===building===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>building</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| parent*</td>
| |
| <td>
| |
| site/college in which the building is situated</td>
| |
| <td>
| |
| site/college object</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| entrances*</td>
| |
| <td>
| |
| entrances of the building</td>
| |
| <td>
| |
| array of entrance objects</td>
| |
| <td>
| |
| see below</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| occupants*</td>
| |
| <td>
| |
| occupants of the building</td>
| |
| <td>
| |
| array of institution objects</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===entrance===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <strong>entrance</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| entrances apply to sites and colleges as well as buildings. Note, entrances are always derived from OSM node entities.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| parents*</td>
| |
| <td>
| |
| buildings and/or sites/colleges to which this entrance gives access</td>
| |
| <td>
| |
| array of building/site/college objects</td>
| |
| <td>
| |
| note that a few entrances give access to university properties on either side; also occasionally an entrance to a building isn't actually part of the building footprint.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| occupants*</td>
| |
| <td>
| |
| the institutions that gain access by this entrance</td>
| |
| <td>
| |
| array of institution objects</td>
| |
| <td>
| |
| OK, you don't exactly "occupy" an entrance, but consistent with buildings</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| direction</td>
| |
| <td>
| |
| the direction of a normal to the parent building/site/college at an entrance, in degrees between -180 and 180 measured anticlockwise from the east (positive x axis) pointing away from the building</td>
| |
| <td>
| |
| float</td>
| |
| <td>
| |
| the direction can be used to orient an overlaid arrow pointing to the entrance.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| user</td>
| |
| <td>
| |
| some or all of the letters "fbvg"</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| standing for "foot", "bicycle", "vehicle" and "goods" respectively, indicating the class or classes of users which can use the entrance.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| door</td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| boolean</td>
| |
| <td>
| |
| whether this entrance is the door to a buiulding (true) or a gate to a site (false)</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===nonuniversity===
| |
| | |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <b>nonuniversity</b></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| role</td>
| |
| <td>
| |
| what kind of thing this is</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "hotel"</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===street===
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| <strong>notes</strong></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| <b>street</b></td>
| |
| <td>
| |
| </td>
| |
| <td>
| |
| no additional fields other than the common ones</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ==Contact information==
| |
| | |
| Contact information for institutions and colleges is grouped into an array of items each of which may be repeated and qualified as necessary. For example, multiple phone numbers with descriptions of what each is for. Note that these all relate to the entity concerned. Subordinate entities will have their own contact information if relevant, so addresses, phone numbers etc. for child institutions should not be given as alternate addresses within the same info array.
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| person</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| primary contact named individual, for example "Prof. John Doe".</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| description</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| A brief description of the function of the institution</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| title</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| primary contact title, for example "The Bursar", where useful for more personal addressing.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| address</td>
| |
| <td>
| |
| array of objects (see below)</td>
| |
| <td>
| |
| <p>
| |
| what the address is for, assumed to be the primary address if not described.</p>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| phone</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| in the international form +44 1223 33nnnn</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| fax</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| ditto</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| email</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| url</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| complete, including the http://</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| founded</td>
| |
| <td>
| |
| int</td>
| |
| <td>
| |
| (colleges only) year of foundation</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| logo</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| url of image which is used to brand the institution</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| twitter</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| facebook</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| AKA</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| another name or search term by which the institution is known. Unlike other info fields, the value of this info item is (usually) added to the search index.
| |
| | |
| <p>This may be used in different ways according to the accompanying options. An "xm" option excludes the entry from the paper map (this might be a very old name, for example, which you want search results to hit, but not include in an up-to-date static map). "xw" excludes it from the web site searches and presentation, but includes it in the paper map and other alphabetic listings. "xd" excludes it from presentation (the user doesn't see it), but includes it in the index.</p>
| |
| | |
| <p>Additionally when a ?q returns a result via a match on an AKA, the top level structure contains 'viaaka', the index of the info element which it matched against. This is so that you can tell the user if you want to why their search matched when it doesn't appear to match the main entry name.</p></td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| subsection</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| indicates that all the entries that follow up to a subsection-end entry or another subsection or subsection-AKA entry or the end of the info are grouped together. This would typically be used where an institution lists contact details for a well-defined part or function of the institution - for example, the phone, fax and email for the Box Office part of the ADC Theatre. A consumer would typically render the subsection string as a subheading of some kind and possibly indent its contents or separate them out in some suitable way. (note: this supersedes the version 5 method of grouping, where repeated roles indicated subsections, which was rather clumsy and prevented the individual elements having their own roles).</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| subsection-AKA</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| a combination of subsection and AKA; that is it provides the grouping of subsequent elements and the indexing of the heading text. Most consumers would treat this identically to subsection.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| subsection-end</td>
| |
| <td>
| |
| string (unused)</td>
| |
| <td>
| |
| explicitly terminates a group of subsection elements.</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===Contact information qualifiers===
| |
| | |
| Each of these objects contains a type to identify the key, and may also contain other qualifying information, as follows:
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| type</td>
| |
| <td>
| |
| one of the keys listed in the previous table</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| role</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| description of what the contact information will be used for. If omitted, assumed to be the primary contact information of this type. For URLs this would typically be used for the link text rather than displaying the URL itself. For others it would serve as a caption. </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| options</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| arbitrary space separated string of options (meanings client dependent)</td>
| |
| </tr>
| |
| </table>
| |
| | |
| ===Addresses===
| |
| | |
| Addresses are further subdivided so that they can be presented linearly, in "label" form or as a VCARD etc, by combining the elements with suitable punctuation and markup, and also cross-linked where appropriate - for example the <strong>street</strong> element could be linked with the URL <strong><nowiki>http://www.cam.ac.uk/</nowiki><em>streetname</em></strong> to jump to the map for the street name. These should be used in order when presenting an address.
| |
| | |
| Addresses may also be associated with geographical locations (sites, colleges and buildings) and their entrances. This supersedes the amorphous list of locations and entrances provided in version 5. An address may be
| |
| <ul>
| |
| <li>just a postal address for correspondence, in which no location or entrances will be included in the address data</li>
| |
| <li>a postal address with a corresponding location on the ground (possibly with entrances)</li>
| |
| <li>just a location (and possibly its entrances), where the intention is to show the location on a map, but to direct post to a central address in a second address element, or occasionally that a postal address is not available for the location.</li>
| |
| </ul>
| |
| | |
| Each element contains a <strong>type</strong> field whose value is one of the keys in the following table, and then a key/value pair according to the type, as follows:
| |
| | |
| <table class="wikitable">
| |
| <tr>
| |
| <td>
| |
| <strong>key</strong></td>
| |
| <td>
| |
| <strong>value</strong></td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| location</td>
| |
| <td>
| |
| int</td>
| |
| <td>
| |
| a number indicating that this address refers to the corresponding location in the list of locations. Not all addresses need refer to a location (e.g. a PO Box), and not all locations need have a corresponding address. But when they do, the correspondence may be used to disambiguate locations occupied by the institution. Numbering starts at 1, not zero!</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| maildrop</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| for parts of an address such as a room number or a PO Box number</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| building</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| name of building</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| number</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| location on a street, e.g. "42a"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| site</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "Lords Bridge", "New Museums Site"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| street</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| e.g. "Downing Place"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| street2</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| occasionally a second street is part of the address</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| smallplace</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| where place is a local village</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| place</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| usually "Cambridge"</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| county</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| rarely needed</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| postcode</td>
| |
| <td>
| |
| string</td>
| |
| <td>
| |
| </td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| location</td>
| |
| <td>
| |
| location object</td>
| |
| <td>
| |
| see above. This is an excerpted location object. There will only be at most one location object per address.</td>
| |
| </tr>
| |
| <tr>
| |
| <td>
| |
| entrance</td>
| |
| <td>
| |
| entrance object</td>
| |
| <td>
| |
| see above. This is an excerpted entrance object. There may be multiple address elements per addreess, but there will never be an entrance object in an address if there is no location object preceding it for the same address. Conversely, location elements do not have any entrance elements.</td>
| |
| </tr>
| |
| </table>
| |
| | |
| Some examples:
| |
| <ul>
| |
| <li>
| |
| Hamilton Kerr Institute:<br />
| |
| [ {"type": "street", "street": "Mill Lane"},<br/> {"type": "smallplace", "smallplace": "Whittlesford"},<br/> {"type": "place", "place": "Cambridge"},<br/> {"type": "postcode", "postcode": "CB22 4NE"} ]</li>
| |
| <li>
| |
| Division of Anaesthesia<br />
| |
| [<br/> | |
| { "type": "maildrop", "maildrop": "Box 93" },<br/>
| |
| { "type": "maildrop", "maildrop": "Level 4" },<br/>
| |
| { "type": "site", "site": "Addenbrooke's Hospital" },<br/>
| |
| { "type": "street", "street": "Hills Road" },<br/>
| |
| { "type": "place", "place": "Cambridge" },<br/>
| |
| { "type": "postcode", "postcode": "CB2 2QQ" },<br/>
| |
| { "type": "location", "location": {<br/>
| |
| "type": "building", "ref": "H132",<br/>
| |
| "lat": 52.17525, "lon": 0.141464, "id": 1643255315 }<br/>
| |
| },<br/>
| |
| { "type": "entrance", "entrance": {<br/>
| |
| "type": "entrance", "ref": "H131-A",<br/>
| |
| "name": "Addenbrooke's Hospital Main Entrance",<br/>
| |
| "lat": 52.175206, "lon": 0.140538,<br/>
| |
| "direction": 104, "user": "f", "primitive": "n", "id": 1643254795, <br/>
| |
| "entrance": "main", "door": true }<br/>
| |
| },<br/>
| |
| {<br/>
| |
| "type": "entrance", "entrance": {<br/>
| |
| "type": "entrance","ref": "H-A",<br/>
| |
| "lat": 52.176241, "lon": 0.144354,<br/>
| |
| "direction": 15, "user": "fbv", "primitive": "n", "id": 664530277,<br/>
| |
| "entrance": "main", "door": false<br/>
| |
| }<br/>
| |
| },<br/>
| |
| ...<br/>
| |
| ]</li> | |
| </ul>
| |
| | |
| Here is a complete example record (for the Department of Anglo-Saxon, Norse and Celtic). Remember that all result records will be presented in an array, even if there is only one of them.
| |
| | |
| {<br/>
| |
| "type": "institution",<br/>
| |
| "inst": "asnc",<br/>
| |
| "prefix": "Department of",<br/>
| |
| "name": "Anglo-Saxon, Norse and Celtic",<br/>
| |
| "sd": "asnc",<br/>
| |
| "role": "academic",<br/>
| |
| "info": [<br/>
| |
| { "type": "address",<br/>
| |
| "address": [<br/>
| |
| { "type": "number", "number": "9" },<br/>
| |
| { "type": "street", "street": "West Road" },<br/>
| |
| { "type": "place", "place": "Cambridge" },<br/>
| |
| { "type": "postcode", "postcode": "CB3 9DP" },<br/>
| |
| { "type": "location", "location": {<br/>
| |
| "type": "building", "ref": "S040",<br/>
| |
| "name": "Faculty of English",<br/>
| |
| "lat": 52.20246, "lon": 0.108541, "id": 26378099 }<br/>
| |
| },<br/>
| |
| { "type": "entrance", "entrance": {<br/>
| |
| "type": "entrance", "ref": "S040-A",<br/>
| |
| "lat": 52.202422, "lon": 0.108616, "direction": -169,<br/>
| |
| "user": "f", "primitive": "n", "id": 1487638771,<br/>
| |
| "entrance": "main", "door": true }<br/>
| |
| },<br/>
| |
| { "type": "entrance", "entrance": {<br/>
| |
| "type": "entrance", "ref": "S-C",<br/>
| |
| "lat": 52.202752, "lon": 0.108839, "direction": 94,<br/>
| |
| "user": "fb", "primitive": "n", "id": 961417125,<br/>
| |
| "entrance": "main", "door": false<br/>
| |
| }<br/>
| |
| },<br/>
| |
| { "type": "entrance", "entrance": {<br/>
| |
| "type": "entrance", "ref": "S-E",<br/>
| |
| "lat": 52.202702, "lon": 0.108056, "direction": 94,<br/>
| |
| "user": "fbv", "primitive": "n", "id": 961417126,<br/>
| |
| "entrance": "main", "door": false }<br/>
| |
| }<br/>
| |
| ]<br/>
| |
| },<br/>
| |
| { "type": "phone", "phone": "+44 1223 335079" },<br/>
| |
| { "type": "fax", "fax": "+44 1223 335092" },<br/>
| |
| { "type": "email", "email": "asnc@hermes.cam.ac.uk" },<br/>
| |
| { "type": "url", "url": "http:\/\/www.asnc.cam.ac.uk\/" },<br/>
| |
| { "type": "url", "url": "http:\/\/www.asnc.cam.ac.uk\/people\/index.htm", "role": "Contacts" }<br/>
| |
| ]<br/>
| |
| }<br/>
| |
| | |
| ==Coordinates==
| |
| | |
| There are very few real-world coordinates in the database (it doesn't, for example, include building outlines). But this information is available from the OSM API by reference to the OSM id in the 'id' field of all geographic entities.
| |
| | |
| For building outlines, the OSM API supports:
| |
| | |
| http://osm.org/api/0.6/way/<ID>
| |
| http://osm.org/api/0.6/way/<ID>/full
| |
| http://osm.org/api/0.6/way/<ID>/relations
| |
| | |
| Note however that a building doesn't have to be just a single closed way, since it can have have holes in the area. These are handled as OSM "[http://wiki.openstreetmap.org/wiki/Relation:multipolygon multipolygons]". In essence, there is an outer way plus a number of inner ways
| |
| | |
| For example, Churchill West Court (ref CHU016, http://map.cam.ac.uk/v6.json?ref=CHU016&debug=1). The Map API tells you it is a way with id 148247888 and you can plug it into the OSM API thus
| |
| | |
| http://www.openstreetmap.org/api/0.6/way/148247888/full
| |
| | |
| returning
| |
| | |
| <pre><nowiki>
| |
| <osm version="0.6" generator="OpenStreetMap server">
| |
| <node id="1613469175" lat="52.2128314" lon="0.1013427" version="1" changeset="10553242" user="davidearl" uid="3582" visible="true" timestamp="2012-01-31T20:37:02Z"/>
| |
| <node id="1613469065" lat="52.2127198" lon="0.101803" version="1" changeset="10553242" user="davidearl" uid="3582" visible="true" timestamp="2012-01-31T20:36:58Z"/>
| |
| ...
| |
| <nd ref="1613469175"/>
| |
| <nd ref="1613469065"/>
| |
| ...
| |
| <tag k="amenity" v="university"/>
| |
| <tag k="building" v="yes"/>
| |
| <tag k="name" v="West Court"/>
| |
| <tag k="operator" v="Churchill College (University of Cambridge)"/>
| |
| <tag k="ref" v="CHU016"/>
| |
| </way>
| |
| </osm>
| |
| </nowiki></pre>
| |
| | |
| and http://www.openstreetmap.org/api/0.6/way/148247888/relations gets
| |
| | |
| <pre><nowiki>
| |
| <osm version="0.6" generator="OpenStreetMap server">
| |
| <relation id="1999559" visible="true" timestamp="2012-01-31T20:40:32Z" version="1" changeset="10553242" user="davidearl" uid="3582">
| |
| <member type="way" ref="148247888" role="outer"/>
| |
| <member type="way" ref="148248147" role="inner"/>
| |
| <tag k="type" v="multipolygon"/>
| |
| </relation>
| |
| </osm>
| |
| </nowiki></pre>
| |
| | |
| telling you it is a multipolygon outer, and giving the info to traverse to the inner as above.
| |