RDF Content Labels: Use Cases

3 May 2005

NOTE: this document is published here as a work-in-progress within the EU-funded Quatro project. It uses W3C technology and explores the application of W3C's RDF/XML format to content labelling in the PICS tradition. It is not currently a work item of any W3C Working Group. I am exploring the possibilities for bringing this work into a chartered W3C Group, eg. as an Interest Group note through the Semantic Web Interest Group. --Dan Brickley

This version
http://www.w3.org/2004/12/q/doc/rdf-contentlabels20050503.html
Previous version:
http://www.w3.org/2004/12/q/doc/rdf-contentlabels20050314.html
Latest version:
http://www.w3.org/2004/12/q/doc/rdf-contentlabels.html
Authors:
Phil Archer, ICRA <phil.archer@icra.org>
Noboru Shimuzu <shimizu@iajapan.org>
Fumihiro Kato <fumihiro@sfc.keio.ac.jp>
Kal Ahmed, Techquila <kal@techquila.com>
Dan Brickley, W3C <danbri@w3.org>

Abstract

This document describes use cases in which collections of resources share a common description. The term 'content label' is used to refer to such descriptions. An RDF schema [RDFS] has been designed to meet the use cases and is described in an associated document [SCHEMA-D].

The work represents a collaboration between members of the ICRA Labelling Working Group with support from Vodafone Group Services, Dan Brickley of the W3C Semantic Web team, and two project groups: IA Japan's Mobile Filtering Project and QUATRO. It has not been reviewed more generally within W3C and should not be considered to be on the "standards track". It is published here to facilitate collaboration and discussion about possible future directions for this and related work.

Discussion of this document takes place on the public mailing list http://lists.w3.org/Archives/Public/public-quatro/. To contribute or comment, please subscribe by sending mail to public-quatro-request@w3.org with subscribe as the subject. The archive of this list can be read by the general public.

We are particularly interested in feedback regarding the costs and benefits of implementing this style of labelling using a generic RDF logical rule language, rather than as a custom RDF application vocabulary.

Table of Contents

1 Introduction
2 Use cases
  2.1 Use Case 1: Distributed content production, centralised label control
  2.2 Use Case 2: Distributed content production, distributed label control
  2.3 Use Case 3: Centralised generic labels with local override
  2.4 Use case 4: Video on demand
  2.5 Use case 5: RSS News Feed
3 Adding trust, web services etc.
4 Links and References


1 Introduction

There are many reasons for which a content provider may wish to group their resources together for the purposes of describing them rather than providing an individual description for an individual URI. These include, but are not limited to, child protection, quality assurance, standards conformance, copyright notices, authorship etc.

Different interest groups have come together to find a solution to this based on Semantic Web Technologies. The experiences gained using the PICS system have been instructive in determining the design of content labels based on RDF.

An RDF schema has been devised [RDFS] to meet the use cases described in the next section, all of which are supported by published test data. A separate document [SCHEMA-D] describes the detail and full functionality of the schema.

2 Use cases

Note: In the following use cases, the ICRA system is used extensively as an example. The authors wish to stress that the concept of an RDF content label has been designed to support any labelling scheme and is applicable to any sort of content that can be identified by a URI.

2.1 Use case 1: Distributed content production, centralised label control

Exemplary Portal Inc. has 40 production centres around the world. Each is responsible for a subdomain of example.org and is largely autonomous. The Exemplary Portal operates two further domains at example.net and example-inc.net for internal functions but these domains are used to supply some content to the public-facing web properties. As well as content produced in-house, Exemplary Portal carries a great deal of third party content.

Although production is spread around the world, corporate liability is concentrated in one department at head office. It is this office that wishes to:

Each production centre arranges for content to carry an identical tag that points to the labelling information. The tag is regarded as stable over the medium to long term. Labelling information should be under the direct and easy control of the corporate liability department. It is posted online at www.example.org/corporate/labels.rdf.

