function getSchema($type, $name) { $extension = $this->extension; /*if (empty(self::$schemas)) { self::$schemas = SHM::get("hl7-v2-schemas"); }*/ $version = $this->getVersion(); if (isset(self::$schemas[$version][$type][$name][$extension])) { return clone self::$schemas[$version][$type][$name][$extension]; } if (!in_array($version, self::$versions)) { $this->error(CHL7v2Exception::VERSION_UNKNOWN, $version); } if ($extension && $extension !== "none" && preg_match("/([A-Z]{2})_(.*)/", $extension, $matches)) { $lang = strtolower($matches[1]); $v = "v" . str_replace(".", "_", $matches[2]); $version_dir = "extensions/{$lang}/{$v}"; } else { $version_dir = "hl7v" . preg_replace("/[^0-9]/", "_", $version); } $name_dir = preg_replace("/[^A-Z0-9_]/", "", $name); $this->spec_filename = self::LIB_HL7 . "/{$version_dir}/{$type}{$name_dir}.xml"; if (!file_exists($this->spec_filename)) { // on a déjà l'erreur sur le type de segment inconnu //$this->error(CHL7v2Exception::SPECS_FILE_MISSING, $this->spec_filename); return; } $schema = new CHL7v2DOMDocument(); $schema->registerNodeClass('DOMElement', 'CHL7v2DOMElement'); $schema->load($this->spec_filename); //$schema = @simplexml_load_file($this->spec_filename, "CHL7v2SimpleXMLElement"); self::$schemas[$version][$type][$name][$extension] = $schema; //SHM::put("hl7-v2-schemas", self::$schemas); return $this->specs = $schema; }
/** * return the schema * * @param String $type type * @param String $name name * * @return CHL7v2DOMDocument */ function getSchema($type, $name) { $version = $this->getVersion(); if (isset(self::$schemas[$version][$type][$name][$this->type])) { return clone self::$schemas[$version][$type][$name][$this->type]; } if (!in_array($version, self::$versions)) { $this->error(CHL7v2Exception::VERSION_UNKNOWN, $version); } // TODO $type_liaison $version = strtoupper($version); $version_dir = preg_replace("/[^H0-9]/", "_", $version); $name_dir = preg_replace("/[^A-Z0-9_]/", "", $name); $this->spec_filename = "modules/hprimsante/resources/{$version_dir}/{$type}{$name_dir}.xml"; if (!file_exists($this->spec_filename)) { $this->error(CHL7v2Exception::SPECS_FILE_MISSING, $this->spec_filename); return null; } $schema = new CHL7v2DOMDocument(); $schema->registerNodeClass('DOMElement', 'CHL7v2DOMElement'); $schema->load($this->spec_filename); self::$schemas[$version][$type][$name][$this->type] = $schema; return $this->specs = $schema; }
<?php /* $Id $ */ /** * @package Mediboard * @subpackage hl7 * @version $Revision:$ * @author SARL OpenXtrem * @license GNU General Public License, see http://www.gnu.org/licenses/gpl.html */ CCanDo::checkRead(); $test_suite = array("Date" => array("MB" => array("20110829" => "2011-08-29", "201108" => "2011-08-00", "2011" => "2011-00-00", "2011082" => null), "HL7" => array("2011-08-29" => "20110829", "2011-08-00" => "201108", "2011-00-00" => "2011")), "DateTime" => array("MB" => array("20110829140306.0052" => "2011-08-29 14:03:06", "20110829140306" => "2011-08-29 14:03:06", "201108291403" => "2011-08-29 14:03:00", "2011082914" => "2011-08-29 14:00:00", "20110829" => "2011-08-29", "201108" => "2011-08-00", "2011" => "2011-00-00", "20110829140360.0052" => null), "HL7" => array("2011-08-29 14:03:06" => "20110829140306", "2011-08-29T14:03:06" => "20110829140306", "2011-08-29 14:03:00" => "20110829140300")), "Time" => array("MB" => array("140306.0052" => "14:03:06", "140306" => "14:03:06", "1403" => "14:03:00", "14" => "14:00:00"), "HL7" => array("14:03:06" => "140306", "14:03:00" => "140300", "14:00:00" => "140000", "24:00:00" => null)), "Integer" => array("MB" => array("16512" => 16512, "16512.5" => null, "009" => 9, "foo" => null), "HL7" => array("16512" => 16512, "16512.5" => null, "009" => 9, "foo" => null)), "Double" => array("MB" => array("16512" => 16512.0, "16512.5" => 16512.5, "16512,5" => null, "009" => 9.0, "foo" => null), "HL7" => array("16512" => 16512.0, "16512.5" => 16512.5, "16512,5" => null, "009" => 9.0, "foo" => null))); $dummy_doc = new CHL7v2DOMDocument(); $dummy_doc->registerNodeClass("DOMElement", "CHL7v2DOMElement"); $dummy_doc->loadXML('<?xml version="1.0" ?><root/>'); $dummy_element = $dummy_doc->documentElement; $results = array(); $dummy_message = new CHL7v2Message(); $dummy_segment = new CHL7v2Segment($dummy_message); $dummy_field = new CHL7v2Field($dummy_segment, $dummy_element); foreach ($test_suite as $type => $systems) { echo "<h1>{$type}</h1>"; $dt = CHL7v2DataType::load($dummy_message, $type, "2.5", "none"); foreach ($systems as $system => $tests) { echo "<h2>vers {$system}</h2>"; foreach ($tests as $from => $to) { $method = $system == "MB" ? "toMB" : "toHL7"; $result = null; try { $result = $dt->{$method}($from, $dummy_field); } catch (Exception $e) {