Vocabulary.php
Go to the documentation of this file.00001 <?PHP
00002
00003 #
00004 # FILE: SPT--Vocabulary.php
00005 #
00006 # METHODS PROVIDED:
00007 # Vocabulary()
00008 # - constructor
00009 # SomeMethod($SomeParameter, $AnotherParameter)
00010 # - short description of method
00011 #
00012 # AUTHOR: Edward Almasy
00013 #
00014 # Part of the Collection Workflow Integration System
00015 # Copyright 2007 Edward Almasy and Internet Scout
00016 # http://scout.wisc.edu
00017 #
00018
00022 class Vocabulary {
00023
00024 # ---- PUBLIC INTERFACE --------------------------------------------------
00025
00031 function Vocabulary($FileName)
00032 {
00033 # save file name
00034 $this->FileName = $FileName;
00035
00036 # attempt to load vocabulary from file
00037 $this->Xml = simplexml_load_file($FileName);
00038
00039 # set error code if load failed
00040 $this->StatusString = ($this->Xml === FALSE) ? "XML Load Failed" : "OK";
00041 $this->Xml = isset($this->Xml->vocabulary) ? $this->Xml->vocabulary : $this->Xml;
00042 }
00043
00047 function Status() { return $this->StatusString; }
00048
00053 function Hash()
00054 {
00055 return self::HashForFile($this->FileName);
00056 }
00057
00063 static function HashForFile($FileName = NULL)
00064 {
00065 return strtoupper(md5($FileName));
00066 }
00067
00071 function Name() { return $this->XmlVal("name"); }
00072
00076 function Description() { return $this->XmlVal("description"); }
00077
00081 function Url() { return $this->XmlVal("url"); }
00082
00086 function Version() { return $this->XmlVal("version"); }
00087
00091 function HasQualifier()
00092 {
00093 return strlen($this->QualifierName())
00094 && (strlen($this->QualifierNamespace())
00095 || strlen($this->QualifierUrl()));
00096 }
00097
00101 function QualifierName()
00102 {
00103 return isset($this->Xml->qualifier->name)
00104 ? (string)$this->Xml->qualifier->name : "";
00105 }
00106
00110 function QualifierNamespace()
00111 {
00112 return isset($this->Xml->qualifier->namespace)
00113 ? (string)$this->Xml->qualifier->namespace : "";
00114 }
00115
00119 function QualifierUrl()
00120 {
00121 return isset($this->Xml->qualifier->url)
00122 ? (string)$this->Xml->qualifier->url : "";
00123 }
00124
00129 function OwnerName()
00130 {
00131 return isset($this->Xml->owner->name)
00132 ? (string)$this->Xml->owner->name : "";
00133 }
00134
00139 function OwnerUrl()
00140 {
00141 return isset($this->Xml->owner->url)
00142 ? (string)$this->Xml->owner->url : "";
00143 }
00144
00148 function TermArray()
00149 {
00150 $Terms = $this->ExtractTermSet($this->Xml);
00151
00152 # return array of terms to caller
00153 return $Terms;
00154 }
00155
00159 function TermList()
00160 {
00161 $TermTree = $this->TermArray();
00162 $Terms = $this->BuildTermList("", $TermTree);
00163 return $Terms;
00164 }
00165
00166 # ---- PRIVATE INTERFACE -------------------------------------------------
00167
00168 var $FileName;
00169 var $StatusString;
00170 var $Xml;
00171
00172 function XmlVal($ValueName)
00173 {
00174 return isset($this->Xml->{$ValueName})
00175 ? (string)$this->Xml->{$ValueName} : "";
00176 }
00177
00178 function ExtractTermSet($Tree)
00179 {
00180 $Terms = array();
00181 foreach ($Tree->term as $Term)
00182 {
00183 if (isset($Term->value))
00184 {
00185 $Terms[(string)$Term->value] = $this->ExtractTermSet($Term);
00186 }
00187 else
00188 {
00189 $Terms[(string)$Term] = array();
00190 }
00191 }
00192 return $Terms;
00193 }
00194
00195 # build double-dash separated term list from hierarchical array
00196 function BuildTermList($Prefix, $TermTree)
00197 {
00198 $Terms = array();
00199 foreach ($TermTree as $Term => $Children)
00200 {
00201 $Term = trim($Term);
00202 $NewTerm = strlen($Prefix) ? $Prefix." -- ".$Term : $Term;
00203 $Terms[] = $NewTerm;
00204 $Terms = array_merge($Terms, $this->BuildTermList($NewTerm, $Children));
00205 }
00206 return $Terms;
00207 }
00208 }
00209
00210
00211 ?>