Файл: Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 586
Скачиваний: 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 Задание на работу (рабочее задание)
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");
XmlNode priceNode = document.SelectSingleNode(@"/bk:bookstore/bk:book/bk:price", manager);
Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault);
Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil);
Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement);
Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType);
Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity);
priceNode.InnerXml = "A";
XmlNodeList priceNodes = document.SelectNodes(@"/bk:bookstore/bk:book/bk:price", manager);
XmlNode lastprice = priceNodes[priceNodes.Count - 1];
lastprice.InnerXml = "B";
// Validate the XML document with the invalid changes.
// The invalid changes cause schema validation errors.
document.Validate(ValidationEventHandler);
// Correct the invalid change to the first price element.
priceNode.InnerXml = "8.99";
// Validate only the first book element. The last book
// element is invalid, but not included in validation.
XmlNode bookNode = document.SelectSingleNode(@"/bk:bookstore/bk:book", manager);
document.Validate(ValidationEventHandler, bookNode);
}
catch (XmlException ex)
{
Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message);
}
catch(XmlSchemaValidationException ex)
{
Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message);
}
}
static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
Console.Write("\nWARNING: ");
else if (args.Severity == XmlSeverityType.Error)
Console.Write("\nERROR: ");
Console.WriteLine(args.Message);
}
}
В примере в качестве входных данных используется файл contosoBooks.xml.
В примере в качестве входных данных также используется файл contosoBooks.xsd.
При проверке XML-данных в процессе их загрузки в модель DOM примите во внимание следующее.
-
В приведенном выше примере в случае обнаружения недействительного типа всегда вызывается обработчик событий ValidationEventHandler. Если обработчик события ValidationEventHandler не установлен на проверяющий XmlReader, при вызове XmlSchemaValidationException возникает исключение Load, когда какой-либо тип атрибута или элемента не совпадает с соответствующим типом, указанным в проверяющей схеме. -
Когда XML-документ загружается в объект XmlDocument с ассоциированной схемой, которая определяет принимаемые по умолчанию значения, объект XmlDocument рассматривает эти используемые по умолчанию значения так, как если бы они были указаны в документе XML. Это означает, что свойство IsEmptyElement всегда возвращает значение false для элемента, который получил значение по умолчанию из схемы. Даже если в XML-документ элемент был записан как пустой.
2.38. Проверка XML-документа в DOM
Метод Validate класса XmlDocument сверяет XML-данные, загружаемые в модель DOM, со схемами, содержащимися в свойстве XmlDocument объекта Schemas. После успешной проверки применяются настройки схемы по умолчанию, текстовые значения по необходимости преобразуются в атомарные, а сведения о типах ассоциируются с проверенными информационными элементами. В результате типизированные XML-данные заменяют ранее не типизированные XML-данные.
Публикуемый ниже пример аналогичен примеру, приведенному ранее в подразделе «Проверка XML-документа в процессе его загрузки в модель DOM». В этом примере XML-документ проверяется не в процессе загрузки в модель DOM, а по завершении данного процесса. При этом используется метод Validate класса XmlDocument. Метод Validate сверяет XML-документ со схемами XML, содержащимися в свойстве Schemas объекта XmlDocument. Затем в XML-документ вносятся недействительные изменения; документ вновь подвергается проверке, что приводит к появлению ошибок проверки схемы. Наконец, одна из ошибок исправляется, после чего часть XML-документа подвергается частичной проверке.
C#
using System;
using System.Xml;
using System.Xml.Schema;
class XmlDocumentValidationExample
{
static void Main(string[] args)
{
try
{
// Create a new XmlDocument instance and load
// the XML document into the DOM.
XmlDocument document = new XmlDocument();
document.Load("contosoBooks.xml");
// Add the XML schema for the XML document to the
// Schemas property of the XmlDocument.
document.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
// Validate the XML document loaded into the DOM.
document.Validate(ValidationEventHandler);
// Make an invalid change to the first and last
// price elements in the XML document, and write
// the XmlSchemaInfo values assigned to the price
// element during validation to the console.
XmlNamespaceManager manager = new XmlNamespaceManager(document.NameTable);
manager.AddNamespace("bk", "http://www.contoso.com/books");
XmlNode priceNode = document.SelectSingleNode(@"/bk:bookstore/bk:book/bk:price", manager);
Console.WriteLine("SchemaInfo.IsDefault: {0}", priceNode.SchemaInfo.IsDefault);
Console.WriteLine("SchemaInfo.IsNil: {0}", priceNode.SchemaInfo.IsNil);
Console.WriteLine("SchemaInfo.SchemaElement: {0}", priceNode.SchemaInfo.SchemaElement);
Console.WriteLine("SchemaInfo.SchemaType: {0}", priceNode.SchemaInfo.SchemaType);
Console.WriteLine("SchemaInfo.Validity: {0}", priceNode.SchemaInfo.Validity);
priceNode.InnerXml = "A";
XmlNodeList priceNodes = document.SelectNodes(@"/bk:bookstore/bk:book/bk:price", manager);
XmlNode lastprice = priceNodes[priceNodes.Count - 1];
lastprice.InnerXml = "B";
// Validate the XML document with the invalid changes.
// The invalid changes cause schema validation errors.
document.Validate(ValidationEventHandler);
// Correct the invalid change to the first price element.
priceNode.InnerXml = "8.99";
// Validate only the first book element. The last book
// element is invalid, but not included in validation.
XmlNode bookNode = document.SelectSingleNode(@"/bk:bookstore/bk:book", manager);
document.Validate(ValidationEventHandler, bookNode);
}
catch (XmlException ex)
{
Console.WriteLine("XmlDocumentValidationExample.XmlException: {0}", ex.Message);
}
catch(XmlSchemaValidationException ex)
{
Console.WriteLine("XmlDocumentValidationExample.XmlSchemaValidationException: {0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("XmlDocumentValidationExample.Exception: {0}", ex.Message);
}
}
static void ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs args)
{
if (args.Severity == XmlSeverityType.Warning)
Console.Write("\nWARNING: ");
else if (args.Severity == XmlSeverityType.Error)
Console.Write("\nERROR: ");
Console.WriteLine(args.Message);
}
}
В этом примере в качестве входных данных используются файлы contosoBooks.xml и contosoBooks.xsd, упоминавшиеся ранее в подразделе «Проверка XML-документа в процессе его загрузки в модель DOM».
2.39. Обработка ошибок проверки и предупреждений
Сообщения об ошибках проверки схемы XML выдаются при проверке XML-данных, загружаемых в модель DOM. Пользователь извещается обо всех ошибках проверки схемы, обнаруженных в процессе проверки загружаемых XML-данных, или при проверке ранее не подвергавшегося проверке XML-документа.
Ошибки проверки обрабатываются с помощью обработчика ValidationEventHandler. Если обработчик ValidationEventHandler был назначен экземпляру XmlReaderSettings или передан методу Validate класса XmlDocument, ValidationEventHandler будет обрабатывать ошибки проверки схемы; иначе возникнет исключение XmlSchemaValidationException при обнаружении ошибки проверки схемы.
Примечание
XML-данные загружаются в модель DOM, несмотря на возникновение ошибок проверки схемы, если обработчик ошибок ValidationEventHandler не вызовет исключение для остановки процесса.
Предупреждения проверки схемы не выводятся, если на объекте ReportValidationWarnings не установлен флаг XmlReaderSettings.
Примеры, иллюстрирующие работу ValidationEventHandler, см. выше в подразделах «Проверка XML-документа в процессе его загрузки в модель DOM» и «Проверка XML-документа в модели DOM».
2.40. Сохранение и запись документа
При загрузке и сохранении XmlDocument между сохраненным и исходным документами возможны следующие различия:
-
Если свойство PreserveWhitespace имеет значение true перед вызовом метода Save, то пробелы в документе при выводе сохраняются. Если свойство имеет значение false, то XmlDocument автоматически вставляет отступы в выходные данные. -
Все пробелы между атрибутами сокращаются до одного символа пробела. -
Пробелы между элементами изменяются. Значащие пробелы сохраняются, а незначащие - нет. Но при сохранении документа по умолчанию используется режим XmlTextWriter Отступ, обеспечивающий аккуратный внешний вид при печати и удобство чтения. -
Символ кавычки вокруг значений атрибута по умолчанию заменяется символом двойной кавычки. Выбрать в качестве символа кавычки двойную кавычку или одинарную кавычку можно с помощью свойства QuoteChar класса XmlTextWriter. -
По умолчанию символы числовых сущностей, например {, развертываются. -
Значение отметки порядка байт во входном документе не сохраняется. UCS-2 сохраняется как UTF-8, если явно не создана XML-декларация, указывающая другую кодировку. -
Если требуется записать XmlDocument в файл или поток, то записываемые выходные данные не будут отличаться от содержимого документа. То есть, XmlDeclaration записывается только если объявление содержится в документе, а кодировка, используемая при записи документа, совпадает с указанной в узле декларации.