/** * @class dash::mpd::IMPDElement * @brief This interface is needed for accessing additional nested XML Elements and XML Attributes of some MPD Classes. * @details Due to the fact that some MPD classes may contain additional XML Elements, which are not specified in ISO/IEC 23009-1, Part 1, 2012 * but are attached to them, this interface is needed for retrieving these XML Elements. \n\n * See example below for clarification (inspired by the example from section G.7 of ISO/IEC 23009-1, Part 1, 2012).\n * \code{.xml} * * http://MoviesSP.example.com/protect?license=kljklsdfiowek * http://MoviesSP.example.com/protect?content=oyfYvpo8yFyvyo8f * * \endcode * \em ContentProtection is of type DescriptorType which is defined in section 5.8.3 of ISO/IEC 23009-1, Part 1, 2012 as follows: * \code{.xml} * * * * * * * * * * \endcode * So ContentProtection can contain additional XML Elements - here License and Content - * which are of type dash::xml::INode and can be retrieved by calling GetAdditionalSubNodes(). \n * Similarly additional XML Attributes that are not specified in ISO/IEC 23009-1, Part 1, 2012 * can be retrieved by calling GetRawAttributes(), but please mind that all attributes * of the Element are returned, not just the additional ones. So in the example above both * attributes \c schemeIDUri (which is specified) and \c additionalAttribute (which is not) are returned. * @see dash::xml::INode * * @author bitmovin Softwareentwicklung OG \n * Email: libdash-dev@vicky.bitmovin.net * @version 2.1 * @date 2013 * @copyright bitmovin Softwareentwicklung OG, All Rights Reserved \n\n * This source code and its use and distribution, is subject to the terms * and conditions of the applicable license agreement. */ #ifndef IMPDELEMENT_H_ #define IMPDELEMENT_H_ #include "config.h" #include "INode.h" namespace dash { namespace mpd { class IMPDElement { public: virtual ~IMPDElement (){} /** * This method returns a vector of pointers to dash::xml::INode objects which correspond to additional XML Elements of certain * MPD elements. These XML Elements are not specified in ISO/IEC 23009-1, Part 1, 2012. \n * See the example in the class description for details. * @return a vector of pointers to dash::xml::INode objects */ virtual const std::vector GetAdditionalSubNodes () const = 0; /** * This method returns a map with key values and mapped values of type std::string of all XML Attributes of certain MPD elements. \n * Some of these XML Attributes are not specified in ISO/IEC 23009-1, Part 1, 2012. \n * See the example in the class description for details. * @return a map with key values and mapped values, both of type std::string */ virtual const std::map GetRawAttributes () const = 0; }; } } #endif /* IMPDELEMENT_H_ */