- From: Andrea Chiodi <andrea.chiodi@mail.inet.it>
- Date: Fri, 26 May 2000 12:32:26 +0200
- To: "'www-rdf-interest@w3.org'" <www-rdf-interest@w3.org>
I need to define a XML schema for my application. I'd love to apply RDF
concepts, but I can't risk to scare my collegues with triples, semantic web
and other philosophical stuff. So I'm try to convince myself that I can
write a XML form that will be parse-able as RDF also.
This is my reasoning: please correct me if I'm wrong.
Let's take my XML form:
(1)
<author>
<name> Peppo </name>
<address>
<city> PeppoCity </city>
<state> PeppoLand </state>
</address>
</author>
I want to interpret it as RDF.
I can assume that all the tags are instances of rdf:Property, defining this
basic schema:
<rdfs:Property ID="author" />
<rdfs:Property ID="address"/>
<rdfs:Property ID="name" />
<rdfs:Property ID="city" />
<rdfs:Property ID="state"/>
Now, the form (1) can be interpreted in what RDFMS calls the 'second
abbreviation form' of :
(2)
<rdf:Description>
<author>
<rdf:Description>
<name> Peppo </name>
<address>
<rdf:Description>
<city> PeppoCity </city>
<state> PeppoLand </state>
</rdf:Description>
</address>
</rdf:Description>
</author>
</rdf:Description>
The resources in <rdf:Description> have no rdf:type. So, <city> and
<address> are properties without a defined domain. However, their values
are resources, so I should be allowed to assume that their rfd:type is
rdf:Resource. The same form can be written:
(3)
<rdf:Description>
<rdf:type resource="&rdf;Resource" />
<author>
<rdf:Description>
<rdf:type resource="&rdf;Resource" />
<name> Peppo </name>
<address>
<rdf:Description>
<rdf:type resource="&rdf;Resource" />
<city> PeppoCity </city>
<state> PeppoLand </state>
</rdf:Description>
</address>
</rdf:Description>
</author>
</rdf:Description>
BTW, applying another abbreviation form I should be allowed to write:
(4)
<rdf:Resource>
<author>
<rdf:Resource>
<name> Peppo </name>
<address>
<rdf:Resource>
<city> PeppoCity </city>
<state> PeppoLand </state>
</rdf:Resource>
</address>
</rdf:Resource>
</author>
</rdf:Resource>
I never seen a similar application of 'Resource', but it seems correct. Any
comment ?
Now, let's say I want to better define my application's schema:
(6)
<rdfs:Class ID="Person" />
<rdfs:Class ID="Address" />
<rdfs:Property ID="author"
rdfs:range="Person" />
<rdfs:Property ID="address"
rdfs:domain="&myschema;Person"
rdfs:range="Address" />
<rdfs:Property ID="name"
rdfs:domain="&myschema;Person" />
<rdfs:Property ID="city"
rdfs:domain="&myschema;Address" />
<rdfs:Property ID="state"
rdfs:domain="&myschema;Address" />
Now I can write my form as:
(7)
<rdf:Resource>
<author>
<Person>
<name> Peppo </name>
<address>
<Address>
<city> PeppoCity </city>
<state> PeppoLand </state>
</Address>
</address>
</Person>
</author>
</rdf:Resource>
This really represent an <author> property valued with a <Person> object.
It is true RDF (I hope). But it is exacly the same form as (1).
So, my hypothesys is:
- The form (1) is RDF.
- Having defined <rdf:Property xxx/> for each XML tag, a standard parser
should be able to parse it.
- The types in <Description> can be left undefined, or assumed to be
'rdf:Resource', but ...
- Having defined <rdf:Class ID="x"> and <Property ID="p" rdfs:range="x">,
if the (?standard?) RDF parser assumes the rdfs:range as the default type
for the property x (e.g. <Person> for <author>) it should generate the form
(7) automatically.
- The root of the XML document (let it be our <author> ) could be
interpreted as a property applied to the outer <Description>, that is the
only (top level) Description of the RDF document.
?May I continue or I'm already wrong? !Do not unsubscribe me, please #-(
There are some cases that seems special, where I can't find a clear mapping
from XML to RDF.
(A) Attributes mixed to elements creates a syntax problem, being this form
not allowed in RDF (BNF [6.1] in RDFMS):
(8)
<author sex="M">
<name> Peppo </name>
<address role="Home">
<city> PeppoCity </city>
<state> PeppoLand </state>
</address>
</author>
I would love to consider this as equivalent to:
(9)
<author>
<sex> M </sex>
<name> Peppo </name>
<address>
<role> Home </role>
<city> PeppoCity </city>
<state> PeppoLand </state>
</address>
</author>
To be honest, I don't understand the reason why attributes and elements
can't mixed in a property.
A hack, however, could be to consider every attribute of a property as
applied to the correspondent <Description>, as in:
(10)
<rdf:Description>
<author>
<rdf:Description sex="M">
<name> Peppo </name>
<address>
<rdf:Description>
<city> PeppoCity </city>
<state> PeppoLand </state>
</rdf:Description>
</address>
</rdf:Description>
</author>
</rdf:Description>
This is allowed ( BNF [6.3] in RDFMS ). However (9) will not be parsed by a
standard RDF processor.
(B) Sometimes (e.g. P3P specification) , I've seen empty elements used as
value, like <male/> in:
(11)
<author>
<sex> <male/> </sex>
<name> Peppo </name>
</author>
Even in this case, I can define <Property ID="male" />, and interpret (11)
in this way:
(12)
<author>
<rdf:Description>
<sex>
<rdf:Description>
<male/>
</rdf:Description>
</sex>
<name> Peppo </name>
</rdf:Description>
</author>
<male> value is empty but is however *defined* (while, in this example,
<female/> is undefined). This is like in C language: '#define male 1' and
'#define male' are the same from the '#ifdef male' point of view.
Anyway, the resulting RDF model is a bit strange: a reasonable schema will
probably define
<Class ID="male" rdfs:domain="sex" />, not <Property ID="male" />.
Maybe, I can write:
<rdfs:Class ID="male" rdfs:domain="sex" />
<rdfs:Class ID="female" rdfs:domain="sex" />
<rdfs:Property ID="sex"
rdfs:range="male"
rdfs:range="female"
/>
Will a standard RDF parsed interpret it in this way?:
(13)
<author>
<rdf:Description>
<sex>
<rdf:Description>
<rdf:type resource ="male" />
</rdf:Description>
</sex>
<name> Peppo </name>
</rdf:Description>
</author>
If this is true, I could *drive* the RDF parsed througth the XML form. I
can force the interpretation of:
(14)
<book>
<author>
<name> Peppo </name>
<address>
<city> PeppoCity </city>
<state> PeppoLand </state>
</address>
</author>
</book>
with:
(15)
<rdfs:Class ID="book" />
<rdfs:Property ID="author" />
<rdfs:Property ID="address"/>
<rdfs:Property ID="name" />
<rdfs:Property ID="city" />
<rdfs:Property ID="state"/>
to obtain (same as (2), but now the root is forced to be a class, not a
property):
(16)
<rdf:Description>
<rdfs:type="book" />
<author>
<rdf:Description>
<name> Peppo </name>
<address>
<rdf:Description>
<city> PeppoCity </city>
<state> PeppoLand </state>
</rdf:Description>
</address>
</rdf:Description>
</author>
</rdf:Description>
Thank you for reading this long posting!
---
Andrea Chiodi (andrea.chiodi@mail.inet.it)
Received on Friday, 26 May 2000 07:57:18 UTC