A Wishlist of QName::URI Mapping Examples

In the interest of not merely complaining about problems but not suggesting
solutions, and also in response to Aaron Swartz's valid criticisms of the
particular mechanisms used in my earlier proposal, I wanted to provide a
brief list of examples/cases which hopefully will illustrate the kind of
solution and functionality I am hoping for in future incarnations of RDF
and RDF compliant systems.

I use the namespace prefix 'rdfm:' to correspond to a namespace defining
an ontology for RDF serialization mapping constructs, but don't yet bother
to specify any actual namespace URI (since it is fictional). I also don't
vouch for the correctness or existence of any of the URIs in any of the 
examples (they're just examples)...

Each example provides one or more mapping declarations, a sample XML RDF 
fragment, and the equivalent triple(s).

Note that all mappings are fully bi-directional, and thus can be used
for parsing serialized XML data into triples and serializing triples back
to XML.

The following is a brief summary of the ontology:

    rdfm:Map              a mapping declaration
    rdfm:resource         the URI of an RDF resource
    rdfm:namespace        the URI of a namespace
    rdfm:name             a namespace qualified name
    rdfm:value            a literal CDATA value in the XML instance
    rdfm:property         the URI of an RDF property serving as context for
                             literal CDATA values in the XML instance
    rdfm:pattern          a regular expression pattern matching CDATA
                             in the XML instance

1. QName <-> URI

   <rdfm:Map
    rdfm:resource  ="urn:partax:(foo(bar))"
    rdfm:namespace ="urn:partax:(foo)"
    rdfm:name      ="bar"
   />

   <rdf:RDF ... xmlns:foo="urn:partax:(foo)">
      <rdf:Description ID="X">
         <foo:bar>bas</foo:bar>
      </rdf:Description>
   </rdf:RDF>

   [X, urn:partax:(foo(bar)), "bas"]

This basic example addresses the most essential need of a mapping
solution that (a) does not create unintentional collisions, and (b)
works with any arbitrary URI scheme. The remaining examples are not
manditory but highly desirable (at least to me ;-)

2. CDATA Literal <-> URI

   <rdfm:Map
    rdfm:resource  ="name:metia.nokia.com/MARS/2.1/language"
    rdfm:namespace ="name:metia.nokia.com/MARS/2.1"
    rdfm:name      ="language"
   />
   <rdfm:Map
    rdfm:resource ="http://www.iso.ch/3166-1/en"
    rdfm:property ="http://metia.nokia.com/MARS/2.1/language"
    rdfm:value    ="en"
   />

  <rdf:RDF ... xmlns:mars="http://metia.nokia.com/MARS/2.1">
      <rdf:Description ID="X">
         <mars:language>en</mars:language>
      </rdf:Description>
   </rdf:RDF>

   [X, http://metia.nokia.com/MARS/2.1/language,
http://www.iso.ch/3166-1/en]

IMO, it's better to have an actual resource http://www.iso.ch/3166-1/en 
identified in our knowledge base than a literal such as 'en'. 

3. CDATA Literal <-> RDF Literal with Validation

   <rdfm:Map
    rdfm:resource  ="name:metia.nokia.com/MARS/2.1/date"
    rdfm:namespace ="name:metia.nokia.com/MARS/2.1"
    rdfm:name      ="date"
   />   
   <rdfm:Map
    rdfm:property ="http://metia.nokia.com/MARS/2.1/date"
    rdfm:pattern  ="[0-9]{4}-[0-9]{2}-[0-9]{2}"
   />

  <rdf:RDF ... xmlns:mars="http://metia.nokia.com/MARS/2.1">
      <rdf:Description ID="X">
         <mars:date>2001-08-15</mars:date>
      </rdf:Description>
      <rdf:Description ID="Y">
         <mars:date>01-8-15</mars:date>
      </rdf:Description>
   </rdf:RDF>

   [X, http://metia.nokia.com/MARS/2.1/language, '2001-08-15']
   [Y, http://metia.nokia.com/MARS/2.1/language, ???  ERROR! Not a valid
date!


4. CDATA Literal <-> URI by Pattern

   <rdfm:Map
    rdfm:resource  ="name:metia.nokia.com/MARS/2.1/language"
    rdfm:namespace ="name:metia.nokia.com/MARS/2.1"
    rdfm:name      ="language"
   />
   <rdfm:Map
    rdfm:resource ="http://www.iso.ch/3166-1/en"
    rdfm:property ="http://metia.nokia.com/MARS/2.1/language"
    rdfm:pattern  ="en(-[a-z][a-z])?"
   />

  <rdf:RDF ... xmlns:mars="http://metia.nokia.com/MARS/2.1">
      <rdf:Description ID="X">
         <mars:language>en-us</mars:language>
      </rdf:Description>
     <rdf:Description ID="Y">
         <mars:language>en</mars:language>
      </rdf:Description>
   </rdf:RDF>

   [X, http://metia.nokia.com/MARS/2.1/language,
http://www.iso.ch/3166-1/en]
   [Y, http://metia.nokia.com/MARS/2.1/language,
http://www.iso.ch/3166-1/en] 

Note that regardless of the optional dialect code, they are mapped to
the same language resource.

5. QName synonyms -> common URI

   <rdfm:Map
    rdfm:resource  ="name:metia.nokia.com/MARS/2.1/language"
    rdfm:namespace ="name:metia.nokia.com/MARS/2.1"
    rdfm:name      ="language"
   />
   <rdfm:Map
    rdfm:resource  ="name:metia.nokia.com/MARS/2.1/language"
    rdfm:namespace ="name:metia.nokia.com/MARS/2.1/sf"
    rdfm:name      ="kieli"
   />
   <rdfm:Map
    rdfm:resource ="http://www.iso.ch/3166-1/en"
    rdfm:property ="http://metia.nokia.com/MARS/2.1/language"
    rdfm:value    ="en"
   />

  <rdf:RDF ... xmlns:mars="http://metia.nokia.com/MARS/2.1"
               xmlns:mars-sf="http://metia.nokia.com/MARS/2.1/sf">
      <rdf:Description ID="X">
         <mars:language>en</mars:language>
      </rdf:Description>
      <rdf:Description ID="Y">
         <mars-sf:kieli>en</mars:kieli>
      </rdf:Description>
   </rdf:RDF>

   [X, http://metia.nokia.com/MARS/2.1/language,
http://www.iso.ch/3166-1/en]
   [Y, http://metia.nokia.com/MARS/2.1/language,
http://www.iso.ch/3166-1/en]

And why not just deal with cases like 4 and 5 using e.g. daml:equivalentTo?
In
order to reduce what is already a highly complex inference space by
eliminating 
what are (to the perspective of a given application using such mappings)
irrelevant
syntactical variants or localized vocabularies of equivalent semantic
identities.

--

Have a great weekend, folks!

Cheers,

Patrick

--
Patrick Stickler                      Phone:  +358 3 356 0209
Senior Research Scientist             Mobile: +358 50 483 9453
Software Technology Laboratory        Fax:    +358 7180 35409
Nokia Research Center                 Video:  +358 3 356 0209 / 4227
Visiokatu 1, 33720 Tampere, Finland   Email:  patrick.stickler@nokia.com
 

Received on Friday, 17 August 2001 14:25:12 UTC