Przeszukałem to pytanie w Google, ale nie rozumiem dokładnie, co to jest schemat XML i DTD (definicja typu dokumentu) i dlaczego schemat XML jest mocniejszy w porównaniu z DTD.
Wszelkie wskazówki byłyby bardzo mile widziane.
Z sekcji Różnice między DTD a schematem artykułu o konwersji DTD na schemat :
Krytyczna różnica między DTD a schematem XML polega na tym, że schemat XML wykorzystuje składnię opartą na języku XML, podczas gdy DTD ma unikalną składnię, która została zastąpiona przez DTD SGML. Chociaż DTD są często krytykowane z powodu konieczności nauczenia się nowej składni, sama składnia jest dość zwięzła. Odwrotnie jest w przypadku schematu XML, który jest rozwlekły, ale także wykorzystuje znaczniki i XML, aby autorzy XML mogli uznać składnię schematu XML za mniej onieśmielającą.
Celem DTD było utrzymanie poziomu kompatybilności z SGML dla aplikacji, które mogą chcieć przekonwertować SGML DTD na XML DTD. Jednak zgodnie z jednym z celów XML, „zwięzłość w znacznikach XML ma minimalne znaczenie”, nie ma żadnego problemu z utrzymaniem zwięzłej składni.
[…]
Więc jakie są inne różnice, które mogą być szczególnie ważne podczas konwertowania DTD? Spójrzmy.
Pisanie na maszynie
Najbardziej znaczącą różnicą między DTD a schematem XML jest możliwość tworzenia i używania typów danych w schemacie w połączeniu z deklaracjami elementów i atrybutów. W rzeczywistości jest to tak ważna różnica, że połowa rekomendacji schematu XML jest poświęcona przetwarzaniu danych i schemacie XML. Szczegółowy opis typów danych znajduje się w części III tej książki, „Typy danych schematu XML”.
[…]
Ograniczenia występowania
Innym obszarem, w którym DTD i schemat znacznie się różnią, są ograniczenia dotyczące występowania. Jeśli pamiętasz z naszych poprzednich przykładów w rozdziale 2, „Struktura schematu” (lub własnej pracy z DTD), istnieją trzy symbole, których możesz użyć do ograniczenia liczby wystąpień elementu: *, + i?.
[…]
Wyliczenia
Załóżmy więc, że mamy element i chcieliśmy mieć możliwość zdefiniowania atrybutu rozmiaru koszuli, który umożliwiał użytkownikom wybór rozmiaru: mały, średni lub duży. Nasze DTD wyglądałoby tak:
<!ELEMENT item (shirt)> <!ELEMENT shirt (#PCDATA)> <!ATTLIST shirt size_value (small | medium | large)>
[…]
A co
size
by było, gdybyśmy chcieli być żywiołem? Nie możemy tego zrobić z DTD. DTD nie zapewniają wyliczeń w treści tekstowej elementu. Jednak ze względu na typy danych ze schematem, kiedy zadeklarowaliśmy wyliczenie w poprzednim przykładzie, w rzeczywistości utworzyliśmysimpleType
call,size_values
którego możemy teraz użyć z elementem:<xs:element name="size" type="size_value">
[…]
Różnice między definicją schematu XML (XSD) a definicją typu dokumentu (DTD) obejmują:
AKTUALIZACJA : 26.08.2015
Nie wszystkie te wypunktowania są w 100% dokładne, ale rozumiesz sedno.
Z drugiej strony:
źródło
Jak wiele osób wspomniało wcześniej, schemat XML wykorzystuje składnię opartą na języku XML, a DTD mają unikalną składnię. DTD nie obsługuje typów danych, co ma znaczenie.
Zobaczmy bardzo prosty przykład, w którym uniwersytet ma wielu studentów, a każdy student ma dwa elementy „nazwa” i „rok”. Zwróć uwagę, że w moim kodzie używa się "// ->" tylko do komentarzy.
Teraz napiszę ten przykład zarówno w DTD, jak i XSD.
DTD
Definicja schematu XML (XSD)
źródło
DTD poprzedza XML i dlatego sam w sobie nie jest poprawnym XML. To prawdopodobnie największy powód wynalazku XSD.
źródło
Podobieństwa między XSD i DTD
Różnice między XSD i DTD
Co więcej, chociaż XSD jest mało rozwlekły, jego składnia jest rozszerzeniem XML, co ułatwia szybką naukę.
źródło
1
,0 or 1
,0 or more
, podczas gdy XSD może określić minimalną i maksymalną liczbę.Jedną z różnic jest to, że w DTD model zawartości elementu jest całkowicie określony przez jego nazwę, niezależnie od tego, gdzie pojawia się w dokumencie:
Zakładając, że chcesz
person
elementemname
name
sam ma elementy podrzędnefirst
ilast
.Lubię to
Jeśli
city
elementem w tym samym dokumencie musi również mieć nazwę „” elementu podrzędnego DTD wymaga, aby ta „nazwa” element musi mieć elementy podrzędnefirst
, alast
także. Pomimo tego, żecity.name
nie wymagafirst
ilast
jak dzieci.Natomiast schemat XML umożliwia lokalną deklarację typów elementów potomnych; możesz zadeklarować
name
elementy potomne dla obuperson
icity
osobno. W ten sposób nadając im właściwe modele treści w tych kontekstach.Inną ważną różnicą jest obsługa przestrzeni nazw. Ponieważ DTD są częścią oryginalnej specyfikacji XML (i są dziedziczone z SGML), w ogóle nie uwzględniają przestrzeni nazw, ponieważ przestrzenie nazw XML zostały określone później. Możesz używać DTD w połączeniu z przestrzeniami nazw, ale wymaga to pewnych przewrotów, takich jak zmuszanie do definiowania prefiksów w DTD i używanie tylko tych prefiksów, zamiast używania dowolnych prefiksów.
Dla mnie inne różnice są w większości powierzchowne. Obsługę typów danych można łatwo dodać do DTD, a składnia to po prostu składnia. (Na przykład uważam składnię schematu XML za okropną i nigdy nie chciałbym ręcznie utrzymywać schematu XML, czego nie powiedziałbym o DTD lub schematach RELAX NG; jeśli z jakiegoś powodu potrzebuję schematu XML, zwykle piszę RELAX NG i przekonwertuj go
trang
.)źródło
Podobieństwa :
DTD i Schematy pełnią te same podstawowe funkcje:
Różnice:
DTD są lepsze w przypadku aplikacji intensywnie korzystających z tekstu, a schematy mają kilka zalet w przypadku przepływów pracy wymagających dużej ilości danych.
Schematy są napisane w XML i dlatego podlegają tym samym regułom, podczas gdy DTD są napisane w zupełnie innym języku.
Przykłady:
DTD:
XSD:
źródło
DTD może mieć tylko dwa typy danych, CDATA i PCDATA. Ale w schemacie możesz użyć wszystkich pierwotnych typów danych, których używasz w języku programowania, i masz elastyczność definiowania własnych niestandardowych typów danych.
Deweloper budujący schemat może tworzyć niestandardowe typy danych na podstawie podstawowych typów danych oraz przy użyciu różnych operatorów i modyfikatorów.
źródło
Kiedy XML pojawił się po raz pierwszy, powiedziano nam, że rozwiąże wszystkie nasze problemy: XML będzie przyjazny dla użytkownika, nieskończenie rozszerzalny, uniknie silnego pisania i nie będzie wymagał żadnych umiejętności programistycznych. Dowiedziałem się o DTD i napisałem własny parser XML. Ponad 15 lat później widzę, że większość XML nie jest przyjazna dla użytkownika i niezbyt rozszerzalna (w zależności od jego zastosowania). Gdy tylko jakieś sprytne chodaki podłączyły XML do bazy danych, wiedziałem, że typy danych są prawie nieuniknione. Powinieneś zobaczyć XSLT (plik transformacji), nad którym pracowałem poprzedniego dnia. Jeśli to nie jest programowanie, nie wiem, co to jest! W dzisiejszych czasach nie jest niczym niezwykłym, że wszelkiego rodzaju problemy związane z danymi XML lub interfejsami uległy awarii. Uwielbiam XML, ale odszedł daleko od swojego pierwotnego altruistycznego punktu wyjścia.
Krótka odpowiedź? DTD zostały wycofane na korzyść XSD, ponieważ XSD pozwala zdefiniować strukturę XML z większą precyzją.
źródło
XML DTD
Celem DTD jest zdefiniowanie struktury dokumentu XML. Definiuje strukturę wraz z listą elementów prawnych:
Schemat XML
Schemat XML umożliwia autorom schematu określenie, że dane ilości elementu muszą być liczbami lub, jeszcze dokładniej, liczbą całkowitą. W poniższym przykładzie użyłem
string
:źródło
DTD jest raczej przestarzałe, ponieważ ma ograniczoną użyteczność jako język schematu, nie obsługuje przestrzeni nazw i nie obsługuje typów danych. Ponadto składnia DTD jest dość skomplikowana, co utrudnia zrozumienie i utrzymanie.
źródło
DTD wskazuje składnię elementu XML
Schematy XML to alternatywa firmy Microsoft dla DTD do sprawdzania poprawności XML
źródło