Файл: Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 627
Скачиваний: 3
СОДЕРЖАНИЕ
2.Общие положения (теоретические сведения)
2.1. Принцип рекурсии в правилах грамматики
2.2. Запись правил грамматик с использованием метасимволов
2.3. Запись правил грамматик в графическом виде
3. Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2.Общие положения (теоретические сведения)
2.1. Разработка лексического анализатора
2.2. Разработка синтаксического анализатора
2.3. Пример построения простого синтаксического анализатора
2.4. Анализаторы для сложных рекурсивных грамматик
2. Общие положения (теоретические сведения)
2.5. Логическая структура XML-документа
2.8. Описание структуры XML-документов
2.9. Язык XML Sсhema Definition (XSD)
2.10. Программная обработка XML-документов
2.11. Обработка XML-данных с использованием модели DOM
2.14. Сопоставление объектной иерархии с XML-данными
2.16. Считывание XML-документа в DOM
2.17. Директивы таблицы стилей, встроенные в документ
2.18. Загрузка данных из модуля чтения
2.19. Доступ к атрибутам в модели DOM
2.20. Получение всех атрибутов в виде коллекции
2.21. Получение единичного узла атрибута
2.22. Считывание объявлений сущностей и ссылок на сущности в DOM
2.23. Сохраняемые ссылки на сущности
2.24. Разворачиваемые и не сохраняемые ссылки на сущности
2.25. Создание новых узлов в модели DOM
2.26. Создание новых атрибутов для элементов в модели DOM
2.29. Проверка имен XML-элементов и атрибутов при создании новых узлов
2.30. Создание новых ссылок на сущности
2.32. Копирование существующих узлов
2.33. Копирование существующих узлов из одного документа в другой
2.34. Копирование фрагментов документа
2.35. Удаление узлов, содержимого и значений из XML-документа
2.36. Изменение узлов, содержимого и значений в XML-документе
2.37. Проверка XML-документа в DOM
2.38. Проверка XML-документа в DOM
2.39. Обработка ошибок проверки и предупреждений
2.40. Сохранение и запись документа
2.42. Запись содержимого документа с помощью свойства OuterXml
3.Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
3. Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
3.5. Эскизы в документах Деталей
3.6. Взаимодействие с пользователем
3 Задание на работу (рабочее задание)
2.26. Создание новых атрибутов для элементов в модели DOM
Создание новых атрибутов отличается от создания других типов узлов, поскольку атрибуты являются не узлами, а свойствами узла элемента, и содержатся в связанной с этим элементом коллекции XmlAttributeCollection. Есть несколько способов создания атрибута и присоединения его к элементу:
-
Получите узел элемента и примените метод SetAttribute, чтобы добавить атрибут в коллекцию атрибутов этого элемента. -
Создайте узел XmlAttribute с помощью метода CreateAttribute, получите узел элемента и примените метод SetAttributeNode, чтобы добавить узел в коллекцию атрибутов этого элемента.
Следующий пример демонстрирует, как добавить атрибут к элементу с помощью метода SetAttribute.
C#
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
var doc = new XmlDocument();
doc.LoadXml("
"" +
"
XmlElement root = doc.DocumentElement;
// Add a new attribute.
root.SetAttribute("genre", "urn:samples", "novel");
Console.WriteLine("Display the modified XML...");
Console.WriteLine(doc.InnerXml);
}
}
Следующий пример демонстрирует, как создать новый атрибут с помощью метода CreateAttribute. Созданный атрибут он добавляет в коллекцию атрибутов элемента book с помощью метода SetAttributeNode.
Заданы следующие XML-данные:
Создается новый атрибут, и ему присваивается значение:
C#
XmlAttribute attr = doc.CreateAttribute("publisher");
attr.Value = "WorldWide Publishing";
Атрибут присоединяется к его элементу:
C#
doc.DocumentElement.SetAttributeNode(attr);
Выходныеданные
Также можно создать узел XmlAttribute и вызвать метод InsertBefore_и_InsertAfter'>InsertBefore или InsertAfter, чтобы поместить его в подходящее место коллекции. Если в коллекции атрибутов уже существует атрибут с таким именем, эти методы удаляют существующий узел XmlAttribute и добавляют вместо него новый узел XmlAttribute. Алгоритм выполнения здесь такой же, как у метода SetAttribute. Эти методы принимают в качестве параметра существующий узел, который будет считаться базовой точкой для методов InsertBefore и InsertAfter. Если не задан базовый узел, рядом с которым нужно вставить новый узел, метод InsertAfter по умолчанию вставляет новый узел в начало коллекции, а метод
InsertBefore — в конец коллекции.
Если вы создали для атрибутов коллекцию XmlNamedNodeMap, можете добавить именованный атрибут с помощью метода SetNamedItem.
2.27. Атрибуты по умолчанию
При создании элемента, для которого декларирован атрибут по умолчанию, модель XML DOM создаст новый атрибут по умолчанию со значением по умолчанию и присоединит его к элементу. Одновременно будут созданы дочерние узлы атрибута по умолчанию.
2.28. Дочерние узлы атрибута
Значение узла атрибута становится его дочерними узлами. Существует два допустимых типа дочерних узлов: XmlText и XmlEntityReference. Они являются дочерними узлами в том смысле, что такие методы, как FirstChild и LastChild, обрабатывают их как дочерние узлы. Это отличие атрибута, имеющего дочерние узлы, становится важным во время удаления атрибута или его дочерних узлов.
2.29. Проверка имен XML-элементов и атрибутов при создании новых узлов
Модель XML DOM проверяет допустимость имен при создании новых узлов элементов или узлов атрибутов. Если имена содержат недопустимые символы, возникает исключение. Чтобы гарантировать допустимость и правильную кодировку имен, необходимо использовать класс XmlConvert для кодирования и декодирования имен на уровне приложения. Класс XmlWriter содержит методы, которые выполняют дополнительную работу, чтобы обеспечить формирование XML-документов правильного формата.
2.30. Создание новых ссылок на сущности
Метод EntityReference'>CreateEntityReference создает новый узел XmlEntityReference. Модель DOM определяет, было ли уже декларировано имя сущности, на которую указывает ссылка. Если было, то дочерние узлы узла XmlEntityReference копируются из узла декларации сущности. Если совпадающая декларация сущности отсутствует, пустой текстовый узел прикрепляется как единственный дочерний узел узла ссылки на сущность. Так как дочерние узлы узла XmlEntityReference являются копиями других узлов, они доступны только для чтения и не могут быть изменены.
При копировании узлов в области в точке ссылки на сущность может быть пространство имен. Это пространство имен влияет на конфигурацию всех формируемых элементов или узлов атрибутов.
Примечание
Модель DOM добавляет дочерние узлы к узлу
EntityReference только при вставке в документ узла EntityReference. Вновь созданные узлы EntityReference не имеют дочерних узлов.
Хотя класс XmlDataDocument является производным от класса XmlDocument, класс XmlDataDocument не поддерживает создание ссылок на сущности. Это связано с тем, что дочерние узлы EntityReference доступны только для чтения. Дочерние узлы узла EntityReference могут принадлежать к нескольким областям. В этом случае часть строки, связанная с областью, которая содержит часть узла EntityReference, будет доступна только для чтения.
2.31. Влияние пространства имен на раскрытие ссылок на сущности для новых узлов, содержащих элементы и атрибуты
Так как содержимое декларации сущности может содержать абсолютно все, существует вероятность, что содержимое может содержать элемент типа test
Во время анализа XML элемент &aname; не раскрывается своим замененным содержимым. Раскрывание XML не выполняется, так как разрешение пространства имен для элемента не может произойти, пока узел не размещается в документе. До этого времени неизвестно, какое пространство имен расположено в области. Когда узел помещается в документ, происходит разрешение пространства имен и результирующее содержимое сущности анализируется внутри соответствующих узлов.
Примечание
После того, как раскрывание произошло в заново созданном узле ссылки сущности, оно никогда повторно не происходит. Поэтому пространства имен, используемые в тексте замены для элемента, привязываются во время задания родительского узла. Тем не менее пространство имен может быть изменено для существующих узлов ссылки сущности, и они могут быть вставлены куда-либо еще, или для узлов ссылки сущности, которые копируются с помощью метода CloneNode.
2.32. Копирование существующих узлов
Модель XML DOM включает множество методов и свойств, которые можно использовать для выбора узла, например SelectSingleNode, ChildNodes[int i] , Attributes[int i] . После выбора узла его можно вставить в дерево с помощью одного из методов вставки, допустимых для данного типа узла. Единственное ограничение при выполнении операции вставки узла в дерево состоит в том, что по ее завершении документ должен оставаться документом правильного формата. При вставке существующего узла в дерево DOM узел удаляется из своей исходной позиции и добавляется в целевую позицию.
2.33. Копирование существующих узлов из одного документа в другой
Метод ImportNode позволяет скопировать узел или целое поддерево узлов из одного документа XmlDocument в другой. Узел, возвращенный после вызова, является копией узла из исходного документа, включая значения атрибутов, имя узла, тип узла и все атрибуты, связанные с пространством имен, такие как префикс, локальное имя и URI пространства имен. Исходный документ не изменяется. После импорта узла его необходимо добавить к дереву с помощью одного из методов, используемых для вставки узлов.
При присоединении узла к новому документу, узел принадлежит этому документу. Причина в том, что каждый узел при создании принадлежит какому-нибудь документу, даже если узлы создаются в разных фрагментах документа. Это требование объектной модели DOM XML-документа, которое обусловлено структурой создания фабрики в классе XmlDocument. Например, метод CreateElement является единственным способом создания новых узлов.
В зависимости от типа импортированного узла и значения параметра deep, дополнительные данные копируются по мере необходимости. Этот метод пытается зеркально воспроизвести поведение, ожидаемое, если фрагмент исходного XML или HTML копируется из одного документа в другой, с учетом того факта, касающегося XML, что два документа могут иметь различные определения типа документа (DTD).
В следующей таблице описаны особенности поведения каждого типа узла, который может быть импортирован.
Таблица 2.16
| ||
Тип узла | Параметр deep имеет значение TRUE | Параметр deep имеет значение FALSE |
XmlAttribute | Specified в XmlAttribute имеет значение TRUE. Потомки исходного узла XmlAttribute рекурсивно импортируются, а результирующие узлы собираются в поддерево. | Параметр deep не применяется к узлам XmlAttribute, так как вместе с ними всегда импортируются дочерние узлы. |
XmlCDataSection | Копирует узел вместе с данными. | Копирует узел вместе с данными. |
XmlComment | Копирует узел вместе с данными. | Копирует узел вместе с данными. |
XmlDocumentFragment | Потомки исходного узла рекурсивно импортируются, а результирующие узлы создаются заново и составляют соответствующее поддерево. | Создается пустой узел XmlDocumentFragment. |
XmlDocumentType | Копирует узел вместе с данными.* | Копирует узел вместе с данными.* |
XmlElement | Потомки исходного элемента рекурсивно импортируются, а результирующие узлы создаются заново и составляют соответствующее поддерево. Примечание. Атрибуты по умолчанию не копируются. Если документ, в который выполняется импорт, определяет атрибуты по умолчанию для данного имени элемента, они назначаются. | Импортируются указанные атрибутивные узлы исходного элемента, а затем созданные узлы XmlAttribute присоединяются к новому элементу. Узлы-потомки не копируются. Примечание. Атрибуты по умолчанию не копируются. Если документ, в который выполняется импорт, определяет атрибуты по умолчанию для данного имени элемента, они назначаются. |
XmlEntityReference | Так как в исходном и целевом документах сущности могут быть определены по-разному, этот метод копирует только узел XmlEntityReference. Текст замены не включается. Если в документе назначения определена сущность, ей назначается значение. | Так как в исходном и целевом документах сущности могут быть определены по-разному, этот метод копирует только узел XmlEntityReference. Текст замены не включается. Если в документе назначения определена сущность, ей назначается значение. |
XmlProcessingInstruction | Копирует цель и значение данных из импортируемого узла. | Копирует цель и значение данных из импортируемого узла. |
XmlText | Копирует узел вместе с данными. | Копирует узел вместе с данными. |
XmlSignificantWhitespace | Копирует узел вместе с данными. | Копирует узел вместе с данными. |
XmlWhitespace | Копирует узел вместе с данными. | Копирует узел вместе с данными. |
XmlDeclaration | Копирует цель и значение данных из импортируемого узла. | Копирует цель и значение данных из импортируемого узла. |
Все остальные типы узлов | Эти типы узлов импортировать нельзя. | Эти типы узлов импортировать нельзя. |