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?
źródło
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?
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/b
jest tablicą i zawiera od 1 do 10 elementów lub że element /a/c
jest 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:
/something/percentage
jest to liczba rzeczywista i mieści się w zakresie 0..100).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.
Bezpieczeństwo typu nie jest absolutnym atrybutem. To nie jest boolean. Języki (oraz XML i JSON są 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.
źródło