The link tag should therefore be:

<link rel="meta" href="http://www.example.org/corporate/labels.rdf" type="application/rdf+xml" />

This can also be expressed as an HTTP Response Header:

Link: <http://www.example.org/corporate/labels.rdf>; /="/"; rel="meta" type="application/rdf+xml";

This method allows Exemplary Portal to make inclusion of the same link a feature of its standard server configuration.

A client following that link should receive back an RDF graph that is about, or can be interpreted as being about, the resource carrying the link. For example:

<?xml version="1.0"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:cc="http://web.resource.org/cc/"
  xmlns:icra="http://www.icra.org/rdfs/vocabularyv03#">

  <label:Ruleset rdf:ID="Ruleset">
    <label:hostRestriction>example.org</label:hostRestriction>
    <label:hostRestriction>example.net</label:hostRestriction>
    <label:hostRestriction>example-inc.net</label:hostRestriction>
    <label:hasDefaultLabel rdf:resource="#label_1"/>
    <label:hasDefaultManagementInfo rdf:resource="#mgtInfoV1_0" />

    <label:rules rdf:parseType="Collection">
      <label:unionOf rdf:ID="rule1">
        <label:hasURI>ads</label:hasURI>
        <label:hasURI>banners</label:hasURI>
        <label:hasLabel rdf:resource="#label_2" />
      </label:unionOf>
    </label:rules>
  </label:Ruleset>

  <label:ContentLabel rdf:ID="label_1">
    <rdfs:label>Label for all/most of website</rdfs:label>
    <icra:nz>1</icra:nz>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
    <icra:lz>1</icra:lz>
    <icra:oz>1</icra:oz>
    <icra:cz>1</icra:cz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="label_2">
    <rdfs:label>Label for ads</rdfs:label>
    <icra:na>1</icra:na>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
    <icra:lz>1</icra:lz>
    <icra:oz>0</icra:oz>
    <icra:cz>1</icra:cz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="mgtInfoV1_0">
    <dc:Title>An example of management information</dc:Title>
    <dc:Creator>Exemplar Portal Inc.</dc:Creator>
    <dc:Subject>Management information</dc:Subject>
    <dc:Description>An RDF sample of management information </dc:Description>
    <dc:Publisher>Exemplar Portal Inc.</dc:Publisher>
    <dc:Date>2005/2/28</dc:Date>
    <dc:Coverage>2000-2005</dc:Coverage>
    <cc:license rdf:resource="http://www.creativecommons.org/licenses/example1" />
  </label:ContentLabel>

  <rdf:Description rdf:about="">
    <dc:creator rdf:resource="http://www.example.org" />
    <label:authorityFor>http://www.icra.org/rdfs/vocabularyv03</label:authorityFor>
  </rdf:Description>

</rdf:RDF>

Data for use case 1

Use case 1 makes use of the two key classes defined in the schema:

label:ContentLabel - the class whose properties describe any resource that is associated with it.

label:Ruleset is the class that holds the information necessary for a client to determine which label applies to which resource. These include

As well as data about the labelled resource, the RDF instance carries a limited amount of data about itself. That is:

This small addition to the file would enable the labelling organisation to make assertions via other mechanisms about the veracity of the labels.

Further options are discussed in the schema description [SCHEMA-D].

Test data is available

2.2 Use case 2: Distributed content production, distributed label control

The Content Management Company is a major portal for a single country, Germany. In accordance with German practice, it categorises its content into age brackets: 0-6, 6-12, 12-16, 16-18 and 18+. The Content Management Company defines 5 labels that use ICRA descriptions as the basis for an age-based classification system.

