function parse($data)
 {
     parent::parse($data);
     if ($this->data === "" || $this->data === null) {
         // === $message->nullValue) { // nullValue ("") or null ??
         if ($this->required) {
             $this->error(CHL7v2Exception::FIELD_EMPTY, $this->getPathString(), $this);
         }
     } else {
         if ($this->forbidden) {
             $this->error(CHL7v2Exception::FIELD_FORBIDDEN, $this->data, $this);
         }
     }
     $message = $this->getMessage();
     $items = CHL7v2::split($message->repetitionSeparator, $this->data, $this->keep());
     /* // Ce test ne semble pas etre valide, car meme si maxOccurs n'est pas unbounded, 
        // on en trouve souvent plusieurs occurences 
        if (!$this->unbounded && count($items) > 1) {
          mbTrace($this);
          $this->error(CHL7v2Exception::TOO_MANY_FIELD_ITEMS, $this->name, $this);
        }*/
     $this->items = array();
     foreach ($items as $i => $components) {
         $_field_item = new CHL7v2FieldItem($this, $this->meta_spec, $i);
         $_field_item->parse($components);
         $this->items[] = $_field_item;
     }
     $this->validate();
 }
 function __construct(CHL7v2SegmentGroup $parent, CHL7v2DOMElement $self_specs)
 {
     parent::__construct($parent);
     $this->parent = $parent;
     $this->specs = $self_specs;
     $name = $self_specs->getAttribute("name");
     $segments = $self_specs->query(".//segment");
     $values = array();
     foreach ($segments as $_segment) {
         $values[] = $_segment->nodeValue;
     }
     $this->name = $name ? $name : implode(" ", $values);
     $parent->appendChild($this);
 }
 /**
  * @see parent::parse
  */
 function parse($data)
 {
     parent::parse($data);
     $message = $this->getMessage();
     $fields = CHL7v2::split($message->fieldSeparator, $data);
     $this->name = array_shift($fields);
     $specs = $this->getSpecs();
     $this->description = $specs->queryTextNode("description");
     if ($this->name === $message->getHeaderSegmentName()) {
         array_unshift($fields, $message->fieldSeparator);
     }
     // Don't count empty fields on the right
     $count_fields = count($fields);
     for ($i = $count_fields - 1; $i >= 0; $i--) {
         if ($fields[$i] === "") {
             $count_fields--;
         } else {
             break;
         }
     }
     $_segment_specs = $specs->getItems();
     // Check the number of fields
     if ($count_fields > count($_segment_specs)) {
         $this->error(CHL7v2Exception::TOO_MANY_FIELDS, $data, $this, CHL7v2Error::E_WARNING);
     }
     foreach ($_segment_specs as $i => $_spec) {
         if (array_key_exists($i, $fields)) {
             $field = new CHL7v2Field($this, $_spec);
             $field->parse($fields[$i]);
             $this->fields[] = $field;
         } elseif ($_spec->isRequired()) {
             $field = new CHL7v2Field($this, $_spec);
             $this->error(CHL7v2Exception::FIELD_EMPTY, $field->getPathString(), $field);
         }
     }
 }
 /**
  * Parse a field item into components
  *
  * @param string $data The data to parse
  *
  * @return void
  */
 function parse($data)
 {
     parent::parse($data);
     $keep_original = $this->getField()->keep();
     // Is composite
     if (isset($this->separator[0]) && $this->getProps() instanceof CHL7v2DataTypeComposite) {
         $parts = CHL7v2::split($this->separator[0], $data, $keep_original);
         $component_specs = $this->getSpecs()->getItems();
         foreach ($component_specs as $i => $_component_spec) {
             if (array_key_exists($i, $parts)) {
                 $_comp = new CHL7v2Component($this, $_component_spec, $i, $this->separators);
                 $_comp->parse($parts[$i]);
                 $this->children[] = $_comp;
             } elseif ($_component_spec->isRequired()) {
                 $this->error(CHL7v2Exception::FIELD_EMPTY, $this->getPathString(), $this);
             }
         }
     } else {
         $this->data = $data;
         if (!$keep_original) {
             $this->data = $this->getMessage()->unescape($this->data);
         }
     }
 }
 function handleLine(CHL7v2DOMElement $current_node, CHL7v2Entity $current_group)
 {
     // Increment du nb d'occurences
     $current_node->markUsed();
     // On enregistre le segment dans le groupe courant
     $_segment = new CHL7v2Segment($current_group);
     $_segment->parse($this->getCurrentLine());
     $current_group->appendChild($_segment);
     // On avance dans le fichier
     $this->current_line++;
     CHL7v2::d(" --> ### Creation du segment ###, ligne suivante : {$this->current_line}");
 }