Программирование >>  Программирование с использованием ajax 

1 ... 254 255 256 [ 257 ] 258 259 260 ... 396


Это некорректно, поскольку элемент <author> открыт внутри элемента <title>, но закрывающий дескриптор </title> находится перед закрывающим дескриптором

</author>.

Существует одно исключение из правила, требующего, чтобы все элементы имели закрывающий дескриптор. Допускается иметь пустые элементы, не имеющие вложенных данных или текста. В этом случае можно просто добавлять закрывающий дескриптор немедленно после открывающего, как показано в предыдущем коде, или же использовать сокращенный синтаксис, добавляя слэш закрывающего дескриптора в конец открываюшего:

<Ьоок />

Это идентично такому синтаксису:

<book></book>

Атрибуты

Наряду с хранением данных в теле элемента вы можете также сохранять их внутри атрибутов, которые добавляются к открывающему элемент дескриптору Атрибуты имеют следующую форму:

name= value

Здесь значение атрибута должно быть заключено в одиночные или двойные кавычки. Например:

<booktitle= TristramShandy ></book> или

<booktitle=TristramShandy ></Ьоок>

Оба приведенных вариантов правильны, а следующий - нет:

<Ьоок title=Tristram Shandy></book>

И здесь вы можете удивиться - зачем нужны два способа хранения данных в XML? В чем разница между следующими двумя способами записи?

<Ьоок>

<title>Tristram Shandy</title> </book>

<booktitle= Tristram Shandy ></book>

Фактически между ними и нет какого-то фундаментального отличия. Ни один, ни другой способ не дают большого преимущества перед вторым. Элементы - более удачный выбор, если есть шанс, что понадобится добавлять информацию об этой части данных позднее - вы всегда можете добавить подэлемент или атрибут к элементу, но не можете делать то же самое с атрибутами. Возможно, элементы более читабельны и более элегантны (но это - дело личного вкуса). В противоположность этому атрибуты потребляют меньше полосы пропускания, когда документ пересылается по сети без сжатия (при сжатии разница не велика), и удобны для хранения информации, которая не существенна каждому пользователю документа. Возможно, лучшим советом будет использовать и то, и другое, выбирая то, что наиболее удобно для вас, чтобы хранить определенный элемент данных, так что здесь не существует жестких правил.



Объявление XML

в дополнение к элементам и атрибутам XML-документы могут содержать множество других составных частей. Эти индивидуальные части документа XML известны, как узлы (nodes); элементы, текст внутри элементов и атрибуты - все это узлы документа XML. Многие из них важны только в том случае, если вы действительно хотите углубиться в XML. Однако один тип узла появляется почти в каждом документе XML. Это объявление XML, и если вы его включаете, оно должно находиться в первом узле документа.

Объявление XML по своему формату подобно элементу, но имеет внутри себя вопросительные знаки и угловые скобки. Оно всегда имеет имя xml и всегда снабжено атрибутом по имени version; в настоящее время единственное допустимое значение для него - 1.0 . Простейшая возможная форма XML-объявления такова:

<?xml version= l.0 ?>

В феврале 2004 г. консорциум W3C (www. w3c.org) издал рекомендацию для XML 1.1, но на момент написания настоящей книги существовало лишь несколько, или вообще никаких реальных воплощений этой рекомендации.

Дополнительно объявление XML также включает атрибуты encoding (со значением, указывающим символьный набор, который должен быть использован для прочтения документа, такой как UTF-16 , чтобы показать, что документ использует 16-битный символьный набор Unicode) и standalone (со значениями yes или по , чтобы указать, зависит ли XML-документ от любых других файлов). Однако эти атрибуты не обязательны, и вы, вероятно, включите только атрибут version в собственные XML-файлы.

Структура документа XML