<?xml version="1.0"?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:icra="http://www.icra.org/rdfs/vocabularyv03#">

  <rdf:Description rdf:about="">
    <dc:creator rdf:resource="http://www.beispiel.de" />
    <label:authorityFor>http://www.icra.org/rdfs/vocabularyv03#</label:authorityFor>
  </rdf:Description>

  <label:Ruleset rdf:ID="Ruleset">
    <label:hostRestriction rdf:resource="#hostList" />
  </label:Ruleset>

  <rdf:Description rdf:ID="hostList">
    <label:hostRestriction>example.de</label:hostRestriction>
    <label:hostRestriction>example.com</label:hostRestriction>
  </rdf:Description>

  <label:ContentLabel rdf:ID="allesalt">
    <icra:cz>1</icra:cz>
    <icra:lz>1</icra:lz>
    <icra:nz>1</icra:nz>
    <icra:oz>1</icra:oz>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="a6">
    <icra:cz>1</icra:cz>
    <icra:lz>1</icra:lz>
    <icra:nb>1</icra:nb>
    <icra:oz>1</icra:oz>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="a12">
    <icra:cb>1</icra:cb>
    <icra:lc>1</icra:lc>
    <icra:na>1</icra:na>
    <icra:nb>1</icra:nb>
    <icra:oz>1</icra:oz>
    <icra:sa>1</icra:sa>
    <icra:vb>1</icra:vb>
    <icra:vc>1</icra:vc>
    <icra:vd>1</icra:vd>
    <icra:vg>1</icra:vg>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="a16">
    <icra:cb>1</icra:cb>
    <icra:lb>1</icra:lb>
    <icra:lc>1</icra:lc>
    <icra:na>1</icra:na>
    <icra:nb>1</icra:nb>
    <icra:nc>1</icra:nc>
    <icra:oa>1</icra:oa>
    <icra:ob>1</icra:ob>
    <icra:oc>1</icra:oc>
    <icra:sa>1</icra:sa>
    <icra:sb>1</icra:sb>
    <icra:vb>1</icra:vb>
    <icra:vc>1</icra:vc>
    <icra:vd>1</icra:vd>
    <icra:vg>1</icra:vg>
    <label:hasModifier><icra:xb /></label:hasModifier>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="a18">
    <icra:ca>1</icra:ca>
    <icra:la>1</icra:la>
    <icra:lb>1</icra:lb>
    <icra:lc>1</icra:lc>
    <icra:na>1</icra:na>
    <icra:nb>1</icra:nb>
    <icra:nc>1</icra:nc>
    <icra:oa>1</icra:oa>
    <icra:ob>1</icra:ob>
    <icra:oc>1</icra:oc>
    <icra:sa>1</icra:sa>
    <icra:sb>1</icra:sb>
    <icra:sc>1</icra:sc>
    <icra:sd>1</icra:sd>
    <icra:sf>1</icra:sf>
    <icra:vb>1</icra:vb>
    <icra:vc>1</icra:vc>
    <icra:vd>1</icra:vd>
    <icra:ve>1</icra:ve>
    <icra:vf>1</icra:vf>
    <icra:vg>1</icra:vg>
    <icra:vh>1</icra:vh>
    <icra:vi>1</icra:vi>
    <icra:vj>1</icra:vj>
  </label:ContentLabel>

</rdf:RDF>

Data for use case 2

Rather than usuing the content label schema rules to determine which label applies to which URI, the Content Management Company uses metadata associated with elements present on each page to assign a label for the generated HTML. This is achieved by inserting one of 5 possible link tags:

<link rel="meta" href="http://www.example.de/labels.rdf#allesalt" type="application/rdf+xml" />

<link rel="meta" href="http://www.example.de/labels.rdf#a6" type="application/rdf+xml" />

<link rel="meta" href="http://www.example.de/labels.rdf#a12" type="application/rdf+xml" />

<link rel="meta" href="http://www.example.de/labels.rdf#a16" type="application/rdf+xml" />

<link rel="meta" href="http://www.example.de/labels.rdf#a18" type="application/rdf+xml" />

