<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Nick</to>
<from>Mike</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
Как удобно хранить и передавать данные?
XML
XML был создан для того, что бы информацию можно было:
структурировать
хранить
передавать
XML - аббревиатура от англ. eXtensible Markup Language (расширяемый язык разметки).
XML - язык разметки, который напоминает HTML.
XML предназначен для передачи данных, а не для их отображения (в отличии от HTML).
Теги XML не предопределены. Вы должны сами определять нужные теги.
XML описан таким образом, чтобы быть самоопределяемым.
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Nick</to>
<from>Mike</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
В языке XML нет предопределенных тегов.
XML позволяет автору определять свои языковые теги и свою структуру документа.
XML отделяет данные от HTML
XML упрощает распределение данных
XML упрощает передачу данных
XML упрощает модификацию платформы
XML делает ваши данные более доступными
XML используется для создания новых интернет-языков
<корневой>
<потомок>
<подпотомок>...</подпотомок>
</потомок>
</корневой>
<bookstore>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
<!-- Bad -->
<p>Это параграф.
<br>
<!-- Good -->
<p>Это параграф.</p>
<br>
<!-- Bad -->
<Message>Это неправильно</message>
<!-- Good -->
<message>Это правильно</message>
<!-- Bad -->
<b><i>Это жирный и курсивный текст</b></i>
<!-- Good -->
<b><i>Это жирный и курсивный текст</i></b>
<!-- Bad -->
<корневой>
<потомок>
</потомок>
</корневой>
<корневой>
<потомок>
</потомок>
</корневой>
<!-- Good -->
<корневой>
<потомок>
<подпотомок>.....</подпотомок>
</потомок>
</корневой>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Bad -->
<note date=12/11/2007>
<to>Tove</to>
<from>Jani</from>
</note>
<!-- Good -->
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>
<!-- Bad -->
<message>если жалование < 1000</message>
<!-- Good -->
<message>если жалование < 1000</message>
Сущность | Символ | Значение |
|
| меньше, чем |
|
| больше, чем |
|
| амперсанд |
|
| апостроф |
|
| кавычки |
Только символы <
и &
строго запрещены в XML. Символ >
допустим, но лучше его всегда заменять на сущность.
<!-- Это комментарий -->
<!-- Это - - комментарий -->
LF
Windows новая строка хранится в следующем виде: символ перевода каретки и символ новой строки (CR
+LF
)
Unix и Mac OSX используют LF
Старые Mac системы используют CR
XML сохраняет новую строку как LF
XML документ с корректным синтаксисом называется Well Formed XML
"Валидный" XML документ кроме всего прочего должен соответствовать определенному типу документов.
С XML можно использовать различные типы определений документа:
DTD (Document Type Definition) - оригинальное определение типа документа
XML schema/XSD(XML Schema Definition) - более новый тип определений, основанный на XML.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Nick</to>
<from>Mike</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ENTITY nbsp " ">
<!ENTITY writer "Writer: Donald Duck.">
<!ENTITY copyright "Copyright: MSiter.RU.">
]>
<note>
<to>Nick</to>
<from>Mike</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
<footer>&writer; ©right;</footer>
</note>
С DTD ваш XML файл может нести собственный формат.
С DTD различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.
С DTD вы можете быть уверены, что получаемые из внешних источников данные будут корректными.
Для работы XML не требуется DTD.
Когда вы экспериментируете с XML или работаете с небольшими XML файлами, то создание DTD может оказаться излишней тратой времени.
Если вы разрабатываете приложения, то стоит подождать, пока спецификации не станут стабильными, и только тогда добавлять определения. В обратном случае ваше приложение может перестать работать из-за ошибок валидации.
<?xml version="1.0" encoding="UTF-8"?>
<note xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="note.xsd">
<to>Nick</to>
<from>Mike</from>
<heading>Напоминание</heading>
<body>Не забудь обо мне в эти выходные!</body>
</note>
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xsd:schema>
XML схема мощнее DTD
XML схема пишется на XML
XML схема легко расширяется
XML схема поддерживает типы данных
XML схема поддерживает пространства имен
С XML схемой ваш XML файл может нести собственный формат.
С XML схемой различные, не связанные друг с другом группы людей могут приходить к соглашению о стандартах пересекающихся данных.
С XML схемой вы можете проверять корректность данных.
Одним из мощнейших свойств XML схемы является поддержка типов данных:
Упрощается описание содержимого документа
Упрощается определение ограничений по данным
Упрощается проверка корректности данных
Упрощается преобразование данных из одного типа в другой
Вам не нужно изучать новый язык программирования
Вы можете использовать тот же XML редактор для создания файлов XML схем
Вы можете использовать тот же XML парсер для разбора файлов XML схем
Вы можете манипулировать XML схемами при помощи XML DOM
Вы можете трансформировать XML схемы при помощи XSLT
XPath stands for XML Path Language
XPath предоставляет специальный синтаксис для поиска и выборки данных в XML документе.
Используя XPath выражения, можно из любой части XML:
произвести выборку по условию
найти узлы
найти точное значение
Expression | Description |
| Selects all nodes with the name "nodename" |
| Selects from the root node |
| Selects nodes in the document from the current node that match the selection no matter where they are |
| Selects the current node |
| Selects the parent of the current node |
| Selects attributes |
Path Expression | Result |
| Selects all nodes with the name "bookstore" |
| Selects the root element bookstore (Note: If the path starts with a slash ( / ) it always represents an absolute path to an element!) |
| Selects all book elements that are children of bookstore |
| Selects all book elements no matter where they are in the document |
| Selects all book elements that are descendant of the bookstore element, no matter where they are under the bookstore element |
| Selects all attributes that are named lang |
Path Expression | Result |
| Selects the first book element that is the child of the bookstore element. (Note: In IE 5,6,7,8,9 first node is[0], but according to W3C, it is [1]. |
| Selects the last book element that is the child of the bookstore element |
| Selects the last but one book element that is the child of the bookstore element |
| Selects the first two book elements that are children of the bookstore element |
| Selects all the title elements that have an attribute named lang |
| Selects all the title elements that have a "lang" attribute with a value of "en" |
| Selects all the book elements of the bookstore element that have a price element with a value greater than 35.00 |
| Selects all the title elements of the book elements of the bookstore element that have a price element with a value greater than 35.00 |
Wildcard | Description |
| Matches any element node |
| Matches any attribute node |
| Matches any node of any kind |
Path Expression | Result |
| Selects all the child element nodes of the bookstore element |
| Selects all elements in the document |
| Selects all title elements which have at least one attribute of any kind |
Path Expression | Result |
| Selects all the title AND price elements of all book elements |
| Selects all the title AND price elements in the document |
| Selects all the title elements of the book element of the bookstore element AND all the price elements in the document |