View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Aaron Brown > perfSONAR_PS-Services-PingER-0.09 > perfSONAR_PS::DataModels::DataModel



Annotate this POD

View/Report Bugs
Module Version: 2.0.0   Source  


  DataModel - perfSONAR schemas expressed in perl, used to build binding perl objects collection


   perlish expression of the perfSONAR_PS RelaxNG Compact schemas
   every element expressed as:
   $subelement_defintion = {};...
   $parameter   =  {'attrs'  => {name => 'enum:param,default',  value => 'scalar', xmlns =>  'nmwg' },
                  elements => [[subelement1 => $subelement_defintion, 'unless:value'],
                              text => 'scalar',
   Where 'attrs' referrs to the hash of attributes with xmlns for the   namespace id ( from perfSONAR_PS::Datatypes::Namespace )
   elements referrs to the array of elements, defined already and text stays for the text content of the element
   there is some conditional logic allowed. In elements the third memebr is an optionla condition with syntax: '<if|unless>:<name1,name2,...>'
   where <name1,name2...> might be list of any predefined  attribute keys or element names. 
      In attributes hash and in text content definition this condition should be used
   in place  of 'scalar'. Another validation condition is supported: 'enum:<comma separated list of enunms>'. Its useful for enumerated
   type of attributes ( not supported for elements). For multiple choice element definition use array ref:
   [subelement1 => [$subelement_defintion1,$subelement_defintion2]]


      use  DataModel qw($subject $endPointPair $parameter $parameters $commonTime $endPointPairL4);

      ##  export all structures and adjust any:
      ## for exzample for pinger 
      push @{$subject->{elements}},  [endPointPair =>  [$endPointPair,  $endPointPairL4]];
      $subject->{attrs}->{xmlns}  = 'pinger';
      my $pingerDatum1    =  {'attrs'  => {value => 'scalar', valueUnits => 'scalar', seqNum => 'scalar', 
                                     numBytes => 'scalar', ttl => 'scalar', timeType => 'scalar', timeValue => 'scalar',
                                    xmlns => 'pinger'},
                   elements => [],                
     my $pingerDatum2    =  {'attrs'  => {value => 'scalar',  valueUnits => 'scalar',   
                                       name => 'enum:minRtt,maxRtt,meanRtt,medianRtt,lossPercent,clp,minIpd,maxIpd,iqrIpd,meanIpd',
                                       timeType => 'scalar', timeValue => 'scalar', xmlns => 'pinger'},
                   elements => [],                
  %{$parameter} = ('attrs'  => {name => 'enum:count,interval,packetSize,ttl,valueUnits',  value => 'scalar', xmlns => 'nmwg'},
                  elements => [],
                              text => 'unless:value',
   push @{$commonTime->{elements}}, [datum => [$pingerDatum1, $pingerDatum2 ]]; 
   push @{$data->{elements}}, [datum => [$pingerDatum1, $pingerDatum2, $resultDatum]];
   $parameters->{attrs}->{xmlns}= 'pinger';
      ### thats it, next step is to build API

Exportedvariables ^

$message $metadata $data $key $endPointPairL4 $datum $commonTime\ $endPointPairL3 $interfaceL3 $addressL4 $addressL3 $endPointPair $resultDatum $endPointL4 $subject $time $parameters $parameter

syntax highlighting: