URI policy test

URI types in Euskadi.eus

Euskadi.eus has normalized several URI types all them following the pattern:

http://id.euskadi.eus/{resource}

Spanish NTI-like URIs

NTI stands for "Norma Técnica de Interoperabilidad" (Interop Technical Norm):

http://id.euskadi.eus/{Sector}/{Domain}/{ClassName}/{Identifier}

  • {Sector}: one of the sectors provided by the NTI (e.g. environment).
  • {Domain}: the realm to which the resource belongs, defined by Open Data Euskadi (e.g. air-quality).
  • {ClassName}: the name of the class to which this resource belongs.
  • {Identifier}: a unique identifier, generated from the original data.

Example: http://id.euskadi.eus/public-sector/government/GovernmentalAdministrativeRegion/euskadi

ELI: European Legislation Identifier

Legislation resources can roughly be defined in three levels:

  • Legislation Resource: /eli/{jurisdiction}/{type}/{year}/{month}/{day}/{naturalidentifier}
  • Version: /{version}/{pointintime}/{language}
  • Format: {format}

where:

  • {jurisdiction}: the territory
  • {type}: the legislation type (e.g.; law)
  • {year}/{month}/{day}: yyyy/mm/dd
  • {naturalIdentifier}
  • {version}
  • {pointintime}
  • {language}: i.e. "eus" for basque, "spa" for spanish

so URIs can be like:

  • Legislation resouce: http://id.euskadi.eus/eli/{jurisdiction}/{type}/{year}/{month}/{day}/{naturalidentifier}
  • Version: http://id.euskadi.eus/eli/{jurisdiction}/{type}/{year}/{month}/{day}/{naturalidentifier}/{version}/{pointintime}/{language}/
  • Format: http://id.euskadi.eus/eli/{jurisdiction}/{type}/{year}/{month}/{day}/{naturalidentifier}/{version}/{pointintime}/{language}/{format}

DataSet:

http://id.euskadi.eus/dataset/{NamedGraph}

DataSet distribution:

http://id.euskadi.eus/distribution/{NamedGraph}/[lang]/format

Named graph:

http://id.euskadi.eus/graph/{NamedGraph}

Content negotiation: resource URIs and their representation

In general, a distinction is made between [resource URIs] and their [representation]:

  • A [resource URI] uniquely designates a resource and it's allways like: http://id.euskadi.eus/{resource}
  • A [representation URL] is an URL for a one of the multiple resource's representation, be it RDF, HTML, JSON, etc.

A [resource]'s [representation] can be accessed by two means:

  • Using the [resource URI] + content negotiation, that's http://id.euskadi.eus/{resource} + content negotication
  • Using the [resource]'s [representation URL]: usually http://data.euskadi.eus/{resource} + content negotiation or http://doc.euskadi.eus/{resource} if the requested content type is HTML

How each of the above URIs is handled is explained bellow. The [URI]s can be grouped in:

  • [resources] that CAN have a WEB [representation] (i.e.: can have an associated web page):
    • Spanish NTI-like URIs
    • ELI: European Legislation Identifier
    • Datasets
  • [resources] that DO NOT have a WEB [representation]:
    • Dataset distributions
    • Graphs
  • Other URIs

The URI is handled differently whether the requested MIME is HTML or RDF (or turtle, or whatever):

  • If the requested MIME is HTML, the URI can belong to a [resource] that has an associated web page. In order to guess if the [resource] has an associated web page, the system (the uri handler) queries the [triple-store] to check the main-entity-of-page attribute:
    • If main-entity-of-page exists, a CLIENT REDIR to {mainEntityOfPage} is issued.
    • If main-entity-of-page DOES NOT exists, it's an entity that DOES NOT have an associated web page so the [triple-store] data is "painted" in HTML format by ELDA (a module that 'paints' an HTML representation of [triple-store] data): a CLIENT REDIR to http://doc.euskadi.eus/{resource} is issued.
  • If the requested MIME is RDF, the URI is for a [triple-store] data so a CLIENT REDIR to http://data.euskadi.eus/{resource} is issued.

         ^
         |                                                  +--------------------------+
         +                                                  | http://idsite/{resource} |
     Resource                                               +-------------+------------+
       URIs                                                               |
         +                             Is main entity                     |
         |                           +---+ of page? +-----+MIME=HTML+-----+-----+MIME=RDF+--------+
         |                           |                                                            |
         |              +------------+-------------+                                              |
         |              |                          |                                              |
         |              |                          |                                              |
         |              |                          |                                              |
     +---------------------------------------------------+[***** CLIENT REDIR ****]+----------------------------------+
         |              |                          |                                              |
                        |                          |                                              |
         |   +----------v--------------+ +---------v---------------+                 +------------v-------------+
         |   |http://docsite/{resource}| |http://website/{resource}|                 |http://datasite/{resource}|
         +   +----------+--------------+ +---------+---------------+                 +------------+-------------+
                        |                          |                                              |
   Representation       |                          |                                              |
       URLs             |                          |                                              |
         +       +------v-------+        +---------v--------+                            +--------v--------+
         |       |              |        |                  |                            |                 |
         |       |     ELDA     |        |        Web       |                            |   Triple+Store  |
         |       |              |        |                  |                            |                 |
         v       +--------------+        +------------------+                            +-----------------+

Where:

  • {idsite} = http://id.euskadi.eus
  • {docsite} = http://doc.euskadi.eus
  • {datasite} = http://data.euskadi.eus
  • {website} = http://www.euskadie.eus

CASE 1

URL: http://id.euskadi.eus/public-sector/government/GovernmentalAdministrativeRegion/euskadi
Accept header: html
Expected result: since the [resource] has an associated [web page] (www.euskadi.eus), a CLIENT-REDIR to www.euskadi.eus is issued
CURL: curl -X GET http://id.euskadi.eus/id/public-sector/government/GovernmentalAdministrativeRegion/euskadi \ 
		-H 'accept: application/xhtml+xml' \
Result: euskadi.eus web page

CASE 2

URL: http://id.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof
Accept header: html
Expected result: since the [resource] DOES NOT hava an associated [web page] the only option is to render the [triple-store] data as HTML using [ELDA] so a CLIENT-REDIR to http://doc.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof is issued.
CURL: curl -X GET http://id.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof \ 
		-H 'accept: application/xhtml+xml' \
Result: an [ELDA]-generated web page for the [resource].

CASE 3

URL: http://id.euskadi.eus/public-sector/government/GovernmentalAdministrativeRegion/euskadi
Accept header: rdf
Expected result: a CLIENT-REDIR to the [triple-store] data is issued: http://data.euskadi.eus/public-sector/government/GovernmentalAdministrativeRegion/euskadi and the RDF data is returned.
CURL: curl -X GET http://id.euskadi.eus/public-sector/government/GovernmentalAdministrativeRegion/euskadi \ 
		-H 'accept: application/rdf+xml' \
Result: the [resource] in RDF format.

CASE 4

URL: http://id.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof
Accept header: rdf
Expected result: a CLIENT-REDIR to the [triple-store] date is issued: http://data.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof
CURL: curl -X GET http://id.euskadi.eus/eli/es-pv/l/1979/03/20/(0)/dof \ 
		-H 'accept: application/rdf+xml' \
Result: the [resource] in RDF format.