Skip to content

Instantly share code, notes, and snippets.

Created August 29, 2017 02:53
Show Gist options
  • Save anonymous/b3588606515897edcb5b427b4686ba93 to your computer and use it in GitHub Desktop.
Save anonymous/b3588606515897edcb5b427b4686ba93 to your computer and use it in GitHub Desktop.
Xml формат описание

Xml формат описание


Xml формат описание



Описание данных с помощью XML
Основы XML для начинающих пользователей
XML это:


























Если вы программируете на Java, за последние пару лет вам наверняка часто приходилось слышать об XML. Эта лекция поможет вам максимально быстро освоиться с технологией XML и с сопутствующей терминологией, так что вы вскоре сможете оценить все преимущества XML. Расширяемый язык разметки Extensible Markup Language, XML , созданный в году Консорциумом W3C World Wide Web Consortium , является подклассом стандартного языка разметки Standard Generalized Markup Language, SGML. XML был задуман как гибкий и в то же время формальный метаязык для использования в Интернете. Метаязык metalanguage — это язык, предназначенный для описания других языков. Например, можно сказать, что словарь английского языка в совокупности с английской грамматикой образуют метаязык, описывающий английский язык. Что касается языка XML, то назначение его — описывать языки разметки. В языке разметки markup language для структурирования данных используются теги. Язык гипертекстовой разметки Hypertext Markup Language, HTML , наиболее распространенный на сегодняшний день язык разметки, исходно был написан на SGML, но мог бы быть и в какой-то степени был написан и на XML. Язык HTML был задуман для решения специфических задач — разметки документов научной и академической направленности. Многие называют XML заменой HTML, но это не совсем точное высказывание. В то время как HTML содержит фиксированный набор тегов, в XML теги вообще отсутствуют. Вместо этого XML позволяет программисту самому создать такой язык разметки, который в точности соответствует требованиям конкретного приложения. В нашего курса мы проиллюстрируем процесс создания приложения, относящегося к области электронной коммерции. В приложениях XML обычно используются следующие типы данных и вспомогательные функции: XML и электронная коммерция. Для разработчиков web-приложений привычными являются рассуждения о том, что делают с текстом те или иные теги. Тем не менее фактически этот тег не имеет какого-либо собственного значения. В случае HTML такой программой обычно является web-браузер. Поскольку документы HTML создаются обычно в предположении, что их будут читать с помощью web-браузера, многие теги HTML указывают, как следует форматировать данные, но не содержат никакой информации для обычного человека. Назначение XML заключается как раз в том, чтобы отделить данные, содержащиеся в документе, от кода, который задает формат отображения этих данных. Это свойство XML позволяет извлекать данные из документа автоматически, то есть с помощью программных средств. К примеру, предположим, что вы — торговый посредник и занимаетесь продажей электрических лампочек. На вашем web-сайте приводится самая свежая информация о ценах на товары от различных производителей. Пусть одним из ваших поставщиков является фирма ABC Lightening. Код HTML для таблицы, содержащей информацию о товарах [Все представленные в курсе тексты программ можно найти на сайте издательства по адресу www. Документ HTML только определяет, как должен быть отформатирован данный текст. Автоматическое извлечение информации из статической страницы HTML даже в лучшем случае окажется весьма непростой задачей. Но при этом вы рискуете тем, что ваша программа перестанет работать, если изменится дизайн web-сайта ABC Lightening или просто поменяется название данного товара. Вполне вероятно, что некоторые фирмы-производители динамически создают свои web-сайты на основе информации из баз данных. В таком случае вы можете договориться с web-мастером каждого сайта об обмене информацией прямо из баз данных, но этот процесс требует времени и может происходить по- разному для каждой базы данных, из которой вам требуется получить информацию. Было бы гораздо проще, если сам документ был бы организован так, чтобы из него было легко извлекать содержательную информацию. Документ XML, содержащий информацию о товарах. Первая строка этого документа — объявление XML, которое содержит информацию, предназначенную для анализатора XML. Объявление XML XML declaration идентифицирует тип документа и версию XML, которая использовалась при создании документа. Эта строка не является обязательной, но, как правило, именно с нее начинается документ XML. Следующая строка — это объявление типа документа document type declaration , которое указывает, какому DTD соответствует этот документ. В данном случае используется определение DTD, называемое catalog. Обратите внимание на то, что, хотя аббревиатуры совпадают, имеется большая разница между определением типа документа сокращенно DTD — Document Type Definition и объявлением типа документа. Объявление типа документа используется, чтобы указать, какому определению типа документа соответствует данный документ XML. В объявлении типа документа также указывается корневой элемент документа. Корневой элемент root element — это элемент, который включает в себя все остальные элементы документа. Часть имени элемента, расположенная перед двоеточием, идентифицирует пространство имен тега. Пространства имен не являются обязательными, но их можно использовать для того, чтобы гарантировать уникальность тегов. Ниже показано, как может выглядеть определение catalog. Это DTD показывает, какие элементы могут появиться в каталоге, а также определяет порядок их следования и число появлений. С использованием данных XML и DTD автоматическая идентификация и извлечение полезных данных из документа XML становятся довольно простым делом, в чем вы убедитесь, изучив этот курс. Следующие web-ресурсы содержат информацию о последних разработках в области XML, планах на будущее и инструментальных средствах, полезных при работе с XML: XML можно применять как на стороне сервера, так и на стороне клиента. Следующие два раздела рассказывают о принципах применения XML в каждой из этих областей. Кроме того, XML можно использовать для хранения данных, о чем говорится в третьем разделе. XML на стороне клиента. На стороне клиента XML позволяет достичь такого уровня соответствия конкретным условиям представления данных, которого очень трудно или невозможно достичь с использованием HTML. Обычно, если даже имелась готовая страница, предназначенная для web-браузера, для подобных устройств приходилось полностью ее переделывать, то есть фактически создавать новую версию этой страницы. Однако благодаря структурированным данным документа XML, в котором содержательные данные отделены от форматирующих указаний, все, что вам надо сделать для приведения страницы в соответствие с каждым конкретным отображающем ее прибором, — это применить к имеющимся данным нужную таблицу стилей. XML на стороне сервера. В наши дни XML оказывает очень большое влияние на организацию работы сервера. Один из способов применения XML на стороне сервера — передача сообщений messaging , то есть обмен данными между приложениями или компьютерами. Чтобы приложения и компьютеры могли обмениваться информацией, для них должен быть определен единый формат сообщений. Представить себе то огромное влияние, которое XML может иметь в этой области, невозможно, не зная, хотя бы в общих чертах, истории передачи сообщений. Выбор стандарта для этого остается проблемой с тех времен, когда люди начали общаться между собой, но здесь я имею в виду только последние 30 лет. Механизм EDI Electronic Data Interchange , предназначенный для обмена данными в электронной форме, начинает свою историю с х годов, когда он был впервые предложен Комитетом по координации передачи данных Transportation Data Coordinating Committee, TDCC. В таких отраслях деятельности, как финансовая, где сетевые технологии начали применяться уже более тридцати лет назад, EDI служил в качестве стандартного формата обмена сообщениями. Недостаток систем EDI заключается в том, что их установка и поддержка обходятся дорого и, кроме того, они часто требуют выделенных линий. В х годах началось бурное распространение и внедрение в фирмах систем электронной почты для рабочих групп. По мере того как производители пытались утвердить свои варианты таких систем в качестве стандарта, все больше фирм переходило на использование в своем бизнесе электронной почты. Такие пакеты, как Microsoft Mail и Lotus cc: Mail, позволяли небольшим компаниям обмениваться электронными сообщениями в пределах своей внутренней сети, но при попытке увеличить ее охват обычно начинались проблемы, управление сетью становилось все более трудной задачей. Также оказалось сложным объединить с внешним миром локальную сеть Local Area Network, LAN. Результат, как и всегда в отношении компьютерных технологий, заключался в том, что передача сообщений становилась все более децентрализованной. По мере того как передача электронных сообщений отходила от первоначальной централизованной, строго контролируемой системы, требующей выделенных линий связи, в эту технологию вовлекалось все больше пользователей. Децентрализация привела также к огромным проблемам в отношении совместимости различных форматов, к дублированию разработок в области электронной коммуникации и к невозможности организованного ее развития. Ко времени появления Интернета все уже очень хорошо понимали необходимость стандартизованного и в то же время гибкого способа организации передачи сообщений как между отдельными людьми, так и между компаниями, занимающимися электронной коммерцией. Широко доступный стандартный формат электронных сообщений имел бы огромное влияние на любой вид обмена информацией, как коммерческой, так и некоммерческой. В первую очередь нужно было договориться о языке, и здесь XML оказался наиболее подходящим кандидатом. Основная причина, по которой XML прекрасно подходит для создания форматов передачи сообщений, — это его простота. XML подчиняется строго определенному стандарту, он не связан с какой-либо операционной системой или производителем, он совместим с большим количеством инструментальных средств и приложений, которые на протяжении многих лет разрабатывались для SGML. Требование строгого соответствия документов XML стандартам, установленным для правильно оформленных well-formed документов, гарантирует, что любой анализатор XML будет в состоянии прочесть и осмыслить любой документ XML. Кроме того, гораздо больше людей знакомы с языками разметки, чем с форматами сообщений, необходимыми для построения систем EDI. Благодаря XML формат сообщений может разработать любой, кто способен составить правильно оформленный документ XML. Другой областью применения XML в web-документах является определение метасодержимого. Метасодержимое, или сведения о содержимом, позволяет сделать работу поисковых машин гораздо эффективнее. Например, пусть вам нужно найти сообщения о последних событиях в городе Остин Austin штата Техас. Тогда вы задаете поисковой машине следующие слова: Поскольку большинство поисковых машин в настоящее время просто индексируют все содержимое сайта, имеется большая вероятность, что в результате такого поиска вам будет предложено множество не нужных вам документов, найденных по случайному совпадению. Если бы страницы, посвященные новостям из Остина, были написаны в виде структурированных документов XML, их поиск был бы гораздо более целенаправленным — вы могли бы указать, например, следующие параметры: Использование XML для хранения данных. XML подходит и для создания баз данных. В документе XML используется древовидная структура хранения данных. Хотя по большому счету хранение данных в виде документов XML не слишком эффективно, у такого способа хранения есть свои преимущества. Как и в отношении передачи сообщений, самым большим преимуществом является простота. Древовидная структура — интуитивно понятный и знакомый способ организации данных. Кроме того, почти любой тип древовидной структуры — от реляционных баз данных до объектно-ориентированных баз данных и иерархических структур — может быть представлен с помощью дерева данных XML. Другое существенное преимущество использования XML для хранения данных заключается в том, что XML поддерживает набор символов Unicode. Unicode — это официальный путь реализации универсального набора символов Universal Character Set, UCS , определенного Международной организацией по стандартизации International Standards Organization, ISO ; иначе говоря, это универсальный стандарт кодировки символов для электронного представления текста и его компьютерной обработки. Для преобразования кодировок символов в фактический набор битов используются форматы преобразования UCS, или сокращенно — UTF UCS Transformation Formats. Спецификация XML требует, чтобы процессоры XML поддерживали два формата UTF: В UTF используются два байта для представления каждого символа. В UTF-8 для символов ASCII используется кодировка ASCII, занимающая один байт, а для символов, не входящих в ASCII, — кодировка переменной длины. Формат UTF-8 полезен, если вы хотите поддерживать совместимость с ASCII. Недостатком этого формата является то, что для представления остальных символов не входящих в ASCII в нем может потребоваться от 1 до 3 байтов. Если ваш текст в основном состоит из ASCII-символов, UTF-8 позволит вам сэкономить объем памяти. Если же вы используете другие символы, то этот формат, напротив, потребует излишних затрат. По умолчанию в XML применяют формат UTF Кодировка документа определяется в объявлении XML с помощью специального атрибута кодировки encoding , как показано в следующем примере: В, настоящее время HTML-браузеры, как правило, делают попытки отобразить любой документ, даже содержащий ошибки или использующий очень старую версию HTML. С другой стороны, процессоры XML должны сообщать о неисправимой ошибке в случае, если они встречают ошибку в разметке. Неисправимая ошибка fatal error означает, что приложение не может выполняться далее, и выдает сообщение об ошибке. Такая строгая обработка ошибок иногда называется драконовской draconian error-handling. Хотя этот способ обработки ошибок для тех, кто создает свои документы на HTML или на SGML, может показаться примитивным, в случае с XML он необходим, так как гарантирует, что любые XML-анализаторы будут воспринимать данный документ XML одинаково. Документ XML, соответствующий правилам синтаксиса XML, называется правильно оформленным well-formed. Если бы такая история приключилась и с языком XML, он стал бы совершенно бесполезным. Процессор XML XML processor — это программный модуль, который обеспечивает доступ приложений к данным, хранящимся в документах XML. Процессоры XML могут быть как проверяющими, так и не проверяющими допустимость validating документа. Проверяющий допустимость документа процессор определяет, существует ли для данного XML-документа DTD, и в случае положительного результата — соответствует ли структура документа правилам, указанным в DTD. Не проверяющий допустимость документа процессор должен удостовериться только в том, что документ соответствует правилам XML. Определение правильно оформленного документа XML. Весь текст XML-документа можно грубо разделить на две категории, символьные данные и разметку. Символьные данные character data — это все, что не является разметкой. Символьные данные можно подразделить еще на две категории: Как следует из названия, данные PCDATA — это данные, проверенные анализатором XML. Это означает, что в данном документе нет определения DTD. Наличие DTD в документах XML не является обязательным. Фактически приложения, в которых задействованы данные XML, часто не включают DTD в целях повышения эффективности в тех случаях, когда структура документа и возможность его многократного использования не являются важными факторами. Следом за объявлением XML идут элементы. Имя элемента называется его общим идентификатором Generic Identifier, GI или типом type. Текст между открывающим и закрывающим тегами называется содержимым content элемента. Элемент, лишенный содержимого, называется пустым элементом empty element. Открывающий и закрывающий теги пустого элемента можно объединить в один тег, поместив в его конец косую черту: Фактически существуют два типа пустых элементов: Чтобы различить эти два типа элементов, рекомендуется использовать пару открывающий тег, закрывающий тег для тех элементов, которые не содержат данных, и один тег для тех элементов, которые определены как пустые. У элементов могут быть атрибуты. Атрибут attribute — это пара имя-значение, расположенная в открывающем теге элемента. В следующем примере src, width и height являются атрибутами элемента img [Image — изображение, width — ширина, height — высота — Примеч перев ]. Для решения этой проблемы поместите пробел между символами br и косой чертой: В XML значения атрибутов должны быть заключены в одинарные или двойные кавычки. Список правил, которым должен соответствовать правильно оформленный документ XML, расположен в конце этой лекции. DTD и допустимость документа XML. DTD, или определение типа документа, — это способ явным образом определить структуру класса документов XML Например, в DTD для перечня животных может быть задано, что для каждого животного нужно указать его имя, вид и характерный звук, который издает это животное DTD для этого перечня может выглядеть так [Animal-list - список животных, animal — животное, name — имя, type — вид, sound — звук. Если бы это определение DTD было стандартным зоологическим определением фактически это не так , любой зоолог мог бы быть уверен, что его данные сможет прочесть любой другой зоолог и что для составления перечня животных все зоологи используют одни и те же правила Документ XML, который соответ- ствует правилам DTD, то есть какому-то конкретному определению, так же как и общим правилам XML, называется правильно оформленным и допустимым. Ниже показан пример правильно оформленного документа XML, который соответствует приведенному выше определению DTD: Слова, набранные в предыдущих примерах только прописными буквами, являются ключевыми словами XML. Это делается не просто из стилистических соображений. Язык XML чувствителен к регистру, поэтому процессор XML выдаст сообщение об ошибке, если в ключевом слове окажется хоть одна строчная буква. Таким образом, в XML слова DOCTYPE и Doctype не более похожи между собой, чем слова DOCTYPE и EGGDROP. Каждый элемент, который используется в документе XML, должен быть определен в DTD. Существует несколько правил, которым нужно следовать при именовании элементов: После первой буквы в имени элемента может содержаться любое количество букв, цифр, дефисов, точек или символов подчеркивания;. Хороший пример пустого элемента — элемент HTML img Чтобы этот элемент не нарушал принципа допустимости документа XML, нужно использовать синтаксис, определенный для пустого элемента XML: Если вам нужно, чтобы в элементе были только данные PCDATA, используется следующее объявление: В данном примере каждый из приведенных типов элементов должен появиться один раз и только раз внутри элемента mymemories в том порядке, в котором они перечислены в объявлении. Элементы, которые появляются в элементе mymemoires, называются его дочерними элементами, а сам элемент mymemoires называется родительским. Каждый элемент может быть дочерним по отношению к любому количеству других элементов в документе. Элементы, разделенные более чем одним уровнем в иерархической системе, называются внуками, правнуками и т. Вы можете создать более гибкие правила, используя операторы повторяемости. Ниже показаны три оператора: Ниже снова приведено объявление элемента mymemoirs, переписанное с использованием операторов повторяемости: Вы также можете указать, что некоторые элементы могут появиться как альтернатива другим элементам то есть что между ними нужно делать выбор с помощью вертикальной черты: В этом объявлении элемент mymemoirs может содержать один или более элементов lesson или conclusion, но не оба одновременно. Еще более сложные правила можно создавать с использованием вложенных скобок. Наименее строгим является правило, которое можно выразить словами: Если вы хотите указать, что в данном элементе могут появиться любые проверенные символьные данные или элементы, вы должны использовать ключевое слово ANY любой , как показано в следующем примере: Такое широкое правило, как элемент типа ANY, не вполне вписывается в строгую структуру XML. Вообще говоря, если вы создаете определение DTD, в котором используется ключевое слово ANY, вы, вероятно, делаете ошибку и вам следует поискать лучший способ определения. Атрибуты используются для связывания пар имя-значение с элементами. Они определяются с помощью специальных объявлений атрибутов. Атрибуты используются, чтобы сообщить дополнительную информацию об элементах. Иногда бывает трудно решить, является ли некоторый фрагмент данных элементом или атрибутом. Например, два следующих фрагмента XML можно использовать для достижения одной цели: Хотя выбор остается за вами, имеется несколько общих принципов. Мы расскажем о них в лекции 2, а сейчас вам просто следует запомнить, что этот выбор является непростой задачей для всех программирующих на XML. Существует девять различных типов атрибутов, которые подразделяются на три категории: Строковые атрибуты определяются с помощью ключевого слова CDATA, которое указывается в качестве типа атрибута, как показано в следующем примере: Существует несколько типов маркерных атрибутов. Наиболее важными являются ID и IDREF. Атрибуты типа ID используются для однозначной идентификации элементов. Атрибут ID должен однозначно идентифицировать тот элемент, в котором он содержится. Например, в следующем объявлении задается обязательный атрибут ID, используемый для идентификации товара: Атрибуты ID и IDREF можно использовать почти так же, как теги якоря А в HTML Значением атрибута IDREF должно быть значение атрибута ID какого-либо другого элемента то есть они задают перекрестную ссылку. В файле XML, который использует это DTD, может содержаться фрагмент, подобный следующему: В атрибутах перечислимых типов приводится список всех возможных значений этого атрибута. Существует несколько ключевых слов, которые можно использовать, чтобы указать, должен ли этот атрибут обязательно содержаться в элементе и должен ли он принимать какое-то фиксированное значение. В следующей небольшой таблице приведены эти ключевые слова и указано их значение. Если вы не включите в объявление атрибута ни одно из этих ключевых слов, то по умолчанию будет подразумеваться слово IMPLIED. Такой атрибут может не указываться в конкретных экземплярах элемента. Никакого значения для такого атрибута по умолчанию не предусматривается. Этот атрибут должен присутствовать в каждом экземпляре элемента и иметь указанное значение. Объявления сущностей позволяют использовать ссылки на сущность. Ссылка на сущность entity — это последовательность символов, которая автоматически подставляется вместо другой последовательности символов. Обычно ссылки на сущность требуются для того, чтобы обозначить символы, которые иначе могут быть приняты за символы разметки. Если вы имели дело с HTML, то, вероятно, сталкивались со ссылками на сущность. Наиболее распространенный тип сущности — это общая сущность general entity , то есть сущность, которую можно подставить вместо символов в документах XML Формат объявления общей сущности следующий: Их не обязательно объявлять в DTD, хотя в спецификации XML это сделать рекомендуется, чтобы гарантировать возможность взаимодействия с HTML и SGML. Пять встроенных сущностей перечислены в приведенной ниже таблице: Если эти символы не экранировать дважды в объявлениях сущности, то процессор XML будет интерпретировать их как начало нового фрагмента разметки, не дойдя до конца объявления сущности, и сгенерирует ошибку. Встроенные ссылки на сущности необходимы для создания документов XML, в которых любой из приведенных символов используется сам по себе, а не как фрагмент разметки Ссылки на общие сущности, которые вы определяете самостоятельно, удобны для присваивания имен последовательностям символов, которые вы часто используете. Символ торговой марки можно затем вставить в любой документ XML, в котором имеется DTD с этим объявлением. Хотя сущности можно использовать в определениях других сущностей, при этом следует постоянно учитывать основной принцип: Также можно объявлять ссылки на сущности, которые в DTD будут заменяться определениями сущности. Такой тип сущностей называется параметрическим. Ниже приведен пример использования параметрической сущности: Внешние сущности external entities — это способ включить внешние файлы в документ XML. Они объявляются следующим образом: Непроверенные сущности unparsed entities можно использовать для включения в документ XML данных в формате, отличном от XML. Для определения такой сущности используется ключевое слово NOATA. Непосредственно за ключевым словом NDATA следует ключевое слово нотации notation data keyword. Это ключевое слово объявляется с помощью объявления нотации. Объявления нотации notation declarations предоставляют дополнительную информацию например, для идентификации или, как в данном случае, сведения о формате для непроверенных данных. Проверенные символьные данные не могут содержать разметку. Имеется еще один вариант, который позволит вам обойтись без управляющей последовательности, — использовать раздел символьных данных CDATA section , чтобы пометить блок текста как непроверенные символьные данные. Комментарии могут располагаться в любом месте документа, но не внутри разметки. Также комментарии не могут употребляться внутри объявлений. Комментарии не являются частью символьных данных и не могут использоваться анализатором XML. В HTML комментарии часто используются в качестве контейнера текста, который не является частью документа, но доступен для программ. Например, команды CGI и JavaScript в документах HTML часто помещаются внутрь комментариев. Но анализаторы XML могут полностью игнорировать комментарии, поэтому в XML этим приемом не следует увлекаться, для этого имеются снециальные инструкции по обработке. Мой опыт подсказывает, что попытка сэкономить время на комментариях обычно приводит к тому же эффекту, что перевод часов на летнее время. Так же как за сэкономленный час светлого времени приходиться расплачиватся, несколько дней приспосабливаясь к новому режиму, так и пренебрежение комментариями ради экономии времени впоследствии принесет вам массу проблем. Инструкции по обработке Processing Instructions, PI используются для того, чтобы включить в документ информацию, предназначенную для приложений. Подобно комментариям, инструкции по обработке не считаются частью символьных данных документа. Но в отличие от комментариев, инструкции по обработке не игнорируются анализатором XML, а передаются приложениям. Первое слово в PI — это имя того приложения, для которого предназначается данная инструкция. Также можно использовать имя нотации, чтобы связать URI Uniform Resource Identifier, универсальный идентификатор ресурса с именем приложения. Следом за идентификационной информацией в PI может содержаться любой тип символьных данных. Ниже приведен пример PI: Эта инструкция инициирует воспроизведение соответствующим приложением файла формата трЗ. Хотя определения DTD в настоящее время являются стандартом определений типов документов XML, у них есть несколько серьезных ограничений. Определения DTD были унаследованы от языка SGML, где они были исходно разработаны для определения языков разметки, а не для создания схем баз данных. Самое существенное ограничение определения DTD заключается в том, что оно не обеспечивает достаточного контроля над содержимым элементов. Точно так же нельзя указать, что следующий элемент не является допустимым: Кроме того, вам может потребоваться задать более точные ограничения на количество появлений элемента в документе. С помощью DTD этого сделать не удастся. В результате этих ограничений, а также из-за того, что XML все больше используется для хранения данных, были предложены некоторые альтернативные варианты. В настоящее время среди них лидирует язык определений схем XML XML Schema Definition Language, XSD. На момент написания данного курса XSD находится в стадии разработки. Это означает, что к моменту, когда этот язык получит официальный статус, в нем могут произойти значительные изменения по сравнению с нынешней версией. Со спецификацией XSD можно ознакомиться по адресу www. Назначение схем XML то же, что и DTD: Основная разница между ними заключается в том, что в схемах XML все элементы подразделяются на два типа: Элементы, которые содержат другие элементы или атрибуты наряду с символьными данными, относятся к типу сложных complex , а те элементы, которые содержат только символьные данные, называются простыми simple элементами. Атрибуты всегда имеют простой тип. Элементы сложного типа определяются с помощью элемента compl exType. Как было уже сказано, элементы сложного типа содержат другие элементы и атрибуты. Элементы и атрибуты, содержащиеся внутри сложных элементов, определяются с помощью элементов element и attribute соответственно. Например, в листинге 1. Внутри определения типа ProductType определяются пять элементов: Элементы простого типа не имеют атрибутов и не содержат других элементов. В XSD имеется ряд встроенных простых типов, в том числе string, binary, boolean, double, float и т. На основе встроенных простых типов можно сконструировать дополнительные простые типы. В частности, в предыдущем примере определяется простой тип Sku, сконструированный на основании типа string. Процесс конструирования новых простых типов из уже существующих называется ограничением restriction. Обратите внимание, что в определении нового типа Sku используется регулярное выражение, задающее шаблон, которому должно соответствовать содержимое любого элемента или атрибута данного типа. В схемах XSD имеются гораздо более гибкие операторы повторяемости, чем в DTD. Как говорилось выше, в DTD можно указать, что элемент должен встретиться ноль, один, один или более или любое количество раз. В дополнение к этим операторам схема XML позволяет задавать минимальное и максимальное количество повторов одного элемента в документе, его значение или диапазон значений и т. Создание таблиц стилей с использованием XSL. Расширяемый язык таблиц стилей Extensible Stylesheet Language, XSL , как следует из его названия, — это язык для конструирования таблиц стилей. Таблицы стилей XSL используются для описания внешнего вида документов XML, предназначенных для чтения людьми. Например, web-дизайнер может создать таблицу стилей для XML-каталога товаров. В этой таблице стилей может быть указано, какие шрифты, размеры шрифтов и границ нужно использовать в документе, что фактически выполняется, когда сам документ объединяется с таблицей стилей с помощью процессора XSL. Применение таблицы стилей к документу процессор таблиц стилей осуществляет в два этапа. Первый этап — трансформация дерева tree transformation. Вы можете, например, написать таблицу стилей, которая расположит товары в вашем каталоге в алфавитном порядке или пронумерует их, прежде чем отобразить. Трансформация дерева позволяет также перемещать данные XML и выполнять вычисления с этими данными. Второй этап — форматирование formatting. Форматирование фактически представляет собой процесс задания стиля отображения данных, размеров шрифтов, разрывов страниц и т. Спецификация XSL содержит три различных языка, предназначенных для осуществления этих двух задач: XML Path Language XPath — язык для создания ссылок на различные части документа XML;. XSL Transformations XSLT — язык, предназначенный для генерации дерева документа;. Extensible Stylesheet Language XSL — XSLT плюс описание набора объектов форматирования и свойств форматирования. Предположим, что у вас имеется документ XML, описывающий вашу музыкальную библиотеку, например такой, как представленный в листинге 1. Пример каталога музыкальной библиотеки MyMusic. Допустим, вы хотите создать и напечатать список всего, что имеется в вашей библиотеке. Один из способов сделать это заключается в том, чтобы применить к документу MyMusic. Таблица стилей, генерирующая документ HTML CDstyle. Связать таблицы стилей с документом XML можно с помощью инструкции по обработке. Также вы можете использовать каскадные таблицы стилей Cascading Style Sheets, CSS для применения определенного формата к данным XML. В этом случае вы должны связать документ с таблицей стилей с помощью инструкции по обработке, подобной следующей: XSLT находит данные, которые соответствуют некоторому образцу, и вставляет их в нужное место шаблона. Поиск соответствия с образцом — очень важная часть XSL. Посмотрим на образец, который применялся во второй части нашего примера: Эта строка задает цикл по всем экземплярам элемента cd внутри элемента library. Если вы хотите создать разделенный запятыми список всех песен на каждом диске каждому диску соответствует свой экземпляр элемента cd , вы можете задать еще один цикл внутри приведенного выше цикла, как показано в следующем примере: Если получившийся документ XML открыть в браузере, поддерживающем XSL, то он будет выглядеть примерно так, как показано на рис. Результат применения таблицы CDstyle. Использование XML в приложениях. В данном курсе мы будем использовать базу данных XML, предназначенную для хранения каталога товаров, которыми торгует вымышленный электронный магазин. Хотя мы предполагаем, что доступ к данным XML непосредственно из приложений осуществляется достаточно быстро, все же для повышения эффективности можно импортировать XML-базу данных приложения в реляционную базу данных. В настоящее время все поставщики баз данных предлагают средства или планируют сделать это , позволяющие передавать данные между реляционной базой данных и документами XML, и ряд других вспомогательных инструментальных средств. Данные можно извлекать из любой базы данных и преобразовывать в данные XML, которые используются в приложении, при этом не приходится модифицировать само приложение. Вероятно, в этом и заключается основное преимущество создания приложений, рассчитанных на данные XML: XML — это стандарт, в который могут быть преобразованы данные любого типа, следовательно, приложение гарантированно сможет работать в будущем с данными любого нового типа. Теперь, когда вы убедились в том, что XML — это правильный выбор для создания каталогов, рассмотрим два различных подхода к написанию программ на Java, предназначенных для работы с XML. Язык SGML был ориентирован на документ как на единое целое, поэтому нет ничего удивительного в том, что и в отношении XML сначала использовался подход, связанный с объектной моделью документа Document Object Model, DOM. Любая обработка документа в соответствии с моделью DOM предполагает, что документ прошел синтаксический анализ и представлен в памяти в виде древовидной структуры, каждая часть которой одинаково доступна. Этот подход символически иллюстрирует рис. Когда люди начали программировать в соответствии с моделью DOM, быстро выяснилось, что это не очень удобно — приходилось строить объектную модель всего документа, даже если нужно было отобрать всего лишь несколько элементов. Кроме того, этот способ требует больших ресурсов памяти, что может сделать его использование затруднительным, если не сказать невозможным. В результате возникла необходимость в разработке другого способа, который получил название SAX Simplified API for XML — упрощенный интерфейс прикладного программирования для XML И DOM, и SAX представляют собой, таким образом, интерфейсы прикладного программирования, которые были реализованы как на Java, так и на других языках. Как показано на рис. В документации SAX есть термин событие event: Когда анализатор достигает конца документа, в памяти остается только то, что было сохранено вашим приложением. Как было сказано ранее и как показано на рис. Для программирования сервлетов и JSP JavaServer Pages полезными могут оказаться обе модели, что демонстрируют приведенные ниже примеры. На момент написания курса версия SAX 2. Программирование на основе DOM. Окончательная версия API для работы с объектной моделью документа находится в пакете org. Этот интерфейс API включает в себя определения интерфейсов и один класс исключений. Основная идея заключается в том, что документ XML преобразуется в документ DOM, состоящий из объектов Java, которые реализуют эти интерфейсы. Любая часть документа становится объектом, а связи между объектами отражают иерархическую структуру документа. С точки зрения программиста, нет ничего проще, чем создать документ DOM, поскольку вся работа фактически делается анализатором. Все, что должен сделать программист, — это создать входной поток, выбрать анализатор и отойти в сторону. XmlDocument Класс Xml Document реализует интерфейс Document, как указано в спецификации W3C. Если вы используете утилиты других пакетов, то конкретные имена могут измениться, но общий принцип останется прежним. В этом конкретном примере используются классы интерфейса прикладных программ Java для анализа XML Java API for XML Parsing, JAXP , предложенные компанией Sun, которые в настоящее время используются в ядре сервлетов servlet engine Tomcat. За последние годы было создано множество различных анализаторов XML, но только небольшое их число полностью соответствует рекомендациям DOM W3C. Последние тесты на совместимость показали, что наиболее высокий рейтинг в этом отношении имеет анализатор Sun. Имея в памяти объектную модель документа, вы можете манипулировать ею с помощью методов интерфейса DOM из пакета org. Программирование на основе SAX. Основные этапы обработки документа XML на основе SAX можно сформулировать следующим образом. Создание одного или нескольких пользовательских классов для обработки событий анализатора SAX. Создание анализатора на основе одного из пакетов инструментальных средств. Обработка всех событий в пользовательских классах, которая позволяет записать нужные данные, отследить ошибки и т. Как видно, обработка документов XML в модели SAX подчиняется совсем другой идеологии, чем в модели DOM. Выбор одного из этих двух подходов для конкретного приложения — самый важный выбор из тех, которые вам предстоит сделать. Сравнение программирования на основе DOM и SAX. Пропорциональны количеству элементов, которые требуется сохранить в памяти. Краткий справочник по правилам XML. Этот раздел можно считать кратким справочником по самым основным правилам XML. Полную спецификацию XML можно найти по адресу www. Требования к правильно оформленному документу XML. Каждый элемент должен иметь открывающий и закрывающий теги, за исключением пустых элементов, для которых предусмотрен специальный синтаксис пустого элемента. Имя открывающего тега должно совпадать с именем закрывающего тега. Заметим, что язык XML чувствителен к регистру. Элементы должны быть правильно вложены друг в друга. Имена элементов не могут начинаться с символов xml в любой комбинации верхнего и нижнего регистров. В именах элементов не должно содержаться двоеточия, за исключением пространств имен. Атрибуты не должны появляться более одного раза в открывающем теге или в теге пустого элемента. В значениях атрибутов не должны содержаться прямые или непрямые ссылки на внешние сущности. Ниже мы приводим общие сведения об элементах XML, в том числе о синтаксических правилах, регламентирующих применение элементов и их объявление. Ниже мы приводим формат объявления атрибутов. Сюда относятся синтаксис объявления атрибутов, их типы и ключевые слова, определяющие, является ли атрибут обязательным, и т. ATTLIST 11st type ordered bullet "ordered"? Ниже мы приводим краткие сведения об использовании и объявлении сущностей. Сюда относятся примеры применения сущностей и синтаксические правила, регламентирующие их объявление. Знаете ли Вы, почему "черные дыры" - фикция? Согласно релятивистской мифологии, "чёрная дыра - это область в пространстве-времени, гравитационное притяжение которой настолько велико, что покинуть её не могут даже объекты, движущиеся со скоростью света в том числе и кванты самого света. Граница этой области называется горизонтом событий, а её характерный размер - гравитационным радиусом. В простейшем случае сферически симметричной чёрной дыры он равен радиусу Шварцшильда". На самом деле миф о черных дырах есть порождение мифа о фотоне - пушечном ядре. Этот миф родился еще в античные времена. Математическое развитие он получил в трудах Исаака Ньютона в виде корпускулярной теории света. Корпускуле света приписывалась масса. Из этого следовало, что при высоких ускорениях свободного падения возможен поворот траектории луча света вспять, по параболе, как это происходит с пушечным ядром в гравитационном поле Земли. Отсюда родились сказки о "радиусе Шварцшильда", "черных дырах Хокинга" и прочих безудержных фантазиях пропагандистов релятивизма. Впрочем, эти сказки несколько древнее. В году математик Пьер Симон Лаплас писал: Фотон - это квантованная электромагнитная волна, то есть даже не объект, а процесс. А процессы не могут иметь веса, так как они не являются вещественными объектами. Это всего-лишь движение некоторой среды. Подробнее читайте в FAQ по эфирной физике. Введение в XML XML и электронная коммерция Области применения XML XML на стороне клиента XML на стороне сервера Использование XML для хранения данных Правила XML Определение правильно оформленного документа XML DTD и допустимость документа XML Объявления элементов Спецификация содержимого Объявления атрибутов Объявления сущностей Непроверенные символьные данные Разделы символьных данных Комментарии в XML Инструкции по обработке Схема XML Создание таблиц стилей с использованием XSL Использование XML в приложениях Модели программирования Программирование на основе DOM Программирование на основе SAX Краткий справочник по правилам XML Требования к правильно оформленному документу XML Элементы Применение Объявление Атрибуты Сущности Применение Объявления. Этот атрибут должен присутствовать в каждом экземпляре элемента. Требования к ресурсам памяти. Могут оказаться довольно высокими. Невысокая, так как анализируются все элементы. Высокая, особенно если нужные элементы легко локализуются. Сравнительно высокая, так как все элементы уже находятся в памяти. Сравнительно невысокая, так как каждый поиск подразумевает новый проход анализатора по документу. Ограничена необходимостью создания нового документа XML для каждого прохода анализатора. ID IDREF IDREFS ENTITY ENTITIES NMTOKEN NMTOKENS. Может использоваться только в данных XML. ENTITY stockquotes SYSTEM "quotes. Используется для включения внешних файлов XML. ENTITY picture SYSTEM "picture. Используется для включения файлов, не являющихся файлами XML. НОВОСТИ ФОРУМА Рыцари теории эфира.


Файл XML: что это такое и как его открыть?


По материалам статьи Leon Platt: XML IN 20 MINUTES! Объектная модель документов XML 2. Загрузка XML файла 2. Исследование объектной модели документов XML 2. Текстовые узлы и узлы CDATA 2. Ошибки при загрузке документа 2. Запросы к XML документу 2. Использование XPATH для выполнения запросов к объектной модели документов 3. Преобразование ADO в XML. С помощью этой статьи, вы быстро погрузитесь в XML. Я буду брать предметы из повседневной жизни, и пытаться описывать их, используя XML. Затем я загружу файл XML в объектную модель документов XML. После этого я продемонстрирую, как запрашивать XML документы с помощью XPath и проделывать некоторые основные манипуляции над ними. Все эти действия будут продемонстрированы с использованием простого приложения на Visual Basic и Microsoft Parser версии 3. Заключительной целью этой статьи будет разработка элемента управления ActiveX , который будет запрашивать данные из базы данных pubs на SQL Server и возвращать список наименований книг в формате XML. Если кто-либо из вас когда-нибудь пытался изучить XML своими силами, Вы возможно встречались со многими сбивающими с толку понятиями, обрушившимися и на меня в свое время. DTD, XML Schema, пространства имен namespaces , XPath, XPointers, XSL, XSLT, DOM, SAX, SOAP, Все, я сдаюсь. Добавлю лишь, что большинство из этих материалов основано на реализациях, код которых может содержать ошибки. Наверняка существуют миллионы способов реализации и использования XML, но они все могут быть достаточно сложны. А знаете, XML может быть и очень простым. Если мы забудем про DTD, XML Schemas, пространства имен namespaces , и т. Стараясь быстрее обучить вас работе с XML, я буду по возможности игнорировать приличную долю информации, которую вы и так сможете прочитать в соответствующей литературе. И первое что я собираюсь проигнорировать, это пространства имен namespaces и схемы schemas. Вам это может показаться странным, так как большинство книг начинаются именно с объяснения этих понятий, но постарайтесь думать об XML как о средстве решить конкретную задачу, как, например, о молотке. Для того чтобы пользоваться молотком, разве обязательно знать, как построить дом? Что если все что мне нужно, это просто вбить гвоздь чтобы повесить на него картину? То же самое и с XML, он может быть и очень сложным, достаточно универсальным для использования в сотнях, если не в тысячах приложений, и очень простым, если не обращать внимания на некоторые вещи. В этой статье, я буду концентрироваться на решении конкретных проблем с помощью XML. Так в чем же собственно проблема? Давайте предположим, что я хочу описать простой объект, например стакан, используя XML. Зачем я собираюсь использовать XML для этого? Ну, во-первых, это как раз то, для чего и предназначен XML. В моем примере, стакан, это и есть данные. Во вторых, XML расширяем. XML позволяет мне создавать столько признаков, сколько необходимо для описания данных и эти признаки будут такими, какими я захочу. И, наконец, потому что XML быстро становится стандартом. Если на Марсе есть жизнь, то можете не сомневаться, что они там смогут понять мой XML файл. Материал, из которого он сделан Прозрачный ли материал или нет Высота в дюймах Количество унций, которое в него помещается Его содержимое Описание любых твердых тел и их количества Описание любых жидкостей и их объема Описание любой другой субстанции и ее количество Имеет или не имеет он крышку. Заметьте, что первая строка файла имеет специальный вид, пока, просто запомните, что она должна быть тут. Прелесть формата XML в том, что любой может понять, о чем в нем говориться, просто внимательней взглянув на него. Понятно также, что это не единственное из возможных XML описаний стакана. Если я попрошу 10 человек разработать XML описание стакана с одинаковыми свойствами, возможно, все они создадут разные, но верные описания. Вот тут как раз и кроется проблема. Возможно не для нас, людей, но когда компьютер читает XML файл, то было бы отличной идеей, дать ему знать, о чем этот файл. Вот тут и всплывает пространство имен namespaces и схемы schemes. Проще говоря, схемы используются для определения адекватной структуры для XML файла. Теперь настало время поговорить о нескольких простых правилах XML, которым необходимо придерживаться:. Адекватный XML файл должен в точности соответствовать своей схеме. Но для простоты понимания материала, ни один из моих примеров не будет использовать схемы. Таким образом, строго говоря, ни один из моих примеров не "адекватный". Но, честно говоря, мне все равно. Я не собираюсь строить дом, мне нужно всего лишь повесить картину. Я подробней расскажу об этом позже, когда будем обсуждать объектную модель документов XML. Если вы программируете на VB, запомните: XML чувствителен к регистру. Напишите это предложение раз и никогда не забудете. Тэги принято называть элементами и каждый открывающийся тэг, должен иметь соответствующий ему закрывающийся тэг. Следуя этому правилу, у вас получится правильный XML файл. Это очень важно, потому что до тех пор, пока XML файл не будет правильно оформлен, он не будет проанализирован и не загрузится в объектную модель документов. Элементы могут содержать атрибуты, а значения атрибутов должны быть заключены в кавычки одинарные или двойные. Можно несколько раз использовать имена атрибутов, но имена элементов должны быть уникальны для всего файла. Значение атрибута зависит от контекста его использования. Тогда как значение элемента всегда означает одно и то же, независимо от того, в каком месте файла атрибут находится. В XML есть несколько специальных символов, которые не могут быть использованы напрямую, потому что являются зарезервированными в синтаксисе XML. Такая конструкция может встречаться в любом месте, но она не может быть вложенной. Объектная модель документов XML позволяет программистам загружать содержимое XML файла в память. Как только XML файл загружен таким образом, с ним можно работать, используя свойства, методы и события объектной модели документов. Вот где как раз и проявляется польза XML. Объектная модель документов значительно облегчает выборку и обработку информации XML файла. Я не буду тут рассказывать обо всех возможностях объектной модели документов, расскажу лишь о некоторых основных возможностях, которые помогут в достижении цели этой статьи. Я возьму только что созданный XML файл с описанием стакана, загружу его в объектную модель документов и проделаю несколько действий с ним. Остальные особенности и возможности объектной модели документов я приберегу для следующей статьи, рассказывающей о клиентском XML. Заметьте, не смотря на то, что объектная модель документов очень хороша и удобна для разработчиков, она требует довольно значительного объема системных ресурсов. Поэтому существует еще один метод анализа XML файлов, известный как SAX. Моя статья не претендует на исчерпывающий источник информации по этому вопросу, поэтому было бы полезно также воспользоваться XML SDK. Если у вас нет анализатора, то последнюю версию можно скачать с сайта Microsoft. Предположим, я сохранил пример описания стакана в формате XML в файл "http: Следующий код предполагает, что анализатор уже загружен и работает. Код на Visual Basic 6. В этой первой строке определяем ссылку на "Microsoft XML, v3. В этой строке я определил переменную xmlDoc как ссылку на XML документ. MSXML2 это библиотека используйте это название, не пытайтесь написать MSXML3, это не будет работать. DOMDocument30 определяет объект XML документа соответствующий версии 3. Вы также можете встретить такой код: Такой конструкцией обычно пользуются, когда не хотят указывать конкретную версию XML документа. В этом случае будет использоваться зарегистрированный по умолчанию в системе анализатор. Проблема может быть только в том, что версия анализатора, зарегистрированная по умолчанию, может отличаться на разных компьютерах. Если вы хотите быть уверенными в том, что написанный вами код будет работать с любой версией анализатора, то не используйте в нем специфических для конкретных версий анализатора конструкций. Потому, что нет никакой гарантии, что у пользователя, который будет пользоваться вашим кодом, установлена имена та версия анализатора, под которую вы писали свой код. Еще одно преимущество разработки кода, независимого от версии анализатора в том, что когда выходит более новая версия анализатора, у нее обязательно будет обратная совместимость с предыдущими версиями, и вам не придется перекомпилировать ваш код. В этой строке происходит инициализация переменной xmlDoc как нового экземпляра объекта XML документа версии 3. Файлы XML могут быть загружены либо в синхронном, либо в асинхронном режиме. В этой строке вызывается метод загрузки указанного XML файла. Существует два вида метода загрузки. Первый, который написан в строке 5, загружает файл в объектную модель документов, и при этом нужно обязательно передавать полный путь до XML файла. Второй вариант загрузки предусматривает передачу в качестве параметра xml строку. Такой вид загрузки мог бы быть вызван, например, так: Я покажу, как пользоваться этим способом позже. Эта строка отображает содержимое загруженного XML файла. В результате мы должны получить тот исходный XML файл, который создали ранее. Создайте в Visual Basic новый проект и назовите его standard. Вставьте приведенный выше код в метод загрузки главного окна вашего проекта. Убедитесь, что вы объявили ссылку именно на "Microsoft XML v3. Заметьте, анализатор версии 3. Установите точки остановки на последней строке кода msgbox xmlDoc. Запустите приложение в режиме отладки. Когда процесс выполнения дойдет до точки остановки, вызовите окно "Locals" и посмотрите объектную модель документов. Можно многое узнать, просматривая то, что отображено в этом окне. Окно "Locals" должно быть похоже на то, что изображено на рисунке ниже. Вот некоторые интересные свойства объектной модели документов. Item1 это корень ветви элементов документа не обращайте на нее внимания Item2 на самом деле первый элемент документа запомните это. Они могут быть узлами элементов, текстовыми узлами и узлами CDATA. Могут быть и другие типы узлов, про которые я сейчас рассказывать не стану, но вы сможете узнать все про них в XML SDK. XML строка начинается с текущего узла и проходит вниз до конца дерева. Это очень полезное свойство. Поэкспериментируете с ним и увидите, что получится. Узел элементов может содержать узлы потомки элементов, атрибутов, текста или CDATA. Из рисунка ниже видна следующая информация об узле "SOLID":. Его родительский элемент CONTENTS имеет 4 потомков. Это можно увидеть на следующем рисунке, но SOLID имеет одного потомка, который имеет текстовый тип данных. Узлы атрибутов могут состоять только из текстовых или CDATA узлов-потомков. На следующем рисунке показано, какая информация может быть получена об узле "qty":. Из следующего рисунка также понятно, что qty имеет одного потомка, который имеет текстовый тип данных. Текстовые или CDATA узлы не содержат потомков. Текстовые узлы содержат обработанные текстовые данные своего родительского узла. CDATA содержат необработанные текстовые данные своего родительского узла. CDATA узлы создаются, когда данные в XML файле специальным образом обрамлены. Метка CDATA говорит анализатору не разбирать данные и принимать символы внутри этой метки как данные. Секция CDATA особенно полезна, когда нужно вставить код внутрь XML файла. На следующем рисунке показано, какая информация может быть получена из текущего текстового узла:. Секция parseError объектной модели документов может оказаться полезно при выявлении проблем, возникающих при загрузке XML документа. Если я удалю закрывающий тег от OTHER в файле нашего примера и попытаюсь запустить программу еще раз, то получу следующий результат. Первая часть полезной информации, это то, что наш nextSibling теперь содержит значение Nothing. Теперь, если вы посмотрите на childNodes, вы можете увидеть, что поле length теперь равно 0. Оба этих признака говорят о том, что наш XML документ не был загружен. Чтобы разобраться почему, я открываю узел parseError и получаю всю информацию об ошибках. Итак, я показал вам, как загрузить XML файл в объектную модель документов, но что с ним там делать? Одна из основных возможностей, которой вы сможете пользоваться это выполнять различные запросы к XML документу. Для этого вы конечно можете просматривать весь документ до тех пор, пока не найдете информацию которую ищите. Но наиболее предпочтительный способ, это использование одного из двух методов класса DOMDocument. Два метода используемые для поиска узлов в нашем предыдущем примере могли бы выглядеть как xmlDoc. SelectSingleNode patternString - для получения искомого узла, или xmlDoc. SelectNodes patternString - для получения списка искомых узлов. Параметр patternString как раз и является запросом. Он может быть сформирован одним из двух способов. Либо как XSL запрос, либо как XPath запрос. Более новый и предпочтительный способ создавать запросы к XML документу, это XPath. Формат patternString должен быть установлен заранее, перед первым вызовом любого из двух методов запроса данных, иначе по умолчанию будет использоваться XSL способ формирования запросов. Для установки типа формирования patternString используйте setProperty "SelectionLanguage", "format". Для того, чтобы изменить запросы в нашем примере таким образом, чтобы использовался способ XPath, я добавлю следующую команду: По-моему, XPath это самая важная технология в XML которую следует изучить. Я приведу несколько простых XPath запросов. Хорошим началом для изучения этой технологии может служить Microsoft XML SDK. Еще одним способом для объяснения этого, могло бы быть написание простого приложения на Visual Basic, которое позволяет вводить запросы и выводить результат. Вы, возможно, найдете какие-нибудь бесплатные приложения, которые делают то же самое, но XPath довольно новый и может не вполне поддерживаться этими приложениями. Использование XPATH для выполнения запросов к объектной модели документов. Давайте добавим некоторый код в конец нашего предыдущего примера для того, чтобы возвратить содержимое нашего стакана:. Dim objNode As IXMLDOMNode Dim objListOfNodes As IXMLDOMNodeList xmlDoc. Запустите программу и посмотрите, что получится. Вы должны получить четыре сообщения, в которых говориться о содержимом стакана. Последнее сообщение должно быть пустым, потому, что элемент "OTHER" не содержит никакого текста. Давайте теперь добавим еще один запрос, который позволит нам определить, есть ли у стакана крышка или нет. Добавьте следующий код в конец предыдущего:. В этой строке определяется переменная objNode типа узел XML документа. Важно понимать, что узел XML документа это тоже объект. Он состоит сам из себя, также как и его атрибуты и потомку childNodes. Этим способом вы можете отсекать ненужные ветви дерева, выбирая только нужные. В этой строке определяется переменная objListOfNodes имеющая тип списка узлов XML документа группы узлов. Эта строка выполняет XPath запрос, который вернет группу узлов и сохранит их в переменной objListOfNodes. Запрос разбит на следующие части: Эти четыре узла попадают напрямую под узел CONTENTS. Если это условие не выполняется, узел отбрасывается. Все, что внутри [ ] в XPath запросе может принимать значения True или False. Если результат True, то узел сохраняется. Если результат False, то узел отбрасывается. Эти строки отображают значения каждого узла элемента, которые соответствуют запросу. Это очень похоже на путь к файлу или папке. В нашем примере, этот запрос вернет элемент LID, который содержит значение "yes". Важно тут то, что я указал запросу начинать с корневого элемента XML документа. Запросы не всегда начинают выполняться с корневых элементов, обычно они начинаются с текущего узла. В нашем примере это не имеет значения, поскольку текущим узлом xmlDoc и является корневой элемент XML документа но не во всех случаях это так. Эта строка отображает сообщение "We have a lid" потому, что текстовое свойство элемента LID "yes". Теперь, когда вы поняли основы XML, давайте создадим элемент управления ActiveX, который будет конвертировать набор данных ADO в XML формат. Цель в том, чтобы получить наименования книг из таблицы Titles базы данных Pubs и вернуть их в формате XML. Результат, который получится я буду использовать в своей следующей статье. Вы можете сказать, ADO имеет свои собственные методы для сохранения результата в формате XML, правильно? Да, но если доверить это ADO, то в итоге я получу XML файл в таком ужасном формате, что с ним невозможно будет работать. ADO создаст XML файл с использованием пространства имен, а мне сейчас это совсем не нужно. Во-вторых, ADO создаст XML файл, который будет представлен в форме атрибутов. Иными словами, каждая запись станет элементом и каждое поле - атрибутом:. Синтаксис моей XML строки был бы таким:. Кстати, то, что я только что сделал, это создал схему для моей XML строки. Теперь, если мне нужно сверить структуру XML документа со схемой, все что мне останется сделать, это преобразовать схему в правильный формат. То есть в синтаксис DTD или XDR. Одна из причин этого в том, что эта информация может быть использована клиентом. Prettyname могут быть использованы как метки данных. Атрибут datatype мог бы быть использован для проверки данных на стороне клиента. Но чтобы быть честным, истина причина того, что появились эти атрибуты в том, что они имеют особое назначение в шаблоне XSL фала, который я часто использую для построения секции where SQL запросов. Может быть, я скоро опубликую статью, демонстрирующую этот подход. Шаблон на самом деле очень полезный. Когда XML структура применяется к данным из таблицы Titles, результат будет выглядеть следующим образом:. Dim xmlDoc As MSXML2. Call logerror strSQL End Function Private Function ADOtoXML tmprs As ADODB. Recordset, tmpMP As Boolean As String Dim adoFields As ADODB. Recordset As String Dim xmlDoc As msxml2. Перевод Максима Зубова 1. Преобразование ADO в XML С помощью этой статьи, вы быстро погрузитесь в XML. Введение Если кто-либо из вас когда-нибудь пытался изучить XML своими силами, Вы возможно встречались со многими сбивающими с толку понятиями, обрушившимися и на меня в свое время. Какие основные свойства позволяют описать стакан? Материал, из которого он сделан Прозрачный ли материал или нет Высота в дюймах Количество унций, которое в него помещается Его содержимое Описание любых твердых тел и их количества Описание любых жидкостей и их объема Описание любой другой субстанции и ее количество Имеет или не имеет он крышку Как бы то же самое выглядело в формате XML? Теперь настало время поговорить о нескольких простых правилах XML, которым необходимо придерживаться: Объектная модель документов XML Объектная модель документов XML позволяет программистам загружать содержимое XML файла в память. Dim xmlDoc as MSXML2. DOMDocument30 В этой первой строке определяем ссылку на "Microsoft XML, v3. Исследование объектной модели документов XML Создайте в Visual Basic новый проект и назовите его standard. Объектная модель документов XML всегда содержит два узла верхнего уровня: Item1 это корень ветви элементов документа не обращайте на нее внимания Item2 на самом деле первый элемент документа запомните это nodeName или baseName - могут быть использованы при поиске имени элемента или атрибута. Успешная загрузка [В начало] 2. Узлы элементов Узел элементов может содержать узлы потомки элементов, атрибутов, текста или CDATA. Из рисунка ниже видна следующая информация об узле "SOLID": Узлы атрибутов Узлы атрибутов могут состоять только из текстовых или CDATA узлов-потомков. На следующем рисунке показано, какая информация может быть получена об узле "qty": Текстовые узлы и узлы CDATA Текстовые или CDATA узлы не содержат потомков. На следующем рисунке показано, какая информация может быть получена из текущего текстового узла: Ошибки при загрузке документа Секция parseError объектной модели документов может оказаться полезно при выявлении проблем, возникающих при загрузке XML документа. Запросы к XML документу Итак, я показал вам, как загрузить XML файл в объектную модель документов, но что с ним там делать? Использование XPATH для выполнения запросов к объектной модели документов Давайте добавим некоторый код в конец нашего предыдущего примера для того, чтобы возвратить содержимое нашего стакана: Text Next Запустите программу и посмотрите, что получится. Добавьте следующий код в конец предыдущего: Dim objNode As IXMLDOMNode В этой строке определяется переменная objNode типа узел XML документа. Dim objListOfNodes As IXMLDOMNodeList В этой строке определяется переменная objListOfNodes имеющая тип списка узлов XML документа группы узлов. MsgBox "Your cup contains the following items: Преобразование ADO в XML Теперь, когда вы поняли основы XML, давайте создадим элемент управления ActiveX, который будет конвертировать набор данных ADO в XML формат. Иными словами, каждая запись станет элементом и каждое поле - атрибутом: Синтаксис моей XML строки был бы таким: Когда XML структура применяется к данным из таблицы Titles, результат будет выглядеть следующим образом: ADO в XML WebClass. XML за 20 минут!


Сделали развал схождение руль стоит криво
Приказ о проведении общего собрания трудового коллектива
Скачать фильмы на смартфон с компьютера
Парень с сильными руками
Скачать схемы золотых ручек
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment