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