[QGHG-it-dev-list] Одговор на Задатак 35 од 2022-11-30: Функције за енкодирање и декодирање xml-стрингова

Лазар Радосављевић lazar.n.rad at gmail.com
Tue Jan 14 04:45:46 CET 2025


Поштовани,

Позабавио сам се проблемом из овог задатка
<https://mail.ipb.ac.rs/pipermail/qghg-it-dev-list/2022-November/000258.html>.
Написао сам функције које се траже и оне лепо раде. Покушао сам онда да их
применим у функцијама за чување и учитавање симплицијалних комплекса
(убацио сам их на она места где се уписују, односно дохватају, вредности
xml елемената или атрибута) и резултат су били потпуно нечитљиви стрингови.
Мислим да то има везе с тим што библиотека rapidxml има неки свој систем
алокације стрингова, који је овим путем био поремећен.

Међутим, мислим да проблем уопште није био у одсуству ових функција.
Библиотека rapidxml већ ради конверзију свих „проблематичних” карактера.
Проблем је у функцији `void save_complex_to_xml_file(SimpComp*, const
string&)`, у томе како она назива xml-елементе које креира. Наиме, ово је
формат xml-документа који ће бити произведен:

<"complex_name">
     <name> "complex_name" </name>
     <dimension> "D" </dimension>
     <topology> "topology of the complex" </topology>
     [<level lvl="l"> "simplices_id_list" </level> ...]
     [
     <ksimplex id="ksimplex_ID">
         <self_level> "ksimplex_lvl" </self_level>
         [<color color_type="color_type_id"> "color_value" </color> ...]
         [<level lvl="lvl"> "neighbours_at_lvl" </level> ...]
     </ksimplex>
     ]
</complex_name>

Име симпкомпа који желимо да сачувамо се користи као *садржај* елемента
<name>, али такође и као *назив* (таг) кореног елемента. По стандарду,
називи елемената смеју да садрже само алфанумеричке знакове, доње црте,
цртице и тачке (мада се последња два не препоручују). Друге специјалне
знакове, а поготово размаке, не смеју да садрже.

Такође, називи елемената xml-документа би требало (за конкретну примену) да
буду предефинисани, а не произвољни. Зато ме чуди то што је стављено да се
за назив кореног елемента користи стринг који корисник задаје, и који може
да буде потпуно произвољан. Мислим да би најисправније било да се и назив
кореног елемента предефинише, као што је случај са свим другим елементима.
Предлажем да тај назив буде `simpcomp`, јер цео садржај документа и
представља запис једног симплицијалног комплекса. Име нашег конкретног
симпкомпа ће, наравно, остати у потпуности сачувано као садржај елемента
<name>. Формат xml-документа би онда био:

<simpcomp>
     <name> "complex_name" </name>
     <dimension> "D" </dimension>
     <topology> "topology of the complex" </topology>
     [<level lvl="l"> "simplices_id_list" </level> ...]
     [
     <ksimplex id="ksimplex_ID">
         <self_level> "ksimplex_lvl" </self_level>
         [<color color_type="color_type_id"> "color_value" </color> ...]
         [<level lvl="lvl"> "neighbours_at_lvl" </level> ...]
     </ksimplex>
     ]
</simpcomp>

Алтернативно решење би било да се уведе функција која трансформише стринг у
облик који је подобан да представља назив елемента. Ово је сасвим другачија
операција у односу на стандардно xml-овско ескејповање. Не би била
инвертибилна, мада за тим ни нема потребе. Могла би да се реализује,
рецимо, тако што би се сви недозвољени знакови заменили доњом цртом, или
тако што би се игнорисали. На пример, ако смо симпкомп назвали "Ham &
Eggs", таг кореног елемента би био <Ham___Eggs> или <HamEggs>.

Да закључим, ја сам за прво решење, да корени елемент има таг <simpcomp>;
лакше је, а и сматрам да је боље. Истестирао сам и исправно ради. Спреман
сам да имплементирам, само чекам одобрење.

Срећни новогодишњи и божићни празници!
Лазар Радосављевић
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.ipb.ac.rs/pipermail/qghg-it-dev-list/attachments/20250114/65e5523f/attachment.htm>


More information about the QGHG-it-dev-list mailing list