static function get($xmlText)
 {
     $tag = new eZMetaTag();
     $tag->decodeXML($xmlText);
     return $tag;
 }
 static function extractPattern($name, &$oObjectDataMap, $sizeLimit = false)
 {
     preg_match_all("/\\{[^\\{]+\\}/", $name, $dynamics);
     foreach ($dynamics[0] as $dynamic) {
         $patternAttribute = substr($dynamic, 1, strlen($dynamic) - 2);
         if ($delimiterPosition = strpos($patternAttribute, ".")) {
             list($relatedObject, $relatedAttribute) = explode('.', $patternAttribute);
             $relations = $oObjectDataMap[$relatedObject]->value();
             $relatedNames = array();
             foreach ($relations['relation_list'] as $relation) {
                 $relatedObject = eZContentObject::fetch($relation['contentobject_id']);
                 switch ($relatedAttribute) {
                     case 'name':
                         $relatedNames[] =& $relatedObject->name();
                         break;
                     default:
                         $relatedDataMap =& $relatedObject->dataMap();
                         if (is_object($relatedDataMap[$relatedAttribute]) && $relatedDataMap[$relatedAttribute]->hasContent()) {
                             $relatedNames[] = eZMetaTag::getTextValueOfAttribute($relatedDataMap[$relatedAttribute]);
                         }
                         break;
                 }
             }
             $dynamicValue = implode(', ', $relatedNames);
         } elseif (is_object($oObjectDataMap[$patternAttribute]) && $oObjectDataMap[$patternAttribute]->hasContent()) {
             $dynamicValue = eZMetaTag::getTextValueOfAttribute($oObjectDataMap[$patternAttribute]);
         } else {
             $siteIni = eZINI::instance();
             $siteMetaData = $siteIni->variable('SiteSettings', 'MetaDataArray');
             // Special Cases with reserved keywords
             switch ($dynamic) {
                 case 'SiteMetaName':
                     $dynamicValue = $siteMetaData['title'];
                     break;
                 case 'SiteMetaDescription':
                     $dynamicValue = $siteMetaData['description'];
                     break;
                 case 'SiteMetaKeywords':
                     $dynamicValue = $siteMetaData['keywords'];
                     break;
                 default:
                     // Attribute display is disabled to avoid subversious display when attribute doesn't exist
                     $dynamicValue = '';
                     break;
             }
         }
         if ($sizeLimit && count($dynamicValue) > $sizeLimit) {
             $dynamicValue = substr($dynamicValue, 0, $sizeLimit);
             $pos = strrpos($dynamicValue, " ");
             if ($pos > 0) {
                 $dynamicValue = substr($dynamicValue, 0, $pos);
             }
             unset($pos);
         }
         $name = str_replace($dynamic, $dynamicValue, $name);
     }
     return $name;
 }
 function title($data_instance, $name = null)
 {
     $tag = eZMetaTag::get($data_instance->attribute('data_text'));
     return $tag->getName();
 }