DTD - szybki przewodnik
Deklaracja typu dokumentu XML, powszechnie znana jako DTD, to sposób na precyzyjne opisanie języka XML. DTD sprawdzają poprawność struktury i słownictwa dokumentu XML z regułami gramatycznymi odpowiedniego języka XML.
Dokument XML można zdefiniować jako -
Well-formed- Jeśli dokument XML jest zgodny ze wszystkimi ogólnymi regułami XML, takimi jak tagi, muszą być prawidłowo zagnieżdżone, tagi otwierające i zamykające muszą być zrównoważone, a puste tagi muszą kończyć się znakiem „/>”, wówczas jest on nazywany dobrze sformułowanym .
LUB
Valid- Dokument XML, o którym mówi się, że jest prawidłowy, gdy jest nie tylko dobrze sformułowany , ale jest również zgodny z dostępnym DTD, który określa, które tagi używa, jakie atrybuty mogą zawierać te tagi i które tagi mogą występować w innych tagach, między innymi .
Poniższy diagram przedstawia, że DTD jest używany do strukturyzacji dokumentu XML -
Rodzaje
DTD można sklasyfikować na podstawie jego deklaracji w dokumencie XML, na przykład -
Wewnętrzny DTD
Zewnętrzne DTD
Gdy DTD jest zadeklarowane w pliku, jest wywoływane Internal DTD a jeśli jest zadeklarowany w oddzielnym pliku, to jest wywoływany External DTD.
Dowiemy się więcej na ten temat w rozdziale Składnia DTD
funkcje
Poniżej przedstawiono kilka ważnych punktów, które opisuje DTD -
elementy, które mogą pojawić się w dokumencie XML.
kolejność, w jakiej mogą się pojawiać.
elementy opcjonalne i obowiązkowe.
atrybuty elementów i czy są one opcjonalne czy obowiązkowe.
czy atrybuty mogą mieć wartości domyślne.
Zalety korzystania z DTD
Documentation- Możesz zdefiniować własny format plików XML. Przeglądając ten dokument, użytkownik / programista może zrozumieć strukturę danych.
Validation - Daje możliwość sprawdzenia poprawności plików XML poprzez sprawdzenie, czy elementy pojawiają się w odpowiedniej kolejności, obowiązkowe elementy i atrybuty są na miejscu, elementy i atrybuty nie zostały wstawione w nieprawidłowy sposób itd.
Wady korzystania z DTD
Nie obsługuje przestrzeni nazw. Przestrzeń nazw to mechanizm, za pomocą którego nazwy elementów i atrybutów mogą być przypisane do grup. Jednak w DTD przestrzenie nazw muszą być zdefiniowane w DTD, co narusza cel używania przestrzeni nazw.
Obsługuje tylko typ danych tekstowy.
Nie jest zorientowany obiektowo. W związku z tym pojęcie dziedziczenia nie może być stosowane w DTD.
Ograniczone możliwości wyrażenia liczności elementów.
XML DTD można określić w dokumencie lub przechowywać w oddzielnym dokumencie, a następnie dokument ten można połączyć z dokumentem DTD, aby go użyć.
Składnia
Podstawowa składnia DTD jest następująca -
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
W powyższej składni -
DTD zaczyna się od separatora <! DOCTYPE.
Na element informuje parser, aby przeanalizował dokument z określonego elementu głównego.
DTD identifierto identyfikator definicji typu dokumentu, którym może być ścieżka do pliku w systemie lub adres URL do pliku w Internecie. Jeśli DTD wskazuje ścieżkę zewnętrzną, jest wywoływanaexternal subset.
Plik square brackets [ ] załącz opcjonalną listę deklaracji encji o nazwie internal subset.
Wewnętrzny DTD
DTD jest określane jako wewnętrzny DTD, jeśli elementy są zadeklarowane w plikach XML. Aby odwołać się do niego jako wewnętrznego DTD, atrybut autonomiczny w deklaracji XML musi być ustawiony nayes. Oznacza to, że deklaracja działa niezależnie od źródła zewnętrznego.
Składnia
Składnia wewnętrznego DTD jest następująca:
<!DOCTYPE root-element [element-declarations]>
gdzie element-główny to nazwa elementu głównego, a deklaracje elementu to miejsce, w którym deklarujesz elementy.
Przykład
Poniżej znajduje się prosty przykład wewnętrznego DTD -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Przejdźmy przez powyższy kod -
Start Declaration - Rozpocznij deklarację XML następującą instrukcją.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD- Bezpośrednio po nagłówku XML następuje deklaracja typu dokumentu , powszechnie określana jako DOCTYPE -
<!DOCTYPE address [
Deklaracja DOCTYPE ma wykrzyknik (!) Na początku nazwy elementu. DOCTYPE informuje parser, że DTD jest powiązany z tym dokumentem XML.
DTD Body - Po deklaracji DOCTYPE następuje treść DTD, w której deklarujesz elementy, atrybuty, encje i notacje -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
Zadeklarowano tutaj kilka elementów, które składają się na słownik dokumentu <nazwa>. <! ELEMENT name (#PCDATA)> definiuje nazwę elementu jako typu „#PCDATA”. Tutaj #PCDATA oznacza dane tekstowe z możliwością analizy.
End Declaration- Na koniec sekcja deklaracji DTD jest zamykana za pomocą nawiasu zamykającego i zamykającego nawiasu kątowego (]>). To skutecznie kończy definicję, a następnie dokument XML następuje natychmiast.
Zasady
Deklaracja typu dokumentu musi pojawić się na początku dokumentu (poprzedzona tylko nagłówkiem XML) - nie jest to dozwolone nigdzie indziej w dokumencie.
Podobnie jak w przypadku deklaracji DOCTYPE, deklaracje elementów muszą zaczynać się od wykrzyknika.
Nazwa w deklaracji typu dokumentu musi być zgodna z typem elementu elementu głównego.
Zewnętrzne DTD
W zewnętrznych elementach DTD deklarowane są poza plikiem XML. Dostęp do nich można uzyskać, określając atrybuty systemowe, którymi może być legalny plik .dtd lub prawidłowy adres URL. Aby odwołać się do niego jako zewnętrznego DTD, atrybut autonomiczny w deklaracji XML musi być ustawiony jakono. Oznacza to, że deklaracja zawiera informacje ze źródła zewnętrznego.
Składnia
Poniżej znajduje się składnia zewnętrznego DTD -
<!DOCTYPE root-element SYSTEM "file-name">
gdzie nazwa-pliku to plik z rozszerzeniem .dtd .
Przykład
Poniższy przykład pokazuje użycie zewnętrznego DTD -
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
Zawartość pliku DTD address.dtd są jak pokazano -
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Rodzaje
Możesz odwołać się do zewnętrznego DTD, używając system identifiers lub public identifiers.
System Identifiers
Identyfikator systemowy umożliwia określenie położenia zewnętrznego pliku zawierającego deklaracje DTD. Składnia jest następująca -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Jak widać, zawiera słowo kluczowe SYSTEM i odniesienie URI wskazujące lokalizację dokumentu.
Public Identifiers
Identyfikatory publiczne zapewniają mechanizm lokalizacji zasobów DTD i są zapisane w następujący sposób:
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Jak widać, zaczyna się od słowa kluczowego PUBLIC, po którym następuje wyspecjalizowany identyfikator. Identyfikatory publiczne służą do identyfikacji pozycji w katalogu. Identyfikatory publiczne mogą mieć dowolny format, jednak powszechnie używany format nosi nazwę Formal Public Identifiers lub FPI.
W tym rozdziale omówimy komponenty XML z perspektywy DTD. DTD będzie zasadniczo zawierało deklaracje następujących składników XML -
Element
Attributes
Entities
Elementy
Elementy XML można zdefiniować jako bloki konstrukcyjne dokumentu XML. Elementy mogą zachowywać się jak pojemnik do przechowywania tekstu, elementów, atrybutów, obiektów multimedialnych lub ich mieszanki.
Każdy dokument XML zawiera jeden lub więcej elementów, których granice są oddzielone znacznikami początkowymi i końcowymi lub pustymi elementami.
Przykład
Poniżej znajduje się prosty przykład elementów XML
<name>
Tutorials Point
</name>
Jak widać, zdefiniowaliśmy tag <name>. Pomiędzy znacznikiem początkowym i końcowym <nazwa> znajduje się tekst. Elementy używane w XML-DTD muszą być zadeklarowane, co zostanie szczegółowo omówione w rozdziale Elementy DTD .
Atrybuty
Atrybuty są częścią elementów XML. Element może mieć dowolną liczbę unikalnych atrybutów. Atrybuty dostarczają więcej informacji o elemencie XML, a dokładniej określają właściwość elementu. Atrybut XML jest zawsze parą nazwa-wartość .
Przykład
Poniżej znajduje się prosty przykład atrybutów XML -
<img src = "flower.jpg"/>
Tutaj img to nazwa elementu, podczas gdy src to nazwa atrybutu, a flower.jpg to wartość podana dla atrybutu src .
Jeśli atrybuty są używane w DTD XML, należy je zadeklarować, co zostanie szczegółowo omówione w rozdziale Atrybuty DTD
Podmioty
Encje są symbolami zastępczymi w XML. Można je zadeklarować w prologu dokumentu lub w DTD. Podmioty można podzielić przede wszystkim na -
Wbudowane jednostki
Jednostki postaci
Ogólne podmioty
Elementy parametrów
Istnieje pięć wbudowanych jednostek, które działają w dobrze sformułowanym XML-u, są to -
ampersand: & amp;
Pojedynczy cudzysłów: & apos;
Większe niż: & gt;
Mniejsze niż: & lt;
Podwójny cudzysłów: & rdquo;
Więcej o deklaracjach encji w DTD XML dowiemy się bardziej szczegółowo w rozdziale Jednostki DTD
Elementy XML można zdefiniować jako bloki konstrukcyjne dokumentu XML. Elementy mogą zachowywać się jak pojemnik do przechowywania tekstu, elementów, atrybutów, obiektów multimedialnych lub ich mieszanki.
Element DTD jest deklarowany z deklaracją ELEMENT. Kiedy plik XML jest weryfikowany przez DTD, analizator składni najpierw sprawdza element główny, a następnie elementy podrzędne są sprawdzane.
Składnia
Wszystkie deklaracje elementów DTD mają tę ogólną postać -
<!ELEMENT elementname (content)>
Deklaracja ELEMENT służy do wskazania parserowi, że zamierzasz zdefiniować element.
elementname to nazwa elementu (zwany także generic identyfikator ), które definiują.
content określa, jaka treść (jeśli w ogóle) może się znaleźć w elemencie.
Typy zawartości elementu
Treść deklaracji elementów w DTD można podzielić na kategorie jak poniżej -
Pusta treść
Zawartość elementu
Zawartość mieszana
Dowolna treść
Pusta zawartość
Jest to szczególny przypadek deklaracji elementu. Ta deklaracja elementu nie zawiera żadnej treści. Są one deklarowane za pomocą słowa kluczowegoEMPTY.
Syntax
Poniżej znajduje się składnia deklaracji pustego elementu -
<!ELEMENT elementname EMPTY >
W powyższej składni -
ELEMENTjest deklaracją elementu kategorii PUSTY
elementname to nazwa pustego elementu.
Example
Poniżej znajduje się prosty przykład demonstrujący deklarację pustego elementu -
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address />
W tym przykładzie adres jest zadeklarowany jako pusty element. Znacznik dla elementu adresu pojawiłby się jako <address />.
Zawartość elementu
W deklaracji elementu z zawartością elementu zawartość byłaby dozwolonymi elementami w nawiasach. Możemy również uwzględnić więcej niż jeden element.
Syntax
Poniżej znajduje się składnia deklaracji elementu z zawartością elementu -
<!ELEMENT elementname (child1, child2...)>
ELEMENT to znacznik deklaracji elementu
elementname to nazwa elementu.
child1, child2 .. to elementy, a każdy element musi mieć własną definicję w DTD.
Example
Poniższy przykład przedstawia prosty przykład deklaracji elementu z zawartością elementu -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
W powyższym przykładzie address jest elementem nadrzędnym , a jego elementami podrzędnymi są name , company i phone_no .
Lista operatorów i reguł składniowych
Poniższa tabela przedstawia listę operatorów i reguł składniowych, które można zastosować przy definiowaniu elementów potomnych -
Operator | Składnia | Opis | Przykład |
---|---|---|---|
+ | <! ELEMENT nazwa-elementu (child1 +)> | Wskazuje, że element potomny może wystąpić jeden lub więcej razy wewnątrz elementu nadrzędnego. | <! ELEMENT adres (nazwa +)> Nazwa elementu podrzędnego może wystąpić raz lub więcej razy w adresie nazwy elementu . |
* | <! ELEMENT nazwa-elementu (child1 *)> | Wskazuje, że element podrzędny może wystąpić zero lub więcej razy wewnątrz elementu nadrzędnego. | <! ELEMENT adres (nazwa *)> Nazwa elementu podrzędnego może wystąpić zero lub więcej razy w adresie nazwy elementu . |
? | <! ELEMENT nazwa-elementu (child1?)> | Wskazuje, że element potomny może wystąpić zero lub jeden raz wewnątrz elementu nadrzędnego. | <! ELEMENT adres (nazwa?)> Nazwa elementu podrzędnego może wystąpić zero lub jeden raz w adresie nazwy elementu . |
, | <! ELEMENT nazwa-elementu (child1, child2)> | Daje sekwencję elementów potomnych oddzielonych przecinkami, które muszą być zawarte w nazwie elementu. | <! ELEMENT adres (nazwa, firma)> Sekwencja nazwy elementów potomnych , firma , która musi występować w tej samej kolejności w adresie nazwy elementu . |
| | <! ELEMENT nazwa-elementu (child1 | child2)> | Pozwala na dokonywanie wyborów w elemencie potomnym. | <! ELEMENT adres (nazwa | firma)> Pozwala wybrać jeden z elementów potomnych, tj. Imię i nazwisko lub firmę , które muszą wystąpić w adresie nazwy elementu . |
Zasady
Musimy przestrzegać pewnych zasad, jeśli zawartość zawiera więcej niż jeden element -
Sequences - Często elementy w dokumentach DTD muszą pojawiać się w różnej kolejności. W takim przypadku treść definiuje się za pomocą sekwencji.
Deklaracja wskazuje, że element <address> musi mieć dokładnie troje elementów podrzędnych - <name>, <company> i <phone> - i muszą występować w tej kolejności. Na przykład -
<!ELEMENT address (name,company,phone)>
Choices- Załóżmy, że musisz zezwolić na jeden lub drugi element, ale nie na oba. W takich przypadkach należy użyć pionowej kreski (|). Rura działa jako wyłączne LUB. Na przykład -
<!ELEMENT address (mobile | landline)>
Zawartość elementów mieszanych
To jest kombinacja (#PCDATA) i elementów potomnych. PCDATA oznacza przeanalizowane dane znakowe, czyli tekst, który nie jest znacznikiem. W modelach zawartości mieszanej tekst może pojawiać się sam lub może być przeplatany między elementami. Zasady dotyczące modeli zawartości mieszanej są podobne do zawartości elementu, jak omówiono w poprzedniej sekcji.
Syntax
Poniżej znajduje się ogólna składnia dla zawartości elementów mieszanych -
<!ELEMENT elementname (#PCDATA|child1|child2)*>
ELEMENT to znacznik deklaracji elementu.
elementname to nazwa elementu.
PCDATAto tekst, który nie jest znacznikiem. #PCDATA musi znajdować się na pierwszym miejscu w deklaracji zawartości mieszanej.
child1, child2 .. to elementy, a każdy element musi mieć własną definicję w DTD.
Operator (*) musi być zgodny z deklaracją treści mieszanej, jeśli uwzględniono elementy podrzędne
Deklaracje (#PCDATA) i elementy podrzędne muszą być oddzielone operatorem (|).
Example
Poniżej znajduje się prosty przykład demonstrujący deklarację elementu zawartości mieszanej w DTD.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA|name)*>
<!ELEMENT name (#PCDATA)>
]>
<address>
Here's a bit of text mixed up with the child element.
<name>
Tanmay Patil
</name>
</address>
DOWOLNA zawartość elementu
Możesz zadeklarować element za pomocą słowa kluczowego ANY w treści. Najczęściej określa się go jako element kategorii mieszanej. KAŻDY jest przydatny, gdy nie zdecydowałeś jeszcze o dopuszczalnej zawartości elementu.
Syntax
Poniżej znajduje się składnia deklarowania elementów z DOWOLNĄ zawartością -
<!ELEMENT elementname ANY>
Tutaj słowo kluczowe ANY wskazuje, że tekst (PCDATA) i / lub dowolne elementy zadeklarowane w DTD mogą być użyte w treści elementu <elementname>. Mogą być używane w dowolnej kolejności dowolną ilość razy. Jednak słowo kluczowe ANY nie pozwala na dołączanie elementów, które nie są zadeklarowane w DTD.
Example
Poniżej znajduje się prosty przykład demonstrujący deklarację elementu z DOWOLNĄ zawartością -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>
W tym rozdziale omówimy atrybuty DTD. Atrybut podaje więcej informacji o elemencie, a dokładniej określa właściwość elementu. Atrybut XML ma zawsze postać pary nazwa-wartość. Element może mieć dowolną liczbę unikalnych atrybutów.
Deklaracja atrybutu jest bardzo podobna do deklaracji elementów pod wieloma względami, z wyjątkiem jednego; zamiast deklarować dopuszczalną zawartość elementów, deklarujesz listę dopuszczalnych atrybutów dla każdego elementu. Listy te nazywane są deklaracjami ATTLIST.
Składnia
Podstawowa składnia deklaracji atrybutów DTD jest następująca -
<!ATTLIST element-name attribute-name attribute-type attribute-value>
W powyższej składni -
Atrybuty DTD zaczynają się od słowa kluczowego <! ATTLIST, jeśli element zawiera atrybut.
element-name określa nazwę elementu, którego dotyczy atrybut.
attribute-name określa nazwę atrybutu, który jest zawarty w nazwie elementu.
attribute-typedefiniuje typ atrybutów. Więcej na ten temat omówimy w kolejnych sekcjach.
attribute-valueprzyjmuje stałą wartość, którą muszą definiować atrybuty. Więcej na ten temat omówimy w kolejnych sekcjach.
Przykład
Poniżej znajduje się prosty przykład deklaracji atrybutów w DTD -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">Tanmay Patil</name>
</address>
Przejdźmy przez powyższy kod -
Rozpocznij od deklaracji XML z następującą instrukcją -
<?xml version = "1.0"?>
Bezpośrednio po nagłówku XML znajduje się deklaracja typu dokumentu, powszechnie określana jako DOCTYPE, jak pokazano poniżej -
DOCTYPE informuje parser, że DTD jest powiązany z tym dokumentem XML. Deklaracja DOCTYPE ma wykrzyknik (!) Na początku nazwy elementu.
<!DOCTYPE address [
Poniżej znajduje się treść DTD. Tutaj zadeklarowaliśmy element i atrybut -
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
Identyfikator atrybutu dla nazwy elementu jest zdefiniowany jak podano poniżej -
Tutaj typ atrybutu to CDATA, a jego wartość to #WYMAGANE .
<!ATTLIST name id CDATA #REQUIRED>
Zasady deklaracji atrybutów
Wszystkie atrybuty użyte w dokumencie XML muszą być zadeklarowane w definicji typu dokumentu (DTD) przy użyciu deklaracji listy atrybutów
Atrybuty mogą pojawiać się tylko w tagach początkowych lub pustych.
Słowo kluczowe ATTLIST musi być zapisane wielkimi literami
Żadne zduplikowane nazwy atrybutów nie będą dozwolone na liście atrybutów dla danego elementu.
Typy atrybutów
Podczas deklarowania atrybutów można określić, jak procesor powinien obsługiwać dane, które pojawiają się w wartości. Możemy podzielić typy atrybutów na trzy główne kategorie -
Typ łańcucha
Typy tokenizowane
Wyliczone typy
Poniższa tabela zawiera podsumowanie różnych typów atrybutów -
Sr.No. | Typ i opis |
---|---|
1 | CDATA CDATA to dane znakowe (tekst, a nie znaczniki). Jest to typ atrybutu typu String . |
2 | ID Jest to unikalny identyfikator atrybutu. Nie powinien pojawiać się więcej niż raz. Jest to typ atrybutu tokenizowanego . |
3 | IDREF Służy do odniesienia do identyfikatora innego elementu. Służy do nawiązywania połączeń między elementami. Jest to typ atrybutu tokenizowanego . |
4 | IDREFS Służy do odwoływania się do wielu identyfikatorów. Jest to typ atrybutu tokenizowanego . |
5 | ENTITY Reprezentuje podmiot zewnętrzny w dokumencie. Jest to typ atrybutu tokenizowanego . |
6 | ENTITIES Reprezentuje listę podmiotów zewnętrznych w dokumencie. Jest to typ atrybutu tokenizowanego . |
7 | NMTOKEN Jest podobny do CDATA, a wartość atrybutu składa się z prawidłowej nazwy XML. Jest to typ atrybutu tokenizowanego . |
8 | NMTOKENS Jest podobny do CDATA, a wartość atrybutu składa się z listy prawidłowych nazw XML. Jest to typ atrybutu tokenizowanego . |
9 | NOTATION Element będzie się odnosił do notacji zadeklarowanej w dokumencie DTD. Jest to wyliczeniowy typ atrybutu . |
10 | Enumeration Pozwala na zdefiniowanie określonej listy wartości, dla których jedna z wartości musi pasować. Jest to wyliczeniowy typ atrybutu . |
Deklaracja wartości atrybutu
W każdej deklaracji atrybutu musisz określić, w jaki sposób wartość pojawi się w dokumencie. Możesz określić, czy atrybut -
może mieć wartość domyślną
może mieć stałą wartość
jest wymagane
jest domniemana
Wartości domyślne
Zawiera wartość domyślną. Wartości można ująć w pojedyncze cudzysłowy (') lub podwójne cudzysłowy (").
Syntax
Poniżej znajduje się składnia wartości -
<!ATTLIST element-name attribute-name attribute-type "default-value">
gdzie wartość-domyślna to zdefiniowana wartość atrybutu.
Example
Poniżej znajduje się prosty przykład deklaracji atrybutu z wartością domyślną -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA "0">
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
W tym przykładzie mamy element name z identyfikatorem atrybutu, którego domyślną wartością jest 0 . Wartość domyślna jest ujęta w podwójne cudzysłowy.
FIXED Values
Słowo kluczowe #FIXED, po którym następuje stała wartość, jest używane, gdy chcesz określić, że wartość atrybutu jest stała i nie można jej zmienić. Typowym zastosowaniem stałych atrybutów jest określanie numerów wersji.
Syntax
Poniżej znajduje się składnia stałych wartości -
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
gdzie #FIXED jest zdefiniowaną wartością atrybutu.
Example
Poniżej znajduje się prosty przykład deklaracji atrybutu z wartością FIXED -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>
W tym przykładzie użyliśmy słowa kluczowego #FIXED, gdzie wskazuje, że wartość „tutorialspoint” jest jedyną wartością dla nazwy atrybutu elementu <firma>. Jeśli spróbujemy zmienić wartość atrybutu, to daje to błąd.
Poniżej znajduje się nieprawidłowy DTD -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
WYMAGANE wartości
Ilekroć chcesz określić, że atrybut jest wymagany, użyj słowa kluczowego #REQUIRED.
Syntax
Poniżej znajduje się składnia #REQUIRED -
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
gdzie #REQUIRED to zdefiniowany typ atrybutu.
Example
Poniżej znajduje się prosty przykład deklaracji atrybutu DTD ze słowem kluczowym #REQUIRED -
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
W tym przykładzie użyliśmy REQUIRED słowo kluczowe, aby określić, że atrybut id musi być przewidziany element-name nazwą
DOROZUMIANE Wartości
Deklarując atrybuty, należy zawsze określić deklarację wartości. Jeśli deklarowany atrybut nie ma wartości domyślnej, nie ma ustalonej wartości i nie jest wymagany, należy zadeklarować, że atrybut jest taki, jaki jest implikowany . Słowo kluczowe #IMPLIED służy do określenia domniemanego atrybutu .
Syntax
Poniżej znajduje się składnia #IMPLIED -
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
gdzie #IMPLIED to zdefiniowany typ atrybutu.
Example
Poniżej znajduje się prosty przykład #IMPLIED
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #IMPLIED>
]>
<address>
<name />
</address>
W tym przykładzie użyliśmy słowa kluczowego #IMPLIED, ponieważ nie chcemy określać żadnych atrybutów, które mają być zawarte w nazwie elementu . Jest to opcjonalne.
Encje służą do definiowania skrótów do znaków specjalnych w dokumentach XML. Jednostki mogą mieć przede wszystkim cztery typy -
Wbudowane jednostki
Jednostki postaci
Ogólne podmioty
Elementy parametrów
Składnia deklaracji jednostki
Ogólnie rzecz biorąc, można deklarować jednostki internally lub externally. Zrozummy każdy z nich i ich składnię w następujący sposób -
Jednostka wewnętrzna
Jeśli jednostka jest zadeklarowana w DTD, nazywana jest jednostką wewnętrzną.
Syntax
Poniżej znajduje się składnia wewnętrznej deklaracji jednostki -
<!ENTITY entity_name "entity_value">
W powyższej składni -
entity_name to nazwa jednostki, po której następuje jej wartość w podwójnym cudzysłowie lub pojedynczym cudzysłowie.
entity_value zawiera wartość nazwy jednostki.
Odwołanie do wartości encji jednostki wewnętrznej jest usuwane przez dodanie prefiksu & do nazwy jednostki, tj. & entity_name.
Example
Poniżej znajduje się prosty przykład wewnętrznej deklaracji jednostki -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "TutorialsPoint">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
W powyższym przykładzie nazwy odpowiednich podmiotów name , company i phone_no są zastępowane ich wartościami w dokumencie XML. Odwołania do wartości encji są usuwane przez dodanie prefiksu & do nazwy jednostki.
Zapisz ten plik jako sample.xmli otworzysz go w dowolnej przeglądarce, zauważysz, że wartości encji dla name , company , phone_no są odpowiednio zastępowane.
Podmiot zewnętrzny
Jeśli jednostka jest zadeklarowana poza DTD, nazywana jest jednostką zewnętrzną. Do jednostki zewnętrznej można odwoływać się przy użyciu identyfikatorów systemowych lub identyfikatorów publicznych.
Syntax
Poniżej znajduje się składnia deklaracji jednostki zewnętrznej -
<!ENTITY name SYSTEM "URI/URL">
W powyższej składni -
name to nazwa podmiotu.
SYSTEM jest słowem kluczowym.
URI/URL to adres źródła zewnętrznego ujęty w podwójne lub pojedyncze cudzysłowy.
Types
Możesz odwołać się do zewnętrznego DTD, używając -
System Identifiers - Identyfikator systemowy umożliwia określenie położenia zewnętrznego pliku zawierającego deklaracje DTD.
Jak widać, zawiera słowo kluczowe SYSTEM i odniesienie URI wskazujące lokalizację dokumentu. Składnia jest następująca -
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers - Identyfikatory publiczne zapewniają mechanizm lokalizacji zasobów DTD i są zapisane jak poniżej -
Jak widać, zaczyna się od słowa kluczowego PUBLIC, po którym następuje wyspecjalizowany identyfikator. Identyfikatory publiczne służą do identyfikacji pozycji w katalogu. Identyfikatory publiczne mogą mieć dowolny format; jednak powszechnie używany format jest nazywany formalnymi identyfikatorami publicznymi lub FPI.
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
Rozumiemy zewnętrzną jednostkę na następującym przykładzie -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
TutorialsPoint
</company>
<phone>
(011) 123-4567
</phone>
</address>
Poniżej zawartość pliku DTD address.dtd -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
Wbudowane jednostki
Wszystkie parsery XML muszą obsługiwać wbudowane jednostki. Ogólnie rzecz biorąc, możesz używać tych odniesień do encji w dowolnym miejscu. Możesz także użyć zwykłego tekstu w dokumencie XML, na przykład w treści elementów i wartościach atrybutów.
Istnieje pięć wbudowanych jednostek, które odgrywają swoją rolę w dobrze uformowanym formacie XML, są to -
ampersand: & amp;
Pojedynczy cudzysłów: & apos;
Większe niż: & gt;
Mniejsze niż: & lt;
Podwójny cudzysłów: & rdquo;
Przykład
Poniższy przykład demonstruje wbudowaną deklarację jednostki -
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
Jak widać tutaj, & amp; znak jest zastępowany przez & za każdym razem, gdy procesor to napotka.
Jednostki postaci
Jednostki znakowe są używane do nazwania niektórych jednostek, które są symboliczną reprezentacją informacji, tj. Znaki, które są trudne lub niemożliwe do wpisania, mogą być zastąpione przez jednostki znakowe.
Przykład
Poniższy przykład demonstruje deklarację jednostki znaku -
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer;©right;</author>
Zauważysz tutaj, że użyliśmy ©jako wartość praw autorskich. Zapisz ten plik jako sample.xml i otwórz go w przeglądarce, a zobaczysz, że prawa autorskie zostały zastąpione znakiem ©.
Ogólne podmioty
Ogólne encje muszą być zadeklarowane w DTD, zanim będą mogły być użyte w dokumencie XML. Zamiast przedstawiać tylko jeden znak, jednostki ogólne mogą reprezentować znaki, akapity, a nawet całe dokumenty.
Składnia
Aby zadeklarować jednostkę ogólną, użyj deklaracji tej ogólnej formy w swoim DTD -
<!ENTITY ename "text">
Przykład
Poniższy przykład demonstruje ogólną deklarację jednostki -
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "tutorialspoint">
]>
<note>
&source-text;
</note>
Ilekroć parser XML napotka odniesienie do encji tekstu źródłowego , dostarczy tekst zastępczy do aplikacji w punkcie odniesienia.
Elementy parametrów
Celem encji parametrycznej jest umożliwienie tworzenia sekcji tekstu zastępczego wielokrotnego użytku.
Składnia
Poniżej znajduje się składnia deklaracji jednostki parametru -
<!ENTITY % ename "entity_value">
Wartość_jednostki to dowolny znak, który nie jest „&”, „%” ani „” ”.
Przykład
Poniższy przykład demonstruje deklarację jednostki parametru. Załóżmy, że masz deklaracje elementów, jak poniżej -
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
Teraz przypuśćmy, że chcesz dodać dodatkowy kraj elementu , a następnie musisz dodać go do wszystkich czterech deklaracji. Dlatego możemy przejść do odniesienia do encji parametrycznej. Teraz używając odniesienia do encji parametrycznej, powyższy przykład będzie -
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
Elementy parametrów są wyłuskiwane w taki sam sposób, jak odniesienie do elementu ogólnego, tylko ze znakiem procentu zamiast znaku ampersand -
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
Gdy parser odczytuje te deklaracje, zastępuje tekst zastępczy jednostki dla odwołania do jednostki.
Używamy DTD do precyzyjnego opisania dokumentu XML. DTD sprawdzają poprawność struktury i słownictwa dokumentu XML z regułami gramatycznymi odpowiedniego języka XML. Teraz, aby sprawdzić poprawność DTD, można zastosować następujące procedury -
Using XML DTD validation tools - Możesz użyć niektórych IDE, takich jak XML Spy (płatny) i XMLStarlet (opensource), aby sprawdzić poprawność plików XML względem dokumentu DTD.
Using XML DTD on-line validators- Usługa W3C Markup Validation Service służy do sprawdzania poprawności dokumentów internetowych. Użyj walidatora online, aby sprawdzić walidację swojego XML DTD tutaj .
Write your own XML validators with XML DTD validation API - Nowsze wersje JDK (powyżej 1.4) obsługują API walidacji XML DTD. Możesz napisać własny kod walidatora, aby sprawdzić poprawność walidacji XML DTD.