DTD lub XML Schema. Który jest lepszy? [zamknięte]

Jakie są plusy / minusy w schematach DTD i XML (nie jestem nawet pewien, jaka jest oficjalna nazwa tego ostatniego!)? Co jest lepsze? Dlaczego potrzebujemy dwóch sposobów na zrobienie tego samego?

Edit: znalazłem to w artykule, który czytałem, co skłoniło mnie do zadania pytania:

Dlaczego W3C XML Schema Language?

Język schematu W3C XML nie jest tylko język schematu. W rzeczywistości XML Specyfikacja opisuje typ dokumentu definicje (DTD) jako sposób na wyraź schemat. Dodatkowo, przedpremierowe wersje JAXB Realizacja odniesienia działała tylko z DTD - czyli nie ze schematami napisany w języku XML Schema. Jednak język XML Schema jest dużo bogatszy niż DTD. Na przykład, Schematy napisane w XML Schema Język może opisywać strukturalne relacje i typy danych, które can 't be expressed (lub Can' t easy be wyrażona) w DTD. Są narzędzia możliwość konwersji DTD na W3C XML Schema Language, więc jeśli masz Schematy oparte na DTD, których używałeś z wcześniejsza wersja JAXB Implementacji referencyjnej, można użyć te narzędzia do konwersji schematów do XML Schema Language. http://java.sun.com/developer/technicalArticles/WebServices/jaxb/#binsch

Myślę, że chciałbym przykładów, które ilustrują, dlaczego XML-Schema jest lepszy (jeśli rzeczywiście jest).

 30
Author: ROMANIA_engineer, 2009-09-29

4 answers

Od http://weblogs.asp.net/rchartier/archive/2006/03/21/440782.aspx

  • DTD nie są świadome przestrzeni nazw.

  • DTD mają #define, #include, i #ifdef -- lub, mniej zorientowane na C, możliwość definiowania skrótów, zewnętrznych treść i parsowanie warunkowe.

  • DTD opisuje cały dokument XML (nawet jeśli pozostawia "dziury"); schemat może definiować części.

  • XSD ma system typów.

  • XSD ma znacznie bogatszy język opisujący, jak wygląda zawartość elementu lub atrybutu."Jest to związane z rodzajem system.

  • można umieścić DTD inline w dokumencie XML, nie można tego zrobić z XSD. Oznacza to, że DTD są bezpieczniejsze (ty tylko należy chronić jeden bajt strumienia -- xml/dtd -- a nie
    wielokrotne).

  • Oficjalna definicja "valid XML" wymaga DTD. Ponieważ może to być niepraktyczne, jeśli nie niemożliwe, często trzeba / align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center /

Z mojej strony bardzo łatwo jest napisać walidator dla niektórych XML, jeśli masz XSD. Nie widziałem tego z DTD, chociaż jestem pewien, że istnieje.

 21
Author: Robert Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-08 19:38:43

Kilka lat temu pojawiły się powody, aby używać DTD zamiast schematu XML (był on bardziej powszechny lub lepiej wspierany przez narzędzia XML). Dzisiaj jednak nie widzę powodu, aby nie używać XML Schema zamiast DTD : XML Schema jest znacznie bardziej wydajny.

Jednak XML Schema jest daleki od doskonałości (po prostu spróbuj przeczytać specyfikację lub książkę na XML Schema...) i od tego czasu opracowano wiele alternatyw (Schematron, Examplotron, RelaxNG). Mogą one mieć przewagę techniczną nad schematem XML, ale XML Schemat jest o wiele bardziej wszechobecny dzisiaj, że widzę bardzo niewiele przypadków, w których alternatywa miałaby sens.

 10
Author: Pascal Sartoretti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 16:05:54

XML Schema może wykonywać bardziej złożone walidacje. Na przykład, jeśli DTD może sprawdzić, czy typ danych elementu XML jest liczbą całkowitą lub łańcuchem znaków. Podczas gdy XML schema może wykonywać bardziej skomplikowane walidacje, takie jak czy element xml jest ciągiem rozpoczynającym się wielką literą lub positve integer. Wreszcie XML schema wykorzystuje składnię XML i jest naturalnym wyborem dla rozwoju usług internetowych.

 5
Author: Aruna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-22 11:51:54

Istnieje również Relax NG-kolejny potężny język do walidacji dokumentów XML, wraz ze Schematronem i innymi technologiami z DSDL . Relax NG jest bardzo prosty i ma czytelną dla człowieka formę-Relax NG Compact, który umożliwia pisanie schematów podobnych do schematów BNF.

 4
Author: Sergey Stolyarov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-29 05:28:05