CDATA разделы не нужны.Они не являются «пережитком прошлого», потому что они всегда были ненужными.
Это не значит, что они бесполезны.Посмотрите практически на любой язык программирования или библиотеку, и вы можете найти большое количество вещей, без которых вы могли бы обойтись, потому что они семантически эквивалентны чему-то другому, но которые полезны, если там сидит человек, которому приходится писать вещи.
В этом отношении, даже с программным производством также удобно, что можно использовать противоположный подход и использовать секции CDATA для каждого отдельного фрагмента c-данных (вздор, но это может привести к повышению эффективности в других местах).
FOR XML PATH не предполагает, что человек, сидящий там, должен писать вещи.Это средство для создания правильного XML из результатов запроса SQL.(Дело также не в разборе разделов CDATA, а в их создании - другое дело).
И вы не можете жаловаться на то, что FOR XML EXPLICIT - это альтернатива, когда вам нужен действительно точный контроль - причинаFOR XML EXPLICIT настолько неприятен в использовании, иногда именно потому, что он дает вам действительно хороший контроль.Действительно, подумайте, не добавили ли они сначала поддержку разделов CDATA, а затем добавили поддержку всех других настроек и опций конфигурации, которые казались столь же важными для кого-то еще там.Сколько времени пройдет, прежде чем FOR XML EXPLICIT станет автоматическим выбором, поскольку он более прост, чем FOR XML PATH‽
В четырех случаях CDATA полезен:
- You 'Вы сидите за клавиатурой и набираете это в себе.
- Вы имеете дело со смешиванием разных технологий с разными стандартами, разработанными в разное время и которые будут интерпретироваться разными синтаксическими анализаторами по-разному (например, JavaScript, встроенный в XHTML -хотя в этом нет необходимости на 100%, это просто кошмар, чтобы сделать иначе).
- Вы пытаетесь проанализировать XML с чем-то, что не понимает XML.
- Вы пытаетесь использоватьчто-то построенное на синтаксическом анализаторе, который обеспечивает низкоуровневый доступ, который различает разделы CDATA и другие символьные данные и использует этот низкоуровневый доступ неуместно.
Как ни странно, эти четыре случая также являются четырьмя случаями, когдаможет иметь смысл запрет на прием разделов CDATA.
CaSE 1 здесь не применяется, это не созданный человеком код.Случай 2 мог бы применяться здесь, если вы делаете что-то действительно сумасшедшее.Честно говоря, отсутствие разделов CDATA - это наименьшее из ваших беспокойств здесь;переключиться на создание более простого XML в запросе и преобразование его в другом месте.Случай 3 мог бы применяться здесь, но было бы несправедливо жаловаться на людей SQL, если это так, когда вы должны жаловаться на сломанный анализатор XML, который не обрабатывает <example>
так же, как <![CDATA[<example>]]>
.Случай 4 может быть применим здесь, но опять же жаловаться человеку, который написал глючный код, а не людям SQL.