Реклама:
|
|
Развлекательные сайты:
|
|
Друзья:
|
|
|
Справочник языка:
- Для чего нужен новый язык разметки?
- Структура документа
- Правила создания XML- документа
- Конструкции языка
- Просмотр XML-документов
- Стилевые таблицы XSL
- DTD - определения
- Схемы данных
Просмотр XML - документов
Как уже отмечалось, в отличии от HTML, XML никак не определяет способ
отображения и использования описываемых с его помощью элементов документа,
т.е. программе-анализатору предоставляется возможность самой выбирать
нужное оформление. Этого требует принцип независимости определения внутренней
структуры документа от способов представления этой информации. Например,
задавая в документе элемент <flower>роза</flower>, мы лишь
указываем, что rose в данном случае является цветком, но информации о
том, как должен выглядеть данный элемент документа на экране клиента и
должен ли он отображаться вообще, в таком определении нет.
Для того, чтобы использовать данные, определяемые элементами XML, например,
отображать их на экране пользователя, необходимо написать программу-анализатор,
которая бы выполняла эти действия. Уже сегодня таких программ появилось
достаточное количество и у разработчиков существует возможность выбора
наиболее подходящей из них для решения конкретных проблем
Как уже отмечалось ранее, в общем случае, программы- анализаторы можно
разделить на две группы: верифицирующие(т.е. использующие DTD- описания
для определения корректности документа) и не верифицирующие. Если Вы создаете
свой язык и описываете его грамматику на основе DTD, то для анализа документов,
написанных на этом языке, безусловно, потребуется программа, проверяющая
корректность составления документа. Но так как использование DTD в XML
не является обязательным, то любой правильно оформленный документ может
быть распознан и разобран программой, предназначенной для анализа XML-
документов. В любом случае, используя универсальные XML- анализаторы,
Вы можете быть уверенным в том, что если заданные в документе конструкции
языка являются синтаксически правильными, то программа-анализатор сможет
правильно извлечь определяемые ими элементы документа и передать их прикладной
программе, выполняющей необходимые действия по отображению. Т.е. после
разбора документа в большинстве случаев, Вам предоставляется объектная
модель, отображающая содержимое Вашего документа, и средства, необходимые
для работы с ней (прохода по дереву элементов). При этом в некоторых анализаторах
способ представления структуры документа основывается на спецификации
DOM, описанной в[4]. Поэтому у Вас появляется также возможность использовать
строгую иерархическую модель DOM для построения собственных документов.
Если речь идет о способах отображения информации, хранящейся в XML, то
необходимо упомянуть разрабатываемый в настоящее время W3C стандарт стилевых
таблиц для XML, которые предназначены для описания правил отображения
элементов XML. Более подробно мы поговорим об XSL чуть позже.
Использование msxml в IE 4
Если на Вашем компьютере установлен броузер Internet Explorer 4 (или более
поздняя версия), то Вы можете использовать встроенный в этот броузер XML-
анализатор msxml в своих сценариях, написанных на Java Script ил VBScript,.
В настоящий момент существуют две его реализации, - одна предназначена
для использования в виде написанного на C++ ActiveX- объекта(реализация
на базе COM- технологии) другая, написанная на Java, не зависит от платформы.
Оба анализатора не сложны, имеют сравнительно небольшой размер - msxml
на C++ занимает около 100k, версия на Java - 127k. Анализатор, написанный
на C++, в текущей реализации не поддерживает DTD- правил, более компактный
и быстрый, чем его Java-версия. Оба они имеют поддержку иностранных языков,
т.е. в составе Internet Explorer C++- анализатор работает со всеми языками,
"понимаемыми" броузерами, а анализатор на Java - с теми языками,
с которыми может работать виртуальная Java-машина.
Т.к. обе версии разрабатывались параллельно, объектная модель, заложенная
в основу каждой из них, внешне схожа, поэтому больших сложностей при переходе
от одной версии к другой обычно не возникает.
Рассмотрим основные свойства и методы, доступные JavaScript- сценарию
в процессе его выполнения на стороне броузера. В наших примерах мы будем
использовать XML- анализатор в сценариях Java Script, т.к. этот способ
более понятен и быстрее работает. Полное описание C++ интерфейсов анализатора
доступны в документации по Internet Client SDK
Объектная модель XML в Internet Explorer 4.0
Перед тем, как использовать свойства и методы анализатора, его необходимо
создать. Делается это при помощи стандартного метода, предназначенного
для создания ActiveX- объектов:
var mydoc = new ActiveXObject("msxml");
Если ActiveX- компонент был зарегистрирован на Вашей машине(или у Вас
установлен броузер Internet Explorer 4), то в результате выполнения этой
функции переменной mydoc будет присвоен объект, имеющий тип msxml, свойства
и методы которого используются в дальнейшем для получения доступа к структуре
XML- документа.
В Приложении 2 приведен полный текст сценария JavaScrtipt, выводящего
на экран броузера Internet Explorer 4.0 XML- документ, созданный в Приложении
1. Вы можете использовать этот пример и комментарии к нему в качестве
еще одного средства для более быстрого понимания принципов использования
свойств и методов объектов Microsoft XML и создания собственных сценариев.
Объектная модель XML- анализатора Microsoft может быть представлена в
виде следующего набора внутренних объектов: XML Document, XML Element
и Element Collection. Объект XML Document содержит свойства и методы,
необходимые нам для работы с XML- документом в целом. XML Element отвечает
за работу с каждым из элементов XML- документа. Element Collection представляет
из себя набор элементов, доступ к которым доступен при помощи имени или
порядкового номера. В следующих примерах мы рассмотрим каждый из этих
объектов подробнее.
Свойства и методы документа(объект XML Document)
URL Свойство, доступное для записи и чтения. Задает или возвращает URL
обрабатываемого документа. В случае изменения этого свойства текущий документ
уничтожается и начинается загрузка нового по указанному URL
root Возвращает корневой элемент XML- документа
charset Свойство, доступное для записи и чтения.Возвращает или устанавливает
название текущее кодировочной таблицы согласно требованиям ISO.
version Возвращает номер версии XML
doctype Возвращает содержимое элемента !DOCTYPE
createElement() Метод, позволяющий создать новый элемент, который будет
добавлен в качестве дочернего для текущего элемента дерева. В качестве
первого параметра задается тип элемента, в качестве второго - название
элемента
xml.createElement(0,"new_element")
fileSize Возвращает размер XML- документа. Это свойство в C++- версии
анализатора еще не реализовано
fileModifiedDate Возвращает дату последнего изменения XML- документа.
Это свойство в C++- версии анализатора еще не реализовано
fileUpdatedDate Возвращает дату последнего обновления XML- документа.
Это свойство в C++- версии анализатора еще не реализовано
mimeType Возвращает MIME-тип(MIME- Multipurpose Internet Mail Extension,
RFC 1341).Это свойство в C++- версии анализатора еще не реализовано
Ниже приведен фрагмент JavaScript- сценария, использующего эти методы
и свойства для вывода информации о текущем документе:
var xmldoc = new ActiveXObject("msxml");
var xmlsrc = "http://localhost/xml/journal.xml";
xmldoc.URL = xmlsrc;
function viewProperties(){
this.document.writeln('<center><table width=90% >');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document
URL</td>
<td align="center">'+xmldoc.URL+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document
root</td>
<td align="center">'+xmldoc.root+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document
doctype</td>
<td align="center">'+xmldoc.doctype+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document
version</td>
<td align="center">'+xmldoc.version+'</td></tr>');
this.document.writeln('<tr>');
this.document.writeln('<td align="center" bgcolor="silver">Document
charset</td>
<td align="center">'+xmldoc.charset+'</td></tr>');
this.document.writeln('</table></center>');
}
Свойства и методы элементов документа
type Возвращает тип элемента. Это свойство может быть использовано для
того, чтобы разделить имена тэгов и данные, содержащиеся внутри них. В
данной версии анализатора определены следующие типы элементов:
0 - элемент
1 - текст
2 - комментарий
3 - Document
4 - DTD
tagName Возвращает или устанавливает название тэга(в виде строки с символами,
приведенными к верхнему регистру). Названия метатэгов(например, <?xml?>)
начинаются с символа ?. Названия тэгов комментариев начинаются с символа
!.
text Возвращает текстовое содержимое элементов и комментариев.
AddChild() Добавление нового дочернего элемента и всех его потомков в
текущую ветвь дерева. В качестве первого параметра этой функции необходимо
передать объект типа Element, который затем будет помещен в список дочерних
элементов. Также необходимо задать индекс нового элемента в списке и в
качестве последнего параметра обязательно передать значение -1. Т.к. в
данной модели любой элемент в документе может иметь ссылку только на один
родительский элемент, при выполнении данной процедуры у добавляемого объекта
старая ссылка на родительский элемент теряется. Используя это свойство,
можно перемещать элементы из одного XML- документа в другое, но том случае,
если у дочерних ссылок перемещаемого элемента существуют внешние ссылки
или сами дочерние элементы ссылаются на внешние возможно возникновение
ошибки
elem.addChild(elem.children.item().children.item(0),0,-1)
removeChild() Удаляет дочерний элемент и всех его потомков. Элементы остаются
в памяти и могут быть вновь добавлены к дереву при помощи метода addChild().
elem.removeChild(elem.children.item(1))
parent Возвращает указатель на текущий родительский элемент. Ссылки на
родительский элемент имеют все элементы, за исключением корневого.
GetAttribute() Возвращает значение указанного атрибута в виде текстовой
строки.
elem.getAttribute("color")
SetAttribute() Устанавливает указанный атрибут и его значение. Прежнее
значение атрибута теряется
elem.setAttribute("color","red")
removeAttribute() Уничтожает указанный атрибут
elem.removeAttribute("color")
children Возвращает ассоциированный список дочерних элементов(коллекцию).
Такой список позволяет приложению получать нужные элементы как по названию,
так и по порядковому номеру при помощи метода item(). В том случае, если
потомков у текущего элемента нет, функция возвратит null
Пример использования
Вот пример использования описанных функций:
<script language="javascript">
<!--
var xmldoc = new ActiveXObject("msxml");
var xmlsrc = "http://localhost/xml/sample.xml";
function parse(root){
var i=0;
if(root.type==0){
this.document.writeln('<UL>Current tag is '+root.tagName+'
(parent is '+root.parent+'). ');
}else if(root.type==1){
this.document.writeln('<LI>It is a text of '+root.parent.tagName+'
element: <i>'+root.text+'</i></LI>');
}else{
this.document.writeln('<br><br>Error');
}
if(root.children!=null){
this.document.writeln('It consist of '+root.children.length+' elements:');
for(i=0;i<root.children.length;i++){
parse(root.children.item(i));
}
}
else{
this.document.writeln('</UL>');
}
}
function viewDocument(){
xmldoc.URL = xmlsrc;
this.document.writeln('<body bgcolor="white">');
this.document.writeln('<p><center><hr width=80%>XML
sample page
<hr width=80%></center><p>');
parse(xmldoc.root);
this.document.writeln('</body>');
}
viewDocument();
//-->
</script>
Как видно из примера, в процессе обработки XML- документа необходимо
рекурсивно обходить все ветви создаваемого анализатором дерева, причем,
на каждом шаге возможны следующие ситуации:
Встретился новый элемент. В этом случае его название(задаваемое тэгом)
доступно при помощи свойства tagName, а содержимое - свойством text. У
любого непустого элемента существует хотя бы один потомок, представляющий
собой содержимое этого элемента(в этом отличие представленной объектной
модели msxml от реальной структуры документа - в XML под элементом понимается
как название тэга, так и текстовое содержимое его)
Встретилось текстовое поле. Это поле может быть либо комментарием, либо
просто текстом, содержащемся в текущем элементе
Для обработки потомков текущего элемента используется метод item(), который
вызывается в цикле столько раз, сколько потомков у текущего элемента.
Обработка каждого дочернего элемента осуществляется вызовом этой же функции,
в чем и заключается рекурсия.
Использование ASP
Доступ к свойствам XML- анализатора возможен также из сценариев ASP(Active
Server Pages), выполняющихся на стороне сервера. Если при написании ASP-модуля
используется язык VBscript, то для создания объекта, представляющего XML-
документ, необходимо включить следующее выражение:
Set myxml=Server.CreateObject("msxml")
Однако необходимо учитывать, что в качестве сервера в этом случае надо
использовать Web- сервер, поддерживающий ISAPI, и так же на компьютере
должны быть установлены или броузер Internet Explorer версии 4 и выше,
или зарегистрированный в реестре ActiveX- компонент msxml.
Вот пример использования свойств XML-документа в ASP- программе:
<%
Set myxml=Server.CreateObject("msxml")
myxml.url = "http://localhost/xml/sample1.xml"
url=myxml.url
Set root=myxml.root
version=myxml.version
charset=myxml.charset
%>
<html>
<body bgcolor="white">
<center>
<table width=80%>
<tr>
<td align="center" bgcolor="silver">URL</td>
<td align="center"><%=url%></td>
</tr>
<tr>
<td align="center" bgcolor="silver">Version</td>
<td align="center"><%=version%></td>
</tr>
<tr>
<td align="center" bgcolor="silver">Root element</td>
<td align="center"><%=root.tagName%></td>
</tr>
<tr>
<td align="center" bgcolor="silver">Charset</td>
<td align="center"><%=charset%></td>
</tr>
</table>
</body>
</html>
Создавая msxml- объект при помощи CreateObject, мы в дальнейшем вызываем
его методы и свойства привычным нам способом. Отличается лишь способ вставки
полученной информации в HTML- страницу - она генерируется не на стороне
клиента, а приходит к нему в уже готовом виде.
В заключение хотелось бы отметить, что рассмотренные способы работы с
XML- документами могут применяться для отображения их элементов на экране
броузера. Не всегда они являются наиболее эффективными для форматирования
текста - для каждого нового документа с измененной структурой требуются
частично или полностью переписывать обработчик(в следующем разделе мы
попробуем использовать для этих же целей стилевые таблицы XSL). Однако
использование Java Script позволяет уже сегодня разрабатывать реальные
Интернет- приложения, использующие встроенный в броузер клиента анализатор
в качестве средства для доступа к структурированной информации XML.
|
Обмен банерами:
|
Если захотите можете разместить мой банер не вашем
сайте
|
Если хотите обменятся ссылками или банерами пишите
|
Счетчики и рейтинги:
|
|
|