ÀÖ»çÁÉ£²¡¥¥ê¥Õ¥¡¥ì¥ó¥¹

¥é¥¤¥Ö¥é¥êAPI

akaxiso2.0-beta1


ÀÖ»çÁÉ£²¤Ç»ÈÍѤ¹¤ë¼çÍפʴؿô¡¢¥¯¥é¥¹¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀ¤Ç¤¹¡£

´Ø¿ô½é´ü²½¡¦½ªÎ»

ÀÖ»çÁɤνé´ü²½¡¢½ªÎ»»þ¤Î¥ê¥½¡¼¥¹²òÊü½èÍý¤Ê¤É¤ò¹Ô¤¤¤Þ¤¹¡£

´Ø¿ô̾ ưºî
aka::initialize() ÀÖ»çÁÉ£²¤Î½é´ü²½
Xerces-C++¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢xercesc::XMLPlatformUtils::Initialize()¤¬ÆâÉô¤Ç¸Æ¤Ð¤ì¤ë¡£
aka::uninitialize() ÀÖ»çÁÉ£²¤Î½ªÎ»
Xerces-C++¤ò»È¤Ã¤Æ¤¤¤ë¾ì¹ç¡¢xercesc::XMLPlatformUtils::Terminate()¤¬ÆâÉô¤Ç¸Æ¤Ð¤ì¤ë¡£

̾Á°¶õ´Ö¡¢¥É¥­¥å¥á¥ó¥È¥¿¥¤¥×¤ÎÅÐÏ¿

ÀÖ»çÁÉ£²¤Ï¡¢Ì¾Á°¶õ´Ö¤ò½èÍý¤¹¤ë¤¿¤á¤Ë¡¢¤¢¤é¤«¤¸¤á¡¢Ì¾Á°¶õ´ÖURI¤È¥×¥ì¥Õ¥£¥Ã¥¯¥¹¤È¤ÎÂбþÉÕ¤±¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
ÂбþÉÕ¤±¤é¤ì¤¿Ì¾Á°¶õ´Ö¤Ï¡¢¥é¥¤¥Ö¥é¥êÆâ¤Î¥¹¥¿¥Æ¥£¥Ã¥¯¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Ç´ÉÍý¤µ¤ì¤Æ¤ª¤ê¡¢°ì°Õ¤È¤Ê¤ê¤Þ¤¹¡£
¤Þ¤¿¡¢¥É¥­¥å¥á¥ó¥È·¿¤ÎÅÐÏ¿¤Ï¡¢¤½¤Î¥¿¥°Ì¾¤Èleaf¥¯¥é¥¹¤òÂбþÉÕ¤±¤ë¤³¤È¤Ë¤è¤ê¡¢¹Ô¤ï¤ì¤Þ¤¹¡£

´Ø¿ô̾ ưºî
aka::xmlns(const std::string &prefix, const std::string &url) ̾Á°¶õ´Ö¤ÎÅÐÏ¿
prefix¤Ç¡¢Ì¾Á°¶õ´Ö¥×¥ì¥Õ¥£¥Ã¥¯¥¹¤ò¡¢uri¤Ç̾Á°¶õ´ÖURI¤ò»ØÄê¡£
»ØÄꤵ¤ì¤¿Ì¾Á°¶õ´Ö¤Ï¡¢¥é¥¤¥Ö¥é¥êÆâ¤Ç¾ï¤Ë°ì°Õ¤È¤Ê¤ë¡£
template<class L>
aka::doctype(const std::string &docname, const L &)
¥É¥­¥å¥á¥ó¥È·¿¤ÎÅÐÏ¿
docname¤Ç¥É¥­¥å¥á¥ó¥È̾¤ò»ØÄê¡£
leaf°ú¿ô¤Ç¡¢¥ë¡¼¥È¤Î·¿¤ËÂбþ¤¹¤ëleaf¥¯¥é¥¹¤òÅϤ¹¡£
aka::doctype(const std::string &docname) ¥É¥­¥å¥á¥ó¥È·¿¤ÎÅÐÏ¿
¤¿¤À¤·¡¢¥ë¡¼¥È¤Î·¿¤¬¤Î¾ì¹ç¤Ë»ÈÍѤ¹¤ë¡£
xs:anyType¤Ï¡¢ÀÖ»çÁÉÁȤ߹þ¤ß·¿¤Ç¤Ïaka::any¤ËÂбþ¤¹¤ë¡£
(¥ë¡¼¥È¤Î·¿¤¬·è¤Þ¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢Æó¤ÄÌܤΰú¿ô¤ÏÉÔÍס£)

