SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
EXPath Packaging
 A framework to package libraries and
applications for core XML technologies



       Balisage, August 4th, 2010
               Montréal



           Florent Georges
             H2O Consulting
EXPath Packaging

●
    Introduction                ←
●   The problem
●   How to use it?
●   Write a package
●   A project structure
●   Going further
●   Conclusion
Introduction - History

●   EXSLT for XSLT 1.0
●   XSLT 2.0 and needs for new extensions
●   EXSLT 2.0, EXQuery & EXProc
●   XML Prague 2009 – EXPath
●   First modules – HTTP Client & ZIP Facility
●   Summer 2009 – the Packaging System
●   2010 – the Webapp module
Introduction - Goals

●   Collaboratively defining open standards for
    portable XPath extensions
●   The main means is extension functions
●   The main goal is defining portable
    specifications...
●   ...and convincing vendors to endorse them
●   But also providing support to open-source
    implementations
Introduction - Processes

●   More or less formal, more or less informal
    (that is a feature, not a bug)
●   The definitive goal is writing specifications
●   The main tool is the mailing list
●   Each module has one main maintainer,
    responsible of editing & achieving consensus
●   More infos about processes on the wiki
EXPath Packaging

●   Introduction
●
    The problem                 ←
●   How to use it?
●   Write a package
●   A project structure
●   Going further
●   Conclusion
The import problem

●   The way to import a module is dependent on
    the processor
●   XSLT import URI
●   XQuery evil: location hint
●   For now, there is no standard way to import a
    module in XSLT, XQuery nor XProc
●   No other modern programming language as
    this limitation
The import problem
(: in Saxon :)
import module namespace functx = "http://www.functx.com"
 at "../../../../../../xlibs/functx/src/functx.xq";

declare function local:hello($who as xs:string) as xs:string
{
  concat('Hello, ', functx:capitalize-first($who), '!')
};
...

(: in eXist :)
import module namespace functx = "http://www.functx.com"
  at "xmldb:exist:///db/modules/functx.xq";
...
The import problem
●   The ideal solution would be to get rid of the
    location hint, and see the import URI as a name
    (: portable :)
    import module namespace functx = "http://www.functx.com";

    declare function local:hello($who as xs:string) as xs:string
    {
      concat('Hello, ', functx:capitalize-first($who), '!')
    };
    ...

●   Achievable somehow through XML Catalogs,
    but the install process is not uniform and thus
    even more painful for the user
XML Catalogs
●   XML Catalogs are in the correct direction, but
    need automatization
●   Both for the final user and for the author
●   The solution needs to be used consistently,
    XML Catalogs does not give enough info
●   Even when a catalog is shipped with a library,
    it needs advanced config in order to work
●   And there is no standard release structure
●   URI resolving is only part of the solution
EXPath Packaging

●   Introduction
●   The problem
●
    How to use it?              ←
●   Write a package
●   A project structure
●   Going further
●   Conclusion
How to use it?
●   A library user has two things to do:
        –   install the package, using an automatic
              installer
        –   import it and use it, of course, by simply using
              the pubic URI
●   Installers can be command line tools, or a web
    form, or whatever is provided by the processor
●   By using the public URIs (and only the public
    URIs), the written code is portable across
    different processors
Installers
●   Command-line tool:




●   eXist's web-based install:
Import modules
●   Going back to our example:
    (: portable :)
    import module namespace functx = "http://www.functx.com";

    declare function local:hello($who as xs:string) as xs:string
    {
      concat('Hello, ', functx:capitalize-first($who), '!')
    };
    ...


●   It is now portable across processors, without
    imposing any configuration burden on the user
EXPath Packaging

●   Introduction
●   The problem
●   How to use it?
●
    Write a package             ←
●   A project structure
●   Going further
●   Conclusion
Requirements
●   Building upon and going behind XML
    Catalogs, a packaging format must:
       –   describe what is needed but is not in the X*
            specifications
       –   be understood by most processors
       –   package the components and additional
            informations in a single file
       –   be eXtensible (to allow other specs to build
            upon it, and allow processor specific infos)
