'''SLP: Architecture concept for Wikis''' A Wiki is a tool that manages data. Here are the three major functions: '''Storage''' * Simple engine stores raw pages in a file system * Pages may also be in database or large hash table * Implement source-control, versioning features * Implement security features to restrict page edits * Allow search on keywords * Identify recently changed pages * Implement read/write locking or other contention mechanisms '''Linking''' * Identify links between its own pages (forward and reverse) * Allow links to other web pages * Allow links to pages on other Wikis * Define a syntax for WikiNames '''Presentation''' * Convert WikiLanguage to HTML * Add HTML boilerplate, such as search functions, edit page, logo * Enable advanced navigation features such as trails, LinkBaskets * Log on users, collect preferences * Store cookies with users ---- '''Goal:''' Encourage WikiEngine authors to carefully isolate Storage, Linking, and Presentation '''Reasons for separate Storage mechanism:''' * Allow for dual modes of operation (single-user vs. multi-user) * Simplify mirroring * Paves way to expose just your raw data to other Wikis '''Reasons for separate Linking mechanism:''' * Common linking APIs allow for reuse of graph algorithms such as orphan detection, knot detection, nearness weighting, etc. * Easier to isolate enhancements for integrating with sister sites '''Reasons for separate Presentation mechanism:''' * Different user populations might want different navigation paradigms * Might lead to quicker adaption of standard WikiLanguage * May eventually support non-HTML clients * May wish to run Presentation software on different box from Storage -- SteveHowell ---- Are there tools other than Wikis that conform to a StorageLinkingPresentation (SLP) architecture? ---- I would add 'Parsing'. You have related defining the syntax for WikiNames to Linking and defining the syntax for markup to Presentation. I would argue that both of these activities are more closely related to each other, and are simply Parsing. Linking is then taking advantage of link information discovered during a parse (eg ISBN links, remote wiki links, WikiNames) and presentation is taking structure discovered during a parse and applying presentation logic to it (as XSL does for XML, for example). There is an underlying assumption in some of your bulletpoints that the storage format for the wiki is the same as the edit format. This does not need to be the case. In the same way that you can restructure text for presentation, you can ''destructure'' text for editing using TextFormattingRules. However, for some edit clients you may wish to provide them with structured information so that they can perform WYSIWYG edits. In a Wiki which stores in plain text format, parsing happens on retrieval; in a wiki which stores in a structured format but edits in plain text, the parse would happen on submission. (This is more efficient as the parse only happens once!) Either way, there would be a parsing phase. -- BrianEwins ---- '''See:''' * WikiServerArchitecture * ModelViewController * WikiEngineReviewStandardFeatures