Posted to tcl by colin at Mon May 10 01:14:48 GMT 2010view raw

  1. # AXIOMS
  2.  
  3. # TUPLES
  4. #* T1: tuples indexed immutable ordinal id number
  5. #* T2: tuples are uniquely indexed by name
  6. #* T3: tuples have content of type (which may be a mime type)
  7.  
  8. # NAMING of tuples
  9. #* N1: each tuple is uniquely named (from T1)
  10. #* N2: a tuple's name may only comprise characters which are alnums, space, * or +
  11. #* N3: tuple names may be composed by +, such a name is called a 'composite name'
  12. #* N4: name composition is left-associative a+b+c is (a+b)+c
  13.  
  14. # REFERENCES to tuples
  15. #* R1: a reference with the prefix form /#id is a reference to the tuple whose ordinal is id (which might be used as an HTTP object reference)
  16. #* R2: reference /n is a reference to the tuple whose name is n, and known as a 'simple reference'
  17. #* R3: reference /n/c is equivalent to /n+c. Both forms are known as 'compound references'
  18. #* R4: a reference /n.ext is a request to convert the tuple n to the mime type of the extension, and is otherwise equivalent to /n (see P1)
  19. #* R7: a reference /+n is resolved as ${referer}+n
  20.  
  21. # TRANSCLUSION
  22. #* Tc1: a reference /+n is a transclusion in the context of ${referer}
  23. #* Tc2: a reference /n or /+n/ is a top level fetch
  24.  
  25. # COMPOSITION - a reference /M+n (or /m/+n) is resolved in the following order:
  26. #* C1: as a tuple named M+n (HTTP Moved?)
  27. #* C2: as a tuple named type(M)+n (HTTP See?)
  28. #* C3 (QUESTIONABLE): if n has a leading *-character, then
  29. #** C3.1 as an element n of the tuple M
  30. #** C3.2: as an operator n applied to M.
  31.  
  32. # TYPE
  33. #* Ty1: a tuple will be transformed for presentation according to its type, its reference's .ext and client's HTTP Accept and the manner in which it is referenced (either for transclusion or for top-level presentation)
  34. #* Ty2: the transformation of a tuple n will be performed by the operator n+*type(n). If n+*type(n) is not of type text/tcl or text/js, then n+*type(n)+*type(type(n)) (and so on) will be sought.
  35.  
  36. # OWNERSHIP and permissions
  37. #* O1: tuples are owned by a user and a group, which have distinct permissions
  38. #* O2: users and groups are themselves tuples named *user+n and *group+n