XML документ можно представить в виде древовидной структуры, которая начинается с "корня" и заканчивается "листьями".
Ниже приведен пример XML документа:
<?xml version="1.0" encoding="Windows-1251"?> <mail> <to>user1@domain.ru</to> <from>user2@domain.ru </from> <subject>Встреча</heading> <body>Позвони мне завтра утром</body> </mail>
to, from, subject и body).
XML документ должен содержать корневой элемент, который является родительским для всех остальных элементов. Любой элемент (кроме находящихся на самом нижнем уровне дерева) может иметь вложенные элементы (дочерние элементы).
С помощью терминов родитель, дочерний и потомок описываются отношения между элементами в дереве XML документа. Родители содержат дочерние элементы, а дочерние элементы одного уровня называются потомками (братьями или сестрами).
Элементы могут иметь текстовое содержимое и атрибуты.
Ниже приведена схема, показывающая отношения между элементами и атрибутами этого документа:
Кроме того в XML документе следует выполнять еще несколько несложных правил:
Некоторые из символов (их всего 5) имеют специальное значение в XML. Для их обозначения используются альтернативные сочетания:
| замена | символ |
|---|---|
lt;
| <
|
gt;
| >
|
amp;
|
|
apos;
| '
|
quot;
| "
|
Комментарии в XML выделяются также как и в HTML:
<!-- Это комментарий -->
В отличие от HTML, который игнорирует повторы пробелов, XML сохраняет полную длину строки из пробелов.
XML документы, оформленные в соответствии с приведенными выше правилами, называются "правильно оформленными". Если при этом они еще и соответствуют правилам DTD (Document Type Definition), то они являются и "действительными".
Действительные XML документы содержат ссылку на DTD файл, например:
<!DOCTYPE note SYSTEM "mail.dtd">
DTD схема предназначена для определения структуры XML документа путем задания списка допустимых элементов, например
<!DOCTYPE mail [ <!ELEMENT note (to,from,subject,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT body (#PCDATA)> ]>
Консорциум W3C поддерживает альтернативную к DTD, основанную на XML схему, называемую как "XML Schema":
<xs:element name="mail">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="subject" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
Для проверки действительности XML документа можно использовать специальные валидаторы, например W3C валидатор (http://validator.w3.org/). Для проверки схем также существуют специальные валидаторы, например XML Schema валидатор (http://www.w3.org/2001/03/webdata/xsv).
Согласно спецификации W3C XML программа должна прекратить обработку XML документа, как только будет обнаружена ошибка в этом документе.
<?xml version="1.0"?>
<timetable>
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>
Загрузите этот файл в браузере. Обратите внимание на иерархическую структуру документа.
<?xml version="1.0"?> <!DOCTYPE timetable[ <!ELEMENT timetable (day*)> <!ELEMENT day (lesson+)> <!ELEMENT lesson (timeFrom, timeTo, subject, teacher, room?)> <!ELEMENT timeFrom (#PCDATA)> <!ELEMENT timeTo (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT teacher (#PCDATA)> <!ELEMENT room (#PCDATA)> <!ATTLIST day dayOfWeek CDATA #REQUIRED> <!ATTLIST lesson type CDATA #REQUIRED> ]>
timetable2.xml. Содержимое документа приведено ниже.
<?xml version="1.0"?>
<timetable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="timetable.xsd">
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>
timetable .xsd, содержащего XML Schema:
<?xml version="1.0" encoding="ISO-8859-1" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name = "timetable"> <xs:complexType> <xs:sequence> <xs:element ref = "day" minOccurs = "0" maxOccurs = "unbounded"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "day"> <xs:complexType> <xs:sequence> <xs:element ref = "lesson" maxOccurs = "unbounded"/> </xs:sequence> <xs:attribute name = "dayofWeek" use = "required" type = "xs:string"/> </xs:complexType> </xs:element> <xs:element name = "lesson"> <xs:complexType> <xs:sequence> <xs:element ref = "timeFrom"/> <xs:element ref = "timeTo"/> <xs:element ref = "subject"/> <xs:element ref = "teacher"/> <xs:element ref = "room" minOccurs = "0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name = "timeFrom" type = "xs:string"/> <xs:element name = "timeTo" type = "xs:string"/> <xs:element name = "subject" type = "xs:string"/> <xs:element name = "teacher" type = "xs:string"/> <xs:element name = "room" type = "xs:string"/> </xs:schema>
При выполнении данной лабораторной работы потребуется XML документ :
<?xml version="1.0"?>
<timetable>
<day dayOfWeek="Monday">
<lesson type="practical">
<timeFrom>08.00</timeFrom>
<timeTo>09.30</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
<room>216</room>
</lesson>
<lesson type="lecture">
<timeFrom>09.40</timeFrom>
<timeTo>11.10</timeTo>
<subject>SAP Administration</subject>
<teacher>Egorov</teacher>
<room>384</room>
</lesson>
<lesson type="practical">
<timeFrom>11.20</timeFrom>
<timeTo>12.50</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
<room>384</room>
</lesson>
</day>
</timetable>
Создайте текстовый файл loadxmldoc.js, содержащий описание функции загрузки XML документа:
function loadXMLDoc(dname)
{
try //Internet Explorer
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
catch(e)
{
try //Firefox, Mozilla, Opera, etc.
{
xmlDoc=document.implementation.createDocument("","",null);
}
catch(e) {alert(e.message)}
}
try
{
xmlDoc.async=false;
xmlDoc.load(dname);
return(xmlDoc);
}
catch(e) {alert(e.message)}
return(null);
}
и сохраните его в той же папке, где находится файл .
Код вызова этой функции может выглядеть следующим образом:
<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc=loadXMLDoc("timetable.xml");
document.write("xmlDoc is loaded, ready for use");
</script>
</body>
</html>
Подготовьте следующую HTML страницу:
<html>
<head>
<script type="text/javascript" src="loadxmldoc.js">
</script>
</head>
<body>
<script type="text/javascript">
xmlDoc = loadXMLDoc("timetable.xml");
x = xmlDoc.getElementsByTagName("subject");
for (i=0; i<x.length; i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write("<br />");
}
</script>
</body>
</html>
После загрузки страницы в браузере можно будет увидеть следующий результат:
Deutsch SAP Administration SAP Administration
Следующий пример демонстрирует изменение значения элемента <subject>:
xmlDoc=loadXMLDoc("timetable.xml");
x=xmlDoc.getElementsByTagName("subject")[0].childNodes[0];
x.nodeValue="Java programming";
x = xmlDoc.getElementsByTagName("subject");
for (i=0; i<x.length; i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write("<br />");
}
Внесите соответствующие изменения в предыдущую страницу и загрузите ее в браузере.
Следующий код показывает, как используя отношения firstChild и nextSibling можно получить для текущего узла список его дочерних узлов:
x = xmlDoc.getElementsByTagName("lesson")[0].childNodes;
y = xmlDoc.getElementsByTagName("lesson")[0].firstChild;
for (i = 0; i < x.length; i++)
{
if (y.nodeType == 1)
{
document.write(y.nodeName + "<br />");
}
y=y.nextSibling;
}
Внесите необходимые изменения в html страницу и загрузите ее в браузере.
ttable.xml следующего содержания:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="ttable.xsl"?>
<timetable>
<lesson>
<timeFrom>09.30</timeFrom>
<timeTo>11.00</timeTo>
<subject>Deutsch</subject>
<teacher>Borisova</teacher>
</lesson>
<lesson>
<timeFrom>11.10</timeFrom>
<timeTo>12.20</timeTo>
<subject>SAP Administration</subject>
<teacher>Petrov</teacher>
</lesson>
<lesson>
<timeFrom>12.40</timeFrom>
<timeTo>14.00</timeTo>
<subject>SAP Administration</subject>
<teacher>Ivanov</teacher>
</lesson>
<lesson>
<timeFrom>14.00</timeFrom>
<timeTo>15.20</timeTo>
<subject>Wen-technology</subject>
<teacher>Loktev</teacher>
</lesson>
</timetable>
ttable.xsl):
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My academical timetable</h2>
<table border="1">
<tr bgcolor="#a5abfa">
<th align="left">Time From</th>
<th align="left">Subject</th>
<th align="left">Teacher</th>
</tr>
<xsl:for-each select="timetable/lesson">
<tr>
<td><xsl:value-of select="timeFrom"/></td>
<td><xsl:value-of select="subject"/></td>
<td><xsl:value-of select="teacher"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Первая строка в файле ttable.xml вида:
<?xml-stylesheet type="text/xsl" href="ttable.xsl"?>
представляет собой ссылку на подходящую таблицу стилей.
В данном примере для описания шаблона был использован элемент <xsl:template>.
Атрибут match применяется для связывания XML элемента с шаблоном. Значение атрибута match является выражение XPath. В данном случает match="/" указывает на весь документ.
Содержимое элемента <xsl:template> описывает фрагмент HTML кода в выходном документе. Элемент <xsl:value-of> может быть использован для извлечения значения XML элемента и добавления его в выходной поток при преобразовании. Значение атрибута select является выражением XPath, которое напоминает нотацию, используемую в файловой системе; знак (/) указывает на обращение к подкаталогу.
Элемент <xsl:for-each> позволяет выбирать каждый элемент XML указанного множества узлов.
ttable.xml:
Для фильтрации вывода элементов можно добавить атрибут элемента <xsl:for-each>, задающий критерий отбора элементов. Например:
<xsl:for-each select="timetable/lesson[subject='SAP Administration']">
Проверьте работу данного фильтра.
Допустимо использование следующих операторов для описания фильтра:
= (равно)
!= (не равно)
lt; (меньше чем)
gt; (больше чем)
html файл, содержащий код:
<html>
<head>
<script>
function loadXMLDoc(fname)
{
var xmlDoc;
// Код для IE
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
// Код для Mozilla, Firefox, Opera и др.
else if (document.implementation
document.implementation.createDocument)
{
xmlDoc=document.implementation.createDocument("","",null);
}
else
{
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
function displayResult()
{
xml=loadXMLDoc("ttable.xml");
xsl=loadXMLDoc("ttable.xsl");
// Код для IE
if (window.ActiveXObject)
{
ex=xml.transformNode(xsl);
document.getElementById("example").innerHTML=ex;
}
// Код для Mozilla, Firefox, Opera и др.
else if (document.implementation
document.implementation.createDocument)
{
xsltProcessor=new XSLTProcessor();
xsltProcessor.importStylesheet(xsl);
resultDocument = xsltProcessor.transformToFragment(xml,document);
document.getElementById("example").appendChild(resultDocument);
}
}
</script>
</head>
<body id="example" onLoad="displayResult()">
</body>
</html>
Функция loadXMLDoc() загружает XML и XSL файлы в зависимости от типа браузера.
Функция displayResult() используется для отображения XML файла в стиле, задаваемом XSL файлом. Она выполняет следующие действия:
transformNode() таблица стилей XSL применяется к XML документу.
XSLTProcessor и в него импортируется XSL файл.
transformToFragment() таблица стилей XSL применяется к XML документу.
<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(Server.MapPath("ttable.xml"))
'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("ttable.xsl"))
'Transform file
Response.Write(xml.transformNode(xsl))
%>
В начале сценария создается экземпляр парсера Microsoft XML parser (XMLDOM), и XML файл загружается в память. Далее создается еще один экземпляр парсера, и XSL файл загружается в память. В последней строке выполняется собственно преобразование XML файла с использованием XSL файла в XHTML, который отправляется обратно браузеру.
В приведенном ниже XML документе описана экзаменационная ведомость:
<gradeReport id="120851"> <date>10-06-2008</date> <subject>Computer Science Fundamentals</subject> <examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList> </gradeReport>
Опишите структуру данного документа с помощью DTD схемы и XML Schema. Проверьте обе схемы с помощью соответствующих программ-валидаторов.
В приведенном ниже XML документе описана экзаменационная ведомость:
<gradeReport id="120851"> <date>10-06-2008</date> <subject>Computer Science Fundamentals</subject> <examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList> </gradeReport>
<gradeReport id="120851"> <date>10-06-2008</date> <subject>Computer Science Fundamentals</subject> <examiner>prof.Litvinov</examiner> <gradeList> <gradeRecord id="1"> <student>Ivanov</student> <grade>4</grade> </gradeRecord> <gradeRecord id="2"> <student>Petrov</student> <grade>3</grade> </gradeRecord> <gradeRecord id="3"> <student>Sidorov</student> <grade>5</grade> </gradeRecord> </gradeList> </gradeReport>Постройте для него XSL файл, необходимый для
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.