существует множество возможных деревьев DOM, которые соответствуют одной и той же структуре XML, и каждая структура XML имеет хотя бы одно соответствующее дерево DOM. Таким образом, преобразование из DOM в XML сюръективно .
Так что может случиться так, что:
dom_tree_1 != dom_tree_2
# but:
dom_tree_1.save_DOM_as_XML() == dom_tree_2.save_DOM_as_XML()
И нет способа обеспечить:
dom_tree == dom_tree.save_DOM_as_XML().load_DOM_from_XML()
Но мы бы хотели, чтобы это было bijective . Это означает, что каждая структура XML соответствует одному конкретному дереву DOM.
Таким образом, вы можете определить подмножество всех возможных деревьев DOM, которое является биективным множеству всех возможных структур XML.
# still:
dom_tree.save_DOM_as_XML() == dom_tree.normalized().save_DOM_as_XML()
# but with:
dom_tree_n = dom_tree.normalize()
# we now even have:
dom_tree_n == dom_tree_n.save_DOM_as_XML().load_DOM_from_XML().normalize()
Таким образом, нормализованные DOM-деревья могут быть полностью восстановлены из их XML-представления. Нет потери информации.