¥Ç¥·¥ê¥¢¥é¥¤¥º

¥Ç¥·¥ê¥¢¥é¥¤¥º´Ø¿ô¤Ç¤¹¡£
¥¨¥é¡¼¤Ï¡¢Îã³°¤È¤·¤ÆÊÖ¤µ¤ì¤Þ¤¹¡£Îã³°¥¯¥é¥¹¤Ï¡¢std::exception¤ÎÇÉÀ¸¥¯¥é¥¹¤Ç¤¹¡£

Ìá¤êÃͤϡ¢aka::document¤È¤Ê¤ê¤Þ¤¹¡£¤³¤Î¥¯¥é¥¹¤Ï¡¢¥Ç¥·¥ê¥¢¥é¥¤¥º¤µ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤Î¥ë¡¼¥È¥Î¡¼¥É¤Ø¤Î¥Ý¥¤¥ó¥¿¤ò³ÊǼ¤·¤Æ¤¤¤Þ¤¹¡£
aka::document¤Ï¡¢°ì¼ï¤Î¥¹¥Þ¡¼¥È¥Ý¥¤¥ó¥¿¤Ç¤¢¤ê¡¢¥É¥­¥å¥á¥ó¥È¤Î¥Ç¥¹¥È¥é¥¯¥È»þ¤Ë¡¢¥ë¡¼¥È¥Î¡¼¥É¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò²òÊü¤·¤Þ¤¹¡£
ÌÀ¼¨Åª¤Ë¡¢¥ë¡¼¥È¥Î¡¼¥É¥¤¥ó¥¹¥¿¥ó¥¹¤ò¡¢aka::document¤Î´ÉÍý²¼¤«¤éÀÚ¤êÎ¥¤¹¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

¥Ç¥·¥ê¥¢¥é¥¤¥º´Ø¿ô¤Ï¡¢ÆþÎÏ¥½¡¼¥¹¤Ë±þ¤¸¤Æ¡¢Ê£¿ôÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¤½¤ì¤¾¤ì¤ÎÆþÎÏ¥½¡¼¥¹¤Ë±þ¤¸¤Æ¡¢¥Ç¥·¥ê¥¢¥é¥¤¥º»þ¤Î¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë¡¢ÆþÎÏ¥½¡¼¥¹¤¬¼¨¤µ¤ì¤Þ¤¹¡£
¤¿¤È¤¨¤Ð¡¢aka::deserialize_file()¤òÍѤ¤¤¿¾ì¹ç¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë¥Õ¥¡¥¤¥ë̾¤¬´Þ¤Þ¤ì¤Þ¤¹¡£

´Ø¿ô̾ ưºî
aka::document aka::deserialize(std::istream &istm) std::istream¤òÆþÎϤȤ·¤Æ¥Ç¥·¥ê¥¢¥é¥¤¥º¤ò¹Ô¤¦¡£
Ìá¤êÃͤϡ¢aka::document¤ÇÊÖ¤µ¤ì¤ë¡£
aka::document aka::deserialize(const char *document); ¾åµ­¤ÈƱÍÍ¡£
¤¿¤À¤·¡¢const char*¤¬»Ø¤¹¥É¥­¥å¥á¥ó¥È¤ò¥Ç¥·¥ê¥¢¥é¥¤¥º¤¹¤ë¡£
¥É¥­¥å¥á¥ó¥È¤Ï¡¢0½ªÃ¼¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
aka::document aka::deserialize(const std::string &document);
¾åµ­¤ÈƱÍÍ¡£
¤¿¤À¤·¡¢const std::string&¤Ç¼¨¤µ¤ì¤ë¥É¥­¥å¥á¥ó¥È¤ò¥Ç¥·¥ê¥¢¥é¥¤¥º¤¹¤ë¡£¥É¥­¥å¥á¥ó¥È¤Ï¡¢0½ªÃ¼¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
aka::document aka::deserialize_stdin(); ɸ½àÆþÎϤ«¤é¥Ç¥·¥ê¥¢¥é¥¤¥º¤¹¤ë¡£
aka::document aka::deserialize_file(const std::string &filename);
¥Õ¥¡¥¤¥ë¤ÎÆâÍÆ¤ò¥Ç¥·¥ê¥¢¥é¥¤¥º¤¹¤ë¡£

