Файл: Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 572
Скачиваний: 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 Задание на работу (рабочее задание)
В следующем примере показаны XML-данные, загружаемые с помощью метода LoadXml, а также данные, которые затем сохраняются в текстовый файл data.xml.
C#
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
// Create the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.LoadXml("
"" +
"
// Save the document to a file.
doc.Save("data.xml");
}
}
2.17. Директивы таблицы стилей, встроенные в документ
Иногда существующий XML содержит директивы таблицы стилей . Обозреватель Microsoft Internet Explorer обрабатывает этот синтаксис как альтернативу . Если данные XML содержат директиву , как показано в следующем примере, при попытке загрузить эти данные в модель XML DOM будет сформировано исключение.
Это происходит потому, что конструкция с точки зрения модели DOM представляет собой недопустимую инструкцию ProcessingInstruction. Согласно спецификации пространства имен в XML, инструкции ProcessingInstruction могут быть только именами, не содержащими двоеточий (NCNames), в противоположность полным именам (QNames).
Согласно разделу 6 спецификации пространств имен в XML наличие методов Load и LoadXml обеспечивает выполнение в документе следующих условий:
-
Все типы элементов и имена атрибутов содержат одно двоеточие или не содержат ни одного. -
Имена сущностей, цели инструкции ProcessingInstruction и имена нотаций не могут содержать двоеточий.
Поскольку конструкция содержит двоеточие, это является нарушением второго правила.
Согласно рекомендации консорциума W3C Связь таблиц стилей с XML-документами версии 1.0, инструкция по обработке, связывающая таблицу стилей XSLT с XML-документом, выглядит следующим образом: , то есть двоеточие заменено на тире.
2.18. Загрузка данных из модуля чтения
Если XML-документ загружен с помощью метода Load и параметра XmlReader, его поведение отличается от поведения загруженных данных других форматов. Если модуль чтения находится в начальном состоянии, метод Load получает все его содержимое и строит модель XML DOM на основе всех данных модуля чтения.
Если модуль чтения уже позиционирован на одном из узлов документа и передается методу Load, то метод Load пытается считать текущий узел и все его одноуровневые элементы вплоть до закрывающего тега, закрывающего текущую глубину в памяти. Успех попытки метода Load зависит от узла, на котором находится модуль чтения при попытке загрузки, когда метод Load проверяет, что XML-документ из модуля чтения правильного формата. Если XML-документ неправильного формата, метод Load вызывает исключение. Например, следующий набор узлов содержит два корневых элемента, XML-документ неправильного формата, и метод Load вызывает исключение.
-
Узел Comment, за которым следует узел Element, еще один узел Element и узел EndElement.
Следующий набор узлов создает неполную модель DOM, поскольку отсутствует корневой элемент.
-
Узел Comment, за которым следует узел ProcessingInstruction, еще один узел Comment и узел EndElement.
В этом случае исключения не возникает, и данные загружаются. В верхнюю часть этих узлов можно добавить корневой элемент и создать XML-документ правильного формата, который можно сохранить без ошибки.
Если модуль чтения расположен на конечном узле, недопустимом для корневого уровня документа (например, пробел или узел атрибута), он продолжает читать, пока не окажется на узле, который можно использовать в качестве корневого. Документ начинает загружаться в этой точке.
По умолчанию метод Load не проверяет допустимость XML с помощью определения типа документа (DTD) или проверки схемы. Он только проверяет правильность формата XML-документа. Чтобы выполнялась проверка, необходимо создать объект XmlReader с помощью класса XmlReaderSettings. Класс XmlReader может применять проверку с помощью DTD или XSD-схемы. Свойство ValidationType класса XmlReaderSettings определяет, применяет ли экземпляр
XmlReader принудительную проверку.
2.19. Доступ к атрибутам в модели DOM
Атрибуты - свойства элемента, а не его дочерние элементы. Это различие очень важно из-за методов, используемых для перемещения по дочерним, родительским и одноуровневым узлам модели XML DOM. Например, методы PreviousSibling и NextSibling не позволяют перемещаться с элемента на атрибут или с одного атрибута на другой. Вместо этого атрибут является свойством элемента и принадлежит ему. У атрибута есть специальные методы навигации и свойство OwnerElement, но нет свойства parentNode.
Если текущий узел является элементом, метод HasAttribute позволяет узнать, есть ли у него атрибуты. Если у элемента есть атрибуты, к ним можно получить доступ различными методами. Чтобы получить отдельный атрибут элементв, используйте методы GetAttribute и GetAttributeNode класса XmlElement. Также есть возможность получить все атрибуты сразу в виде коллекции. Получение коллекции удобно, если предполагается ее обзор. Если нужно получить все атрибуты конкретного элемента, воспользуйтесь его свойством Attributes для получения всех атрибутов в виде коллекции.
2.20. Получение всех атрибутов в виде коллекции
Если нужно поместить все атрибуты узла элемента в коллекцию, вызовите свойство XmlElement.Attributes. Оно возвращает коллекцию XmlAttributeCollection со всеми атрибутами элемента. Класс XmlAttributeCollection наследует от карты XmlNamedNode. Таким образом, для этой коллекции доступны все свойства и методы, что и для карты именованного узла, а также все методы и свойства класса XmlAttributeCollection, например свойство ItemOf и метод Append. Каждый элемент коллекции атрибутов представляет узел XmlAttribute. Чтобы выяснить число атрибутов некоторого элемента, получите коллекцию XmlAttributeCollection и вызовите ее свойство Count, которое содержит число узлов XmlAttribute в коллекции.
В следующем примере кода показано, как получить коллекцию атрибутов и последовательно перебрать ее элементы, используя метод Count в роли индекса цикла. Затем в примере демонстрируется получение одного атрибута из коллекции и вывод его значения.
C#
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("
"" +
"
14.95
" +
"
// Move to an element.
XmlElement myElement = doc.DocumentElement;
// Create an attribute collection from the element.
XmlAttributeCollection attrColl = myElement.Attributes;
// Show the collection by iterating over it.
Console.WriteLine("Display all the attributes in the collection...");
for (int i = 0; i < attrColl.Count; i++)
{
Console.Write("{0} = ", attrColl[i].Name);
Console.Write("{0}", attrColl[i].Value);
Console.WriteLine();
}
// Retrieve a single attribute from the collection; specifically, the
// attribute with the name "misc".
XmlAttribute attr = attrColl["misc"];
// Retrieve the value from that attribute.
String miscValue = attr.InnerXml;
Console.WriteLine("Display the attribute information.");
Console.WriteLine(miscValue);
}
}
Этот пример выводит следующие данные:
Выходные данные
Отображает все атрибуты из коллекции.
Консоль
genre = novel
ISBN = 1-861001-57-5
misc = sale item
Display the attribute information.
sale item
Информация из коллекции атрибутов может быть получена по имени или по значению индекса. В примере показано получение данных по имени. В следующем примере показано получение данных по значению индекса.
XmlAttributeCollection является коллекцией, которую можно обходить по имени или индексу. В этом примере мы выбираем из коллекции первый атрибут по индексу (нумерация начинается с нуля) и применяем файл baseuri.xml в качестве источника входных данных.
Входные данные
C#Копировать
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
// Create the XmlDocument.
XmlDocument doc = new XmlDocument();
doc.Load("http://localhost/baseuri.xml");
// Display information on the attribute node. The value
// returned for BaseURI is 'http://localhost/baseuri.xml'.
XmlAttribute attr = doc.DocumentElement.Attributes[0];
Console.WriteLine("Name of the attribute: {0}", attr.Name);
Console.WriteLine("Base URI of the attribute: {0}", attr.BaseURI);
Console.WriteLine("The value of the attribute: {0}", attr.InnerText);
}
}
2.21. Получение единичного узла атрибута
Для получения из элемента одного узла атрибута используется метод XmlElement.GetAttributeNode. Он возвращает объект типа XmlAttribute. Для полученного объекта XmlAttribute доступны все методы и свойства класса System.Xml.XmlAttribute, например, значение OwnerElement.
C#
using System;
using System.IO;
using System.Xml;
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.LoadXml("
"" +
"
14.95
" +
"
// Move to an element.
XmlElement root = doc.DocumentElement;
// Get an attribute.
XmlAttribute attr = root.GetAttributeNode("ISBN");
// Display the value of the attribute.
String attrValue = attr.InnerXml;
Console.WriteLine(attrValue);
}
}
Можно также поступить как в предыдущем примере, где единичный узел атрибута был получен из коллекции атрибутов. Следующий пример демонстрирует, как с помощью одной строки кода получить по значению индекса один атрибут из корневого элемента дерева XML-документа, существующего в виде свойства DocumentElement.
C#
XmlAttribute attr = doc.DocumentElement.Attributes[0];
2.22. Считывание объявлений сущностей и ссылок на сущности в DOM
Сущность является декларацией, определяющей имя, которое будет использоваться в XML-документе вместо содержимого или разметки. Сущность состоит из двух частей. Во-первых, в декларации сущности необходимо связать имя с заменяющим его содержимым. Декларация сущности создается с помощью синтаксиса определения DTD или схемы XML. Во-вторых, определенное в декларации сущности имя впоследствии используется в XML-документе. При использовании в XML-документе оно называется ссылкой на сущность. Например, следующая декларация сущности определяет сущность с именем publisher, связанную с содержимым «Microsoft Press».
В следующем примере показано использование декларации сущности в XML в качестве ссылки на сущность.
Некоторые средства синтаксического анализа автоматически развертывают сущности при загрузке документа в память. Поэтому, когда XML-документ считывается в память, декларации сущностей запоминаются и сохраняются. Если средство синтаксического анализа впоследствии встречает символы &;,