Although the links point to individual content labels, a label:Ruleset Class is provided that restricts the scope of the labels to 2 hosts. These host restrictions are listed in a separate block that, by extension, may be held in a separate file. This allows the main RDF instance to remain stable while allowing the content provider to add new hosts as required.

Test data is available

2.3 Use case 3: Centralised generic labels with local override

This is a combination of use cases 1 and 2. The staff at one of the Exemplary Portal's 40 production centres feels that a particular page they've created should not be associated with label 1 (the "default label") but should use label 2 instead. This is achieved easily by changing the link tag as follows:

<link rel="meta" href="http://www.example.org/corporate/labels.rdf#label_2" type="application/rdf+xml" />

The same RDF instance is referenced as for other pages on the Exemplary Portal site. However, the tag points to a specific fragment of the instance and the filter should respect this rather than processing the application rules.

NB. It is quite possible that a user's computer will already hold the RDF instance in cache and, in this use case, probably allow the page based on the information it already has. Filters should, however, always follow links to RDF instances to look for data of the type ContentLabel. This means that it is possible a client will have two different descriptions of the same resource. However, they will each have a different provenance so that a client, such as a filter, will be able to give more weight to one description than another.

Search engine results

A very similar situation obtains in a search engine's results. The labelling of the results page cannot be pre-determined since, by its nature, it is compiled at runtime based on a user's input. Similarly, its URL is not a guide to what content is on the page.

Use case 3 covers this well since images and other page elements that appear irrespective of the search conducted will be labelled through the centralised system (their URIs are static). The HTML page itself will also be labelled through the centralised system, BUT, if the search engine recognises that the label is inappropriate for the results returned, an extra link tag can be inserted in the HTML <head> that points to a more appropriate label. This will effectively override the application rules specified in the RDF instance.

Test data is available

2.4 Use case 4: Video on demand

The Dutch Example Video Company makes its movies available online. It wants to label its website in the usual way but also wants to provide separate labels for the individual movies.

<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
  <!ENTITY age "http://www.classificationboard.nl/age#">
]>

<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:icra="http://www.icra.org/rdfs/vocabularv03#"
  xmlns:ex="&age;">

  <rdf:Description rdf:about="">
    <dc:creator rdf:resource="http://www.classificationboard.nl" />
    <label:authorityFor>&age;</label:authorityFor>
    <label:authorityFor>http://www.icra.org/rdfs/vocabularyv03#</label:authorityFor>
  </rdf:Description>

  <label:Ruleset rdf:ID="Ruleset">
    <label:hostRestriction>examplevideocompany.nl</label:hostRestriction>
    <label:hostRestriction>examplevideocompany.com</label:hostRestriction>
    <label:hasDefaultLabel rdf:resource="#label_1"/>
    <label:hasDefaultManagementInfo rdf:resource="#mgtInfoV1_0" />
    <label:hasDefaultClassification rdf:resource="&age;all" />

    <label:rules rdf:parseType="Collection">

      <rdf:Description rdf:ID="movie_1">
        <label:hasURI>movie1</label:hasURI>
        <label:hasLabel rdf:resource="#label_1" />
        <label:hasFrequentScenes rdf:resource="#label_2" />
        <label:hasClassification rdf:resource="&age;6" />
        <label:hasManagementInfo rdf:resource="#studioA" />
      </rdf:Description>

      <rdf:Description rdf:ID="movie_2">
        <label:hasURI>movie2</label:hasURI>
        <label:hasLabel rdf:resource="#label_2" />
        <label:hasSingleSceneScenes rdf:resource="#label_3" />
        <label:hasClassification rdf:resource="&age;12" />
      </rdf:Description>
    </label:rules>
  </label:Ruleset>

  <label:ContentLabel rdf:ID="label_1">
    <rdfs:label>No nudity, violence etc.</rdfs:label>
    <icra:nz>1</icra:nz>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
    <icra:lz>1</icra:lz>
    <icra:oz>1</icra:oz>
    <icra:cz>1</icra:cz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="label_2">
    <rdfs:label>Mild nudity</rdfs:label>
    <icra:na>1</icra:na>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
    <icra:lz>1</icra:lz>
    <icra:oz>1</icra:oz>
    <icra:cz>1</icra:cz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="label_3">
    <rdfs:label>Mild language</rdfs:label>
    <icra:nz>1</icra:nz>
    <icra:sz>1</icra:sz>
    <icra:vz>1</icra:vz>
    <icra:lc>1</icra:lc>
    <icra:oz>1</icra:oz>
    <icra:cz>1</icra:cz>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="mgtInfoV1_0">
    <dc:publisher>The multinational that owns the Example Video Company</dc:publisher>
    <dc:Rights>(c) The multinational company. All Rights Reserved</dc:Rights>
  </label:ContentLabel>

  <label:ContentLabel rdf:ID="studioA">
    <dc:publisher>A different production company</dc:publisher>
    <dc:Rights>(c) The different production Company. All Rights Reserved</dc:Rights>
  </label:ContentLabel>