¥Ç¥·¥ê¥¢¥é¥¤¥º´Ø¿ô¤«¤éÊÖ¤µ¤ì¤ë¡¢aka::document¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤«¤é¡¢°Ê²¼¤Î´Ø¿ô¤òÍѤ¤¡¢¥É¥­¥å¥á¥ó¥È̾¤Î³Îǧ¡¢¥ë¡¼¥È¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¼èÆÀ¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

´Ø¿ô̾ ưºî
bool aka::document_of(const aka::document &doc, const std::string &tagname) ¥É¥­¥å¥á¥ó¥È¤«¤é¥É¥­¥å¥á¥ó¥È̾(¥ë¡¼¥È¤Î¥¿¥°Ì¾)¤ò¼èÆÀ
template<class T>
T* root_cast(aka2::document &doc)
ÅϤµ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤«¤é¡¢¥ë¡¼¥È¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ø¤Î¥Ý¥¤¥ó¥¿¤òT*¤È¤·¤Æ¼èÆÀ¤¹¤ë¡£¼èÆÀ¤µ¤ì¤ë¥¤¥ó¥¹¥¿¥ó¥¹¡¢aka::document¥¯¥é¥¹¤ÎÇË´þ»þ¤Ë¼«Æ°Åª¤Ë²òÊü¤µ¤ì¤ë¡£
template<class T>
const T* root_cast(const aka2::document &doc)
¾åµ­¤ÎconstÈÇ¡£
template<class T>
T* adopt_root(aka2::document &doc)
ÅϤµ¤ì¤¿¥É¥­¥å¥á¥ó¥È¤«¤é¡¢¥ë¡¼¥È¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤òT*¤È¤·¤Æ¼èÆÀ¤¹¤ë¡£¼èÆÀ¤µ¤ì¤ë¥Ý¥¤¥ó¥¿¤Ï¡¢aka::document¥¯¥é¥¹¤Î´ÉÍý²¼¤«¤éÀÚ¤êÎ¥¤µ¤ì¤ë¡£¥æ¡¼¥¶¤¬¼èÆÀ¤µ¤ì¤¿¥¤¥ó¥¹¥¿¥ó¥¹¤ò²òÊü¤¹¤ëɬÍפ¬¤¢¤ë¡£

¥·¥ê¥¢¥é¥¤¥º

¥·¥ê¥¢¥é¥¤¥º¤Ï¡¢aka::xml_serializer¥¯¥é¥¹¤òÍѤ¤¤Æ¹Ô¤¤¤Þ¤¹¡£
aka::xml_serializer¥¯¥é¥¹¤Ï¡¢XML-Namespace 1.1¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤ª¤ê¡¢É¬ÍפÊ̾Á°¶õ´Ö¤ò¡¢¼«Æ°Åª¤Ë¡¢½ÐÎϤ·¤Þ¤¹ ¡£
̾Á°¶õ´Ö¤ÎÀë¸À¤Ï¡¢¥ë¡¼¥È¥Î¡¼¥É¡¢¤â¤·¤¯¤Ï¡¢»Ò¥Î¡¼¥É(XML-Namespace 1.1¤Î¥¹¥¿¥¤¥ë)¤Î¤É¤Á¤é¤«¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
ÌÀ¼¨Åª¤Ê»ØÄ꤬¹Ô¤ï¤ì¤Ê¤¤¸Â¤ê¡¢XML-Namespace1.1¥¹¥¿¥¤¥ë¤Ç¡¢Ì¾Á°¶õ´Ö¤¬Àë¸À¤µ¤ì¤Þ¤¹¡£

