| 
									
										
										
										
											2016-08-20 23:02:09 +03:00
										 |  |  | #  pWiki Path
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | XXX a Wiki is a set of pages, mostly top level pages, mosty titled in | 
					
						
							|  |  |  | WikiWord style, pWiki follows this culture but does not restrict either  | 
					
						
							|  |  |  | page nesting or title formatting. But following this style is recommended. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX write a set of recommendations... | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | ## Basic terminology
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Path**   | 
					
						
							| 
									
										
										
										
											2016-08-17 17:55:49 +03:00
										 |  |  | _One or more strings (or parts) separated by "/" that identifies a view._ | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:55:49 +03:00
										 |  |  | We call the last _part_ in a path sequence a _title_. | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | We call the sub-path without the _title_ a _basedir_ or simply _dir_. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | In pWiki, there is no distinction between a page and a _directory_, thus | 
					
						
							| 
									
										
										
										
											2016-08-17 17:55:49 +03:00
										 |  |  | we do not use the later term, instead, we may use the term _sub-page_. | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 18:04:07 +03:00
										 |  |  | Paths are case sensitive. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | **Page**   | 
					
						
							| 
									
										
										
										
											2016-08-17 17:44:23 +03:00
										 |  |  | _A set of data associated with a path._ | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 18:04:07 +03:00
										 |  |  | A page is identified by it's path, but this does not require every | 
					
						
							|  |  |  | sub-path of that path to exist -- the full path is the identifier, not | 
					
						
							|  |  |  | a sequence of path parts. | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 18:04:07 +03:00
										 |  |  | Some pages are _bootstrapped_, i.e. are predefined in pWiki, these pages | 
					
						
							|  |  |  | can be overridden but can not be removed. | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:55:49 +03:00
										 |  |  | **View**   | 
					
						
							|  |  |  | _A path that resolves to a page that may or may not be at that specific | 
					
						
							|  |  |  | path._ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | A _view's_ path may match that of a specific page or may not match any | 
					
						
							|  |  |  | page directly, but any view will resolve to a page via the _acquisition  | 
					
						
							|  |  |  | process_ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 18:04:07 +03:00
										 |  |  | Any page is a view, every view resolves to a page, but not every view  | 
					
						
							|  |  |  | is a page. | 
					
						
							| 
									
										
										
										
											2016-08-17 17:55:49 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | (see: _Page acquisiton_ below) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | **WikiWord**   | 
					
						
							| 
									
										
										
										
											2016-08-17 17:44:23 +03:00
										 |  |  | _XXX_ | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Page acquisition
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:44:23 +03:00
										 |  |  | pWiki path system differs from how traditional file system paths are  | 
					
						
							| 
									
										
										
										
											2016-08-17 18:10:51 +03:00
										 |  |  | handled. In pWiki if a path does not reference a page directly (i.e.  | 
					
						
							|  |  |  | it's a _view_), a search is conducted to find an alternative page. This  | 
					
						
							|  |  |  | search is called _page acquisition_. | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:44:23 +03:00
										 |  |  | **Acquisition process:**   | 
					
						
							|  |  |  | _A set of rules defining how a page is retrieved via a path._ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This is used as a simple and uniform mechanism to: | 
					
						
							|  |  |  | - Get default pages for specific situations   | 
					
						
							|  |  |  |   Like [Templates/EmptyPage] to handle the _page not found_ condition. | 
					
						
							|  |  |  | - define generic templates/pages accessible by multiple pages in path   | 
					
						
							|  |  |  |   A good example would be the viewer used to show this page [Templates/\_view] | 
					
						
							| 
									
										
										
										
											2016-08-19 18:59:55 +03:00
										 |  |  |   and all of it's _chrome_ like the path in the header and links in the  | 
					
						
							|  |  |  |   footer <pwiki-comment>(seen: when viewing through pWiki)</pwiki-comment> | 
					
						
							| 
									
										
										
										
											2016-08-17 17:44:23 +03:00
										 |  |  | - Overload default templates/pages | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### The acquisition order/rules:
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 1. if _path_ matches a specific page, target _page_ is found  | 
					
						
							|  |  |  | 1. if _path_ does not match a page: | 
					
						
							|  |  |  |   1. if _title_ matches a page in the parent _path_, _page_ is found | 
					
						
							|  |  |  |   1. repeat until we either have a match or reach root (empty _basedir_) | 
					
						
							|  |  |  | 1. if no match is found, check if title exists in [Templates] in _basedir_ | 
					
						
							|  |  |  | 1. if no match is found, check if title exists in [/System] | 
					
						
							|  |  |  | 1. if no match is found, repeat process for `EmptyPage` instead of _title_ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Example:**   | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | For path `Path/To/Page` the following paths are checked in order  | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | and the first matching page is returned: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:27:31 +03:00
										 |  |  | - _Check path as-is then go up:_ | 
					
						
							|  |  |  |   - `Path/To/Page`  | 
					
						
							|  |  |  |   - `Path/Page` | 
					
						
							|  |  |  |   - `Page` | 
					
						
							|  |  |  | - _Check in `Templates`, in path and up:_ | 
					
						
							|  |  |  |   - `Path/To/Templates/Page` | 
					
						
							|  |  |  |   - `Path/Templates/Page` | 
					
						
							|  |  |  |   - `Templates/Page` | 
					
						
							|  |  |  | - _Check root `System`:_ | 
					
						
							|  |  |  |   - `System/Page` | 
					
						
							|  |  |  | - _Check `EmptyPage` in path, then in templates:_ | 
					
						
							|  |  |  |   - `Path/To/EmptyPage` | 
					
						
							|  |  |  |   - `Path/EmptyPage` | 
					
						
							|  |  |  |   - `EmptyPage` | 
					
						
							|  |  |  |   - `Path/To/Templates/EmptyPage` | 
					
						
							|  |  |  |   - `Path/Templates/EmptyPage` | 
					
						
							|  |  |  |   - `Templates/EmptyPage` _(This is guaranteed to exist)_ | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Exceptions:** | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 17:27:31 +03:00
										 |  |  | - `System/settings` is global and _can not be overloaded_ for use as  | 
					
						
							|  |  |  | system configuration. This is done for security reasons. | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Default pages
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | XXX | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | - `Templates/EmptyPage` | 
					
						
							|  |  |  | - `Templates/EmptyToDo` | 
					
						
							|  |  |  | - `Templates/EmptyOutline` | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Relative and absolute paths (".", ".." and "/")
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | ## Path patterns ("\*" and "\*\*")
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | ## Path actions
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX path elements that perform actions on pages but do not actually  | 
					
						
							|  |  |  | correspond to actual pages. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Path variables
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### `$NOW`
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 06:08:24 +03:00
										 |  |  | XXX | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-17 05:56:24 +03:00
										 |  |  | _Also see the `\@now()` macro: [Doc/Macros]._ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## WikiWord
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | XXX not actualy part of the path spec but a way (culture) to define paths  | 
					
						
							|  |  |  | in pages + automatic link creation. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <!-- @filter(markdown) --> | 
					
						
							|  |  |  | <!-- vim:set ts=4 sw=4 ft=markdown spell : --> |