SlideShare a Scribd company logo
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
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
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. 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>
</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>
Motivation: full XML stack
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
Oppidum Principles
A unique XML file to represent the application architecture
the mapping associates each REST resource from the application with a
rendering pipeline
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 :
Article Editing Application
Fully specificed by 6 pipelines
Small Data in the large with Oppidum
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>
Oppidum Execution Model
a two time engine
eXist-DB implementation
1st step : controller.xql calls gen:process( HTTP Request )
2nd step: URLRewriteFilter executes pipeline
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>
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>
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())
};
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)
Application : Focus
Newsletter editor
editorial tool chain for publishing a 4 pages newsletter (3000 printed copies)
Small Data in the large with Oppidum
Application : Alliance
Web site of the Association Alliance
form editor for participant registration with tool chain to publish badges and list of
participants
Small Data in the large with Oppidum
Application : UAP
Web site of the Union des Artisans du Patrimoine de Belgique
moderated classified ads service for the craftmen member of the association
Small Data in the large with Oppidum
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
Small Data in the large with Oppidum
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

More Related Content

PPTX
OA - Shared Canvas - TEI - Biblissima project
PPTX
QB'er demonstration
PPTX
Making social science more reproducible by encapsulating access to linked data
PPT
Rich User Interaction with SVG
PDF
Extending XForms with Server-Side Functionality
PPT
Building a Scalable XML-based Dynamic Delivery Architecture: Standards and Be...
PPT
RESTful Services
PDF
Firefox extension Development
OA - Shared Canvas - TEI - Biblissima project
QB'er demonstration
Making social science more reproducible by encapsulating access to linked data
Rich User Interaction with SVG
Extending XForms with Server-Side Functionality
Building a Scalable XML-based Dynamic Delivery Architecture: Standards and Be...
RESTful Services
Firefox extension Development

Similar to Small Data in the large with Oppidum (20)

PPT
XRX Presentation to Minnesota OTUG
PPTX
Agile xml
PDF
PPTX
Web data management (chapter-1)
PPTX
advDBMS_XML.pptx
PPT
ravenbenweb xml and its application .PPT
PPT
Xml nisha dwivedi
PPTX
Xml For Dummies Chapter 20 Ten Top Xml Applications
PPT
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
PPT
XML and Databases
PPTX
Editing XML data with XForms
PPT
XML, XML Databases and MPEG-7
PDF
xml test
PDF
test slideshare
PDF
ITEC 610 Assingement 1 Essay
ODP
Web of data
PDF
Adaptive Linked Data-driven Web Components: Building Flexible and Reusable Se...
XRX Presentation to Minnesota OTUG
Agile xml
Web data management (chapter-1)
advDBMS_XML.pptx
ravenbenweb xml and its application .PPT
Xml nisha dwivedi
Xml For Dummies Chapter 20 Ten Top Xml Applications
DATA INTEGRATION (Gaining Access to Diverse Data).ppt
XML and Databases
Editing XML data with XForms
XML, XML Databases and MPEG-7
xml test
test slideshare
ITEC 610 Assingement 1 Essay
Web of data
Adaptive Linked Data-driven Web Components: Building Flexible and Reusable Se...
Ad

Recently uploaded (20)

PPTX
Big Data Technologies - Introduction.pptx
PDF
KodekX | Application Modernization Development
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
Approach and Philosophy of On baking technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Electronic commerce courselecture one. Pdf
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Encapsulation theory and applications.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Unlocking AI with Model Context Protocol (MCP)
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
Big Data Technologies - Introduction.pptx
KodekX | Application Modernization Development
Spectral efficient network and resource selection model in 5G networks
Chapter 3 Spatial Domain Image Processing.pdf
Programs and apps: productivity, graphics, security and other tools
Approach and Philosophy of On baking technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
NewMind AI Weekly Chronicles - August'25 Week I
Electronic commerce courselecture one. Pdf
Understanding_Digital_Forensics_Presentation.pptx
Per capita expenditure prediction using model stacking based on satellite ima...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Building Integrated photovoltaic BIPV_UPV.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Encapsulation theory and applications.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Unlocking AI with Model Context Protocol (MCP)
“AI and Expert System Decision Support & Business Intelligence Systems”
Ad

Small Data in the large with Oppidum

  • 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. 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. Small data applications document structure (sections, paragraphs, lists, etc.) truffled with structured data inside
  • 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. </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>
  • 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. 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. 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. Article Editing Application Fully specificed by 6 pipelines
  • 12. 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>
  • 13. Oppidum Execution Model a two time engine eXist-DB implementation 1st step : controller.xql calls gen:process( HTTP Request ) 2nd step: URLRewriteFilter executes pipeline
  • 14. 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>
  • 15. 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>
  • 16. 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()) };
  • 17. 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)
  • 18. Application : Focus Newsletter editor editorial tool chain for publishing a 4 pages newsletter (3000 printed copies)
  • 20. Application : Alliance Web site of the Association Alliance form editor for participant registration with tool chain to publish badges and list of participants
  • 22. Application : UAP Web site of the Union des Artisans du Patrimoine de Belgique moderated classified ads service for the craftmen member of the association
  • 24. 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
  • 26. 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