Опубликован: 19.07.2010 | Уровень: для всех | Доступ: платный
Самостоятельная работа 3:

Структура XML документа. Программный нтерфейс XML DOM API

< Лекция 8 || Самостоятельная работа 3: 123 || Лекция 9 >

Порядок выполнения лабораторной работы

1. Описание структуры XML -документа с помощью DTD -схемы.

  1. Создание XML -документа timetable.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>

    Загрузите этот файл в браузере. Обратите внимание на иерархическую структуру документа.

  2. Добавьте в начало файла внутреннюю DTD -схему:

    <?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>
    ]>

    Сохраните файл и проверьте его на правильность с помощью программы-валидатора, например, по адресу: http://validator.w3.org. Попробуйте удалить какой-либо элемент или атрибут, проверьте документ снова с помощью валидатора.

  3. Вынесите схему во внешний файл с размещением на него ссылки внутри XML -документа. Проверьте, как будет загружаться XML -документ.

2. Описание структуры XML -документа с помощью XML Schema.

  1. Создание XML -документа 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>
  2. Создание файла 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>
  3. Проверьте схему на правильность с помощью программы-валидатора, например, по адресу: http://www.w3.org/2001/03/webdata/xsv.

3. Загрузка и изменение дерева XML документа

При выполнении данной лабораторной работы потребуется XML документ timetable.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>
  1. Создание JavaScript сценария загрузки XML документа.

    Создайте текстовый файл 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);
    }

    и сохраните его в той же папке, где находится файл timetable.xml.

    Код вызова этой функции может выглядеть следующим образом:

    <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>
  2. Перемещение по дереву узлов.

    Подготовьте следующую 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
  3. Изменение значения элемента.

    Следующий пример демонстрирует изменение значения элемента <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 />");
    }

    Внесите соответствующие изменения в предыдущую страницу и загрузите ее в браузере.

  4. Перемещение по узлам дерева с использованием отношений между ними.

    Следующий код показывает, как используя отношения 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 страницу и загрузите ее в браузере.

< Лекция 8 || Самостоятельная работа 3: 123 || Лекция 9 >
Наталья Алмаева
Наталья Алмаева
Россия
Андрей Лучицкий
Андрей Лучицкий
Россия