- From: Dan Connolly <connolly@w3.org>
- Date: Thu, 30 Sep 2004 00:32:16 -0500
- To: Eric Miller <em@w3.org>
- Cc: Tim Berners-Lee <timbl@w3.org>, public-cwm-talk@w3.org
EricM, I think you asked me about using omnigraffle as an authoring
tool for RDF.
I made some progress tonight.
Omnigraffle files are plists. I started a transformation for those
a while ago:
http://www.w3.org/2000/10/swap/util/plist2rdf.xsl
I just enhanced it (v 1.3 2004/09/30 04:49:27) to do datatypes the
modern way.
So we start with an omnigraffle file, which looks like...
---
<plist version="1.0">
<dict>
<key>CanvasColor</key>
<dict>
<key>a</key>
<string>1</string>
<key>w</key>
<string>1</string>
</dict>
<key>ColumnAlign</key>
<integer>0</integer>
<key>ColumnSpacing</key>
<real>3.600000e+01</real>
---
and then...
$ xsltproc plist2rdf.xsl foo.graffle
and out comes...
---
<r:Description>
<a:CanvasColor>
<r:Description>
<a:a>1</a:a>
<a:w>1</a:w>
</r:Description>
</a:CanvasColor>
<a:ColumnAlign
r:datatype="http://www.w3.org/2001/XMLSchema#integer">0</a:Co
lumnAlign>
<a:ColumnSpacing
r:datatype="http://www.w3.org/2001/XMLSchema#double">3.6000
00e+01</a:ColumnSpacing>
---
now I can hardly read the datatype syntax, but I checked it with cwm
ala...
$ xsltproc plist2rdf.xsl foo.graffle | python cwm.py --rdf --n3>,xxx.n3
and now I can read it...
---
[ :CanvasColor [
:a "1";
:w "1" ];
:ColumnAlign 0;
:ColumnSpacing 36.0;
---
The main problem with this approach is that it puts all plist keys in
one namespace...
@prefix : <http://www.w3.org/2000/10/swap/util/applePList@@#> .
which is a fib. Omnigraffle's :CanvasColor property might not be the
same as
some other app's :CanvasColor property. Maybe the namespace should
be a parameter to the plist2rdf.xsl thingy. I dunno... anyway...
I was wondering if the information about which arrows are connected to
which circles comes thru, and it does:
---
[
r:rest ();
:Class "LineGraphic";
:Head [
:ID 3 ];
:ID 5;
:Style [
:stroke [
:HeadArrow "FilledArrow";
:LineType 1;
:TailArrow "0" ] ];
:Tail [
:ID 2 ] ]
---
(I dunno where the r:rest () bit comes from; cwm bug, I think.)
Anyway, the point is, I have a square connected to a circle
by an arrow. I can write rules to match that graphic structure
and transform it to, say, :neighbor relationships:
[[[
{ ?L :Head [ :ID ?HEADID ];
:Tail [ :ID ?TAILID ].
[] :ID ?HEADID; :Shape ?HEADSHAPE.
[] :ID ?TAILID; :Shape ?TAILSHAPE.
} => { ( ?TAILID ?TAILSHAPE )
:neighbor ( ?HEADID ?HEADSHAPE) }.
]]]
$ python ../cwm.py ,xxx.n3 --filter=,linefilter.n3
and out comes:
( 2 "Rectangle" ) :neighbor ( 3 "Circle" ) .
more or less... I stripped namespace decls, comments,
and rearranged the whitespace.
But I hope you get the idea. It's sort of the "putting the
toothpaste back into the tube" version of
Circles and arrows diagrams using stylesheet rules
http://www.w3.org/2001/02pd/
--
Dan, still getting used to the Apple OS X Mail.app
p.s. I was thinking of formatting this as "Rich Text" but
I don't see how to make links.
Received on Thursday, 30 September 2004 05:32:03 UTC