function get_schema() { $schema = parent::get_schema(); $override = array('/rss/@xmlns:hu' => array(XML_DATA_STATIC, XML_TYPE_STRING, 'http://www2.hu-berlin.de/podcast/Schema'), '/rss/channel/language' => array(XML_DATA_CALLBK, XML_TYPE_STRING, 'get_language'), '/rss/channel/ttl' => array(XML_DATA_IGNORE), '/rss/channel/item/category' => array(XML_DATA_IGNORE), '/rss/channel/item/comments' => array(XML_DATA_IGNORE), '/rss/channel/item/category/@domain' => array(XML_DATA_IGNORE), '/rss/channel/item/source' => array(XML_DATA_IGNORE), '/rss/channel/item/source/@url' => array(XML_DATA_IGNORE)); if (is_a($this->channel, 'podcaster_metachannelimpl')) { $override['/rss/channel/item/hu:copyright'] = array(XML_DATA_CONTEXT, XML_TYPE_STRING, 'copyright'); $override['/rss/channel/item/hu:categories'] = array(XML_DATA_ONCE, XML_TYPE_OBJECT, NULL); $override['/rss/channel/item/hu:categories/hu:category'] = array(XML_DATA_LOOP, XML_TYPE_OBJECT, 'get_hucategories'); $override['/rss/channel/item/hu:categories/hu:category/@id'] = array(XML_DATA_CONTEXT, XML_TYPE_INTEGER, 'id'); $override['/rss/channel/item/hu:lastBuildDate'] = array(XML_DATA_CONTEXT, XML_TYPE_DATETIME, 'timemodified'); } else { $override['/rss/channel/hu:categories'] = array(XML_DATA_ONCE, XML_TYPE_OBJECT, NULL); $override['/rss/channel/hu:categories/hu:category'] = array(XML_DATA_LOOP, XML_TYPE_OBJECT, 'get_hucategories'); $override['/rss/channel/hu:categories/hu:category/@id'] = array(XML_DATA_CONTEXT, XML_TYPE_INTEGER, 'id'); } return array_merge($schema, $override); }
function get_schema() { // Format der Angaben: // 'XMLPath' => array (Quelltyp, Zielformat, Datenquelle) // Quelltyp: // - XML_DATA_CONTEXT: Inhalt wird als Eigenschaft des Context erwartet // Beispiel: // '/rss/channel/title' // => array(XML_DATA_CONTEXT, XML_TYPE_STRING, 'name') // // - XML_DATA_STATIC: Inhalt ist ein statischer Wert // Beispiel: // '/rss/@version' // => array(XML_DATA_STATIC, XML_TYPE_STRING, '2.0'), // // - XML_DATA_CALLBK: Inhalt wird durch Aufruf einer Callback-Methode // ermittelt, diese muss einen String zurueckliefern // Beispiel: // '/rss/channel/link' // => array(XML_DATA_CALLBK, XML_TYPE_STRING, 'get_link'), // // - XML_DATA_ONCE: Inhalt wird einmal ausgegeben. Ist eine Datenquelle // (= Callbackmethode) angegeben, wird diese aufgerufen // und fuer untergeordnete Elemente der von dieser // Methode zurueckgegebene Context gesetzt. Ansonsten // bleibt es beim aktuellen Context // Beispiele: // '/rss' // => array(XML_DATA_ONCE, XML_TYPE_OBJECT, NULL), // '/rss/channel' // => array(XML_DATA_ONCE, XML_TYPE_OBJECT, 'get_channel'), // // - XML_DATA_LOOP: wie XML_DATA_ONCE, es muss eine Callback-Methode // angegeben werden, die einen array von Context's // fuer untergeordnete Elemente zurueckgibt // Beispiele: // '/rss/channel/category' // => array(XML_DATA_LOOP, XML_TYPE_OBJECT, 'get_categories'), // // - XML_DATA_IGNORE: Knoten wird ignoriert // Beispiele: // '/rss/channel/image/width' // => array(XML_DATA_IGNORE), // $schema = parent::get_schema(); $override = array('/rss/@xmlns:itunes' => array(XML_DATA_STATIC, XML_TYPE_STRING, 'http://www.apple.com/itunes/store/podcaststechspecs.html'), '/rss/channel/itunes:author' => array(XML_DATA_CALLBK, XML_TYPE_STRING, 'get_itunesauthor')); return array_merge($schema, $override); }