Dlaczego typ XML jest bezpieczny?

30

Dlaczego mówią, że XML zapewnia bezpieczeństwo typu i jak jest wyrażony w samym XML?

Czym różni się od JSON (na przykład), który (jak rozumiem) nie jest bezpieczny dla typu?

użytkownik3339411
źródło

Odpowiedzi:

36

Ze względu na definicję schematu XML (XSD).

Dzięki XML możesz mieć dodatkowy plik, który opisuje schemat. Wskazuje na przykład, że element /a/bjest tablicą i zawiera od 1 do 10 elementów lub że element /a/cjest liczbą całkowitą. Przykład XSD można znaleźć tutaj .

Sprawdzanie poprawności danego pliku XML za pomocą XSD jest obsługiwane przez wiele języków . Na przykład aplikacja .NET może zażądać pliku XML z niezaufanego źródła i sprawdzić , czy jest on zgodny z XSD ; następnie może zapisać go w bazie danych Microsoft SQL Server, która z kolei może zawierać XSD i ponownie wykonać sprawdzenie (aby upewnić się, że każdy klient mający dostęp do bazy danych jest zgodny).

XSD nie jest jedynym językiem.

  • Jeśli zajmowałeś się tworzeniem stron internetowych, z pewnością słyszałeś o definicji typu dokumentu (DTD) - języku znaczników, który definiuje strukturę XML i jest używany szczególnie do sprawdzania poprawności treści związanych z HTML. Chociaż nie może robić wszystkich rzeczy, które może XSD, takich jak upewnienie się, że element lub atrybut zawiera liczbę całkowitą, nadal może wykonywać kilka sprawdzeń struktury.

  • RELAX NG ma tę zaletę, że jest stosunkowo prosty w porównaniu do innych języków i może być napisany w bardziej zwartej formie niż XML.

  • Schematron to kolejny „oparty na regułach język sprawdzania poprawności służący do stwierdzania obecności lub braku wzorców w drzewach XML” ( Wikipedia ) i przedstawia nieco inne podejście oparte na stwierdzeniach XPath.

Podobne inicjatywy dla JSON nie są tak popularne (szczególnie, jak sądzę, w korporacyjnym świecie zorientowanym na Microsoft). Jednym z powodów jest to, że JSON jest przeznaczony do sytuacji, w których struktura danych jest raczej podstawowa (tzn. Może być wyrażona jako drzewo, na przykład bez potrzeby posiadania atrybutów) i niekoniecznie musi być sprawdzana. Doskonałym przykładem jest interfejs API REST używany przez język dynamicznie typowany:

  • klient jest bardzo łatwy i szybki do wdrożenia,
  • interfejs API jest niezmienny,
  • klient może łatwo poradzić sobie z określonymi listkami, w których konieczna jest walidacja (na przykład sprawdzenie, czy /something/percentagejest to liczba rzeczywista i mieści się w zakresie 0..100).
Arseni Mourzenko
źródło
20

XML może być bezpieczny pod względem typów, ponieważ ze schematami XSD można zadeklarować typ danych elementów. Dokument sprawdzony pod kątem schematu XSD gwarantuje zgodność z oczekiwanymi typami. Ale format XML nie musi mieć schematu, więc dokument nie jest automatycznie bezpieczny, ponieważ jest XML.

W rzeczywistości istnieje również język schematu dla JSON , więc możliwe jest wpisanie bezpiecznego JSON. Ale jest rzadko używany, więc zazwyczaj JSON nie jest bezpieczny dla typu.

JacquesB
źródło
2
Twoja odpowiedź byłaby lepsza z nazwą lub linkiem do JSON odpowiadającym XSD.
DougM
1
BTW: Schemat XML nie jest zdecydowanie jedynym językiem definicji schematu dla XML. Jest też Schematron, RelaxNG i oczywiście dobry stary SGML DTD.
Jörg W Mittag
Należy również pamiętać, że nawet w przypadku schematu XML może nie być bezpieczny pod względem typu. Można określić element, który ma mieć „dowolny” typ treści. Chociaż można argumentować, że jest to forma bezpieczeństwa typu (nie dbam o to, nic nie jest ważne) jednocześnie nie można przeprowadzić sprawdzania poprawności: jest to zasadniczo „wariant”.
3

W informatyce bezpieczeństwo typów to zakres, w jakim język programowania zniechęca lub zapobiega błędom typu.

Bezpieczeństwo typu nie jest absolutnym atrybutem. To nie jest boolean. Języki (oraz XML i JSON języki) pozwalają na różne rodzaje błędów i pomyłek oraz zapobiegają im. Na przykład możesz źle nazwać elementy. Ale nie można pominąć wymaganych elementów składniowych, takich jak zamykające znaczniki i nawiasy klamrowe.

Zwykły XML i JSON są w równym stopniu bezpieczne pod względem typu (lub typu). Prawidłowy ciąg XML / JSON ma pewną strukturę składniową i semantyczną, ale prawie nigdy nie wystarcza to aplikacji do pracy z nim. Aplikacje nie byle się strukturę, lecz jeden konkretny.

XML świeci dzięki XML Schema Definition (XSD), która jest elastycznym i wydajnym sposobem sprawdzania poprawności danego dokumentu XML względem schematu. Zapewnia to wiele bezpieczeństwa typu zgodnie z definicją podaną powyżej.

usr
źródło