Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LabKompl1_XML.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.8 Mб
Скачать

Лабораторная работа №7 Параметрические внутренние и внешние примитивы

Цель работы:

Изучить параметрические внутренние и внешние примитивы

Xод работы:

Объявление параметрического внутреннего разбираемого примитива

Обычно для объявления элементов и атрибутов используются параметрические

сущности. Ссылки на параметрические сущности могут включаться только в DTD.

Объявление для параметрического внутреннего разбираемого примитива имеет следующую общую форму записи:

<!ENTITY % ИмяПримитива ЗначениеПримитива>

Следующее DTD объявляет параметрический внутренний разбираемый примитив с именем author, который содержит три объявления разметки: комментарий, объявление типа элемента и объявление списка атрибутов. Содержимое примитива (т.е. замещающий его текст) помещается в конец DTD посредством ссылки на параметрический примитив (%author;);

<!DOCTYPE BOOK

[

<!ENTITY % author

"<!-- информация об авторе -->

<!ELEMENT AUTHOR (#PCDATA)>

<!ATTLIST AUTHOR Nationality CDATA 'American'>"

>

<!ELEMENT BOOK (TITLE, AUTHOR)>

<!ELEMENT TITLE (#PCDATA)>

%author;

]

Объявление параметрического внешнего разбираемого примитива

Объявление для параметрического внешнего разбираемого примитива имеет следующую форму записи:

<!ENTITY % ИмяПримитива SYSTEM СистемЛитерал>

Системный литерал задает URI файла, содержащего данные параметрического примитива. В настоящее время URI практически аналогичен стандартному унифицированному указателю ресурса Internet (URL). Вы можете использовать как полностью заданный URI, например:

<!ENTITY % declarations

SYSTEM "http://bogus.com/documents/Declarations.dtd">

Либо вы можете использовать частичный URI, задающий местонахождение относительно местонахождения XML-документа, содержащего URI, например:

<!ENTITY % declarations SYSTEM "Declarations.dtd">

Вы можете использовать параметрические внешние разбираемые примитивы для хранения группы взаимосвязанных объявлений. Допустим, вы занимаетесь продажей книг, CD-ROM, плакатов и другой продукции. Вы можете поместить объявления для каждого вида продукции в отдельный файл. Это позволит вам объединять эти группы объявлений различными способами. Например, вы хотели бы создать XML-документ, который описывает только имеющиеся у вас в наличии книги и CD-ROM. Для этого вы можете поместить объявления для книг и CD-ROM в DTD документа с помощью параметрических внешних разбираемых примитивов, как показано в следующем примере XML-документа:

<?xml version="1.0" encoding="windows-1251" ?>

<!DOCTYPE INVENTORY

[

<!ELEMENT INVENTORY (BOOK | CD)*>

<!ENTITY % book_decls SYSTEM "Book.dtd">

<!ENTITY % cd_decls SYSTEM "CD.dtd">

%book_decls;

%cd_decls;

]

>

<INVENTORY>

<BOOK>

<BOOKTITLE>The Marble Faun</BOOKTITLE>

<AUTHOR>Nathaniel Hawthorne</AUTHOR>

<PAGES>473</PAGES>

</BOOK>

<CD>

<CDTITLE>Concerti Grossi Opus 3</CDTITLE>

<COMPOSER>Handel</COMPOSER>

<LENGTH>72 minutes</LENGTH>

</CD>

<BOOK>

<BOOKTITLE>Leaves of Grass</BOOKTITLE>

<AUTHOR>Walt Whitman</AUTHOR>

<PAGES>462</PAGES>

</BOOK>

<!-- дополнительные виды продукции… -->

</INVENTORY>

Вот содержимое файла примитива Book.dtd:

<!ELEMENT BOOK (BOOKTITLE, AUTHOR, PAGES)>

<!ELEMENT BOOKTITLE (#PCDATA)>

<!ELEMENT AUTHOR (#PCDATA)>

<!ELEMENT PAGES (#PCDATA)>

А вот содержимое файла примитива CD.dtd:

<!ELEMENT CD (CDTITLE, COMPOSER, LENGTH)>

<!ELEMENT CDTITLE (#PCDATA)>

<!ELEMENT COMPOSER (#PCDATA)>

<!ELEMENT LENGTH (#PCDATA)>

Создайте XML-документ с внутренними параметрическими сущностями а затем с внешними, для этого сделайте следующее:

  1. Откройте новый файл в вашем текстовом редакторе и введите текст XML-документа, листинг которого представлен ниже

Листинг 2.7

<?xml version =" 1.0" standalone="yes"?>

<!DOCTYPE DOCUMENT [

<!ENTITY % BR "<!ELEMENT BR EMPTY>">

<!ELEMENT DOCUMENT (CUSTOMER)*>

<!ELEMENT CUSTOMER (NAME,DATE.ORDERS)>

<!ELEMENT NAME (LAST_NAME.FIRST_NAME)>

<!ELEMENT LAST_NAME (#PCDATA)>

<!ELEMENT FIRST_NAME (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT ORDERS (ITEM)*>

<!ELEMENT ITEM (PRODUCT.NUMBER.PRICE)>

<!ELEMENT PRODUCT (#PCDATA)>

<!ELEMENT NUMBER (#PCDATA)>

<!ELEMENT PRICE (#PCDATA)>

]>

В данном случае объявляется параметрическая сущность BR, которая вводится в определение DTD в виде конструкции <! ELEMENT BR EMPTY>

  1. Теперь можно обращаться к этой параметрической сущности путем включения в DTD объявления <! ELEMENT BR EMPTY>,измените листинг 2.7 следующим образом:

<?xml version ="1.0" standalone="yes"?>

<!DOCTYPE DOCUMENT [

<!ENTITY % BR "<!ELEMENT BR EMPTY>">

<!ELEMENT DOCUMENT (CUSTOMER)*>

<!ELEMENT CUSTOMER (NAME.DATE.ORDERS)>

<!ELEMENT NAME (LAST_NAME.FIRST_NAME)>

<!ELEMENT LAST_NAME (#PCDATA)>

<!ELEMENT FIRST_NAME (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT ORDERS (ITEM)*>

<!ELEMENT ITEM (PRODUCT.NUMBER.PRICE)>

<!ELEMENT PRODUCT (#PCDATA)>

<!ELEMENT NUMBER (#PCDATA)>

<!ELEMENT PRICE (#PCDATA)>

%BR;

]>

<DOCUMENT>

<CUSTOMER>

<NAME>

<LAST_NAME >Smith </LAST_NAME >

<FIRST_NAME >Sam</FIRST_NAME >

</NAME>

<DATE>October 15. 2003</DATE>

<ORDERS>

<ITEM>

<PRODUCT>Tomatoes</PRODUCT>

<NUMBER>8</NUMBER>

<PRICE>$1.25</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Oranges</PRODUCT>

<NUMBER>24</NUMBER>

<PRICE>$4.98</PRICE>

</ITEM>

</ORDERS>

</CUSTOMER>

</DOCUMENT>

  1. Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя VnutParSush. xml

  2. Откройте файл в вашем браузере и вас ложно получится то что представлено на рисунке 2.11

Рисунок 2.11

  1. Теперь создайте XML-документ с внешними параметрическими сущностями, для этого прочитайте информацию ниже и выполните задания.

Если параметрическая сущность находится во внешнем подмножестве DTD, на нее можно ссылаться в определениях DTD, в том числе при объявлении элементов. Ниже рассматривается соответствующий пример. Для данного документа используется внешнее подмножество DTD, ch04_07.dtd:

<?xml version = "1.0" standalone="no"?>

<!DOCTYPE DOCUMENT SYSTEM "chO4_O7.dtd">

<DOCUMENT>

<CUSTOMER>

<NAME>

<LAST_NAME>Smith</LAST_NAME>

<FIRST_NAME>Sam</FIRST_NAME>

</NAME>

<DATE>October 15, 2003</DATE>

<ORDERS>

<ITEM>

<PRODUCT>Tomatoes</PRODUCT>

<NUMBER>8</NUMBER>

<PRICE>$1.25</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Oranges</PRODUCT>

<NUMBER>24</NUMBER>

<PRICE>$4.98</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Aspa ragus</PRODUCT>

<NUMBER>12</NUMBER>

<PRICE>$2.95</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Lettuce</PRODUCT>

<NUMBER>6</NUMBER>

<PRICE>$11.50</PRICE>

</ITEM>

</ORDERS>

</CUSTOMER>

</DOCUMENT>

Во внешнем подмножестве DTD, ch04_07.dtd, будут выполнены структурные изменения, в результате чего элемент <DOCUMENT> сможет включать не только элементы <CUSTOMER>, но также и элементы <BUYER> и <DISCOUNTER>. Каждый из рассматриваемых новых элементов, <BUYER> и <DISCOUNTER>, снабжен моделью содержимого, идентичной модели для элемента <CUSTOMER> (то есть эти элементы включают элементы <NAME>, <DATE> и <ORDERS>). В целях небольшой экономии времени эта модель содержимого (NAME,DATE,ORDERS) будет назначена параметрической сущности record:

<!ENTITY % record "(NAME.DATE.ORDERS)">

<!ELEMENT DOCUMENT (CUSTOMER | BUYER | DISCOUNTER)^

Теперь можно обращаться к параметрической сущности record в произвольном месте. Это означает, что ее можно использовать для объявления элементов <CUSTOMER>, <BUYER> и <DISCOUNTER>:

<!ENTITY % record "(NAME.DATE.ORDERS)">

<!ELEMENT DOCUMENT (CUSTOMER | BUYER | DISCOUNTER)*>

<!ELEMENT CUSTOMER %record;>

<!ELEMENT BUYER %record:>

<!ELEMENT DISCOUNTER %record;>

<!ELEMENT NAME (LAST_NAME.FIRST_NAME)>

<!ELEMENT LAST_NAME (#PCDATA)>

<!ELEMENT FIRST_NAME (#PCDATA)>

<!ELEMENT DATE (#PCDATA)>

<!ELEMENT ORDERS (ITEM)*>

<!ELEMENT ITEM (PRODUCT.NUMBER.PRICE)>

<!ELEMENT PRODUCT (#PCDATA)>

<!ELEMENT NUMBER (#PCDATA)>

<!ELEMENT PRICE (#PCDATA)>

Теперь документ выглядит и анализируется так, как это и предполагалось: можно использовать элементы <CUSTOMER>, <BUYER> и <DISCOUNTER> внутри элемента <DOCUMENT>, причем все они имеют одну и ту же модель содержимого.

Откройте новый файл в вашем текстовом редакторе и введите текст XML-документа, листинг которого представлен ниже

Листинг 2.8

<?xml version = "1.0" standalone="no"?>

<!DOCTYPE DOCUMENT SYSTEM "ch04_07.dtd">

<DOCUMENT>

<CUSTOMER>

<NAME>

<LAST_NAME>Smith</LAST_NAME>

<FIRST_NAME>Sam</FIRST_NAME>

</NAME>

<DATE>October 15. 2003</DATE>

<ORDERS>

<ITEM>

<PRODUCT>Tomatoes</PRODUCT>

<NUMBER>8</NUMBER>

<PRICE>$1.25</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Oranges</PRODUCT>

<NUMBER>24</NUMBER>

<PRICE>$4.98</PRICE>

</ITEM>

</ORDERS>

</CUSTOMER>

<BUYER>

<NAME>

<LAST_NAME>Jones</LAST_NAME>

<FIRST_NAME>Po11y</FIRST_NAME>

</NAME>

<DATE>October 20, 2003</DATE>

<ORDERS>

<ITEM>

<PRODUCT>Bread</PRODUCT>

<NUMBER>12</NUMBER>

<PRICE>$14.95</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Apples</PRODUCT>

<NUMBER>6</NUMBER>

<PRICE>$1.50</PRICE>

</ITEM>

</ORDERS>

</BUYER>

<DISCOUNTER>

<NAME>

<LAST_NAME >Weber</LAST_NAME>

<FIRSTJAME>Bill</FIRSTJAME>

</NAME>

<DATE>October 25, 2003</DATE>

<ORDERS>

<ITEM>

<PRODUCT>Asparagus</PRODUCT>

<NUMBER>12</NUMBER>

<PRICE>$2.95</PRICE>

</ITEM>

<ITEM>

<PRODUCT>Lettuce</PRODUCT>

<NUMBER>6</NUMBER>

<PRICE>$11.50</PRICE>

</ITEM>

</ORDERS>

</DISCOUNTER>

</DOCUMENT>

Воспользуйтесь командой Save (Сохранить) текстового редактора, для сохранения документа на вашем жестком диске, присвоив ему имя ch04_07.xml

Откройте файл в вашем браузере и у вас должно получиться то что представлено на рисунке 2.12

Рисунок 2.12

Упражния для самостоятельной работы

  1. Создайте два XML- документа: один с внутренними параметрическими сущностями, а другой с внешними.

  2. Отобразите их в браузере

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]