Дефиниција типа документа
ДТД користи терцијалну формалну синтаксу, која декларише прецизно који елементи и референце могу да се појаве, и на ком месту у документу одређеног типа, као и који су садржај и атрибути ових елемената. DTD такође може да декларише ентитете који могу бити искоришњени у инстанци документа. Сврха DTD-а (Document Type Definition) је да дефинише дозвољене градивне елементе једног XML документа. Са DTD-ом, свака ваш XML датотека може носити опис свог формата. Са DTD-ом, независне групе људи могу се сагласити да користе стандардни DTD за размену података. Ваша апликација може употребљавати стандардни DTD како би проверила да су подаци, примљени из спољашњег света валидни. Такође, можете користити DTD за верификацију сопствених података. Пример DTD-а, под именом Newspaper (новине): <
<!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
]>
Повезивање ДТД-ова са документимаДефиниција типа документа (DTD) дефинише дозвољене градивне елементе XML докуемнта. DTD-ови имају два типа декларазија:
Интерна DTD декларацијаУколико је DTD декларисан унутар самог XML фајла, потребно је да буде у DOCTYPE дефиницији са следећом синтаксом: <!DOCTYPE root-element [element-declarations]>
Пример XML документа ca интерним DTD:
<?xml version="1.0"?>
<!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 написан изнад је интерпретиран на следећи начин:
Екстерна DTD декларацијаУколико је DTD декларисан у екстерном фајлу, потребно је да буде у DOCTYPE дефиницији, са следећом синтаксом: <!DOCTYPE root-element SYSTEM "filename">
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
И ово је датотека "note.dtd", која садржи следећи DTD: <!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Градивни елементи XML докуменатаИз DTD перспективе, сви XML документи (и HTML документи) су сачињени од следећих градивних елемената:
ЕлементиЕлементи су градивна основа и XML и HTML докумената. Примери HTML елемената су "body" и "table". Примери XML елемената би могли бити "note" или "message". Елементи могу садржати текст, друге елементе или бити празни. Примери празних HTML елемената су "hr", "br" и "img". Примери: неки текст</body>
<message>неки текст</message>
АтрибутиАтрибути пружају додатне информације о елементима. Атрибути су увек постављени унутар тага за отварање елемента. ЕнтитетиНеки карактери имају специјално значење у XML, као што је знак мање од (<), који дефинише почетак XML тага.   Већина вас је упозната са HTML ентитетом: " ". Овај "размакница без преламања" ентитет је коришћен у HTML-у за убацивање додатног размака у документу. Следећи ентитети су предефинисани у XML-у: PCDATAPCDATA значи “процесуирани подаци са карактерима” PCDATA је текст који ће бити обрађен од стране анализатора. Тагови унутар текста ће бити третирани као обележавање и ентитети ће бити проширени. Међутим, обрађени подаци са карактерима неће садржати &, <, или > знакове; они морају бити представљени преко & < и > ентитета, редом. CDATACDATA значи “подаци са карактерима” CDATA је текст који неће бити обрађен од стране анализатора. Тагови унутар текста НЕЋЕбити третирани као обележавање и ентитети неће бити проширени.
DTD – ЕлементиДекларисање елемената У DTD-у, XML елементи су декларисани помоћу декларације елемента, са следећом синтаксом: <!ELEMENT element-name category>
или
<!ELEMENT element-name (element-content)>
Празни елементиПразни елементи су декларисани са кључном речи за категорију, EMPTY: <!ELEMENT element-name EMPTY>
Пример: <!ELEMENT br EMPTY>
XML пример: <br />
Елементи са обрађеним подацима са карактеримаЕлементи садржани само од обрађених података са карактерима су декларисани са #PCDATA унутар заграда. <!ELEMENT element-name (#PCDATA)>
Пример: <!ELEMENT from (#PCDATA)>
Елементи без икаквог садржајаЕлементи декларисани са кључном речи категорије ANY, могу да садрже било коју комбинацију обрадивих података: <!ELEMENT element-name ANY>
Пример: <!ELEMENT note ANY>
Елементи са децом (секвенце)Елементи са једним или више детета су декларисани са именима њихове деце унутар заграда: <!ELEMENT element-name (child1)>
или
<!ELEMENT element-name (child1,child2,...)>
Пример: <!ELEMENT note (to,from,heading,body)>
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
Декларација само једног појављивања у елементу : <!ELEMENT element-name (child-name)>
Пример: <!ELEMENT note (message)>
Пример изнад декларише да деца елемента "message" морају да се појаве тачно једном унутар "note" елемента.
<!ELEMENT element-name (child-name+)>
Пример: <!ELEMENT note (message+)>
Знак + у овом примеру декларише да дете-елемент "message" мора да се појави једном или више пута унутар елемента "note".
<!ELEMENT element-name (child-name*)>
Пример: <!ELEMENT note (message*)>
Знак * у примеру изнад декларише да дете-елемент "message" може да се појави нула или више пута унутар "note" елемента.
<!ELEMENT element-name (child-name?)>
Пример: <!ELEMENT note (message?)>
Знак ? У примеру изнад декларише да дете-елемент "message" може да се појави једном или ниједном унутар елемента "note".
Пример: <!ELEMENT note (to,from,header,(message|body))>
Пример изнад декларише да "note" елемент мора да садржи "to" елемент, "from" елемент, "header" елемент, и или "message" или "body" елемент.
Пример: <!ELEMENT note (#PCDATA|to|from|header|message)*>
Пример изнад декларише да елемент "note" може садржати нула или више појављивања обрађених података са карактерима, као и "to", "from", "header", или "message" елементе.
DTD - АтрибутиУ DTD-у, атрибути су декларисани помоћу ATTLIST декларације. Декларисање атрибутаДекларација атрибута има следећу синтаксу: <!ATTLIST element-name attribute-name attribute-type default-value>
DTD пример: <!ATTLIST payment type CDATA "check">
XML пример: <payment type="check" />
attribute-type може бити једно од наведених:
Подразумевана вредност атрибута <!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
Валидни XML: <square width="100" />
У примеру изнад, "square" елемент је дефинисан као празан елемент са "width" атрибутом, типа CDATA.
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
Пример <!ATTLIST person number CDATA #REQUIRED>
Валидан XML: <person number="5677" />
Неисправан XML: <person />
Употребљавајте #REQUIRED кључну реч уколико немате могућност за подразумевану вредност, али свеједно желите да приморате да атрибут буде присутан.
#IMPLIED
Синтакса <!ATTLIST element-name attribute-name attribute-type #IMPLIED>
Пример <!ATTLIST contact fax CDATA #IMPLIED>
Исправан [[[XML]]: <contact fax="555-667788" />
Неисправан XML: <contact />
Користите #IMPLIED кључну реч уколико не желите да приморате аутора да укључи атрибут, иако немате могућност за подразумевану вредност.
#FIXED <!ATTLIST element-name attribute-name attribute-type #FIXED "value">
Пример <!ATTLIST sender company CDATA #FIXED "Microsoft">
Исраван XML: <sender company="Microsoft" />
Неисправан XML: <sender company="W3Schools" />
Користите #FIXED кључну реч када желите да атрибут има фиксирану вредност без могућности да је аутор измени.
<!ATTLIST element-name attribute-name (en1|en2|..) default-value>
Пример <!ATTLIST payment type (check|cash) "cash">
XML пример: <payment type="check" />
или
<payment type="cash" />
Користите пребројиве вредности атрибута када желите да вредност атрибута буде једна из фиксираног скупа дозвољених могућности.
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
У првом примеру, пол је атрибут. У другом, пол је дете-елемент. Оба примера пружају исте информације. Не постоје правила за то када користити атрибуте а кад децу-елементе. Неки проблеми са атрибутима су:
DTD - ЕнтитетиЕнтитети су променљиве, коришћене за дефинисање пречица за стандардни текст или специјалне карактере:
Интерна декларација ентитета <!ENTITY entity-name "entity-value">
Пример <!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">
<author>&writer;©right;</author>
Напомена Eнтитет има три дела: амперсенд (&), име ентитета , и тачку-зарез (;).
Синтакса <!ENTITY entity-name SYSTEM "URI/URL">
DTD пример: <!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">
XML пример: <author>&writer;©right;</author>
<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
Newspaper Article (Новински чланак) DTD <!DOCTYPE NEWSPAPER [
<!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE,BYLINE,LEAD,BODY,NOTES)>
<!ELEMENT HEADLINE (#PCDATA)>
<!ELEMENT BYLINE (#PCDATA)>
<!ELEMENT LEAD (#PCDATA)>
<!ELEMENT BODY (#PCDATA)>
<!ELEMENT NOTES (#PCDATA)>
<!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED>
<!ATTLIST ARTICLE EDITOR CDATA #IMPLIED>
<!ATTLIST ARTICLE DATE CDATA #IMPLIED>
<!ATTLIST ARTICLE EDITION CDATA #IMPLIED>
<!ENTITY NEWSPAPER "Vervet Logic Times">
<!ENTITY PUBLISHER "Vervet Logic Press">
<!ENTITY COPYRIGHT "Copyright 1998 Vervet Logic Press">
]>
<!DOCTYPE CATALOG [
<!ENTITY AUTHOR "John Doe">
<!ENTITY COMPANY "JD Power Tools, Inc.">
<!ENTITY EMAIL "jd@jd-tools.com">
<!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT
(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>
<!ATTLIST PRODUCT
NAME CDATA #IMPLIED
CATEGORY (HandTool|Table|Shop-Professional) "HandTool"
PARTNUM CDATA #IMPLIED
PLANT (Pittsburgh|Milwaukee|Chicago) "Chicago"
INVENTORY (InStock|Backordered|Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)>
<!ATTLIST SPECIFICATIONS
WEIGHT CDATA #IMPLIED
POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)>
<!ATTLIST OPTIONS
FINISH (Metal|Polished|Matte) "Matte"
ADAPTER (Included|Optional|NotApplicable) "Included"
CASE (HardShell|Soft|NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)>
<!ATTLIST PRICE
MSRP CDATA #IMPLIED
WHOLESALE CDATA #IMPLIED
STREET CDATA #IMPLIED
SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
Спољашње везе |