- From: Sean B. Palmer <sean@mysterylights.com>
- Date: Sun, 21 Jul 2002 20:39:32 +0100
- To: <www-archive@w3.org>
- Message-ID: <04cb01c230ee$57a25000$b0b80150@localhost>
Based on a little scribbling of DanC's in #rdfig:-
<DanC> timbl did some sketching a while ago of what HTML
should look like in n3: [ :p ("this is a paragraph with" [ :em
("emphasized")] "text in it")]. or something like that.
- http://ilrt.org/discovery/chatlogs/rdfig/2001-12-13.html#T15-58-22
I wrote up a fuller HTML document in N3:-
[[[
@prefix h: <http://infomesh.net/2002/html#> .
@prefix : <http://infomesh.net/2002/html-attrs#> .
[:lang "en"; h:html (
[h:head (
[h:title ("HTML in Notation3 Test Document")]
[:rel "stylesheet"; :type "text/css"; :href <style.css>; h:link ()]
)]
[h:body (
[h:h1 ("HTML in N3")]
[h:p ("This is a test document.")]
[h:address (
[:href <http://purl.org/net/sbp/>;
:title "A Homepage Of Sean B. Palmer"; h:a ("Sean B. Palmer")]
)]
)]
)] .
]]] - <<html.n3>>
and then wrote a little filter to transform it into XHTML:-
[[[
@prefix h: <http://infomesh.net/2002/html#> .
@prefix : <http://infomesh.net/2002/html-attrs#> .
@prefix daml: <http://www.daml.org/2001/03/daml+oil#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix string: <http://www.w3.org/2000/10/swap/string#> .
@prefix b: <blargh-hack#> .
this log:forAll :x, :y, :z, :f, :r , :p, :u .
{ :x h:html [] } log:implies { :x :xmlns "http://www.w3.org/1999/xhtml" } .
{ :x daml:first [ log:rawType log:Literal ]; log:uri :u }
log:implies { :x b:genID :u; a b:NoChild } .
{ :x [ log:uri [ string:startsWith "http://infomesh.net/2002/html" ] ] [];
log:uri :u } log:implies { :x b:genID :u } .
{ :x b:genID :u . (:u "_g(\\d)$") string:scrape :y .
:z string:concat ("00" :y) } log:implies { :x b:id :z } .
{ :x b:genID :u . (:u "_g(\\d\\d)$") string:scrape :y .
:z string:concat ("0" :y) } log:implies { :x b:id :z } .
{ :x b:genID :u . (:u "_g(\\d\\d\\d)$") string:scrape :y }
log:implies { :x b:id :y } .
{ [] [ log:uri :p ] []; b:id :u .
:p string:startsWith "http://infomesh.net/2002/html#" . # quicker
(:p "^http://infomesh.net/2002/html#(.+)$") string:scrape :r .
:f string:concat ("<" :r) } # " id=\"" :u "\""
log:implies { :u log:outputString :f } .
{ [] [ log:uri :p ] :z; b:id :u . :x string:concat (:u "a") .
:p string:startsWith "http://infomesh.net/2002/html-attrs#" .
(:p "^http://infomesh.net/2002/html-attrs#(.+)$") string:scrape :r .
:f string:concat (" " :r "=\"" :z "\"") }
log:implies { :x log:outputString :f } .
{ [] [ log:uri :p ] [ log:rawType log:Other; log:uri :z ]; b:id :u .
:x string:concat (:u "a") . :f string:concat (" " :r "=\"" :z "\"") .
:p string:startsWith "http://infomesh.net/2002/html-attrs#" .
(:p "^http://infomesh.net/2002/html-attrs#(.+)$") string:scrape :r }
log:implies { :x log:outputString :f } .
{ [] [ log:uri [ string:startsWith "http://infomesh.net/2002/html#" ] ]
[ log:notEqualTo daml:nil ]; b:id :u .
:x string:concat (:u "b") } log:implies { :x log:outputString ">" } .
{ :x [ log:uri [ string:startsWith "http://infomesh.net/2002/html#" ] ] ();
b:id :u . :y string:concat (:u "b") }
log:implies { :x a b:NoChild . :y log:outputString " />\n" } .
{ [] daml:first :x; b:id :y . :x log:rawType log:Literal }
log:implies { :y log:outputString :x } .
{ :x [ log:uri [string:startsWith "http://infomesh.net/2002/html#"] ] :y .
:y log:notEqualTo () } log:implies { :y a b:List; b:sourceElem :x } .
{ [] a b:List; b:sourceElem :x; daml:first :f; daml:rest :r .
:r log:notEqualTo () } log:implies { :r a b:List; b:sourceElem :x } .
{ [] a b:List, b:NoChild; b:id :y; b:sourceElem :x; daml:first :f;
daml:rest () } log:implies { :x b:lastChildElementID :y } .
{ [] a b:List; b:sourceElem :x; daml:first [ a b:NoChild; b:id :y ];
daml:rest () } log:implies { :x b:lastChildElementID :y } .
{ [] a b:List; b:sourceElem :x; daml:first [ b:id :y;
b:lastChildElementID :z ]; daml:rest () .
:p string:concat (:z "e") } log:implies { :x b:lastChildElementID :p } .
{ [] [log:uri :p] []; b:lastChildElementID :u . :x string:concat (:u "d") .
:p string:startsWith "http://infomesh.net/2002/html#" .
(:p "^http://infomesh.net/2002/html#(.+)$") string:scrape :r .
:f string:concat ("</" :r ">\n") }
log:implies { :x log:outputString :f } .
]]] - <<n3tohtml.n3>>
there are some interesting things going on in there, capitalizing on some
of CWM's quirks. I ran it using:-
$ cwm html.n3 n3tohtml.n3 --think --strings > result.html
and got the following output after two and a half minutes of processing
time:-
[[[
<html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head><title>HTML in
Notation3 Test Document</title>
<link href="file:/home/style.css" rel="stylesheet" type="text/css" />
</head>
<body><h1>HTML in N3</h1>
<p>This is a test document.</p>
<address><a href="http://purl.org/net/sbp/" title="A Homepage Of Sean B.
Palmer">Sean B. Palmer</a>
</address>
</body>
</html>
]]] - <<result.html>>
All of the files are attached for slurpability.
--
Kindest Regards,
Sean B. Palmer
@prefix : <http://purl.org/net/swn#> .
:Sean :homepage <http://purl.org/net/sbp/> .
Attachments
- text/plain attachment: html.n3
- text/plain attachment: n3tohtml.n3
- text/html attachment: result.html
Received on Sunday, 21 July 2002 15:39:38 UTC