aka::xml_serializer ¥á¥½¥Ã¥É̾ ưºî
xml_serializer_base(const std::string &encoding) ¥³¥ó¥¹¥È¥é¥¯¥¿¡£encoding¤Ë¤Æ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°Ì¾¤ò»ØÄê¡£
void using_prefix(const std::string &prefix) prefix¤Ç»ØÄꤵ¤ì¤ë̾Á°¶õ´Ö¤ò¡¢¥ë¡¼¥È¥Î¡¼¥É¤ÇÀë¸À¤¹¤ë¡£
prefix¤Ï¡¢¤¢¤é¤«¤¸¤á¡¢aka::xmlns()¤òÍѤ¤¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡£
void using_uri(const std::string &uri); uri¤Ç»ØÄꤵ¤ì¤ë̾Á°¶õ´Ö¤ò¡¢¥ë¡¼¥È¥Î¡¼¥É¤ÇÀë¸À¤¹¤ë¡£
uri¤Ï¡¢¤¢¤é¤«¤¸¤á¡¢aka::xmlns()¤òÍѤ¤¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡£
void enable_ns11(bool value) value¤¬true¤Î¾ì¹ç¡¢XML-Namespace 1.1¤ò»ÈÍѤ¹¤ë¡£
false¤Î¾ì¹ç¤Ë¤Ï¡¢»Ò¥Î¡¼¥É¤Ë¤ª¤±¤ë̾Á°¶õ´ÖÀë¸À¤¬ÍÞÀ©¤µ¤ì¤ë¡£
(false¤ò»ØÄꤷ¤¿¾ì¹ç¡¢using_prefix()¡¢using_uri()¤òÍѤ¤¤Æ¡¢
¥ë¡¼¥È¥Î¡¼¥É¤Ç¤Î̾Á°¶õ´ÖÀë¸À¤ò¹Ô¤¦É¬Íפ¬¤¢¤ë¡£)
template <class R>
void serialize(const R &root, const std::string &name, std::ostream &ostm)
¥ë¡¼¥È¥ª¥Ö¥¸¥§¥¯¥È¤È¥É¥­¥å¥á¥ó¥È̾¤ò»ØÄꤷ¡¢¥·¥ê¥¢¥é¥¤¥º¤ò¹Ô¤¦¡£
Âè°ì°ú¿ô¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤Î¥ë¡¼¥È¥¯¥é¥¹(R)¤Î¥¤¥ó¥¹¥¿¥ó¥¹
ÂèÆó°ú¿ô¤Ï¡¢¥É¥­¥å¥á¥ó¥È¤Î¥¿¥°Ì¾¡£
Âè»°°ú¿ô¤Ï¡¢½ÐÎÏÀè¡£
void serialize(const document &doc, std::ostream &ostm) doc¤ÇÅϤµ¤ì¤ë¥É¥­¥å¥á¥ó¥È¤ò¥·¥ê¥¢¥é¥¤¥º¤·¡¢ostm¤Ë½ÐÎϤ¹¤ë¡£

aka::document¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤Þ¤¿¡¢Ì¾Á°¶õ´Ö¤ÎºÙ¤«¤¤»ØÄ꤬ɬÍפǤϤʤ¤¾ì¹ç¤Ë¤Ï¡¢°Ê²¼¤Î´Ø¿ô¤Ç¡¢´ÊÊØ¤Ê¥·¥ê¥¢¥é¥¤¥º¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

´Ø¿ô̾ ưºî
aka::serialize(const aka::document &doc, std::ostream &ostm) doc¤ÇÅϤµ¤ì¤ë¥É¥­¥å¥á¥ó¥È¤ò¥·¥ê¥¢¥é¥¤¥º¤·¡¢ostm¤Ë½ÐÎϤ¹¤ë¡£

ÃÍ¥¯¥é¥¹¤Î½é´ü²½¡¢¥³¥Ô¡¼¡¢Èæ³Ó