Одна из наиболее важных характеристик XML состоит в том, что он предоставляет способ структурирования данных, который существенно отличается от реляционных баз данных. Большинство современных систем управления базами данных хранят информацию в таблицах, которые связаны друг с другом через значения определенных столбцов. Таблицы хранят данные в строках и столбцах: каждая строка представляет отдельную запись, а каждый столбец в ней - определенный элемент данных в этой строке. В отличие от этого, данные XML структурированы иерархически, подобно организации папок и файлов в Windows Explorer. Каждый документ должен иметь единственный корневой элемент, внутри которого содержатся все элементы и текстовые данные. Если на вершине документа находится более одного элемента, то такой документ не считается правильным документом XML. Однако вы можете включить другие узлы XML в верхний уровень - особенно объявление XML. Таким образом, ниже представлен правильный документ XML:

<?xml version= l.0 ?> <books>

<book>Tristram Shandy</book> <book>Moby Dick</book> <book>Ulysses</book> </books>

A этот фрагмент не является правильным документом XML:

<?xml vGrsion= l.0 ?> <book>Tristram Shandy</book> <book>Moby Dick</book> <book>Ulysses</book>



Под корневым элементом предоставлена значительная свобода относительно структуры ваших данных. В отличие от реляционных данных, в которых каждая строка имеет одинаковое количество столбцов, здесь нет ограничений на число подэлементов, которые может содержать элемент. Вдобавок, хотя документы XML часто структурированы подобно реляционным данным, с элементом для каждой записи, документы XML не нуждаются ни в каких предопределенных структурах вообще. Это - одно из основных отличий между традиционными реляционными базами данных и XML. В то время как реляционные базы данных всегда определяют структуру информации перед добавлением каких-либо данных, информация может быть сохранена в XML без начальных накладных расходов, что очень удобно для хранения небольших блоков данных. Как вы вскоре убедитесь, вполне возможно представить структуру вашего XML, но в отличие от реляционных баз данных, никто не требует от вас указания этой структуры явным образом.

Пространства имен XML

Как известно из главы 9, любой может определять собственные классы С#, и любой может определять свои собственные элементы XML, что приводит к возникновению очевидной проблемы: как узнать, какие элементы к какому словарю относятся? Ответ - с помощью пространств имен. Точно так же, как вы определяете пространства имен для организации ваших типов С#, вы используете пространства имен XML для определения собственных словарей XML. Это позволяет включать элементы из множества различных словарей внутри единственного документа XML, не рискуя неправильно интерпретировать их, потому что (например) два разных словаря определяют элемент <customer>.

Пространства имен XML могут быть достаточно сложными, поэтому в данном разделе мы не станем углубляться в детали. Однако базовый синтаксис прост. Определенные элементы или атрибуты ассоциированы с определенным пространством имен посредством префикса, за которым следует двоеточие. Например, <wrox:book> представляет элемент <Ьоок>, находящийся в пространстве имен wrox. Как вы узнаете, какое пространство имен представляет wrox? Чтобы этот подход работал, вы должны гарантировать уникальность каждого пространства имен. Простейший способ добиться этого - отобразить префиксы на нечто, уникальность чего известна, и именно так и делается. Где-то в вашем документе XML вы должны ассоциировать любые префиксы пространства имен с универсальным идентификатором ресурсов (Uniform Resource Identifier - URl). URl существуют в нескольких ипостасях, но наиболее распространенный вид - простой адрес Web наодобие www. wrox. com.

Чтобы идентифицировать префикс с определенным пространством имен, используйте атрибут xmlns: prefix внутри элемента, установив это значение в уникальный URI, который идентифицирует пространство имен. Префикс может применяться в любом месте элемента, включгш любые вложенные дочерние элементы:

<?xml version= l.0 ?> <books>

<book xmlns:wrox= http: www.wrox.com > <wrox:title>Beginning C#</wrox:title> <wrox:author>Karli Watson</wrox:author> </book> </books>

Здесь можно использовать префикс wrox: с элементами <title> и <author>, потому что они находятся внутри элемента <Ьоок>, где определен префикс. Однако если



1 ... 254 255 256 [ 257 ] 258 259 260 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика