W3C home > Mailing lists > Public > public-cwm-bugs@w3.org > January 2005

deep recursion in cwm

From: James Michael DuPont <mdupont777@yahoo.com>
Date: Sun, 2 Jan 2005 02:46:27 -0800 (PST)
Message-ID: <20050102104627.31043.qmail@web41505.mail.yahoo.com>
To: public-cwm-bugs@w3.org

Hi all,

I just wanted to report a small problem with a deep recursion, and
another one about self referential bnodes that might be interesting.

First the simple one,
"""
_:a1 <#:next> _:a1; <#:val> "foo".
_:a2 <#:next> _:a3; <#:val> "foo".
"""
produces """
     @prefix : <#> .
      [  ::next  [   ];  ::val "foo" ].
"""

that would be better if it produced :
"""
     @prefix : <#> .
      _:a1 <#:next> _:a1; <#:val> "foo".
      [  ::next  [   ];  ::val "foo" ].
"""

The second bug is a bunch of statements like this :

perl -e 'print "\@prefix : <file:/tmp/foo>.\n";for(1...10000){my
$n=$_;$n1=$n+1;print "_:a$n <:next> _:a$n1.\n"}' > test.n3

that produces the crash
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/llyn.py", line
1269, in dumpStatement
    self.dumpStatement(sink, t.triple)
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/llyn.py", line
1269, in dumpStatement
    self.dumpStatement(sink, t.triple)
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/llyn.py", line
1269, in dumpStatement
    self.dumpStatement(sink, t.triple)
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/llyn.py", line
1269, in dumpStatement
    self.dumpStatement(sink, t.triple)
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/llyn.py", line
1265, in dumpStatement
    sink.startAnonymous(self.extern(triple), li)
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/notation3.py",
line 1266, in startAnonymous
    self._makeSubjPred(triple[CONTEXT], triple[SUBJ], triple[PRED])
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/notation3.py",
line 1402, in _makeSubjPred
    self._write( " %s " % self.representationOf(context, pred))
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/notation3.py",
line 1464, in representationOf
    return "<" + relativeURI(self.base, value) + ">"    # Everything
else
  File
"/mnt/hdb2/experiments/cwm/infomesh.net/2001/cwm/cwm1.82/notation3.py",
line 961, in relativeURI
    if string.find(base, "//", i-2)>0 \
RuntimeError: maximum recursion depth exceeded


which produces :
   [      <:next>  [
                 <:next>  [
                     <:next>  [
                         <:next>  [
                             <:next>  [
                                 <:next>  [
                                     <:next>  [
                                         <:next>  [
                                             <:next>  [
                                                 <:next>  [
                                                 ] ] ] ] ] ] ] ] ] ] ].


I would suggest to have cwm to just break off the list when the stack
gets to large. Let assume that we have a max depth variable that is
checked before recursion.

Introducing a _:genidNNN in between. So lets say in this example, the
max depth was 5. 

   [      <:next>  [
                 <:next>  [
                     <:next>  [
                         <:next>  [
                             <:next>  _:genid123
                                  ]
                               ]
                          ]
                   ]
   ].
  _:genid123      <:next>  [
                 <:next>  [
                     <:next>  [
                         <:next>  [
                                  ]
                               ]
                          ]
                   ].


mike

=====
James Michael DuPont
http://introspector.sourceforge.net/


		
__________________________________ 
Do you Yahoo!? 
Send a seasonal email greeting and help others. Do good. 
http://celebrity.mail.yahoo.com
Received on Sunday, 2 January 2005 10:46:59 UTC

This archive was generated by hypermail 2.3.1 : Tuesday, 6 January 2015 19:52:00 UTC