BPM-XPDL

 view release on metacpan or  search on metacpan

lib/BPM/XPDL.pm  view on Meta::CPAN

     { prefixes => { '' => NS_XPDL_21 }
     }
 , '2.2' =>
     { prefixes => { '' => NS_XPDL_22 }
     }
 );

#--------


sub new($)
{   my $class = shift;
    $class->SUPER::new(direction => 'RW', @_);
}

sub init($)
{   my ($self, $args) = @_;
    $args->{allow_undeclared} = 1
        unless exists $args->{allow_undeclared};

    $self->SUPER::init($args);

    $self->anyElement('ATTEMPT');
    $self->addCompileOptions(RW => sloppy_floats => 1, sloppy_integers => 1);
    $self->addCompileOptions(READERS => mixed_elements => 'XML_NODE');

lib/BPM/XPDL.pm  view on Meta::CPAN

        $self->addPrefixes(xpdl20 => NS_XPDL_20);
        push @xsds, glob "$xsd/xpdl-2.0/*";
        $self->addKeyRewrite('PREFIXES(xpdl20)') if $prefix_keys;
    }

    $self->importDefinitions(\@xsds);
    $self;
}


sub from($@)
{   my ($thing, $source, %args) = @_;

    my $xml  = XML::Compile->dataToXML($source);
    my $top  = type_of_node $xml;
    my ($ns, $topname) = unpack_type $top;
    my $version = $ns2version{$ns}
       or error __x"unknown XPDL version with namespace {ns}", ns => $ns;

    $topname eq 'Package'
       or error __x"file does not contain a Package but {local}"

lib/BPM/XPDL.pm  view on Meta::CPAN

        $self->convert10to20($data)
            if $self->version gt '1.0';

        $self->convert20to21($data)
            if $self->version gt '2.0';
    }

    (pack_type($self->namespace, 'Package'), , $data);
}

sub convert10to20($)
{   my ($self, $data) = @_;

    trace "Convert xpdl version from 1.0 to 2.0";

    # The conversions to be made are described in the XPDL specification
    # documents.  However, be aware that there are considerable additions.

    my $ns = $self->namespace;
    my $prefix
      = $ns eq NS_XPDL_20 ? 'xpdl20'

lib/BPM/XPDL.pm  view on Meta::CPAN

            }
        }

        # Order in WorkflowProcess changed.  This is a no-op for X::C
    }

    $data->{PackageHeader}{XPDLVersion} = '2.0';
    $data;
}

sub convert20to21($)
{   my ($self, $data) = @_;

    trace "Convert xpdl version from 2.0 to 2.1";

    # Tool has been removed from the spec.  However, it can still be
    # used in the old namespace, and I do not know how to convert it
    # to 2.1 structures (yet)

    my $ns = $self->namespace;
    my $prefix

lib/BPM/XPDL.pm  view on Meta::CPAN

        }
    }

    $data->{PackageHeader}{XPDLVersion} = '2.1';
    $data;
}

#----------


sub version()   {shift->{version}}
sub namespace() {shift->{namespace}}

#--------

sub create($)
{   my ($self, $data) = @_;
    my $doc  = XML::LibXML::Document->new('1.0', 'UTF-8');
    my $wr   = $self->writer('Package')
        or panic "cannot find Package type";

    my $root = $wr->($doc, $data);
    $doc->setDocumentElement($root);
    $doc;
}



( run in 0.552 second using v1.01-cache-2.11-cpan-65fba6d93b7 )