Описание
XML документ должен содержать один или более элементов.
Правильно сформированные документы
Документ с одним элементом:
<text>This is an XML document</text> |
Документ с несколькими элементами:
<text>This is an <doctype>XML document</doctype> </text> |
Документы с ошибками
XML документ должен содержать, как минимум, один элемент:
??? This is an XML document ??? |
Существует ровно один элемент, называемый корневым или документным, ни какая часть которого не входит в содержимое любого другого элемента.
Правильно сформированные документы
<book> является корневым:
<book>This is a book</book> |
<list> является корневым:
<list> <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> </list> |
Документы с ошибками
В документе может быть только один корневой элемент:
??? <item>Item 1</item> <item>Item 2</item> <item>Item 3</item> ??? |
Имя закрывающего тега элемента должно совпадать с типом элемента в открывающем теге. Имена чувствительны к регистру.
Правильно сформированные документы
Закрывающий тег </book> соответствует открывающему <book>:
<book>This is a book</book> |
Правильно сформированный документ, содержащий 4 различных элемента <list>, <item>, <ITEM> и <Item>:
<list> <item>Car</item> <ITEM>Plane</ITEM> <Item>Train</Item> </list> |
Документы с ошибками
<item> - </itm> и <item> - </ITEM> не сопоставимы:
<list> <item>Car</itm> <item>Plane</ITEM> <item>Train</item> </list> |
Если открывающий тег содержится внутри какого-либо элемента, то и закрывающий должен содержаться в том же элементе. Проще говоря, элементы, задаваемые открывающим и закрывающим тегами, должны быть правильно вложены друг в друга.
Правильно сформированные документы
Элементы с правильной вложенностью:
<Weight> <number>12</number> <unit>grams</unit> </Weight> |
Другой правильно сформированный документ:
<book> <chapter> <title>Introduction</title> </chapter> <chapter> <title>Story</title> <subChapter> <title>Part 1</title> </subChapter> <subChapter> <title>Part 2</title> </subChapter> </chapter> <chapter> <title>Index</title> </chapter> </book> |
Документы с ошибками
Элемент <italic> не является правильно вложенным:
<text> <bold><italic>XML</bold></italic> </text> |
Конец любого элемента, начинающегося открывающим тегом, должен быть определен закрывающим тегом, имя которого совпадает с типом элемента, указанного в открывающем теге. Текст между открывающим и закрывающим тегами называется содержимым элемента. Элемент без содержимого может быть записан в специальной форме: <name/>. Косая черта ("/") перед > обуславливает закрывающий тег.
Правильно сформированные документы
Каждый элемент должен иметь закрывающий тег или должен быть представлен в специальной форме. В XML нет разницы между конструкциями <AAA></AAA> и <AAA/>:
<listOfTags> <AAA></AAA> <BBB></BBB> <CCC/> <DDD/> </listOfTags> |
Документы с ошибками
Пропуск косой черты ("/") является очень распространенной ошибкой:
<description> There are <color>yellow<color> and <color>red</color> apples. </description> |
Имена элементов могут содержать буквы, цифры, дефисы ("-"), символы подчеркивания ("_"), двоеточия (":") и точки (".'), однако начинаться они могут только с буквы или символа подчеркивания. Двоеточие может быть использовано только в специальных случаях, когда оно разделяет так называемое пространство имен. Имена элементов, начинающиеся с 'xml', вне зависимости от комбинации регистров букв в этом выражении зарезервированы для нужд стандарта.
Правильно сформированные документы
Документ с разрешенными символами:
<permitedNames> <name/> <xsl:copy-of/> <A_long_element_name/> <A.name.separated.with.full.stops/> <a123323123-231-231/> <_12/> </permitedNames> |
Документы с ошибками
Этот документ содержит несколько ошибок:
<forbidenNames> <A;name/> <last@name/> <@#$%^()%+?=/> <A*2/> <1ex/> </forbidenNames> |
Имена не могут начинаться с 'xml':
<forbidenNames> <xmlTag/> <XMLTag/> <XmLTag/> <xMlTag/> <xmLTag/> </forbidenNames> |
Элемент может иметь ни одного, один или несколько атрибутов. Правила на имена атрибутов накладываются такие же как и на имена элементов. Имена атрибутов отделяются от их значений знаком '='. Значение атрибута заключается в апострофы '...' или в двойные кавычки "...". Если апостроф или двойные кавычки присутствуют в значении атрибута, то используются те из них, которые не встречаются в этом значении.
Правильно сформированные документы
Документ с правильно оформленными атрибутами:
<elements-with-attributes> <el _ok = "yes" /> <one attr = "a value"/> <several first="1" second = '2' third= "333"/> <apos_quote case1="John's" case2='He said: "Hello, world!" '/> </elements-with-attributes> |
Документы с ошибками
Документ с ошибочными атрибутами:
<errors> <wrong_char a*b = "23432"/> <mismatched_separator value = "12'/> <wrong_separator_type value="aa"aa"/> <wrong_separator_type value='bb'bb'/> <wrong_start XML-ID = "xml234"/> </errors> |
Символы < и & не могут быть использованы в тексте, так как они используются в разметке. Если эти символы необходимы, следует использовать < вместо < и & вместо &.
Правильно сформированные документы
Замещение & и <:
<example> <isLower> 23 < 46 </isLower> <ampersand> Willey & sons </ampersand> </example> |
Документы с ошибками
Символы & и < не могут быть использованы в тексте:
<example> <isLower> 23 < 46 </isLower> <ampersand> Willey & sons </ampersand> </example> |
Символы >, ", и ' также могут быть заменены на >, " и ', соответственно.
Правильно сформированные документы
Возможные подстановки:
<example> <right-bracket> both > and > permitted</right-bracket> <double-quote> both " and " permitted</double-quote> <apostrophe> both ' and ' permitted</apostrophe> Useful in: <el value=" ' " ' "/> </example> |
Комментарии могут содержаться в любом месте документа, кроме разметки. XML-процессор может, но не обязан, предоставлять приложениям доступ к содержимому комментариев. В тексте комментарием не должна содержаться последовательность из двух знаков дефиса ('--').
Правильно сформированные документы
Коментарии могут содержать любые символы, кроме строки '--':
<!-- doc A --> <example> <!-- <HEAD> --> <!-- Characters <&< --> </example> |
Документы с ошибками
Коментарии не должны содержать '--':
<example> <!-- A -- B --> </example> |
Документ может содержать инструкции по обработке (PI), несущие информацию для приложений.
Правильно сформированные документы
Инструкции по обработке:
<example> <?perl lower-to-upper-case ?> <?web-server add-header = "university" ?> <text>vscht</text> </example> |
Документы с ошибками
Инструкции к обработке должны заканчиваться последовательностью ?>:
<example> <?perl run _> </example> |
Секция CDATA используется для того, чтобы обозначить части документа, которые не должны восприниматься как разметка. Секция CDATA начинается со строки '<![CDATA[' и заканчивается строкой ']]>'. Внутри самой секции не должна присутствовать строка ']]>'.
Правильно сформированные документы
Секция Cdata:
<example> <![CDATA[ <aaa>bb&cc<<<]]> </example> |
Документы с ошибками
Секция CDATA не может содержать последовательность ']]>':
<example> <![CDATA[ <aaa>bb ]]>cc<<<]]> </example> |
XML-документ может, но не обязан, начинаться с XML-декларации, определяющей используемую версию XML.
Правильно сформированные документы
Определение версии XML:
<?xml version="1.0"?> <text>This document conforms to the XML 1.0 specification.</text> |
Определение используемой кодировки:
<?xml version="1.0" encoding="ISO-8859-2"?> <text>If encoding is not given UTF-8 is assumed</text> |