[vos-d] VOS to RDF mapping
Karsten Otto
otto at inf.fu-berlin.de
Tue Dec 5 05:41:29 EST 2006
Am 05.12.2006 um 01:39 schrieb Reed Hedges:
>
> Hi Karsten, the HTTP "hypervos" extension in s4 has a mode where it
> can
> emit a description of the Vobjects in RDF (instead of a simple HTML
> listing) for objects that aren't actually meant to be served as an XML
> document by hypervos.
>
> I don't know if it's correct or not (probably not, I bascially guessed
> at stuff, and I think I see some XML sytax errors even), I added it
> as a
> starting point for someone who knows much more about RDF than I
> do. We
> should probebly improve it and perhaps make it compatible with your
> software (since your use of RDF is, I assume, much richer and
> generally
> better than mine!).
>
Now that you mention it, I remember seeing this in the source code.
I'll have another look at it, maybe I get the time to tinker with it
a bit.
> The code is at libs/vos/extensions/http/httpserver.cc in the
> describeVobject_RDF() function. It only describes one Vobject, not a
> whole tree of them. Like this:
>
> <rdf:RDF xmlns:rdf="..." xmlns:rdfs="..." xmlns:vos="..fake schema..."
> xmlns:xsd="...." xml:base="http://interreality.org/otd/">
> <rdf:Description rdf:about="vip://host/obj">
> <rdf:type>http://interreality.org/otd/objectType</rdf:type>
> <!-- I guess the idea was that all object types would
> define
> their required children in the
> http://interreality.org/otd/objectType or the
> http://interreality.org/otd/ namespace -->
> <childContextualName1 rdf:resource="vip://host/childObj" />
> <childContextualName2 rdfs:datatype="string">property object
> value</childContextualName2>
> </rdf:Description>
> </rdf:RDF>
>
This basically looks good, though you should not use xml:base this
way in RDF. Typically, you have qnames for all RDF properties, and
only use the base to resolve rdf:ID names and relative URIs in
rdf:about.
Also, I don't use a single xmlns:vos, but several namespaces
corresponding to the "package names" you have in VOS. For example,
I'd use xmlns:a3dl="http://interreality.org/otd/a3dl/" as a sort of
"include", and then write the a3dl:position contextual name as
<a3dl:position rdf:resource="..."/> element.
I like the concise way you handle VOS properties, but since
property:Property is just another metatype, it could well be mixed
with other metatypes that require children; you cannot do that with
RDF labels, unfortunately. So instead of
<childContextualName2 rdfs:datatype="string">property object value</
childContextualName2>
I model property Vobjects as RDF resources of their own, which also
preserves their VOS URI.
Serializing this in a nested way, you get for example:
<rdf:Description rdf:about="vip://host/obj">
<rdf:type rdf:resource="http://interreality.org/otd/a3dl/Cone"/>
<a3dl:position>
<rdf:Description rdf:about="vip://host/childProperty">
<rdf:value>1 2 3</rdf:value>
<vos:datatype>list: float</vos:datatype>
<vos:length>5</vos:length>
</rdf:Description>
<a3dl:position>
</rdf:Description>
Of course, you can abbreviate this even more in RDF/XML if you want:
<rdf:Description rdf:about="vip://host/obj">
<rdf:type rdf:resource="http://interreality.org/otd/a3dl/Cone"/>
<a3dl:position>
<rdf:Description rdf:about="vip://host/childProperty"
rdf:value="1 2 3" vos:datatype="list: float" vos:length="5"/>
</a3dl:position>
</rdf:Description>
Means the same :-)
Actually, to preserve ordering, I use two RDF properties with the
same rdf:about target:
<rdf:Description rdf:about="vip://host/obj">
<rdf:type rdf:resource="http://interreality.org/otd/a3dl/Cone"/>
<a3dl:position rdf:resource="vip://host/childProperty"/>
<rdf:_1 rdf:resource="vip://host/childProperty"/>
</rdf:Description>
and describe vip://host/childProperty separately, instead of
embedding it as above.
Regards,
Karsten
More information about the vos-d
mailing list