Acknowledgements MEDIA research Group
Small Data in the large with Oppidum
XML web development with Oppidum and eXist-DB
P...
Introduction
Presentation vs. semantic
“ On the left, what browsers see. On the right, what humans see. Can we
bridge the ...
Small data applications
document structure (sections, paragraphs, lists, etc.)
truffled with structured data inside
edit | xml | hide | previewXML Prague 2010
Introduction of the AXEL Javascript library for XML authoring in the
browser
S....
</Author>
<Author>
<Name>C. Vanoirbeek</Name>
</Author>
<Author>
<Name>V. Quint</Name>
</Author>
<Author>
<Name>C. Roisin<...
Motivation: full XML stack
XML web development
Languages (W3C)
XPath => XQuery, XSLT
XForms XTiger XML (Adaptable XML Editing Library)
Native XML dat...
Oppidum Principles
A unique XML file to represent the application architecture
the mapping associates each REST resource f...
Oppidum Pipeline
Limited to 3 steps (KISS-principle)
a model implemented as an XQuery script
a (optional) view implemented...
Article Editing Application
Fully specificed by 6 pipelines
Mapping file example
<collection name="articles">
<item> => articles/xml-london[.xml]
<access>
<rule action="edit POST" ro...
Oppidum Execution Model
a two time engine
eXist-DB implementation
1st step : controller.xql calls gen:process( HTTP Reques...
Oppidum Design Patterns
Templating system
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:site="http://oppidoc.com/oppidu...
Sample flow
Model output
<Document>
<Parag>Hello World</Parag>
</Document>
View output
<site:view>
<site:content>
<p>Hello...
Epilogue templating function
universal typeswitch function (cut-and-paste between projects) to include
in the epilogue
dec...
More design patterns
Skinning applications
declarative way to keep the association between CSS and JS files and applicatio...
Application : Focus
Newsletter editor
editorial tool chain for publishing a 4 pages newsletter (3000 printed copies)
Application : Alliance
Web site of the Association Alliance
form editor for participant registration with tool chain to pu...
Application : UAP
Web site of the Union des Artisans du Patrimoine de Belgique
moderated classified ads service for the cr...
Application : PSE
database of startup companies member of the Science Park at EPFL
multilingual content and search engine ...
Conclusion
Effective and efficient XML full stack
implicit “model driven” approach with clear division of work for develop...
Small Data in the large with Oppidum
Small Data in the large with Oppidum
Small Data in the large with Oppidum
Small Data in the large with Oppidum
Small Data in the large with Oppidum
Upcoming SlideShare
Loading in …5
×

Small Data in the large with Oppidum

761 views

Published on

XML London 2013 presentation

The paper addresses the topic of frameworks intended to speed up the development of web applications using the XML stack (XQuery, XSLT and native XML databases). These frameworks must offer the ability to produce exploitable XML content by web users - without technical skills – and must be simple enough to lower the barrier entry cost for developers. This is particularly true for a low-budget class of applications that we call Small Data applications. This article presents Oppidum, a lightweight open source framework to build web applications relying on a RESTful approach, sustained by intuitive authoring facilities to populate an XML database. This is illustrated with a simple application created for editing this article on the web.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
761
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Small Data in the large with Oppidum

  1. 1. Acknowledgements MEDIA research Group Small Data in the large with Oppidum XML web development with Oppidum and eXist-DB Presented at XML London 2013 (read the full article) Stéphane Sire Contact: s.sire@oppidoc.fr - Oppidoc Christine Vanoirbeek Contact: christine.varnoirbeek@epfl.ch
  2. 2. Introduction Presentation vs. semantic “ On the left, what browsers see. On the right, what humans see. Can we bridge the gap so browsers see more of what we see? ” Source W3C RDFa 1.1 Primer Rich Structured Data Markup for Web Documents
  3. 3. Small data applications document structure (sections, paragraphs, lists, etc.) truffled with structured data inside
  4. 4. edit | xml | hide | previewXML Prague 2010 Introduction of the AXEL Javascript library for XML authoring in the browser S. Sire, C. Vanoirbeek, V. Quint, C. Roisin, Authoring XML all the Time, Everywhere and by Everyone. In Proceedings of XML Prague 2010, pages 125 - 149 , Institute for Theoretical Computer Science, 14/03/2010 Self-service demo: click a first time on “edit” to transform the bibliographic reference into an editor click on “xml” (resp. “hide”) to show (resp. hide) its current XML content click on “preview” to hide / show editor structure editing controls <References> <Publication Date="2010-03-14"> <Authors> <Author> <Name>S. Sire</Name>
  5. 5. </Author> <Author> <Name>C. Vanoirbeek</Name> </Author> <Author> <Name>V. Quint</Name> </Author> <Author> <Name>C. Roisin</Name> </Author> </Authors> <Title>Authoring XML all the Time, Everywhere and by Everyone</Title> <Conference>Proceedings of XML Prague 2010</Conference> <Pages> <Start>125</Start> <End>149</End> </Pages> <Location>Institute for Theoretical Computer Science</Location> </Publication> </References>
  6. 6. Motivation: full XML stack
  7. 7. XML web development Languages (W3C) XPath => XQuery, XSLT XForms XTiger XML (Adaptable XML Editing Library) Native XML databases eXist-DB, Sausalito, baseX, Marklogic XRX programming style and 2/3 architectures But still very few application frameworks ! RESTXQ, EXPath Orbeon Forms, Oppidum
  8. 8. Oppidum Principles A unique XML file to represent the application architecture the mapping associates each REST resource from the application with a rendering pipeline
  9. 9. Oppidum Pipeline Limited to 3 steps (KISS-principle) a model implemented as an XQuery script a (optional) view implemented as an XSLT transformation an (optional) epilogue implemented as a unique XQuery script called epilogue.xql sample :
  10. 10. Article Editing Application Fully specificed by 6 pipelines
  11. 11. Mapping file example <collection name="articles"> <item> => articles/xml-london[.xml] <access> <rule action="edit POST" role="g:authors" message="author"/> </access> <model src="oppidum:actions/read.xql"/> <view src="article/article2html.xsl"/> <action name="edit"> => articles/xml-london/edit <model src="actions/edit.xql"/> <view src="views/edit.xsl"/> </action> <action name="POST"> => POST articles/xml-london <model src="actions/write.xql"/> </action> <collection name="images"> => articles/xml-london/images/ <model src="models/forbidden.xql"/> <action name="POST"> => POST articles/xml-london/images/ <model src="images/upload.xql"/> </action> <item> => articles/xml-london/images/1.png <model src="images/image.xql"/> </item> </collection> </item> </collection>
  12. 12. Oppidum Execution Model a two time engine eXist-DB implementation 1st step : controller.xql calls gen:process( HTTP Request ) 2nd step: URLRewriteFilter executes pipeline
  13. 13. Oppidum Design Patterns Templating system <html xmlns="http://www.w3.org/1999/xhtml" xmlns:site="http://oppidoc.com/oppidum/site"> <body> <div id="article"> <site:content/> </div> </body> </html>
  14. 14. Sample flow Model output <Document> <Parag>Hello World</Parag> </Document> View output <site:view> <site:content> <p>Hello World</p> </site:content> </site:view> Epilogue output <html xmlns="http://www.w3.org/1999/xhtml"> <body> <div id="article"> <p>Hello World</p> </div> </body> </html>
  15. 15. Epilogue templating function universal typeswitch function (cut-and-paste between projects) to include in the epilogue declare function local:render( $cmd as element(), $source as element(), $view as element()* ) as element() { element { node-name($source) } { ...typeswitch function calling site:branch function for every site:* extension point... } }; application-dependent function defining the extension points declare function site:branch( $cmd as element(), $source as element(), $view as element()* ) as node()* { typeswitch($source) case element(site:skin) return site:skin($cmd, $view) case element(site:lang) return site:lang($cmd, $view) case element(site:navigation) return site:navigation($cmd, $view) case element(site:error) return site:error($cmd, $view) case element(site:login) return site:login($cmd) ... (: default implicitly manages other modules :) default return $view/*[local-name(.) = local-name($source)]/(*|text()) };
  16. 16. More design patterns Skinning applications declarative way to keep the association between CSS and JS files and application pages into a skin.xml resource inside the database Error and message management (Flash a-la Ruby on Rails) Data mapping maintaining a relation between URL input space hierarchy and database collections hierarchy Form-based access control Development life cycle (mode="dev|test|prdo" attribute)
  17. 17. Application : Focus Newsletter editor editorial tool chain for publishing a 4 pages newsletter (3000 printed copies)
  18. 18. Application : Alliance Web site of the Association Alliance form editor for participant registration with tool chain to publish badges and list of participants
  19. 19. Application : UAP Web site of the Union des Artisans du Patrimoine de Belgique moderated classified ads service for the craftmen member of the association
  20. 20. Application : PSE database of startup companies member of the Science Park at EPFL multilingual content and search engine (Apache Lucene) generation of personalized recommendations to improve company pages JSON export towards an internal advertising TV screen network
  21. 21. Conclusion Effective and efficient XML full stack implicit “model driven” approach with clear division of work for developers user generated content with AXEL and AXEL-FORMS (article XML Prague) backend development with eXist-DB and Oppidum (article XML London) Open source (available on Github) Opened issues to go beyond "Small Data" code portability abstraction layer for cross-database execution environments ? see EXPath Webapp framework ? XProc ? RESTXQ ? failover and load balancing

×