Formatting code for XDMSerializeUseCase3


show source only

======XDM Serialization Use Case 3======

=====Exchange of XDM data between XDM Tools from the same vendor in the same environment=====

In some cases, even when using the same vendor's API's exchange of XDM data in the vendor's native API is not practical. For example, in a complex program there may be fixed interfaces for exchanging data between modules such as Streams or Byte Arrays. Thus cooperating modules in the same environment may not be able to exchange data even if they both produce and consume the same native data types.

An example.

An XDM Producer (for example XPath 2.0) outputs XDM data that it would like to exchange with an XDM Consumer (for example XQuery) which is running in the same environment and implemented by the same vendor using the same native XDM data types. However the interfaces between these modules restrict the data types to byte arrays which prevents XDM data from being interchanged.

If all XDM Tool modules can agree on a standard text serialization format then data may still be interchanged.


===Actors===
==XDM Producer==
An implementation of an XPath 2.0 processor
Example, an xpath that returns a sequence of nodes
%%
/foo/bar
%%

==XDM Consumer==
An implementation of an XQuery processor which expects a sequence of nodes as an external variable from in the same data type as the XDM Producer.
Example
%%
declare variable $list as element(bar)* external ;
%%

Interface
A internal interface to these modules that only allows byte arrays as inputs and outputs.

===Expected Use===
To pass the results from the XDM Producer to the XDM Consumer across the interface which only allows text (byte arrays) serialization is produced by the XDM Producer and the resulting byte stream is reconstituted and passed to the XDM Consumer.

Simplified example of a Java API passing results through serialization using a hypethetical implementations of XPath and XQuery.
%%
// XPath

byte[] executeXPath()
{
XdmValue value = Xpath.execute("/foo/bar");
byte[] serialized = result.serialize();
return serialized ;
}


// XQuery
void executeXQuery( byte[] parameter )
{
XdmValue value = XdmValue.deserialize( serialized );
XQuery xquery = new XQuery( "declare variable $list as element(bar)* external ; ... ") ;
xquery.setParameter( "list" , value );
xquery.execute();
}

// Coordinator
byte[] value = executeXPath();
executeXQuery( value );


%%


----
[[XDMSerialize]]


Valid XHTML 1.0 Transitional :: Valid CSS :: Powered by WikkaWiki