<?php //error_reporting(E_ERROR); $localparams_tree = getenv('LocalData')."/LocalParams.xml"; $infofiles_path = getenv('PARAMS_LOCALINFO_DIR')."/"; $output_file = getenv('HAPIData')."/metadata/amda-catalog.json"; $doc = new DOMDocument(); @$doc->load($localparams_tree); $xpath = new DOMXpath($doc); $dataset_nodes = $xpath->query("/dataRoot/dataCenter/mission/instrument/dataset | /dataRoot/dataCenter/mission/observatory/instrument/dataset"); $datasets = array(); foreach ($dataset_nodes as $dataset_node) { $datasetId = $dataset_node->getAttribute("xml:id"); if (empty($datasetId)) { echo "[WARNING] Cannot retrieve dataset id".PHP_EOL; continue; } //Dataset start date $startDate = $dataset_node->getAttribute("dataStart"); if (empty($startDate)) { echo "[WARNING] Cannot retrieve start date for ".$datasetId.PHP_EOL; continue; } if ($startDate == 'MissionDependent') { echo "[WARNING] Dataset ".$datasetId." is mission dependant => Skip this dataset".PHP_EOL; continue; } if ($startDate[strlen($startDate)-1] != 'Z') { $startDate .= 'Z'; } //Dataset stop date $stopDate = $dataset_node->getAttribute("dataStop"); if (empty($stopDate)) { echo "[WARNING] Cannot retrieve stop date for ".$datasetId.PHP_EOL; continue; } if ($stopDate[strlen($stopDate)-1] != 'Z') { $stopDate .= 'Z'; } $dataset = array( "id" => $datasetId, "title" => $dataset_node->getAttribute("name"), "info" => (Object)array( "startDate" => $startDate, "stopDate" => $stopDate, ), ); //cadence $sampling = $dataset_node->getAttribute("sampling"); if (!empty($sampling)) { $dataset["info"]->{"cadence"} = "PT".$sampling; } //description $desc = $dataset_node->getAttribute("desc"); if (!empty($desc)) { $dataset["info"]->{"description"} = $desc; } //resourceID $spaseId = $dataset_node->getAttribute("spaseId"); if (!empty($spaseId)) { $dataset["info"]->{"resourceID"} = $spaseId; } //modificationDate $lastUpdate = $dataset_node->getAttribute("lastUpdate"); if (!empty($lastUpdate)) { //$dataset["info"]->{"modificationDate"} = $lastUpdate."Z"; } //parameters $dataset["info"]->{"parameters"} = array(); $dataset["info"]->{"parameters"}[] = (Object)array( "name" => "Time", "type" => "isotime", "length" => 24, "units" => "UTC", "fill" => NULL, ); $parameter_nodes = $dataset_node->getElementsByTagName("parameter"); foreach($parameter_nodes as $parameter_node) { $parameter = (Object)array(); $param_id = $parameter_node->getAttribute("xml:id"); //name $parameter->{"name"} = $param_id; //type $parameter->{"type"} = "double"; //size $size = $parameter_node->getAttribute("size"); if (empty($size)) { if ($parameter_node->getAttribute("display_type") == "spectrogram") { //Load info_file if exists and retrieve dimensions $infofile_path = $infofiles_path . "/info_".$parameter_node->getAttribute("xml:id").".xml"; if (!file_exists($infofile_path)) { echo "[WARNING] Parameter ".$param_id." defines as a spectrogram but cannot retrieve info file => Skip this parameter".PHP_EOL; continue; } $info_doc = new DOMDocument(); @$info_doc->load($infofile_path); $dimensions_node = $info_doc->getElementsByTagName("dimensions"); if ($dimensions_node->length == 0) { echo "[WARNING] Cannot retrieve size for ".$param_id.PHP_EOL; continue; } $dimensions_node = $dimensions_node->item(0); $dim1 = $dimensions_node->getAttribute("dim_1"); $dim1 = empty($dim1) ? 1 : intval($dim1); $dim2 = empty($dim2) ? 1 : intval($dim2); if (($dim1 == 1) && ($dim2 == 1)) { echo "[WARNING] Parameter ".$param_id." seems to be a scalar but defined as a spectrogram".PHP_EOL; $size = NULL; } else if ($dim2 == 1) { $size = array(intval($dim1)); } else { $size = array(intval($dim1), intval($dim2)); } } else { $size = NULL; } } else { $size = array(intval($size)); } if (!empty($size)) { $parameter->{"size"} = $size; } //units $units = $parameter_node->getAttribute("units"); if (empty($units)) $units = NULL; $parameter->{"units"} = $units; //fill $parameter->{"fill"} = "NaN"; //description $description = $parameter_node->getAttribute("description"); if (!empty($description)) { $parameter->{"description"} = $description; } $dataset["info"]->{"parameters"}[] = $parameter; } $datasets[] = $dataset; } file_put_contents($output_file, json_encode($datasets)); ?>