AtomicXML
AtomicXML is a LISP-influenced XML-based S-expression language syntax designed to allow a simple and straight forward way of describing a series (macro-process) of processes (micro-process) involved with a particular request, the data that should be used in the process, and where the result of any given micro-process should be passed for further processing and/or rendering to the output stream. In many ways this process can be compared to that of a message-based workflow in which the result of one micro-process can be routed to another micro-process based on the result of each preceding micro-process. To think of this another way, AtomicXML provides a mechanism for describing atomic transactions of which the primary purpose is either to complete successfully, or fail completely, leaving no "residue", so to speak, that a process was ever invoked past that of the information passed to and stored by the logging server.
For example, the following AtomicXML operation sequence description file specifies an AtomPub?-based operation for creating a new entry, the data that should be used when creating that entry, where to access that data (e.g. {header:ContentType} specifies to use the value of ContentType contained in the header where the header namespace extension is internally mapped to the current HTTP header of the incoming request)., and where and how that data should be used during the creation of the entry.
trunk/nuxleus/Web/Development/CoreWebApp/service/atompub/add/service.op
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/service/transform/atompub.add.xslt"?>
<service:operation xmlns:operation="http://xameleon.org/service/operation"
xmlns:atompub="http://xameleon.org/service/atompub"
xmlns:add="http://xameleon.org/service/atompub/add"
xmlns:service="http://xameleon.org/service"
xmlns:param="http://xameleon.org/service/session/param">
<param:content-type>{header:ContentType}</param:content-type>
<param:slug>{header:Slug}</param:slug>
<param:title>{header:Slug}</param:title>
<param:request-body>{request:input-stream}</param:request-body>
<param:content-length>{request:content-length}</param:content-length>
<param:desc>{form:description}</param:desc>
<operation:atompub>
<atompub:add content-type="{$content-type}" content-length="{$content-length}">
<add:entry title="{$slug}" slug="{$slug}">
<add:request-body>{$desc}</add:request-body>
</add:entry>
</atompub:add>
</operation:atompub>
</service:operation>
