Home
JUMP 101
Specification
License
Developers

Jumper


-

Home > Developers >

The JUMPER SourceForge Project

JUMPER is also involved in efforts to develop an open-source universal crosswalk.

While not specifically part of the current JUMPER project we have outlined the basic high-level sketch of a crosswalk. The idea behind JUMPER is to automate metadata transformations between services.

The project goal is to dynamically transform metadata from one service to another service; object to object, element to element. What we do is provide an upper-level framework that sits between the two schemas and dynamically changes the object or element metadata from service A's format to service B's format. JUMPER does this without XSLT coding by using the JUMP metamodel to semantically describe metadata using tags presented in a lightweight model that is shared between services in a BPEL workflow.

By abstracting the metadata using semantic objects contained in a Semantic Dictionary we are able to create a loosely-coupled metadata architecture that allows us to easily add new services from new partners without extensive manual XSLT coding and debugging. The sdictionary and even the smodels are reusable templates that provide tremendous efficiencies and scalability. They can be easily and quickly leveraged to create new workflows with new partners, or add new partners to existing workflows without the traditional headaches of hand-coded XSLTs.

How To Become A Developer

A sketch of the JUMPER crosswalk is provided below in PERL.

Potential developers interested in a Universal Crosswalk for OWL will want to check out the SourceForge project page for JUMPER. We are looking for developers to help us port this to Java. New participants are welcome and it is easy to register with the JUMPER SourceForge project as a developer if you would like to assist us in the Java development. The SourceForge project page for JUMPER can be found here: JUMP SourceForge Page

Synopsis

The module provides an implentation of a universal crosswalk based on the JUMP spec for converting metadata between two different and autonomous smodels. Three variables are defined. The smodel for your existing system, defined by a varaible called $smodel_input, then the smodel for the system you are integrating your service with, defined by a second variable called $smodel_output. The smodel_output file will then be rewritten with the aligned smodel_input metadata and saved as a new file, this new file is defined by a third variable called $crosswalk.

smodel_input::Crosswalk::smodel_output - Convert metadata between two
 different smodels.

    my $crosswalk = smodel_input::Crosswalk::smodel_output->new;
	
    # Convert a smodel_input record to smodel_output
    my $smodel_input = smodel_input::Record<-read_from_smodel_input( $blob );
    my $smodel_output = $crosswalk->as_smodel_output( $smodel_input );
	
    # Convert smodel_input to qualified smodel_output
    $crosswalk->qualified( 1 );
    $smodel_output = $crosswalk->as_smodel_output( $smodel_input );

Installation

To install this module type the following:

   perl Makefile.PL
   make
   make test
   make install

Methods

new( %options )
    Creates a new crosswalk object. You can pass the "qualified" option
    (true/false) as well. A "qualified" smodel_output has identical
 semantic objects (character for character) between the corresponding
 <<semantic>> tags.

            # smodel_output Qualified
            $crosswalk = smodel_input::Crosswalk::smodel_output->new(
 qualified => 1 );

  qualified( $qualified )
    Determines if the smodel_output record is qualified. Returns a
 true/false output. 
    Crosswalk will proceed if qualified (true) and will default an
 error message if the smodel_output record is unqualified (false).

            # smodel_output Unqualified
            $crosswalk->unqualified( 0 );

            # smodel_output Qualified
            $crosswalk->qualified( 1 );

  as_smodel_output( $smodel_input )
    convert a smodel_input::Record to a smodel_output::Record.

  as_smodel_input( $smodel_output )
    convert a smodel_output::Record to a smodel_input::Record. NB:
 Round trip not yet implemented.

Pattern Matching

The Jumper Crosswalk relies on equivalencies of metadata between different schemas where the syntax is different but the meaning and usage of the metadata and data is the same. To build these equivalencies we first create a semantic model for each service in the workflow. The Jumper Crosswalk then aligns the semantic objects in each smodel. Jumper does this in Perl using the pattern matching function.

The Jumper crosswalk will load two files for mapping. The smodel for your existing system, defined by a varaible called $smodel_input, and then the smodel for the system you are integrating your service with, defined by a second variable called $smodel_output. The smodel_output file will then be rewritten with the alinged smodel_input metadata and saved as a new file, this new file is defined by a third variable called $crosswalk.

To find out the exact position inside the pattern we use the pos function, which works similarly to the index function, to start a pattern-match at a specific position in the array. The pos function takes a scalar value (often a variable) as an argument, and returns the offset of the character after the last character of the match.

    open (INV, $smodel_input) || die("Could not open file!"); #open $openme 
for reading
    open (INV, $smodel_output) || die("Could not open file!"); #open $openme 
for reading
    create (OUTFILE, $crosswalk) || die("Could not create file!"); #create 
$_.jmp for writing

								
    my @array := <$smodel_input>;     # first @array now bound to iterator
    my @array := <$smodel_output>;    # second @array now bound to iterator
    my $array is ArrayString(@array); # an ordinary tie

while () {
    $find = "<<semantic1>>";
    if (($in =~ /^<<semantic1>>/i) && ($in =~ /"foo"/)) && 
($in =~ /<</semantic1>>$/i) { ... 
# correct input
       print "qualified.  semantic1..\n";
	 else { print "unqualified. semantic1..\n"; }
          next;
    $find = "<<semantic2>>";
    if (($in =~ /^<<semantic2>>/i) && ($in =~ /"foo"/)) && 
($in =~ /<</semantic2>>$/i) { ... 
# correct input
       print "qualified.  semantic2..\n";
	 else { print "unqualified. semantic2..\n"; }
          next;

We will continue this matching pattern until the end of the smodel. The above code is provided to clearly outline the methodology. The final source code will define this task as a loop.

foreach $semantic (@smodel_input)
{
 command .... ;
}

Copyright and License


Copyright 2007 by Steve Perry

This library is free software; you can redistribute it and/or modify it
 under the same terms as Perl itself.

Please stay tuned as the remainder of the source code will be posted soon.


Jump is a trademark of Jumper Networks.
The Jumper Project is maintained and driven by the community and sponsored by Jumper Networks.
All Rights Reserved © 2008 Jumper Networks, Inc. visit us on the web at: www.jumpernetworks.com