- From: <Patrick.Stickler@nokia.com>
- Date: Fri, 17 Aug 2001 21:25:07 +0300
- To: www-rdf-interest@w3.org
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