Implementation notes

History

Ystok-URI is based on

Implementation details

  1. URIs are represented by instances of a Common Lisp structure type.
  2. Percent-encoding and decoding are supported for all components. The path and query parts are first split into elements then decoded.
  3. By default, all component (except uri-string cache) are stored percent-decoded. Use cautiously if you overwrite this default behavior!
  4. Decoded userinfo is stored in plist with indicators :user and :password.
  5. The print-object never outputs the password.
  6. On changing any "public" component slot via setf, the following internal cache slots are not cleared automatically: %parsed-path% - should be affected by (setf uri-path), string - should be affected by (setf uri-any_slot) except password. You must invoke clear-cache explicitly.
  7. Query
  8. Fragment

Compatibility notes

  1. A completely empty URI is represented as "#". In contrast, Franz and PURI implementations replace an empty URI by "/".
  2. As a URI object is represented as a structure (not a CLOS object), its slot accessors are ordinary (not generic!) functions.

Unsupported features

  1. URN.
  2. Interning URI.