leaf¥¯¥é¥¹¤Ë¤Ï¡¢¥·¥ê¥¢¥é¥¤¥¶¥Ö¥ë¤Ê¥á¥ó¥Ð¤ä¡¢¥Ç¥Õ¥©¥ë¥ÈÃͤξðÊ󤬳ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¾ðÊó¤òÍѤ¤¤¿¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤Î½é´ü²½¡¢¥³¥Ô¡¼¡¢Èæ³Ó¤ò¡¢°Ê²¼¤Î´Ø¿ô¤òÍѤ¤¤Æ¹Ô¤¤¤Þ¤¹¡£

´Ø¿ô̾ ưºî
template<class T, class L>
void aka::construct_element(T &element, const L &);
leaf¥¯¥é¥¹¡¢L¤òÍѤ¤¤Æ¡¢T·¿¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò½é´ü²½¤·¤Þ¤¹¡£
template<class T>
void aka::construct_element(T &element);
xiso::leaf<T>¥¯¥é¥¹¤òÍѤ¤¤Æ¡¢T·¿¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò½é´ü²½¤·¤Þ¤¹¡£
template<class T, class L>
void aka::copy_element(T &dest, const T& src, const L &);
leaf¥¯¥é¥¹¡¢L¤òÍѤ¤¤Æ¡¢src¤òdest¤Ë¥³¥Ô¡¼¤·¤Þ¤¹¡£
¥³¥Ô¡¼¤µ¤ì¤ë¤Î¤Ï¡¢¥·¥ê¥¢¥é¥¤¥ºÂоݤȤʤäƤ¤¤ëÍ×ÁǤΤߤǤ¹¡£
xs:sequence¡¢xs:all¤Î¾ì¹ç¡¢¥¯¥é¥¹¤Î¥á¥ó¥Ð¡¢xs:choice¤Î¾ì¹ç¡¢choice¥³¥ó¥Æ¥ÊÆâ¤ÎÍ×ÁǤȤʤê¤Þ¤¹¡£
template<class T>
void aka::copy_element(T &dest, const T& src);
¾åµ­¤ÈƱÍͤΥ³¥Ô¡¼¤ò¹Ô¤¤¤Þ¤¹¡£
¤¿¤À¤·¡¢leaf¥¯¥é¥¹¤È¤·¤Æ¡¢xiso::leaf<T>¤òÍѤ¤¤Þ¤¹¡£
template<class T, class L>
bool aka::equals(const T &lhs, const T& rhs, const L &);
leaf¥¯¥é¥¹¡¢L¤òÍѤ¤¤Æ¡¢lhsl¤Èrhs¤òÈæ³Ó¤·¤Þ¤¹¡£
Èæ³ÓÂоȤȤʤë¤Î¤Ï¡¢¥·¥ê¥¢¥é¥¤¥ºÂоݤȤʤäƤ¤¤ëÍ×ÁǤΤߤǤ¹¡£
xs:sequence¡¢xs:all¤Î¾ì¹ç¡¢¥¯¥é¥¹¤Î¥á¥ó¥Ð¡¢xs:choice¤Î¾ì¹ç¡¢choice¥³¥ó¥Æ¥ÊÆâ¤ÎÍ×ÁǤȤʤê¤Þ¤¹¡£
Ãͤ¬Åù¤·¤¤¾ì¹çtrue¤ò¡¢°Û¤Ê¤ë¾ì¹ç¡¢false¤òÊÖ¤·¤Þ¤¹¡£
template<class T>
bool aka::equals(const T& lhs, const T& rhs);
¾åµ­¤ÈƱÍͤÎÈæ³Óưºî¤ò¹Ô¤¤¤Þ¤¹¡£
¤¿¤À¤·¡¢leaf¥¯¥é¥¹¤È¤·¤Æ¡¢xiso::leaf<T>¤òÍѤ¤¤Þ¤¹¡£

xs:choice´ØÏ¢