</rdf:RDF>

Data for use case 4

Use case 4 introduces some additional concepts, notably that of a classification as distinct from a label. A label is a description of the content and is generally objective in nature. A classification may be a subjective comment - whether it is good or bad, suitable for certain ages or any other classification scheme such as the resource is "animal, mineral or vegetable."

Thus the RDF label schema includes hasClassification and hasDefaultClassification properties as well as hasLabel and hasDefaultLabel. Classifications are expected to be defined as a class without further properties.

The schema also provides a property of "is more severe than." This allows inferences to be drawn that if a classification is declared, others that are "less severe" also apply. In use case 4, if a movie has an age classification of 6 it can be inferred that the movie is also suitable for 12 year olds.

Resources that have a duration, such as a movie or a game, may need to be described by more than one label. A movie might have a single scene described by label A but otherwise, label B is accurate. The schema supports this with a suite of frequency modifiers that are detailed in the schema description [SCHEMA-D]. In our sample data, movie 1 has frequent scenes of what the content provider calls mild nudity (bare breasts in the ICRA vocabulary) but otherwise there is no sex, nudity, potentially offensive language, violence etc. in this movie. Movie 2 has mild nudity throughout and a single scene when mild expletives are used.

Use case 4 also exemplifies the power of using rules rather than specifying the resource's URI in the usual way. The Example Video Company operates the same site on two top level domains (.nl and .com), both accessible with and without the www prefix. Furthermore, it offers its movies in a range of formats (Real, Quick Time etc.) Whichever domain is being used, whichever format the user chooses, assuming a consistent approach is used to name the files, the same label will be applied without duplicating the metadata.

As well as the ICRA descriptions, the Dutch Example Video Company has included a small amount of management metadata about the movies.

Note: In this example, all descriptions are held in a single file, however, the nature of RDF is that the data can be divided between any number of files. For example, each movie could point to its own data file that then referenced "label_1," "label_2" etc. from a central file as required.

Test data is available

2.5 Use case 5: RSS News Feed

Japanese Politics Today syndicates its articles in RSS format. For each story it would like to assign an ICRA label and classify it according to its own system. The majority of articles are about Japanese politics and have no sexual content, nudity, potentially offensive language etc. A minority of articles require a different label or description.

The first article is in line with the majority. It is a political article requiring no particular label or classification other than that applied to the whole channel. The second article is specifically about the Japanese economy but would be described accurately in terms of the ICRA vocabulary in the same way as for the channel as a whole.

By contrast, the third article is about a kissing festival held abroad and includes images of kissing scenes. The Japanese news site labels this article as containing "passionate kissing," (sa in the ICRA vocabulary). A person that usually does not want to access web sites that include sexual content might want to read the article since all articles have the news context modifier.

