Re: @keywords: Notation3 Pre-Processor

Tim Berners-Lee wrote:

> It does or doesn't output a @keywords keyword ... if it
> does presumably some old N3 parsers won't recognize it.

Right, though I thought the only issue was tokenization, and for that 
either method (empty @keywords declarations or removing them entirely) 
will work. Adding the capability to remove @keywords altogether and 
prefix the barenames with a colon instead is very simple; I've appended 
a patch for it [1]. It depends on which format you decide is best for 
the canonicalised N3 that parsers will be accepting. I guess removing 
@keywords entirely would probably be best.

I've modified n3pp.py online to be the patched version, and all of the 
tests still pass. For even further backwards compatibility, it'd have to 
add "@prefix : <#> ." at the top of each file of course.

Cheers,

[1] $ diff -Naur n3pp.py n3pp+new.py [[[
--- n3pp.py     2005-01-14 11:54:34.000000000 +0000
+++ n3pp+new.py 2005-01-16 06:31:38.000000000 +0000
@@ -46,6 +46,8 @@
     [a-zA-Z_][a-zA-Z0-9_]* # n3:barename
  )''')

+r_barename = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*$')
+
  class N3Tokenizer(object):
     def __init__(self):
        self.uri = None
@@ -94,9 +96,10 @@
        for token in self.tokens:
           if token in self.keywords:
              token = '@' + token
+         elif r_barename.match(token):
+            token = ':' + token
+
           if (token == '@keywords') and (not self.prev.startswith('"')):
-            # The "@keywords .\n" is for backwards-compatability
-            self.output.write('@keywords .\n')
              self.keywords = set()
              while True:
                 tok = self.tokens.next()
]]]

-- 
Sean B. Palmer, http://inamidst.com/sbp/

Received on Sunday, 16 January 2005 06:57:39 UTC