xs:choice¤ËÂбþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Ï¡¢aka::item¤òÍ×ÁǤȤ¹¤ë¥³¥ó¥Æ¥Ê¤È¤·¤ÆÄêµÁ¤µ¤ì¤Þ¤¹¡£
aka::item¤Ï¡¢¥¿¥°Ì¾¤ÈÍ×ÁÇ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤ò»ý¤Á¡¢ÊÝ»ý¤¹¤ëÍ×ÁÇ¥¤¥ó¥¹¥¿¥ó¥¹¤Ø¤Î»²¾È¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¤Þ¤¿¡¢xs:choice¤ËÂбþ¤¹¤ëleaf¥¯¥é¥¹¤«¤é¡¢¥³¥ó¥Æ¥Ê¤Ø¤ÎÍ×ÁǤÎÁÞÆþ¡¢¼èÆÀ¤ò¹Ô¤¦¤¿¤á¤Î¥Ø¥ë¥Ñ¥¯¥é¥¹(moc¥¯¥é¥¹)¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£moc¥¯¥é¥¹¤ò»ÈÍѤ¹¤ë¤³¤È¤Ç¡¢Í×ÁǤòÁÞÆþ¤¹¤ë»þ¤Î¥¿¥°Ì¾¤Î¥Á¥§¥Ã¥¯¤ä¡¢¥¿¥°Ì¾¤Ë¤è¤ëÍ×ÁǤθ¡º÷¤ò¹Ô¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

ưºî
moc¥¯¥é¥¹ aka::choice<>¥Æ¥ó¥×¥ì¡¼¥È¤ò·Ñ¾µ¤¹¤ë·¿¤Ç¤¢¤ì¤Ð¡¢moc¥¯¥é¥¹¤ò»ÈÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
moc¥¯¥é¥¹¤Ï¡¢leaf¥¯¥é¥¹Ì¾::moc¤ÇÄêµÁ¤µ¤ì¤Æ¤ª¤ê¡¢¥Ç¥Õ¥©¥ë¥È¥³¥ó¥¹¥È¥é¥¯¥¿¤Ï¡¢xs:choice¤ËÂбþ¤¹¤ë¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò°ú¿ô¤È¤·¤Æ¤È¤ê¤Þ¤¹¡£
ex..
leaf¥¯¥é¥¹Ì¾¤òchoice_leaf¡¢¥³¥ó¥Æ¥Ê̾¤òchoice¤È¤·¤Þ¤¹¡£¤½¤Î¾ì¹ç¡¢moc¥¯¥é¥¹¤Ï¡¢°Ê²¼¤Î·Á¼°¤Çmoc_object¤È¤·¤Æ¥¤¥ó¥¹¥¿¥ó¥·¥ó¥°¤Ç¤­¤Þ¤¹¡£
choice_leaf::moc moc_object(choice);

moc¥¯¥é¥¹¤Ï¡¢°Ê²¼¤Î¥á¥½¥Ã¥É¤ò»ý¤Á¤Þ¤¹¡£

leaf¥¯¥é¥¹::moc¥¯¥é¥¹
¥á¥½¥Ã¥É
ưºî
template<class I>
void push_back(I &item, const std::string & tagname)
choice¤ÎÍ×ÁǤò¥³¥ó¥Æ¥Ê¤ÎËöÈø¤ËÁÞÆþ¤·¤Þ¤¹¡£
°ì¤ÄÌܤΰú¿ô¤Ï¡¢ÁÞÆþ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ç¤¹¡£¤Þ¤¿¡¢Æó¤ÄÌܤΰú¿ô¤Ï¡¢Âбþ¤¹¤ë¥¿¥°Ì¾¤È¤Ê¤ê¤Þ¤¹¡£
choice¤ÎÍ×ÁǤȤ·¤Æ¡¢ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¥¿¥°Ì¾¤òÍѤ¤¤¿¾ì¹ç¡¢¤â¤·¤¯¤Ï¡¢class I¤Î·¿¤È¥¿¥°Ì¾¤¬Âбþ¤·¤Ê¤¤¾ì¹ç¡¢Îã³°¤¬Åꤲ¤é¤ì¤Þ¤¹¡£Îã³°¤Ï¡¢std::exception¤ÎÇÉÀ¸·¿¤Ç¤¹¡£


¥ê¥Õ¥¡¥ì¥ó¥¹¥È¥Ã¥×¤ËÌá¤ë¡¡ÀÖ»çÁÉ¥Û¡¼¥à¥Ú¡¼¥¸¤Ø sourceforge¥×¥í¥¸¥§¥¯¥È¥Ú¡¼¥¸¤Ø