650 likes | 881 Views
Средства за дефиниране на XML документи - DTD. Дефиниране на XML документи. При дефинирането на тип XML документ се разчита на: Самият XML Пространствата на данните ( Namespaces ) Модел на данните Процедурата е: Моделиране на информацията Използване на “ well-formed ” XML
E N D
Средства за дефиниране на XML документи - DTD
Дефиниране на XML документи • При дефинирането на тип XML документ се разчита на: • Самият XML • Пространствата на данните (Namespaces) • Модел на данните • Процедурата е: • Моделиране на информацията • Използване на “well-formed” XML • Дефиниране на: а) DTD; b) XDR (XML Data Reduced Schema); c) XML Schema • Използване на пространства данни (namespaces) за комбиниране на информация отразлични източници
Дефиниране на XML документи • Три технологии за създаване на модели на данните: • DTD (Document Type Definition) • Описва структурата на документа и е полезен при създаване на документа. Прави т.нар. нестриктно валидиране. Има недостатъци като: различен от XML синтаксис; не може да се дефинира брой на повторение на елементи; не е съобразен с Обектно Ориентираните принципи; фиксиран модел; не подържа области на данни, нито числа, дати и т.н. • XDR Schema • Подържа и други типове данни. Ограничен е за продуктите на MicroSoft.
Дефиниране на XML документи • XSD (XML Schema Definition) • Разработен от W3C • Описание на XML схемите със синтаксиса на XML • Описва XML документа в термините на типове данни (например елемент peopleсъдържа различен брой елементи person) • Позволява стриктно валидиране (например за положителни цели числа) • Препоръчва се като модел
Валидиране на документа • Възможно е използване на XML процесор (парсер) за осигуряване на добре конструиран XML документ. • Много парсери (валидиращи) осъществяват и верификация за определяне на съдържанието на XML документа като валидно. • Т.е. документът може да се стартира сXML parserза да се определи дали е валиден. Този парсер се използва заедно с DTD дефиниции.
XML – Въведение в DTD • Валидните документи се подчиняват на структура за дефиниране на типа (DTD). • DTD (Document Type Definition) са множество от правила за създаване на XML документ. • Валидиране на документ означава верифициране на: • Документът е съобразен със синтаксиса на езика XML. • Документът се подчинява на дефинираната с DTD структура. • Всички указани в документа единици могат да бъдат намерени. • Съществуват средства за създаване на DTD. • DTD е множеството от всички декларации, които се съдържат директно или посредством указатели към външни единици в декларацията на типа на документа DOCTYPE.
XML – Въведение в DTD Защо DTD са от съществено значение за документа? • За да могат да си взаимодействат, компютрите трябва да се съгласуват на базата на определени правила. • Съобразявайки се с общи стандарти, компютрите могат да обменят информация. • Възможността да се обменя информация, води до създаването на мощни приложения. • Отделянето на описанието на данните от приложенията позволява на коопериращите се приложения да споделят единствено описание на данните – т.нар. XML речник. • Група от XML документи с общ речник – документен тип. • Отделният документ, отговарящ на типа – документна инстанция.
XML – Въведение в DTD • Спецификацията на XML 1.0 съдържа стандартизиран метод за описание на XML документни типове:DTD. • DTD дефинициите са XML документи, които могат да се вграждат в XML документа, или да съществуват като отделен документ и описват правилата за структуриране. • Чрез споделени DTD дефиниции има само едно място, където се извършват промени в описанието на данните (вместо на три места – в спецификацията, в изпращащия и приемащия модул)
XML – Въведение в DTD • “Валиден" XML документедобре структуриранияXML документ, който се подчинява на правилата на дефиницията за типа на документа (DTD). • Целта на DTD е дефиниране на легални изграждащи блокове на XML документ. DTD дефинира структурата на документа с множеството на легални (валидни) елементи. Latin-1/West European кодировка. <?xml version="1.0" encoding="ISO-8859-1"?> <!--<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE note SYSTEM "InternalNote.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Или Unicode Transformation - 8 bit кодировка. Декларация на типа на документа
XML – Въведение в DTD • Предизвикателства при създаването на DTD • За да бъдат полезни, DTD трябва да бъдат широко приложими. • Има изисквания за това,компании/организациида си сътрудничат при създаването на DTD. • Резултатите могат да бъдат бавни и частични. • Възможни са резултати при създаване на стандарти. • Възможна е появата на много XML DTD в близкото бъдеще.
XML – Въведение в DTD • Какво ще бъде предмет на разглежданията? • DTD могат да бъдат много сложни. • Целта е да се изучат основите, така че да могат да се четат основните DTD правила. • Ще се фокусираме върху структурата на елементите, атрибутите и изясняване на различията между вътрешни и външни DTD.
XML – Въведение в DTD • DTDмоделира документа чрез: • Дефиниране на множеството от елементи • Дефиниране на модела на съдържание на всеки елемент (под - елементи + данни) • Дефиниране на множеството от атрибути за всеки елемент • DTD дефинициите: • Осигуряват дефиниция на XML речника; • Те са поделяемо описание на структурата на XML документа; • Те са начин за валидиране на XML документи и ограничаване на съдържанието им; • Те се ограничавата до една дефиниция за документа екземпляр.
XML – Въведение в DTD • Само една DTD дефиниция може да се свърже с даден документ, но тя може да бъде декларирана вътрешно(inline)в XML документа, външно или смесено (вътрешна и външна части н DTD). • Привътрешното деклариране (включване в документа) се използва единствената декларация DOCTYPE. • Тя трябва да следва XML декларацията • За включване на DTD в XML сорс файла, се използва следния синтаксис на декларация: <!DOCTYPE root-element [element-declarations]>
Съдържание на DTD 1. Пролог • Вътрешно DTD 2. Деклариране тип на документа <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (#PCDATA)> <!ENTITY Description "This is entity content."> ]> <DOCUMENT> This is element text and an entity follows:&Description; </DOCUMENT> 3. DTD -правила 4. XML документ -данни
XML – Въведение в DTD DTD е включено • Примерен XML документ с включен DTD <?xml version="1.0" encoding="ISO-8859-1 " standalone =“yes”?> <!DOCTYPE note [ <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)> ]> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend</body> </note> Декларация на включен DTD Екземпляр на документа
XML – Въведение в DTD • DTD се интерпретира по следния начин:!DOCTYPE note (2 ред) дефинира, че това е документ от типnote (това е коренния елемент на документа).!ELEMENT note (ред 3) дефинира елементаnoteкато съставен от 4елемента: "to, from, heading, body".!ELEMENT to (ред 4) дефинира елементtoкато елемент от тип "#PCDATA".!ELEMENT from (ред 5) дефинира елементfromкато елемент от тип "#PCDATA"и т.н...... • PCDATA (Parsed Character Data)
XML – Въведение в DTD • Декларация на външенDTD с DOCTYPE • Ако DTD е външен за XML сорс файла, трябва да се обяви с DOCTYPE и следния синтаксис: • Същият XML документ, но с външен DTD ще изглежда по следния начин. PUBLIC или SYSTEM <!DOCTYPE root-element source "filename"> <?xml version="1.0" encoding="ISO-8859-1"standalone =“no”?> <!DOCTYPE note SYSTEM "note.dtd"> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> Съществуват декларации на DTD във външни единици
XML – Въведение в DTD • Файлът "note.dtd" съдържащ DTD има вида: • Защо се използва DTD? • DTD позволява всеки XML файлда съдържа описанието на собствения му формат. • Посредством DTD, независими групи от хора могат да използватобщо DTD за обмен на данни. • Приложението може да съдържа стандартен DTD за верификация на факта, че данните, които се получават от вън са валидни. • DTD може да се използва за верифициране на собствени данни. <!ELEMENT note (to,from,heading,body)> <!ELEMENT to (#PCDATA)> <!ELEMENT from (#PCDATA)> <!ELEMENT heading (#PCDATA)> <!ELEMENT body (#PCDATA)>
Съдържание на DTD • Кодиране на символите • XML Парсери (средства, позволяващи достъп до XML данни на приложения или сървлети)подържат три типа кодировки: • UTF-8: Unicode Transformation - 8 bit • UCS-2: Canonical Unicode Character site • UTF-16: Unicode format • Защо кодировката е съществена? • Позволява интернационализацияна софтуерните приложения.
Съдържание на DTD • Декларация на типа на документа Име на DTD <!DOCTYPE DOCUMENT [ • Определя началото на DTD. • Определя името на DTD. Това име трябва да съвпада с името на коренния елемент.
Съдържание на DTD Общ вид на DTD декларация • DTD форматиране • Ключови думи: ELEMENT, ATTLIST, ENTITY, NOTATION • ELEMENT (декларация за елементен тип) - две форми: • Категории за съдържание на елемент: ANY, EMPTY, element, mixed, PCDATA • ANY– елементите могат да съдържат произволен, добре конструиран XML код. Губят се проверките за валидност. <! ключова_дума параметър1 параметър2... параметърn> <! ELEMENT name category> <! ELEMENT name (content_model)>
Съдържание на DTD • DTD форматиране • Категории за съдържание на елемент: ANY, EMPTY, element, mixed, PCDATA • EMPTY– елементи, които не съдържат друго освен атрибути (празни елементи). • Останалите три категории се използват за ограничаване на съдържанието на елементите до определен тип данни и са свързани с моделите на съдържание. • Модели на съдържание – използват се за описание на структурата и съдържанието на даден елементен тип. • Базовият синтаксис на модела на съдържание е списък от имената на елементните типове и/или #PCDATA в скоби. • Основната разлика между елементно и смесено съдържание е в #PCDATA. Ако я има в декларацията – съдържанието е mixedили #PCDATAи елементно в противен случай.
Съдържание на DTD • DTD форматиране • Модели на съдържание • #PCDATA – елементите позволяват само символни данни. • Елементно съдържание – тези елементи могат да съдържат само други елементи (наследници). <name> Character data can include entity references (& or >) </name> За частта от документа: <!ELEMENT name (#PCDATA)> Извън таговете на елементите няма текст <name> <child1>Content1</child1> <child2>Content2</child2> <child3>Content3</child3> </name> За частта от документа: <!ELEMENT name (child1,child2,child3)>
Съдържание на DTD • DTD форматиране • Модели на съдържание • Смесено съдържание – освен елементите наследници има и текст извън тях. Извън таговете на елементите има текст <name> Text1 <child1>Content1</child1> <child2>Content2</child2> Text2 </name> За частта от документа: <!ELEMENT name (#PCDATA,child1,child2)> Или <!ELEMENT name (#PCDATA,child2,child1)>
Съдържание на DTD • DTD форматиране • Списъци с последователности и списъци с избори • Оператори за разделяне на имената на елементите наследници в модела на съдържание: , (запетая) и | (вертикална черта) • Незадължителни елементи и ограничаване на броя на появявания - оператори за мощност: [никакъв], ?, *, + <!ELEMENT Name (Title, FirstName, MiddleName,LastName, Suffix)> <!ELEMENT Title (#PCDATA)> <!ELEMENT FirstName (#PCDATA)> <!ELEMENT MiddleName (#PCDATA)> <!ELEMENT LastName (#PCDATA)> <!ELEMENT Suffix (#PCDATA)>
Съдържание на DTD • ? (0 или 1); * (0,1 или повече); + (1 или повече). Ако няма суфикс – елементът се среща веднъж. елемент section съдържа произволен брой пъти елементите р или а в произволен ред <! ELEMENT section (p | a)*> всяка част може да се среща произволен брой пъти и в произволен ред <! ELEMENT p (#PCDATA | em | exp | index)*>
Съдържание на DTD • DTD форматиране • Примери с оператори за мощност <!ELEMENT Name ( (Mr|Ms|Dr)?, FirstName, MiddleName*, LastName, (Jr|Sr)? ) > Два до пет елемента наследници <!ELEMENT Name ( Singlename | ((Mr|Ms|Dr)?, FirstName, MiddleName*, LastName, (Jr|Sr)?) ) >
Съдържание на DTD • DTD правила <!ELEMENT DOCUMENT (#PCDATA)> <!ENTITY Description "This is entity content."> • ELEMENT: декларира специфичен елемент. Тук е деклариран коренния елемент, наречен DOCUMENT. • #PCDATA: текстови данни, които не съдържат символи като &, <, или >. • ENTITY: декларира съкращение. • Когато парсерът срещне&Description, той ще го замести с:"This is entity content."
Съдържание на DTD • XML документ -данни <DOCUMENT> This is element text and an entity follows:&Description; </DOCUMENT> • Този документсъдържасамо един елемент: DOCUMENT, следователно тойсе съобразява (придържа)към DTD. • Следователно документът е валиден. • XML Parser ще замести &Description с "This is entity content."
Съдържание на DTD • Деклариране на атрибути • Атрибутът (име – стойност) специфицира кои са атрибутите, които могат да се асоциират с една инстанция на елемента. • Параметърът параметър_pопределя поведението на парсера (дава стойност за атрибута на приложението дори и при отсъствието на атрибут). • тип_атрибут може да бъде: CDATA (стойността е символен низ); ID/IDREF (указване към документа);ENTITY (стойността може да бъде име на външни единици, не XML); NMTOKEN(S) (стойността може да бъде символично име – произволен стринг); NOTATION (ще бъде обяснен по-късно); списък на стойности за атрибута зададен с (А | B | C). <!ATTLIST име_елементиме_атрибуттип_атрибут параметър_pдекларация>
Съдържание на DTD • Деклариране на атрибути • декларация може да бъде: #RECUIRED (атрибутът е задължителен и създателят на документа трябва да задава стойността му); #IMPLIED(присъствието на атрибута в инстанцията на елемента е факултативна); #FIXED ‘value’(атрибутът взима винаги тази стойност); зададена стойност за атрибута. • Пример за атрибут CDATA (символен низ с фиксирана стойност). <!ATTLIST f at1 CDATA #FIXED ‘<08.25A/3445>’
Съдържание на DTD <!ATTLIST Element attr CDATA #REQUIRED> • Деклариране на атрибути- примери Задължителен атрибут Пример: <Element attr=“string”… </Element> <!ELEMENT Name (First, Middle, Last)> <!ATTLIST Name title (Mr | Ms | Dr) #IMPLIED suffix (Jr | Sr) #IMPLIED > <!ELEMENT First (#PCDATA)> <!ELEMENT Middle (#PCDATA)> <!ELEMENT Last (#PCDATA)> Двата атрибута са низове, но всеки трябва да има стойност, която съответства на декларацията
Съдържание на DTD <!ELEMENT Name (First, Middle, Last)> <!ATTLIST Name title NMTOKENS #IMPLIED suffix NMTOKEN #IMPLIED > <!ELEMENT First (#PCDATA)> <!ELEMENT Middle (#PCDATA)> <!ELEMENT Last (#PCDATA)> • Деклариране на атрибути- примери Списък от стойности, разделени с интервал Двата атрибута не са ограничени като стойности <!ELEMENT Document (#PCDATA)> <!ATTLIST Document version CDATA #FIXED “1.0”> Единствена валидна стойност за версия
Съдържание на DTD • Деклариране на атрибути • Пример за атрибут ENTITY – vrmlе нотация, свързана с приложение cosmo, а в празния елемент f2се дефинира атрибут graph. <!-- В DTD -- > <!NOTATION vrml SYSTEM “usr/local/bin/cosmo”> <!ELEMENT f2 EMPTY> <!ATTLIST f2 graph ENTITY #REQUIRED> <!-- In a document’s instance -- > <!-- Internal DTD part -- > <!ENTITY labyrinth SYSTEM “./models/lab.vrml” NDATA vrml > <!– В документа -- > <f2 graph=‘labyrinth’ /> Декларира се единица, не XML с име labyrinth Стойността на graph е labyrinth
XML – Въведение в DTD • СмесенDTD с вътрешна и външна части. <?xml version="1.0“encoding=‘ISO-8859-1’ standalone =“no”?> <!DOCTYPE example SYSTEM “example.dtd" [ <!--Декларация на вътрешна част -- > <!ENTITY ab “in English” <--Край на декларация на вътрешна част -- > ]> <example> language=‘en’>Text &ab;</example> Вътрешна част на DTD <?xml version="1.0“encoding=‘ISO-8859-1’> <!-- Начало на външна част -- > <!ELEMENT example (#PCDATA) > <!– Край на външна част на DTD -- > Файл example.dtd за външна част на DTD
XML – Въведение в DTD • Външни единици за декларация на DTD . • Включват се външни файлове. <?xml version="1.0“encoding=‘ISO-8859-1’ standalone =‘no’?> <!DOCTYPE article SYSTEM ‘./dtd/article.dtd’ [ <!ENTITY % table SYSTEM ‘./dtd/tab.xml’ > <!ENTITY % bib SYSTEM ‘./dtd/biblio.xml’ > %table; %bib; ] <article> …</article> Външни единици С параметри се указват външни файлове
Съдържание на DTD Декларация – свързва тип mail с приложение • Пример за атрибут NOTATION <!NOTATION mail SYSTEM “/usr/local/bin/xmail”> <!ELEMENT mail-buffer ANY > <!ATTLIST mail-buffer m1 NOTATION (mail) #IMPLIED > Дефинира атрибут ml от тип mail
Съдържание на DTD • Пример за атрибут ID/IDREF За една инстанция: <!ELEMENT section (#PCDATA | xref)* > <!ATTLIST section target ID #IMPLIED > <!– xref and its attribute declaration -- > <!ELEMENT xref EMPTY > <!ATTLISTxref ref IDREF #REQUIRED > ID означава, че ще има указване IDREF – за елемента с който се прави указване <section target=‘X321’>This is the first section.</section> <section>In a second section – a pointer to the first<xref ref=‘X321’</section>
Съдържание на DTD Добавят се два атрибута към елемента Document • Пример с атрибути <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (#PCDATA)> <!ATTLIST DOCUMENT trackNum CDATA #REQUIRED secLevel (unclassified|classified) "unclassified"> <!ENTITY Description "This is a very simple sample document."> ]> <DOCUMENT trackNum="1234">This is element text and an entity follows:&Description; </DOCUMENT>
Съдържание на DTD • Атрибутите за примера <!ATTLIST DOCUMENT trackNum CDATA #REQUIRED secLevel (unclassified|classified) "unclassified"> <!ENTITY Description "This is a very simple sample document."> ]> • Определя се, чеtrackNumатрибутаможе да съдържа произволен текст и е задължителен. • Определя се, че атрибутsecLevelможе да се установи в една от двете стойности: unclassified или classified. По подразбиране е unclassified.
Съдържание на DTD • Многократни елементи • Добавят се три нови елемента към елемента DOCUMENT.. Тези нови елементи трябва да се появяват в редаTITLE,AUTHOR,SUMMARY,NOTE.
Съдържание на DTD <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (TITLE,AUTHOR+,SUMMARY*,NOTE?)> <!ATTLIST DOCUMENT trackNum CDATA #REQUIRED secLevel (unclassified|classified) "unclassified"> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT AUTHOR (#PCDATA)> <!ELEMENT SUMMARY (#PCDATA)> <!ELEMENT NOTE (#PCDATA)> <!ENTITY Description "This is a very simple sample document."> ]> <DOCUMENT trackNum="1234"> <TITLE>Sample Document</TITLE> <AUTHOR>Simon St.Laurent</AUTHOR> <SUMMARY>This is element text and an entity follows:&Description; </SUMMARY> </DOCUMENT>
Съдържание на DTD <!ELEMENT DOCUMENT (TITLE,AUTHOR+,SUMMARY*,NOTE?)> • При деклариране на елемент се специфицира: • Списъка от елементи; • Изисквани правила за елементи; • Последователността, в която да се появяват; • Колко пъти могат да се появяват
Съдържание на DTD Структура на елемента <!ELEMENT DOCUMENT (TITLE,AUTHOR+,SUMMARY*,NOTE?)> За този елемент: • Зададена последователност: TITLE, AUTHOR, SUMMARY, NOTE • TITLE (изисква се само едно заглавие) • AUTHOR (поне един автор) • SUMMARY (нула или повече елементи) • NOTE (нула или един)
Съдържание на DTD • Ще бъдат добавени нови четири елемента към елемента AUTHOR. Тези елементи трябва да се появяват в ред: FIRSTNAME, LASTNAME, (UNIVERSITY | COMPANY)
Съдържание на DTD <?xml version="1.0" encoding="UTF-8"?> 1/2 <!DOCTYPE DOCUMENT [ <!ELEMENT DOCUMENT (TITLE,AUTHOR+,SUMMARY*,NOTE?)> <!ATTLIST DOCUMENT trackNum CDATA #REQUIRED secLevel (unclassified|classified)"unclassified"> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT AUTHOR (FIRSTNAME, LASTNAME, (UNIVERSITY | COMPANY)?)> <!ELEMENT FIRSTNAME (#PCDATA)> <!ELEMENT LASTNAME (#PCDATA)> <!ELEMENT UNIVERSITY (#PCDATA)> <!ELEMENT COMPANY (#PCDATA)> <!ELEMENT SUMMARY (#PCDATA)> <!ENTITY Description "This is a very simple sample document."> ]>
Съдържание на DTD <DOCUMENT trackNum="1234"> 2/2 <TITLE>Sample Document</TITLE> <AUTHOR> <FIRSTNAME>Simon</FIRSTNAME> <LASTNAME>St.Laurent</LASTNAME> <COMPANY>XML Mania</COMPANY> </AUTHOR> <SUMMARY>This is element text and an entity follows: &Description; </SUMMARY></DOCUMENT>
Съдържание на DTD Външно DTD: simple.dtd <!ELEMENT DOCUMENT (TITLE,AUTHOR+,SUMMARY*,NOTE?)> 1/2 <!ATTLIST DOCUMENT trackNum CDATA #REQUIRED secLevel (unclassified|classified) "unclassified"> <!ELEMENT TITLE (#PCDATA)> <!ELEMENT AUTHOR (FIRSTNAME,LASTNAME, (UNIVERSITY | COMPANY)?)> <!ELEMENT FIRSTNAME (#PCDATA)> <!ELEMENT LASTNAME (#PCDATA)> <!ELEMENT UNIVERSITY (#PCDATA)> <!ELEMENT COMPANY (#PCDATA)> <!ELEMENT SUMMARY (#PCDATA)> <!ENTITY Description "This is a very simple sample document.">
Съдържание на DTD XML Документ <?xml version="1.0" encoding="UTF-8"?> 2/2 <!DOCTYPE DOCUMENT SYSTEM "simple.dtd"> <DOCUMENT trackNum="1234"> <TITLE>Sample Document</TITLE> <AUTHOR><FIRSTNAME>Simon</FIRSTNAME> <LASTNAME>St.Laurent</LASTNAME> <COMPANY>XML Mania</COMPANY></AUTHOR> <SUMMARY>This is element text and an entity follows:&Description; </SUMMARY></DOCUMENT> Указва се външното DTD: simple.dtd
Съдържание на DTD • Пример за келнер в ресторант, който обслужва някои от масите. <?xml version="1.0" encoding="UTF-8"?>1/2 <!DOCTYPE restaurant [ <!- - елемент restaurant - -> <!ELEMENT restaurant (tables, waiter)> <!ELEMENT tables (table+)> <!ELEMENT table EMPTY> <!- - всяка маса има уникален ref - -> <!ATTLIST table refID #REQUIRED> <!- - елемент waiter - -> <!ELEMENT waiter (service Table+)> <!ATTLIST waiter Name CDATA #REQUIRED> <!- - обслужване на маси - -> <!ELEMENT service Table EMPTY> <!ATTLIST service Table tableRef IDREF #REQUIRED> ]> Колекция от елементи table Атрибут, който се отнася за други уникални ID <!ATTLIST service Table tableRef IDREFS #REQUIRED>