Дилемма 0.Применять ли XML вообще?
XML предназначен для тех приложений, в которых текст (документ) должен быть легко доступен как программно, так и в читабельном формате. Это своего рода компромисс между бинарным кодом, отражающим встроенные типы языков программирования, и текстовым форматом, предназначенным для восприятия человеком. Примером представления первого типа служит встроенная база данных Berkeley db. Примером данных второго сорта может быть документ в формате RTF или Microsoft Word.
XML полезен также в случаях, когда данные представляются скорее в виде древовидных структур, а не плоских двумерных таблиц отношений, характерных для RDBS («скорее» — потому что, приложив достаточно усилий, древовидную структуру можно представить в виде набора плоских представлений). Другое ограничение, снимаемое XML,— это фиксированная схема данных. Конечно, RDBS тоже могут манипулировать структурами отношений в процессе работы приложения, но, вообще говоря, это не то, для чего они созданы.
Третье преимущество XML — это гарантированная доставка методами Сети, в частности HTTP. Особенно это касается методов использования, когда вы взаимодействуете со стандартизированными протоколами по SOAP. Все это распространяется также и на веб-сервисы, WSDL и так далее. В таких случаях — поскольку вы должны в конце концов представить данные в виде XML — вы, возможно, сочтете удобным хранить и обрабатывать данные тоже в этом формате. На самом деле подробности реализации не входят в компетенцию веб-сервисов, так что последнее решение зависит от вас.
Частным случаем является доступ к базам данных в сети посредством метода доступа XML, поскольку многие производители RDBS предусматривают такую возможность. Естественно, представление отношений в виде XML унаследует все ограничения отношений, то есть все они будут иметь фиксированную схему.
Дилемма 1.
Атрибуты или элементы?
Это один из тех простых вопросов, на которые нет простого ответа. Предположим, у нас есть запись о служащем, состоящая всего из двух элементов:
<worker> <id>48709</id> <name>John Smith</name> </worker> |
То же самое можно записать и другим способом:
<worker id=48709> <name>John Smith</name> </worker> |
<worker id=»48709» name=»John Smith»/> |
С другой стороны, атрибут — это всегда простое значение, которое не может стать сложным ни при каких условиях. Это ограничение можно рассматривать и как положительное — то есть таким образом можно принудительно ограничить фантазию пользователей.
Кроме того, следует иметь в виду два отличия атрибутов и элементов.
Первое из них касается старых типов данных XML 1.0 — таких как ID, IDREF, NMTOKEN и других. В целях совместимости их использование ограничено только атрибутами.
Вторая особенность — это то, как обрабатываются значения по умолчанию. Значение атрибута по умолчанию будет подставлено в том случае, если этот атрибут не указан совсем. Можно задействовать значение элемента по умолчанию — для этого сам элемент должен быть указан, но не должен содержать значения — отсутствие элемента не породит элемент со значением по умолчанию.
Третья особенность — элементы могут адресоваться из других мест того же или другого документа (ссылки). Адресовать подобным образом атрибуты невозможно.