●   Installation process can then be automated
Overview
Structure
●   A package is a ZIP file
●   It contains exactly one subdirectory (content)
●   It contains a package descriptor: expath-pkg.xml
●   It can contain per-processor descriptors
●   It can contain descriptors for other specs
The descriptor
●   Record some meta infos about the package
●   Record the content component's public URIs
Putting it together
●   The components and the descriptor are just
    zipped together to make the XAR package
●   The XAR file must respect the structure
    described in the descriptor
●   Any ZIP tool can be used to achieve this goal
Standard repository layout
●   How packages are installed is implementation-
    dependent
●   The spec defines an optional repository layout
●   If the implementation adopts this layout, it can
    share repositories with others
●   Management tools in the command line have
    been built to manage such repositories (install,
    remove, list packages)
●   A Java library exists for the URI resolution
EXPath Packaging

●   Introduction
●   The problem
●   How to use it?
●   Write a package
●
    A project structure        ←
●   Going further
●   Conclusion
Too much for me!
●   That's fine, but as a library author, that seems
    a lot of work to do again and again
●   Besides, most of the steps are similar every
    time
●   Creating new libraries usually involve copying
    and pasting Makefiles or other build files, and
    adapting them, over and over again
●   By using some conventions, we can actually
    automate those repetitive tasks
Project?
●   Following a consistent structure, a project can
    be built automatically
●   This structure use naming conventions for
    directories
●   As well as a project descriptor for meta data
    (title, version, etc.)
●   The public URIs are maintained within the
    components themselves
●   An XSLT stylesheet packages the project
Project!
●   The basic project structure has a build/
    directory with a project file, and a src/ directory
    with the project source files
xproj
●   A simple script wraps the stylesheet invocation
●   You call it from the project directory to build
    the project package:
Releasing
●   Why did we put the test file outside the
    project? Let's include it.
●   And let's put a nice README file