<?xml version="1.0"?>
<!DOCTYPE rdf:RDF [
  <!ENTITY classification "http://www.news.example.jp/classification#">
]>

<rdf:RDF
  xmlns="http://purl.org/rss/1.0"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
  xmlns:label="http://www.w3.org/2004/12/q/contentlabel#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:icra="http://www.icra.org/rdfs/vocabularyv03#">

  <channel rdf:about="http://news.example.jp/index.rdf">
    <title>Japanese Politics Today</title>
    <link>http://news.example.jp/</link>
    <description>An example of a Japanese news site</description>
    <dc:create>Japanese Politics Today</dc:create>
    <label:hasDefaultLabel>
      <label:ContentLabel>
        <icra:nz>1</icra:nz>
        <icra:sz>1</icra:sz>
        <icra:vz>1</icra:vz>
        <icra:lz>1</icra:lz>
        <icra:oz>1</icra:oz>
        <icra:cz>1</icra:cz>
        <label:hasModifier><icra:xe/></label:hasModifier>
      </label:ContentLabel>
    </label:hasDefaultLabel>
    <label:hasDefaultClassification rdf:resource="&classification;Politics" />
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://examplenews.jp/article/1.html" />
        <rdf:li rdf:resource="http://examplenews.jp/article/2.html" />
        <rdf:li rdf:resource="http://examplenews.jp/article/3.html" />
      </rdf:Seq>
    </items>
  </channel>

  <item rdf:about="http://examplenews.jp/article/1.html">
    <title>Article 1</title>
    <link>http://examplenews.jp/article/1.html</link>
  </item>
 
 <item rdf:about="http://examplenews.jp/article/2.html">
    <title>Article 2</title>
    <link>http://examplenews.jp/article/2.html</link>
    <label:hasClassification rdf:resource="&classification;Economy" />
  </item>

  <item rdf:about="http://examplenews.jp/article/3.html">
    <title>Article 3</title>
    <link>http://examplenews.jp/article/3.html</link>
    <label:hasLabel>
      <label:ContentLabel rdf:ID="label_3">
        <rdfs:label>World wide article with passionate kissing, no violence,etc.</rdfs:label>
        <icra:nz>1</icra:nz>
        <icra:sa>1</icra:sa>
        <icra:vz>1</icra:vz>
        <icra:lz>1</icra:lz>
        <icra:oz>1</icra:oz>
        <icra:cz>1</icra:cz>
        <label:hasModifier><icra:xe/></label:hasModifier>
      </label:ContentLabel>
    </label:hasLabel>
    <label:hasClassification rdf:resource="&classification;World" />
  </item>
</rdf:RDF>

Data for use case 5

The default content label is written directly within the RSS channel description, as is the default classification of politics. These both apply to news item 1 since no extra information is given. Item 2 is defined as being about the Economy rather than politics so the default classification is overridden. However, there is no content label so the article is still described as having no nudity, sexual material etc.

Both the content label and the classification are overridden for news item 3.

Test data is available

3 Adding trust, web services etc.

The labelling structure set out here provides a way for content to be associated quickly with a pre-defined description. This may be done directly or by determining a resource's membership of a group through rule matching based on its URI.

Under the QUATRO project, mechanisms will be defined, or existing mechanisms highlighted, that will allow clients to gain further trust in labels. This might be through third party label providers (analogous to a PICS Label Bureau), digital signatures, other database look up systems or content analysis methods.

4 Links and References

[SCHEMA-D]
RDF Content Label Schema Description
[RDFS]
The RDF Content Label Schema
[PICS]
Platform for Internet Content Selection (PICS) (See http://www.w3.org/PICS/)
[RDF]
Resource Description Framework (RDF) (See http://www.w3.org/RDF/)
[QUATRO]
Quatro project (See http://www.icra.org/projects/quatro/)
[ICRA]
ICRA (An independent non-proft organisation)

Valid XHTML 1.0!