Search:

# CWIS Developers Documentation

- Main Page
- Classes
- Files

- File List
- File Members

# 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 ?>