●   Can we create automatically a proper release?
xproj, relaunched
(let's make it clear)
●   Before going further, let's make it clear this
    project structure stuff is already behind the
    packaging system itself
●   It is useful, or even crucial, for the user
    experience
●   But it is behind the packaging spec
●   The spec is the minimal common piece to
    conform to
●   Tools and specs can then be built upon it
EXPath Packaging

●   Introduction
●   The problem
●   How to use it?
●   Write a package
●   A project structure
●
    Going further               ←
●   Conclusion
Repository functions
●   A set of functions to manage a package
    repository directly from within XPath expression
●   Not part of the spec (but could be in a v.Next)
●   This is the approach followed by eXist:
        –   repo:list() as xs:string*
        –   repo:install($href as xs:string) as xs:boolean
        –   repo:remove($name as xs:string) as xs:boolean

●   Could be used to build convenient managers,
    not dependent on the processor
CXAN
●   http://cxan.org/
●   Comprehensive XML Archive Network
●   Follow the same principle as well-known
    CPAN for Perl and CTAN for (La)TeX
●   Work in progress
●   Collect existing packages
●   Make them accessible and searchable from a
    single one location
CXAN
●   CXAN is composed of:
       –   the package base set on the server
       –   the website to browse and search within this
             package set
       –   a command line tool to install packages by
             downloading them directly from the server
CXAN




●   Some challenges are still to solve:
        –   versioning
        –   dependencies between packages
        –   website interface
Webapps
●   Using X* technologies end-to-end for web
    applications
●   Most existing XML databases provide
    proprietary framework for that (eXist,
    MarkLogic, Sausalito, etc.)
●   Then again, we are stuck with processor-
    locked applications
●   A standard would allow to write portable web
    applications, libraries and frameworks
Request / response
<web:request servlet="name" path="/path" method="get">
  <web:uri>http://example.org/my-app/path/one?p=v</web:uri>
  <web:authority>http://example.org</web:authority>
  <web:context-root>/my-app</web:context-root>
  <web:path>
      <web:part>path/</web:part>
      <web:match name="which">one</web:match>
  </web:path>
  <web:param name="p" value="v"/>
  <web:header name="connection" value="keep-alive"/>
  ...
</web:request>
<web:response status="200" message="Ok">
  <web:header name="..." value="..."/>
  ...
  <web:body content-type="text/html" method="xhtml"/>
</http:response>
Entry point
●   Either a:
        –   XQuery function
        –   main XQuery module
        –   XSLT function
        –   XSLT named template
        –   XSLT stylesheet
        –   XProc pipeline
●   Must accept two parameters
        –   the request element
        –   the sequence of bodies (possibly empty)
Entry point
Web descriptor
●   Map requests to entry points
●   Based on URI matching
Packaging
●   A webapp is packaged as any standard project
●   The web descriptor is inserted next to the
    package descriptor
●   All the resolution mechanism is already there
Building block
●   Once again, the webapp spec follow the same
    principle than packaging: defining only the
    strict minimum low-level mapping between an
    HTTP request and an X* component (and its
    response back to HTTP)
●
EXPath Packaging

●   Introduction
●   The problem
●   How to use it?
●   Write a package
●   A project structure
●   Going further
●
    Conclusion                  ←
●   Join the mailing list and browse the website:


                 http://expath.org/
EXPath Packaging: A framework to package libraries and applications for core XML technologies

Mais conteúdo relacionado

Mais procurados

Everything you ever wanted to know about lotus script
Everything you ever wanted to know about lotus scriptEverything you ever wanted to know about lotus script
Everything you ever wanted to know about lotus scriptBill Buchan
 
Like loggly using open source
Like loggly using open sourceLike loggly using open source
Like loggly using open sourceThomas Alrin
 
M|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleM|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleMariaDB plc
 
HornetQ Presentation On JBoss World 2009
HornetQ Presentation On JBoss World 2009HornetQ Presentation On JBoss World 2009
HornetQ Presentation On JBoss World 2009jarfield
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonIgor Anishchenko
 
Fluentd at HKOScon
Fluentd at HKOSconFluentd at HKOScon
Fluentd at HKOSconN Masahiro
 
Fluentd v1.0 in a nutshell
Fluentd v1.0 in a nutshellFluentd v1.0 in a nutshell
Fluentd v1.0 in a nutshellN Masahiro
 
9781305078444 ppt ch04
9781305078444 ppt ch049781305078444 ppt ch04
9781305078444 ppt ch04Terry Yoast
 
9781305078444 ppt ch02
9781305078444 ppt ch029781305078444 ppt ch02
9781305078444 ppt ch02Terry Yoast
 
The architecture of oak
The architecture of oakThe architecture of oak
The architecture of oakMichael Dürig
 
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012Treasure Data, Inc.
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersChang W. Doh
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryAlexandre Morgaut
 
Tips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development EfficiencyTips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development EfficiencyOlivier Bourgeois
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Andy Bunce
 

Mais procurados (20)

Fluentd meetup
Fluentd meetupFluentd meetup
Fluentd meetup
 
Everything you ever wanted to know about lotus script
Everything you ever wanted to know about lotus scriptEverything you ever wanted to know about lotus script
Everything you ever wanted to know about lotus script
 
Like loggly using open source
Like loggly using open sourceLike loggly using open source
Like loggly using open source
 
M|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScaleM|18 Architectural Overview: MariaDB MaxScale
M|18 Architectural Overview: MariaDB MaxScale
 
Fluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log ManagementFluentd vs. Logstash for OpenStack Log Management
Fluentd vs. Logstash for OpenStack Log Management
 
HornetQ Presentation On JBoss World 2009
HornetQ Presentation On JBoss World 2009HornetQ Presentation On JBoss World 2009
HornetQ Presentation On JBoss World 2009
 
Thrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased ComparisonThrift vs Protocol Buffers vs Avro - Biased Comparison
Thrift vs Protocol Buffers vs Avro - Biased Comparison
 
Fluentd at HKOScon
Fluentd at HKOSconFluentd at HKOScon
Fluentd at HKOScon
 
Fluentd v1.0 in a nutshell
Fluentd v1.0 in a nutshellFluentd v1.0 in a nutshell
Fluentd v1.0 in a nutshell
 
Xml parsers
Xml parsersXml parsers
Xml parsers
 
3 apache-avro
3 apache-avro3 apache-avro
3 apache-avro
 
9781305078444 ppt ch04
9781305078444 ppt ch049781305078444 ppt ch04
9781305078444 ppt ch04
 
9781305078444 ppt ch02
9781305078444 ppt ch029781305078444 ppt ch02
9781305078444 ppt ch02
 
The architecture of oak
The architecture of oakThe architecture of oak
The architecture of oak
 
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
Fluentd loves MongoDB, at MongoDB SV User Group, July 17, 2012
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
NoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love StoryNoSQL and JavaScript: a Love Story
NoSQL and JavaScript: a Love Story
 
Tips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development EfficiencyTips and Tricks for Increased Development Efficiency
Tips and Tricks for Increased Development Efficiency
 
Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application Benchx: An XQuery benchmarking web application
Benchx: An XQuery benchmarking web application
 
The basics of fluentd
The basics of fluentdThe basics of fluentd
The basics of fluentd
 

Destaque

Destaque (20)

De Brachiosaurus
De BrachiosaurusDe Brachiosaurus
De Brachiosaurus
 
Spreekbeurt job echt cool
Spreekbeurt job echt coolSpreekbeurt job echt cool
Spreekbeurt job echt cool
 
De Stegosaurus
De StegosaurusDe Stegosaurus
De Stegosaurus
 
De Veloceraptor
De VeloceraptorDe Veloceraptor
De Veloceraptor
 
De Tyrannosaurus Rex 01
De Tyrannosaurus Rex 01De Tyrannosaurus Rex 01
De Tyrannosaurus Rex 01
 
Quanti libri in un libro di Paola Romagnoli
Quanti libri in un libro di Paola RomagnoliQuanti libri in un libro di Paola Romagnoli
Quanti libri in un libro di Paola Romagnoli
 
Puzzle Gigante
Puzzle GigantePuzzle Gigante
Puzzle Gigante
 
EXPath: the packaging system and the webapp framework
EXPath: the packaging system and the webapp frameworkEXPath: the packaging system and the webapp framework
EXPath: the packaging system and the webapp framework
 
La narrazione in atto incroci e idee tra gioco e storie leggendo e inventanto...
La narrazione in atto incroci e idee tra gioco e storie leggendo e inventanto...La narrazione in atto incroci e idee tra gioco e storie leggendo e inventanto...
La narrazione in atto incroci e idee tra gioco e storie leggendo e inventanto...
 
I gruppi di lettura come esperienza di salute e benessere di Roberto Spoldi
I gruppi di lettura come esperienza di salute e benessere   di Roberto SpoldiI gruppi di lettura come esperienza di salute e benessere   di Roberto Spoldi
I gruppi di lettura come esperienza di salute e benessere di Roberto Spoldi
 
Dinosaurs
DinosaursDinosaurs
Dinosaurs
 
What did dinosaurs eat powerpoint
What did dinosaurs eat powerpointWhat did dinosaurs eat powerpoint
What did dinosaurs eat powerpoint
 
Dinosaurs
DinosaursDinosaurs
Dinosaurs
 
Ppt Dino S
Ppt Dino SPpt Dino S
Ppt Dino S
 
All about dinosaurs powerpoint
All about dinosaurs powerpointAll about dinosaurs powerpoint
All about dinosaurs powerpoint
 
Dinosaur Slideshow
Dinosaur SlideshowDinosaur Slideshow
Dinosaur Slideshow
 
Dinosaurs
DinosaursDinosaurs
Dinosaurs
 
Dinopresentatie van Armin
Dinopresentatie van ArminDinopresentatie van Armin
Dinopresentatie van Armin
 
English présentation dinosaurs
English présentation dinosaursEnglish présentation dinosaurs
English présentation dinosaurs
 
What About Dinosaurs?
What About Dinosaurs?What About Dinosaurs?
What About Dinosaurs?
 

Semelhante a EXPath Packaging: A framework to package libraries and applications for core XML technologies

EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web frameworkEXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web frameworkFlorent Georges
 
UCL All of the Things (MeetBSD California 2014 Lightning Talk)
UCL All of the Things (MeetBSD California 2014 Lightning Talk)UCL All of the Things (MeetBSD California 2014 Lightning Talk)
UCL All of the Things (MeetBSD California 2014 Lightning Talk)iXsystems
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?Wong Hoi Sing Edison
 
The elastic stack on docker
The elastic stack on dockerThe elastic stack on docker
The elastic stack on dockerSmartWave
 
Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015Jérôme Petazzoni
 
Introduction to containers a practical session using core os and docker
Introduction to containers  a practical session using core os and dockerIntroduction to containers  a practical session using core os and docker
Introduction to containers a practical session using core os and dockerAlessandro Martellone
 
Java in containers
Java in containersJava in containers
Java in containersMartin Baez
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xrkr10
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.orgTed Husted
 
Pune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPrashant Rane
 
Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1PgTraining
 
The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09Bastian Feder
 
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Antonio Peric-Mazar
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesJérôme Petazzoni
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkJérôme Petazzoni
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containersNitish Jadia
 

Semelhante a EXPath Packaging: A framework to package libraries and applications for core XML technologies (20)

EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web frameworkEXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
EXPath Webapp - CXAN: a case-study for Servlex, an XML web framework
 
UCL All of the Things (MeetBSD California 2014 Lightning Talk)
UCL All of the Things (MeetBSD California 2014 Lightning Talk)UCL All of the Things (MeetBSD California 2014 Lightning Talk)
UCL All of the Things (MeetBSD California 2014 Lightning Talk)
 
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
[HKDUG] #20161210 - BarCamp Hong Kong 2016 - What's News in PHP?
 
Automation tools: making things go... (March 2019)
Automation tools: making things go... (March 2019)Automation tools: making things go... (March 2019)
Automation tools: making things go... (March 2019)
 
The elastic stack on docker
The elastic stack on dockerThe elastic stack on docker
The elastic stack on docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015Containers: from development to production at DevNation 2015
Containers: from development to production at DevNation 2015
 
Bootstrap4 x pages
Bootstrap4 x pagesBootstrap4 x pages
Bootstrap4 x pages
 
Modern web technologies
Modern web technologiesModern web technologies
Modern web technologies
 
Introduction to containers a practical session using core os and docker
Introduction to containers  a practical session using core os and dockerIntroduction to containers  a practical session using core os and docker
Introduction to containers a practical session using core os and docker
 
Java in containers
Java in containersJava in containers
Java in containers
 
Docker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12xDocker and-containers-for-development-and-deployment-scale12x
Docker and-containers-for-development-and-deployment-scale12x
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.org
 
Pune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCDPune-Cocoa: Blocks and GCD
Pune-Cocoa: Blocks and GCD
 
Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1Oracle to Postgres Migration - part 1
Oracle to Postgres Migration - part 1
 
The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09The Beauty And The Beast Php N W09
The Beauty And The Beast Php N W09
 
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
Workshop: Symfony2 Intruduction: (Controller, Routing, Model)
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Introduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New YorkIntroduction to Docker at the Azure Meet-up in New York
Introduction to Docker at the Azure Meet-up in New York
 
Introduction to containers
Introduction to containersIntroduction to containers
Introduction to containers
 

Último

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 

Último (20)

Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 

EXPath Packaging: A framework to package libraries and applications for core XML technologies

  • 1. EXPath Packaging A framework to package libraries and applications for core XML technologies Balisage, August 4th, 2010 Montréal Florent Georges H2O Consulting
  • 2. EXPath Packaging ● Introduction ← ● The problem ● How to use it? ● Write a package ● A project structure ● Going further ● Conclusion
  • 3. Introduction - History ● EXSLT for XSLT 1.0 ● XSLT 2.0 and needs for new extensions ● EXSLT 2.0, EXQuery & EXProc ● XML Prague 2009 – EXPath ● First modules – HTTP Client & ZIP Facility ● Summer 2009 – the Packaging System ● 2010 – the Webapp module
  • 4. Introduction - Goals ● Collaboratively defining open standards for portable XPath extensions ● The main means is extension functions ● The main goal is defining portable specifications... ● ...and convincing vendors to endorse them ● But also providing support to open-source implementations
  • 5. Introduction - Processes ● More or less formal, more or less informal (that is a feature, not a bug) ● The definitive goal is writing specifications ● The main tool is the mailing list ● Each module has one main maintainer, responsible of editing & achieving consensus ● More infos about processes on the wiki
  • 6. EXPath Packaging ● Introduction ● The problem ← ● How to use it? ● Write a package ● A project structure ● Going further ● Conclusion
  • 7. The import problem ● The way to import a module is dependent on the processor ● XSLT import URI ● XQuery evil: location hint ● For now, there is no standard way to import a module in XSLT, XQuery nor XProc ● No other modern programming language as this limitation
  • 8. The import problem (: in Saxon :) import module namespace functx = "http://www.functx.com" at "../../../../../../xlibs/functx/src/functx.xq"; declare function local:hello($who as xs:string) as xs:string { concat('Hello, ', functx:capitalize-first($who), '!') }; ... (: in eXist :) import module namespace functx = "http://www.functx.com" at "xmldb:exist:///db/modules/functx.xq"; ...
  • 9. The import problem ● The ideal solution would be to get rid of the location hint, and see the import URI as a name (: portable :) import module namespace functx = "http://www.functx.com"; declare function local:hello($who as xs:string) as xs:string { concat('Hello, ', functx:capitalize-first($who), '!') }; ... ● Achievable somehow through XML Catalogs, but the install process is not uniform and thus even more painful for the user
  • 10. XML Catalogs ● XML Catalogs are in the correct direction, but need automatization ● Both for the final user and for the author ● The solution needs to be used consistently, XML Catalogs does not give enough info ● Even when a catalog is shipped with a library, it needs advanced config in order to work ● And there is no standard release structure ● URI resolving is only part of the solution
  • 11. EXPath Packaging ● Introduction ● The problem ● How to use it? ← ● Write a package ● A project structure ● Going further ● Conclusion
  • 12. How to use it? ● A library user has two things to do: – install the package, using an automatic installer – import it and use it, of course, by simply using the pubic URI ● Installers can be command line tools, or a web form, or whatever is provided by the processor ● By using the public URIs (and only the public URIs), the written code is portable across different processors
  • 13. Installers ● Command-line tool: ● eXist's web-based install:
  • 14. Import modules ● Going back to our example: (: portable :) import module namespace functx = "http://www.functx.com"; declare function local:hello($who as xs:string) as xs:string { concat('Hello, ', functx:capitalize-first($who), '!') }; ... ● It is now portable across processors, without imposing any configuration burden on the user
  • 15. EXPath Packaging ● Introduction ● The problem ● How to use it? ● Write a package ← ● A project structure ● Going further ● Conclusion
  • 16. Requirements ● Building upon and going behind XML Catalogs, a packaging format must: – describe what is needed but is not in the X* specifications – be understood by most processors – package the components and additional informations in a single file – be eXtensible (to allow other specs to build upon it, and allow processor specific infos) ● Installation process can then be automated
  • 18. Structure ● A package is a ZIP file ● It contains exactly one subdirectory (content) ● It contains a package descriptor: expath-pkg.xml ● It can contain per-processor descriptors ● It can contain descriptors for other specs
  • 19. The descriptor ● Record some meta infos about the package ● Record the content component's public URIs
  • 20. Putting it together ● The components and the descriptor are just zipped together to make the XAR package ● The XAR file must respect the structure described in the descriptor ● Any ZIP tool can be used to achieve this goal
  • 21. Standard repository layout ● How packages are installed is implementation- dependent ● The spec defines an optional repository layout ● If the implementation adopts this layout, it can share repositories with others ● Management tools in the command line have been built to manage such repositories (install, remove, list packages) ● A Java library exists for the URI resolution
  • 22. EXPath Packaging ● Introduction ● The problem ● How to use it? ● Write a package ● A project structure ← ● Going further ● Conclusion
  • 23. Too much for me! ● That's fine, but as a library author, that seems a lot of work to do again and again ● Besides, most of the steps are similar every time ● Creating new libraries usually involve copying and pasting Makefiles or other build files, and adapting them, over and over again ● By using some conventions, we can actually automate those repetitive tasks
  • 24. Project? ● Following a consistent structure, a project can be built automatically ● This structure use naming conventions for directories ● As well as a project descriptor for meta data (title, version, etc.) ● The public URIs are maintained within the components themselves ● An XSLT stylesheet packages the project
  • 25. Project! ● The basic project structure has a build/ directory with a project file, and a src/ directory with the project source files
  • 26. xproj ● A simple script wraps the stylesheet invocation ● You call it from the project directory to build the project package:
  • 27. Releasing ● Why did we put the test file outside the project? Let's include it. ● And let's put a nice README file ● Can we create automatically a proper release?
  • 29. (let's make it clear) ● Before going further, let's make it clear this project structure stuff is already behind the packaging system itself ● It is useful, or even crucial, for the user experience ● But it is behind the packaging spec ● The spec is the minimal common piece to conform to ● Tools and specs can then be built upon it
  • 30. EXPath Packaging ● Introduction ● The problem ● How to use it? ● Write a package ● A project structure ● Going further ← ● Conclusion
  • 31. Repository functions ● A set of functions to manage a package repository directly from within XPath expression ● Not part of the spec (but could be in a v.Next) ● This is the approach followed by eXist: – repo:list() as xs:string* – repo:install($href as xs:string) as xs:boolean – repo:remove($name as xs:string) as xs:boolean ● Could be used to build convenient managers, not dependent on the processor
  • 32. CXAN ● http://cxan.org/ ● Comprehensive XML Archive Network ● Follow the same principle as well-known CPAN for Perl and CTAN for (La)TeX ● Work in progress ● Collect existing packages ● Make them accessible and searchable from a single one location
  • 33. CXAN ● CXAN is composed of: – the package base set on the server – the website to browse and search within this package set – a command line tool to install packages by downloading them directly from the server
  • 34. CXAN ● Some challenges are still to solve: – versioning – dependencies between packages – website interface
  • 35. Webapps ● Using X* technologies end-to-end for web applications ● Most existing XML databases provide proprietary framework for that (eXist, MarkLogic, Sausalito, etc.) ● Then again, we are stuck with processor- locked applications ● A standard would allow to write portable web applications, libraries and frameworks
  • 36. Request / response <web:request servlet="name" path="/path" method="get"> <web:uri>http://example.org/my-app/path/one?p=v</web:uri> <web:authority>http://example.org</web:authority> <web:context-root>/my-app</web:context-root> <web:path> <web:part>path/</web:part> <web:match name="which">one</web:match> </web:path> <web:param name="p" value="v"/> <web:header name="connection" value="keep-alive"/> ... </web:request> <web:response status="200" message="Ok"> <web:header name="..." value="..."/> ... <web:body content-type="text/html" method="xhtml"/> </http:response>
  • 37. Entry point ● Either a: – XQuery function – main XQuery module – XSLT function – XSLT named template – XSLT stylesheet – XProc pipeline ● Must accept two parameters – the request element – the sequence of bodies (possibly empty)
  • 39. Web descriptor ● Map requests to entry points ● Based on URI matching
  • 40. Packaging ● A webapp is packaged as any standard project ● The web descriptor is inserted next to the package descriptor ● All the resolution mechanism is already there
  • 41. Building block ● Once again, the webapp spec follow the same principle than packaging: defining only the strict minimum low-level mapping between an HTTP request and an X* component (and its response back to HTTP) ●
  • 42. EXPath Packaging ● Introduction ● The problem ● How to use it? ● Write a package ● A project structure ● Going further ● Conclusion ←
  • 43. Join the mailing list and browse the website: http://expath.org/