/**
* @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_ */