XML - XML

XML (standardowy)
Rozszerzalny język znaczników
Rozszerzalny język znaczników (XML) logo.svg
Status Opublikowano, zalecenie W3C
Rok rozpoczęty 1996 ; 25 lat temu ( 1996 )
Opublikowane po raz pierwszy 10 lutego 1998 ; 23 lata temu (jako rekomendacja W3C) ( 1998-02-10 )
Ostatnia wersja 1.1 (Wydanie drugie)
29 września 2006 ; 15 lat temu ( 2006-09-29 )
Organizacja Konsorcjum World Wide Web (W3C)
Redakcja
Standardy podstawowe SGML
Powiązane standardy Schemat XML
Domena Serializacja danych
Skrót XML
Strona internetowa www .w3 .org /xml
XML (format pliku)
Rozszerzenie nazwy pliku
.xml
Rodzaj mediów internetowych
Jednolity identyfikator typu (UTI) public.xml
Konformacja ZUM tekst.publiczny
magiczny numer <?xml
Opracowany przez Konsorcjum World Wide Web
Rodzaj formatu Język znaczników
Rozszerzony z SGML
Rozszerzony do
Standard
Otwarty format ? tak

Extensible Markup Language ( XML ) to język znaczników , który definiuje zestaw reguł kodowania dokumentów w formacie czytelnym zarówno dla człowieka , jak i dla komputera . World Wide Web Consortium „s XML 1.0 Wyszczególnienie 1998 i kilka innych związanych specyfikacje-wszystkie z nich uwolnić otwartych standardów -define XML.

Cele projektowe XML kładą nacisk na prostotę, ogólność i użyteczność w Internecie . Jest to format danych tekstowych z silnym wsparciem Unicode dla różnych języków ludzkich . Chociaż projektowanie XML koncentruje się na dokumentach, język ten jest powszechnie używany do reprezentacji dowolnych struktur danych, takich jak te używane w usługach internetowych .

Istnieje kilka systemów schematów, które pomagają w definiowaniu języków opartych na XML, podczas gdy programiści opracowali wiele interfejsów programowania aplikacji (API) do wspomagania przetwarzania danych XML.

Aplikacje

Istota, dlaczego rozszerzalne języki znaczników są potrzebne, jest wyjaśniona w Język znaczników (na przykład, zobacz Język znaczników § XML ) oraz w Standard Generalized Markup Language .

Opracowano setki formatów dokumentów wykorzystujących składnię XML, w tym RSS , Atom , SOAP , SVG i XHTML . Formaty oparte na XML stały domyślny dla wielu narzędzi biurowych produktywności, w tym Microsoft Office ( Office Open XML ), OpenOffice.org i LibreOffice ( OpenDocument ), a firmy Apple „s iWork . XML dostarczył także języka bazowego dla protokołów komunikacyjnych, takich jak XMPP . Aplikacje dla Microsoft .NET Framework używają plików XML do konfiguracji, a listy właściwości są implementacją przechowywania konfiguracji zbudowanego na XML.

Wiele branżowych standardów danych, takich jak Health Level 7 , OpenTravel Alliance , FpML , MISMO i National Information Exchange Model , jest opartych na XML i bogatych funkcjach specyfikacji schematu XML. Wiele z tych standardów jest dość skomplikowanych i często zdarza się, że specyfikacja obejmuje kilka tysięcy stron. W publikacjach Darwin Information Typing Architecture jest branżowym standardem danych XML. XML jest szeroko stosowany jako podstawa różnych formatów publikacji.

XML jest szeroko stosowany w architekturze zorientowanej na usługi (SOA). Odmienne systemy komunikują się ze sobą poprzez wymianę komunikatów XML. Format wymiany komunikatów jest ustandaryzowany jako schemat XML (XSD). Nazywa się to również schematem kanonicznym. XML stał się powszechnie używany do wymiany danych w Internecie. IETF RFC:3023 , obecnie zastąpiony przez RFC:7303 , podał zasady konstrukcji internetowych typów mediów do użycia podczas wysyłania XML. Definiuje również typy mediów application/xmli text/xml, które mówią tylko, że dane są w XML i nic o ich semantyce .

RFC 7303 zaleca również, aby językom opartym na XML nadać typy mediów kończące się na +xml; na przykład image/svg+xmldla SVG . Dalsze wytyczne dotyczące używania XML w kontekście sieciowym znajdują się w RFC 3470, znanym również jako IETF BCP 70, dokumencie obejmującym wiele aspektów projektowania i wdrażania języka opartego na XML.

Kluczowa terminologia

Materiał w tej sekcji jest oparty na specyfikacji XML. To nie jest wyczerpująca lista wszystkich konstrukcji, które pojawiają się w XML; stanowi wprowadzenie do kluczowych konstrukcji najczęściej spotykanych w codziennym użytkowaniu.

Postać

Dokument XML to ciąg znaków . Prawie każdy legalny znak Unicode może pojawić się w dokumencie XML.

Procesor i aplikacja

Procesor analizuje znaczników i przekazuje informacje strukturalne do zastosowania . Specyfikacja określa wymagania dotyczące tego, co procesor XML musi robić, a czego nie, ale aplikacja jest poza jej zakresem. Procesor (jak nazywa go specyfikacja) jest często określany potocznie jako parser XML .

Znaczniki i treść

Znaki składające się na dokument XML są podzielone na znaczniki i treść , które można odróżnić stosując proste reguły składniowe. Ogólnie ciągi, które tworzą znaczniki, zaczynają się od znaku <i kończą na >, albo zaczynają się od znaku &i kończą na ;. Ciągi znaków, które nie są znacznikami, są treścią. Jednak w sekcji CDATA ograniczniki <![CDATA[i ]]>są klasyfikowane jako znaczniki, podczas gdy tekst między nimi jest klasyfikowany jako zawartość. Ponadto białe znaki przed i po najbardziej zewnętrznym elemencie są klasyfikowane jako znaczniki.

Etykietka

Znacznik jest narzut konstrukt, który zaczyna się <i kończy się >. Istnieją trzy rodzaje tagów:
  • tag startowy , taki jak <section>;
  • znacznik końcowy , taki jak </section>;
  • tag pustego elementu , taki jak <line-break />.

Element

Elementem jest logicznym składnikiem dokument że albo zaczyna się od znacznika startowego i kończy się znacznika końcowego dopasowania lub składa się tylko z pustymi tag elementu. Znaki między tagiem początkowym a tagiem końcowym, jeśli występują, są treścią elementu i mogą zawierać znaczniki, w tym inne elementy, zwane elementami podrzędnymi . Przykładem jest <greeting>Hello, world!</greeting>. Innym jest <line-break />.

Atrybut

Cechą jest narzut konstrukcja składająca się z pary nazw wartości , która istnieje w początkowym znacznikiem lub pustych elementów znacznika. Przykładem jest <img src="madonna.jpg" alt="Madonna" />, gdzie nazwy atrybutów to „src” i „alt”, a ich wartości to odpowiednio „madonna.jpg” i „Madonna”. Innym przykładem jest <step number="3">Connect A to B.</step>, gdzie nazwa atrybutu to „liczba”, a jego wartość to „3”. Atrybut XML może mieć tylko jedną wartość, a każdy atrybut może pojawić się co najwyżej raz w każdym elemencie. W typowej sytuacji, w której pożądana jest lista wielu wartości, należy to zrobić przez zakodowanie listy w dobrze sformatowany atrybut XML o pewnym formacie wykraczającym poza ten, który sam definiuje XML. Zwykle jest to lista rozdzielana przecinkami lub średnikiem lub, jeśli wiadomo, że poszczególne wartości nie zawierają spacji, można użyć listy rozdzielanej spacjami. <div class="inner greeting-box">Welcome!</div>, gdzie atrybut „class” ma zarówno wartość „inner greeting-box”, jak i wskazuje dwie nazwy klas CSS „inner” i „greeting-box”.

Deklaracja XML

Dokumenty XML mogą zaczynać się od deklaracji XML, która opisuje niektóre informacje o nich. Przykładem jest <?xml version="1.0" encoding="UTF-8"?>.

Postacie i ucieczka

Dokumenty XML składają się wyłącznie ze znaków z repertuaru Unicode . Z wyjątkiem niewielkiej liczby specjalnie wykluczonych znaków sterujących , każdy znak zdefiniowany przez Unicode może pojawić się w treści dokumentu XML.

XML zawiera funkcje służące do identyfikowania kodowania znaków Unicode, które składają się na dokument, oraz do wyrażania znaków, które z tego czy innego powodu nie mogą być użyte bezpośrednio.

Prawidłowe znaki

Punkty kodowe Unicode w następujących zakresach są prawidłowe w dokumentach XML 1.0:

  • U+0009 (Tab. pozioma), U+000A (Wysuw linii), U+000D (Powrót karetki): są to jedyne kontrolki C0 akceptowane w XML 1.0;
  • U+0020–U+D7FF, U+E000–U+FFFD: wyklucza to niektóre nie-znaki w BMP (wszystkie surogaty, U+FFFE i U+FFFF są zabronione);
  • U+10000–U+10FFFF: obejmuje wszystkie punkty kodowe na płaszczyznach dodatkowych, w tym nieznakowe.

XML 1.1 rozszerza zestaw dozwolonych znaków o wszystkie powyższe, plus pozostałe znaki z zakresu U+0001–U+001F. Jednocześnie jednak ogranicza użycie znaków kontrolnych C0 i C1 innych niż U+0009 (Tab. pozioma), U+000A (Wysuw wiersza), U+000D (Powrót karetki) i U+0085 (Następna linia ), wymagając, aby były zapisane w formie ucieczki (na przykład U+0001 musi być napisane jako &#x01;lub jego odpowiednik). W przypadku znaków C1 ograniczenie to jest niezgodnością wsteczną; został wprowadzony, aby umożliwić wykrywanie typowych błędów kodowania.

Punkt kodowy U+0000 (Null) jest jedynym znakiem, który nie jest dozwolony w żadnym dokumencie XML 1.0 lub 1.1.

Wykrywanie kodowania

Zestaw znaków Unicode można zakodować w bajtach w celu przechowywania lub przesyłania na wiele różnych sposobów, zwanych „kodowaniem”. Sam Unicode definiuje kodowania, które obejmują cały repertuar; dobrze znane to UTF-8 i UTF-16 . Istnieje wiele innych kodowań tekstu, które poprzedzają Unicode, takie jak ASCII i ISO/IEC 8859 ; ich repertuary znaków w prawie każdym przypadku są podzbiorami zestawu znaków Unicode.

XML umożliwia użycie dowolnego kodowania zdefiniowanego w Unicode oraz wszelkich innych kodowań, których znaki pojawiają się również w Unicode. XML zapewnia również mechanizm, dzięki któremu procesor XML może niezawodnie, bez wcześniejszej wiedzy, określić, które kodowanie jest używane. Kodowania inne niż UTF-8 i UTF-16 niekoniecznie są rozpoznawane przez każdy parser XML.

Ucieczka

XML zapewnia możliwości ucieczki do dołączania znaków, które są problematyczne do bezpośredniego dołączenia. Na przykład:

  • Znaki „<” i „&” są kluczowymi znacznikami składni i mogą nigdy nie pojawiać się w treści poza sekcją CDATA . Dozwolone, ale nie zalecane, jest używanie znaku „<” w wartościach encji XML.
  • Niektóre kodowania znaków obsługują tylko podzbiór Unicode. Na przykład dozwolone jest kodowanie dokumentu XML w ASCII, ale w ASCII brakuje punktów kodowych dla znaków Unicode, takich jak „é”.
  • Może nie być możliwe wpisanie znaku na maszynie autora.
  • Niektóre znaki mają glify , których nie można wizualnie odróżnić od innych znaków, takie jak spacja nierozdzielająca ( &#xa0;) „ ” i spacja ( &#x20;) „ ” oraz wielka litera cyrylicy A ( &#x410;) „А” i wielka litera łacińska A ( &#x41;) "A".

Istnieje pięć predefiniowanych encji :

  • &lt; reprezentuje „<”;
  • &gt; reprezentuje ">";
  • &amp; reprezentuje "&";
  • &apos;oznacza " " „;
  • &quot;reprezentuje ' " '.

Wszystkie dozwolone znaki Unicode mogą być reprezentowane przez odwołanie do znaku numerycznego . Rozważmy chiński znak „中”, którego kod numeryczny w Unicode to szesnastkowy 4E2D lub dziesiętny 20 013. Użytkownik, którego klawiatura nie oferuje metody wprowadzania tego znaku, nadal może wstawić go do dokumentu XML zakodowanego jako &#20013;lub &#x4e2d;. Podobnie ciąg "I <3 Jörg" może być zakodowany w celu włączenia do dokumentu XML jako I &lt;3 J&#xF6;rg.

&#0;nie jest jednak dozwolone, ponieważ znak null jest jednym ze znaków sterujących wykluczonych z XML, nawet w przypadku korzystania z odwołania do znaku numerycznego. Do reprezentowania takich znaków potrzebny jest alternatywny mechanizm kodowania, taki jak Base64 .

Uwagi

Komentarze mogą pojawiać się w dowolnym miejscu dokumentu poza innymi znacznikami. Komentarze nie mogą pojawić się przed deklaracją XML. Komentarze zaczynają się <!--i kończą na -->. Ze względu na zgodność z SGML , łańcuch "--" (podwójny myślnik) nie jest dozwolony w komentarzach; oznacza to, że komentarze nie mogą być zagnieżdżane. Znak ampersand nie ma specjalnego znaczenia w komentarzach, więc odwołania do encji i znaków nie są jako takie rozpoznawane i nie ma możliwości reprezentowania znaków spoza zestawu znaków kodowania dokumentu.

Przykład prawidłowego komentarza: <!--no need to escape <code> & such in comments-->

zastosowanie międzynarodowe

XML 1.0 (piąta edycja) i XML 1.1 obsługują bezpośrednie użycie prawie każdego znaku Unicode w nazwach elementów, atrybutach, komentarzach, danych znakowych i instrukcjach przetwarzania (innych niż te, które mają specjalne znaczenie symboliczne w samym XML, takie jak less -niż znak, "<"). Poniżej znajduje się dobrze sformatowany dokument XML zawierający znaki chińskie , ormiańskie i cyrylicę :

<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>

Poprawność składniowa i obsługa błędów

Specyfikacja XML definiuje dokument XML jako poprawnie sformułowany tekst, co oznacza, że ​​spełnia on listę reguł składniowych podaną w specyfikacji. Niektóre kluczowe punkty na dość długiej liście obejmują:

  • Dokument zawiera tylko poprawnie zakodowane legalne znaki Unicode.
  • Żaden ze specjalnych znaków składni, takich jak <i, nie &pojawia się, z wyjątkiem wykonywania ról wyznaczania znaczników.
  • Tag początkowy, tag końcowy i tag pustego elementu, które ograniczają elementy, są prawidłowo zagnieżdżone, bez brakujących elementów i żadnych nachodzących na siebie.
  • W nazwach znaczników rozróżniana jest wielkość liter; tag początkowy i końcowy muszą dokładnie pasować.
  • Nazwy znaczników nie mogą zawierać żadnego ze znaków !"#$%&'()*+,/;<=>?@[\]^`{|}~ ani spacji i nie mogą zaczynać się od "-", „.” lub cyfra numeryczna.
  • Pojedynczy element główny zawiera wszystkie pozostałe elementy.

Definicja dokumentu XML wyklucza teksty, które zawierają naruszenia zasad prawidłowego sformułowania; po prostu nie są XML. Procesor XML, który napotka takie naruszenie, musi zgłosić takie błędy i przerwać normalne przetwarzanie. Ta zasada, czasami nazywana „ drakońską obsługą błędów”, wyraźnie kontrastuje z zachowaniem programów przetwarzających HTML , które są zaprojektowane tak, aby dawać rozsądne wyniki nawet w obecności poważnych błędów znaczników. Polityka XML w tym zakresie została skrytykowana jako naruszenie prawa Postela („Bądź konserwatywny w tym, co wysyłasz; bądź liberalny w tym, co akceptujesz”).

Specyfikacja XML definiuje poprawny dokument XML jako dobrze sformatowany dokument XML, który jest również zgodny z zasadami definicji typu dokumentu (DTD).

Schematy i walidacja

Oprócz tego, że dokument XML jest poprawnie sformułowany, może być ważny . Oznacza to, że zawiera on odniesienie do definicji typu dokumentu (DTD), a jego elementy i atrybuty są zadeklarowane w tym DTD i przestrzegają zasad gramatycznych dla nich określonych w DTD.

Procesory XML są klasyfikowane jako walidujące lub nie walidujące w zależności od tego, czy sprawdzają ważność dokumentów XML. Procesor, który wykryje błąd ważności, musi być w stanie go zgłosić, ale może kontynuować normalne przetwarzanie.

DTD to przykład schematu lub gramatyki . Od czasu pierwszej publikacji XML 1.0 wykonano wiele prac w dziedzinie języków schematów dla XML. Takie języki schematów zazwyczaj ograniczają zestaw elementów, które mogą być używane w dokumencie, jakie atrybuty można do nich zastosować, kolejność, w jakiej mogą się pojawiać, oraz dopuszczalne relacje rodzic/dziecko.

Definicja typu dokumentu

Najstarszym językiem schematu dla XML jest definicja typu dokumentu (DTD), dziedziczona z SGML.

DTD mają następujące zalety:

  • Wsparcie DTD jest wszechobecne ze względu na jego włączenie do standardu XML 1.0.
  • DTD są zwięzłe w porównaniu do języków schematów opartych na elementach, dzięki czemu prezentują więcej informacji na jednym ekranie.
  • DTD umożliwiają deklarację standardowych zestawów encji publicznych do publikowania znaków.
  • DTD definiują typ dokumentu, a nie typy używane przez przestrzeń nazw, grupując w ten sposób wszystkie ograniczenia dla dokumentu w jednej kolekcji.

DTD mają następujące ograniczenia:

  • Nie mają wyraźnej obsługi nowszych funkcji XML, przede wszystkim przestrzeni nazw .
  • Brakuje im wyrazistości. DTD XML są prostsze niż DTD SGML i istnieją pewne struktury, których nie można wyrazić za pomocą zwykłych gramatyk. DTD obsługują tylko podstawowe typy danych.
  • Brakuje im czytelności. Projektanci DTD zwykle intensywnie wykorzystują encje parametryczne (które zachowują się zasadniczo jak makra tekstowe ), co ułatwia definiowanie złożonych gramatyk, ale kosztem przejrzystości.
  • Do opisu schematu używają składni opartej na składni wyrażeń regularnych , odziedziczonej po SGML. Typowe interfejsy API XML, takie jak SAX , nie próbują oferować aplikacjom ustrukturyzowanej reprezentacji składni, więc jest ona mniej dostępna dla programistów niż składnia oparta na elementach.

Dwie szczególne cechy, które odróżniają DTD od innych typów schematów to wsparcie składniowe osadzania DTD w dokumentach XML oraz definiowania encji , które są dowolnymi fragmentami tekstu lub znacznikami, które procesor XML wstawia do samego DTD oraz do dokumentu XML, gdziekolwiek się znajdują. są przywoływane, podobnie jak znaki ucieczki.

Technologia DTD jest nadal używana w wielu aplikacjach ze względu na jej wszechobecność.

Schemat

Nowszym językiem schematu, opisywanym przez W3C jako następca DTD, jest XML Schema , często określany inicjalizmem dla instancji XML Schema, XSD (XML Schema Definition). XSD są znacznie bardziej wydajne niż DTD w opisie języków XML. Używają bogatego systemu typowania danych i pozwalają na bardziej szczegółowe ograniczenia logicznej struktury dokumentu XML. Pliki XSD używają również formatu opartego na XML, co umożliwia użycie zwykłych narzędzi XML do ich przetwarzania.

xs:schema element definiujący schemat:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>

RELAKS NG

RELAX NG (język regularny dla XML Next Generation) był początkowo określony przez OASIS , a obecnie jest standardowym (Część 2: Walidacja Regular-gramatyczne oparte na normie ISO / IEC 19757 - DSDL ). Schematy RELAX NG mogą być napisane w składni opartej na XML lub bardziej zwartej składni innej niż XML; dwie składnie są izomorficzne, a narzędzie do konwersji Jamesa ClarkaTrang — może konwertować między nimi bez utraty informacji. RELAX NG ma prostsze ramy definicji i walidacji niż XML Schema, dzięki czemu jest łatwiejszy w użyciu i implementacji. Posiada również możliwość korzystania z wtyczek datatype framework ; Na przykład autor schematu RELAX NG może wymagać, aby wartości w dokumencie XML były zgodne z definicjami w XML Schema Datatypes.

Schematron

Schematron to język do tworzenia twierdzeń o obecności lub braku wzorców w dokumencie XML. Zwykle używa wyrażeń XPath . Schematron jest obecnie standardem (Część 3: sprawdzanie poprawności oparte na regułach z normą ISO / IEC 19757 - DSDL ).

DSDL i inne języki schematów

DSDL (Document Schema Definition Languages) to wieloczęściowy standard ISO/IEC (ISO/IEC 19757), który łączy obszerny zestaw małych języków schematów, z których każdy jest ukierunkowany na określone problemy. DSDL zawiera pełną i kompaktową składnię RELAX NG , język asercji Schematron oraz języki do definiowania typów danych, ograniczeń repertuaru znaków, zmiany nazwy i rozszerzania encji oraz opartego na przestrzeni nazw routingu fragmentów dokumentów do różnych walidatorów. Języki schematów DSDL nie mają jeszcze wsparcia dostawców schematów XML i są do pewnego stopnia oddolną reakcją wydawców przemysłowych na brak użyteczności schematów XML do publikowania .

Niektóre języki schematów nie tylko opisują strukturę określonego formatu XML, ale także oferują ograniczone możliwości wpływania na przetwarzanie poszczególnych plików XML zgodnych z tym formatem. Zarówno DTD, jak i XSD mają tę zdolność; mogą na przykład zapewnić funkcję rozszerzania zbioru informacji i domyślne wartości atrybutów. RELAX NG i Schematron celowo ich nie zapewniają.

Powiązane specyfikacje

Opracowano klaster specyfikacji ściśle związanych z XML, który rozpoczął się wkrótce po pierwszej publikacji XML 1.0. Często jest tak, że termin „XML” jest używany w odniesieniu do XML wraz z jedną lub więcej z tych innych technologii, które zaczęły być postrzegane jako część rdzenia XML.

  • Przestrzenie nazw XML umożliwiają, aby ten sam dokument zawierał elementy i atrybuty XML zaczerpnięte z różnych słowników, bez występowania kolizji nazw . Chociaż przestrzenie nazw XML nie są częścią samej specyfikacji XML, praktycznie całe oprogramowanie XML obsługuje również przestrzenie nazw XML.
  • XML Base definiuje xml:baseatrybut, który może być użyty do ustawienia podstawy dla rozwiązywania względnych referencji URI w zakresie pojedynczego elementu XML.
  • Zbiór Informacji XML lub Zbiór Informacji XML to abstrakcyjny model danych dla dokumentów XML pod względem elementów informacji . Zbiór informacji jest powszechnie używany w specyfikacjach języków XML, dla wygody w opisywaniu ograniczeń konstrukcji XML, na które pozwalają te języki.
  • XSL (Extensible Stylesheet Language) to rodzina języków używanych do przekształcania i renderowania dokumentów XML, podzielona na trzy części:
  • XSLT (XSL Transformations), język XML do przekształcania dokumentów XML na inne dokumenty XML lub inne formaty, takie jak HTML, zwykły tekst lub XSL-FO. XSLT jest bardzo ściśle powiązany z XPath, którego używa do adresowania komponentów wejściowego dokumentu XML, głównie elementów i atrybutów.
  • XSL-FO (XSL Formatting Objects), język XML do renderowania dokumentów XML, często używany do generowania plików PDF.
  • XPath (XML Path Language), język inny niż XML do adresowania składników (elementów, atrybutów itd.) dokumentu XML. XPath jest szeroko stosowany w innych specyfikacjach core-XML oraz w bibliotekach programistycznych do uzyskiwania dostępu do danych zakodowanych w XML.
  • XQuery (XML Query) to język zapytań XML silnie zakorzeniony w XPath i XML Schema. Zapewnia metody dostępu, manipulowania i zwracania danych XML i jest pomyślany głównie jako język zapytań dla baz danych XML .
  • XML Signature definiuje składnię i reguły przetwarzania dotyczące tworzenia podpisów cyfrowych na treści XML.
  • Szyfrowanie XML definiuje składnię i reguły przetwarzania dotyczące szyfrowania treści XML.
  • xml-model (Część 11: Schema Association of ISO/IEC 19757 – DSDL ) definiuje sposób powiązania dowolnego dokumentu xml z dowolnym z wymienionych powyżej typów schematów .

Niektóre inne specyfikacje pomyślane jako część „Rdzenia XML” nie znalazły szerokiego zastosowania, w tym XInclude , XLink i XPointer .

Interfejsy programistyczne

Cele projektowe XML obejmują: „Napisanie programów przetwarzających dokumenty XML powinno być łatwe”. Mimo to specyfikacja XML nie zawiera prawie żadnych informacji na temat tego, jak programiści mogą wykonać takie przetwarzanie. Specyfikacja XML Infoset dostarcza słownika do odwoływania się do konstrukcji w dokumencie XML, ale nie dostarcza żadnych wskazówek, jak uzyskać dostęp do tych informacji. Opracowano i wykorzystano różne interfejsy API umożliwiające dostęp do XML, a niektóre z nich zostały ustandaryzowane.

Istniejące interfejsy API do przetwarzania XML zwykle należą do następujących kategorii:

  • Zorientowane strumieniowo interfejsy API dostępne z języka programowania, na przykład SAX i StAX .
  • Interfejsy API przechodzenia przez drzewo dostępne z języka programowania, na przykład DOM .
  • Powiązanie danych XML , które zapewnia automatyczne tłumaczenie między dokumentem XML a obiektami języka programowania.
  • Języki transformacji deklaratywnej, takie jak XSLT i XQuery .
  • Rozszerzenia składni do języków programowania ogólnego przeznaczenia, na przykład LINQ i Scala .

Obiekty zorientowane na strumień wymagają mniej pamięci i, w przypadku niektórych zadań opartych na liniowym przechodzeniu dokumentu XML, są szybsze i prostsze niż inne alternatywy. Interfejsy API do przechodzenia przez drzewa i wiązania danych zwykle wymagają użycia znacznie większej ilości pamięci, ale często są wygodniejsze w użyciu przez programistów; niektóre obejmują deklaratywne pobieranie składników dokumentu za pomocą wyrażeń XPath.

XSLT jest przeznaczony do deklaratywnego opisu transformacji dokumentów XML i został szeroko zaimplementowany zarówno w pakietach po stronie serwera, jak i przeglądarkach internetowych. XQuery pokrywa się z XSLT w swojej funkcjonalności, ale jest przeznaczony raczej do przeszukiwania dużych baz danych XML .

Proste API dla XML

Simple API for XML (SAX) to leksykalne , sterowane zdarzeniami API, w którym dokument jest odczytywany seryjnie, a jego zawartość jest raportowana jako wywołania zwrotne do różnych metod w obiekcie obsługi projektu użytkownika. SAX jest szybki i wydajny we wdrożeniu, ale trudny w użyciu do losowego wyodrębniania informacji z XML, ponieważ zwykle obciąża autora aplikacji śledzeniem, jaka część dokumentu jest przetwarzana. Lepiej sprawdza się w sytuacjach, w których pewne rodzaje informacji są zawsze obsługiwane w ten sam sposób, bez względu na to, gdzie występują w dokumencie.

Pociągnij parsowanie

Analiza metodą ściągania traktuje dokument jako serię elementów odczytywanych po kolei przy użyciu wzorca projektowego iteratora . Pozwala to na pisanie rekurencyjnych parserów zstępujących, w których struktura kodu wykonującego parsowanie odzwierciedla strukturę parsowanego XML, a wyniki parsowania pośredniego mogą być używane i dostępne jako zmienne lokalne w funkcjach przeprowadzających parsowanie lub przekazywane ( jako parametry funkcji) do funkcji niższego poziomu lub zwracane (jako wartości zwracane przez funkcję) do funkcji wyższego poziomu. Przykłady parserów pull obejmują Data::Edit::Xml w Perlu , StAX w języku programowania Java , XMLPullParser w Smalltalk , XMLReader w PHP , ElementTree.iterparse w Pythonie , System.Xml.XmlReader w .NET Framework oraz DOM przechodzenie API (NodeIterator i TreeWalker).

Parser ściągający tworzy iterator, który sekwencyjnie odwiedza różne elementy, atrybuty i dane w dokumencie XML. Kod, który używa tego iteratora, może przetestować bieżący element (aby stwierdzić na przykład, czy jest to znacznik początkowy, końcowy, czy tekst) i sprawdzić jego atrybuty (nazwa lokalna, przestrzeń nazw , wartości atrybutów XML, wartość tekst itp.), a także może przenieść iterator do następnego elementu. Kod może w ten sposób wyodrębnić informacje z dokumentu podczas jego przechodzenia. Podejście rekurencyjne ma tendencję do przechowywania danych jako wpisanych zmiennych lokalnych w kodzie wykonującym parsowanie, podczas gdy SAX, na przykład, zazwyczaj wymaga parsera, aby ręcznie utrzymywać dane pośrednie w stosie elementów, które są elementami nadrzędnymi elementu. są analizowane. Kod analizujący metodą pull może być prostszy do zrozumienia i utrzymania niż kod analizujący SAX.

Obiektowy model dokumentu

Document Object Model (DOM) to API, które pozwala na nawigację po całym dokumencie tak, jakby był drzewem obiektów węzłów reprezentujących zawartość dokumentu. Dokument DOM może być utworzony przez parser lub wygenerowany ręcznie przez użytkowników (z ograniczeniami). Typy danych w węzłach DOM są abstrakcyjne; implementacje zapewniają własne powiązania specyficzne dla języka programowania . Implementacje DOM zwykle wymagają dużej ilości pamięci , ponieważ zazwyczaj wymagają załadowania całego dokumentu do pamięci i zbudowania go jako drzewa obiektów przed zezwoleniem na dostęp.

Wiązanie danych

Powiązanie danych XML to powiązanie dokumentów XML z hierarchią niestandardowych i silnie typizowanych obiektów, w przeciwieństwie do ogólnych obiektów tworzonych przez parser DOM. Takie podejście upraszcza tworzenie kodu i w wielu przypadkach pozwala na identyfikację problemów w czasie kompilacji, a nie w czasie wykonywania. Nadaje się do zastosowań, w których struktura dokumentu jest znana i ustalona w momencie pisania aplikacji. Przykładowe systemy wiązania danych obejmują Java Architecture for XML Binding (JAXB), serializację XML w .NET Framework . oraz serializacja XML w gSOAP .

XML jako typ danych

XML pojawił się jako pierwszorzędny typ danych w innych językach. Rozszerzenie ECMAScript for XML (E4X) do języka ECMAScript /JavaScript wyraźnie definiuje dwa określone obiekty (XML i XMLList) dla JavaScript, które obsługują węzły dokumentów XML i listy węzłów XML jako odrębne obiekty i używają notacji kropkowej określającej relacje rodzic-dziecko . E4X jest obsługiwany przez przeglądarki Mozilla 2.5+ (choć obecnie przestarzałe) i Adobe Actionscript , ale nie został przyjęty bardziej powszechnie. Podobne notacje są używane w implementacji Microsoft LINQ dla Microsoft .NET 3.5 i nowszych oraz w Scala (która korzysta z Java VM). Aplikacja xmlsh o otwartym kodzie źródłowym, która zapewnia powłokę podobną do Linuksa ze specjalnymi funkcjami do manipulacji XML, podobnie traktuje XML jako typ danych, używając notacji <[]>. Resource Description Framework określa typ danych rdf:XMLLiteral, aby trzymać zawinięte, kanoniczny XML . Facebook wyprodukował rozszerzenia do języków PHP i JavaScript , które dodają XML do podstawowej składni w podobny sposób do E4X, a mianowicie odpowiednio XHP i JSX .

Historia

XML to profil aplikacji SGML (ISO 8879).

Wszechstronność SGML w zakresie dynamicznego wyświetlania informacji została zrozumiana przez wczesnych wydawców mediów cyfrowych pod koniec lat 80., przed powstaniem Internetu. W połowie lat dziewięćdziesiątych niektórzy praktycy SGML zdobyli doświadczenie z nową ówczesną siecią World Wide Web i wierzyli, że SGML oferuje rozwiązania niektórych problemów, z jakimi sieć może się zmierzyć w miarę jej rozwoju. Dan Connolly dodał SGML do listy działań W3C, kiedy dołączył do zespołu w 1995 roku; prace rozpoczęły się w połowie 1996 roku, kiedy inżynier Sun Microsystems Jon Bosak opracował statut i zwerbował współpracowników. Bosak był dobrze połączony w małej społeczności ludzi, którzy mieli doświadczenie zarówno w SGML, jak iw Internecie.

XML został opracowany przez grupę roboczą jedenastu członków, wspieraną przez (w przybliżeniu) 150-osobową grupę interesu. Debata techniczna odbyła się na liście dyskusyjnej Grupy Interesów, a kwestie rozwiązywano w drodze konsensusu lub, gdy to się nie powiodło, większością głosów Grupy Roboczej. Zapis decyzji projektowych i ich uzasadnienia został opracowany przez Michaela Sperberga-McQueena 4 grudnia 1997 roku. James Clark pełnił funkcję kierownika technicznego grupy roboczej, przyczyniając się w szczególności do <empty />składni pustych elementów i nazwy „XML”. Inne nazwy, które zostały zgłoszone do rozważenia, to „MAGMA” (Minimalna Architektura dla Uogólnionych Aplikacji Markupowych), „SLIM” (Structured Language for Internet Markup) i „MGML” (Minimalny Generalizowany Język Markupów). Współredaktorami specyfikacji byli pierwotnie Tim Bray i Michael Sperberg-McQueen . W połowie projektu Bray zgodził się na konsultację z firmą Netscape , wywołując głośne protesty ze strony Microsoftu. Bray został tymczasowo poproszony o rezygnację z redakcji. Doprowadziło to do intensywnego sporu w Grupie Roboczej, ostatecznie rozwiązanego przez mianowanie Jean Paoli z Microsoftu na trzeciego współredaktora.

Grupa Robocza XML nigdy nie spotkała się twarzą w twarz; projekt został zrealizowany przy użyciu połączenia poczty elektronicznej i cotygodniowych telekonferencji. Główne decyzje projektowe zapadły w krótkim okresie intensywnej pracy między sierpniem a listopadem 1996 r., kiedy opublikowano pierwszą wersję roboczą specyfikacji XML. Dalsze prace projektowe trwały do ​​1997 roku, a XML 1.0 stał się rekomendacją W3C 10 lutego 1998 roku.

Źródła

XML jest profilem standardu ISO SGML, a większość XML pochodzi z SGML bez zmian. Od SGML pochodzi separacja struktur logicznych i fizycznych (elementy i encje), dostępność walidacji opartej na gramatyce (DTD), separacja danych i metadanych (elementy i atrybuty), zawartość mieszana, separacja przetwarzania od reprezentacji ( przetwarzanie instrukcje ) i domyślną składnię nawiasów kątowych. Deklaracja SGML została usunięta; w ten sposób XML ma ustalony zestaw ograniczników i przyjmuje Unicode jako zestaw znaków dokumentu .

Innymi źródłami technologii XML były TEI (Text Encoding Initiative), w którym zdefiniowano profil SGML do wykorzystania jako „składnia transferu”; i HTML , w którym elementy były zsynchronizowane ze swoimi zasobami, zestawy znaków dokumentu były oddzielone od kodowania zasobów, xml:langwynaleziono atrybut i (jak HTTP ) metadane towarzyszyły zasobom, a nie były potrzebne przy deklaracji łącza. Projekt ERCS (Extended Reference Concrete Syntax) projektu SPREAD (Standardization Project Regarding East Asian Documents) grupy ekspertów ds. przetwarzania dokumentów związanych z ISO Chiny/Japonia/Korea był podstawą zasad nazewnictwa XML 1.0; SPREAD wprowadził również szesnastkowe referencje znaków numerycznych oraz koncepcję referencji, aby udostępnić wszystkie znaki Unicode. Aby lepiej obsługiwać ERCS, XML i HTML, standard SGML IS 8879 został zaktualizowany w 1996 i 1998 roku za pomocą adaptacji WebSGML. Nagłówek XML był zgodny z nagłówkiem ISO HyTime .

Nowatorskie w języku XML pomysły, które rozwinęły się podczas dyskusji, obejmowały algorytm wykrywania kodowania i nagłówek kodowania, cel instrukcji przetwarzania, atrybut xml:space oraz nowy bliski ogranicznik dla znaczników pustych elementów. Pojęcie prawidłowości w przeciwieństwie do ważności (która umożliwia parsowanie bez schematu) zostało po raz pierwszy sformalizowane w XML, chociaż zostało z powodzeniem zaimplementowane w oprogramowaniu „Dynatext” technologii książki elektronicznej; oprogramowanie z University of Waterloo New Oxford English Dictionary Project; procesor tekstu RISP LISP SGML w Uniscope, Tokio; system hipertekstowy dowództwa rakietowego armii amerykańskiej IADS; Kontekst graficzny mentora; System wydawniczy Interleaf i Xerox.

Wersje

Istnieją dwie aktualne wersje XML:

XML 1.0

Pierwszy ( XML 1.0 ) został pierwotnie zdefiniowany w 1998 roku. Od tego czasu przeszedł drobne poprawki, bez nadania nowego numeru wersji, a obecnie znajduje się w piątym wydaniu, opublikowanym 26 listopada 2008 roku. Jest szeroko stosowany i nadal zalecany do ogólnego użytku.

XML 1.1

Drugi ( XML 1.1 ) został pierwotnie opublikowany 4 lutego 2004 roku, tego samego dnia co XML 1.0 Third Edition, a obecnie znajduje się w jego drugim wydaniu, opublikowanym 16 sierpnia 2006 roku. Zawiera funkcje (niektóre kontrowersyjne), które są przeznaczone aby uczynić XML łatwiejszym w użyciu w niektórych przypadkach. Główne zmiany to umożliwienie używania znaków końca linii używanych na platformach EBCDIC oraz używania skryptów i znaków nieobecnych w Unicode 3.2. XML 1.1 nie jest zbyt szeroko zaimplementowany i jest zalecany do użytku tylko przez tych, którzy potrzebują jego konkretnych funkcji.

Poprawne znaki Unicode w XML 1.0 i XML 1.1

Przed wydaniem piątej edycji XML 1.0 różnił się od XML 1.1 tym, że posiadał bardziej rygorystyczne wymagania dotyczące znaków dostępnych do użycia w nazwach elementów i atrybutów oraz unikalnych identyfikatorach: w pierwszych czterech wydaniach XML 1.0 znaki były wyliczane wyłącznie przy użyciu określonej wersji Standard Unicode (Unicode 2.0 do Unicode 3.2.) Piąta edycja zastępuje mechanizm XML 1.1, który jest bardziej przyszłościowy, ale zmniejsza redundancję . Podejście przyjęte w piątej edycji XML 1.0 i we wszystkich wydaniach XML 1.1 polega na tym, że tylko niektóre znaki są zabronione w nazwach, a wszystko inne może pomieścić odpowiednie znaki nazw w przyszłych wersjach Unicode. W piątym wydaniu nazwy XML mogą zawierać znaki w pismach balijskich , Cham lub fenickich , między innymi dodanymi do Unicode od wersji Unicode 3.2.

Prawie każdy punkt kodowy Unicode może być używany w danych znakowych i wartościach atrybutów dokumentu XML 1.0 lub 1.1, nawet jeśli znak odpowiadający punktowi kodowemu nie jest zdefiniowany w bieżącej wersji Unicode. W danych znakowych i wartościach atrybutów XML 1.1 umożliwia użycie większej liczby znaków sterujących niż XML 1.0, ale ze względu na „solidność” większość znaków sterujących wprowadzonych w XML 1.1 musi być wyrażona jako odwołania do znaków numerycznych (oraz #x7F do #x9F , które były dozwolone w XML 1.0, są w XML 1.1 nawet wymagane, aby były wyrażone jako odwołania do znaków numerycznych). Wśród obsługiwanych znaków kontrolnych w XML 1.1 są dwa kody podziału wiersza, które muszą być traktowane jako białe znaki. Białe znaki to jedyne kody sterujące, które można zapisać bezpośrednio.

XML 2.0

Odbyła się dyskusja na temat XML 2.0, chociaż żadna organizacja nie ogłosiła planów pracy nad takim projektem. XML-SW (SW dla skunkworks ), napisany przez jednego z pierwotnych twórców XML, zawiera kilka propozycji tego, jak może wyglądać XML 2.0: eliminacja DTD ze składni, integracja przestrzeni nazw , Bazy XML i Zbioru Informacji XML w bazie standard.

Binarny XML

Konsorcjum World Wide Web ma również grupę roboczą XML Binary Characterization, która przeprowadza wstępne badania przypadków użycia i właściwości dla binarnego kodowania zbioru informacji XML. Grupa robocza nie jest upoważniona do opracowywania żadnych oficjalnych standardów. Ponieważ XML jest z definicji oparty na tekście, ITU-T i ISO używają nazwy Fast Infoset dla własnego binarnego zbioru informacji, aby uniknąć nieporozumień (patrz ITU-T Rec. X.891 i ISO/IEC 24824-1).

Krytyka

XML i jego rozszerzenia są regularnie krytykowane za szczegółowość, złożoność i nadmiarowość.

Mapowanie podstawowego modelu drzewa XML do systemów typów języków programowania lub baz danych może być trudne, zwłaszcza gdy XML jest używany do wymiany wysoce ustrukturyzowanych danych między aplikacjami, co nie było jego głównym celem projektowym. Jednak systemy wiązania danych XML umożliwiają aplikacjom dostęp do danych XML bezpośrednio z obiektów reprezentujących strukturę danych w używanym języku programowania, co zapewnia bezpieczeństwo typów , zamiast używania DOM lub SAX do pobierania danych z bezpośredniej reprezentacji XML samo. Jest to realizowane przez automatyczne tworzenie mapowania między elementami schematu XML XSD dokumentu a członkami klasy, która ma być reprezentowana w pamięci.

Inne krytyki próbują obalić twierdzenie, że XML jest językiem samoopisującym się (chociaż sama specyfikacja XML nie zawiera takiego twierdzenia).

JSON , YAML i S-Expressions są często proponowane jako prostsze alternatywy (zobacz Porównanie formatów serializacji danych ), które koncentrują się na reprezentowaniu danych o wysokiej strukturze, a nie dokumentów, które mogą zawierać zarówno zawartość o wysokiej strukturze, jak i stosunkowo nieustrukturyzowaną. Jednak specyfikacje znormalizowanego schematu XML W3C oferują szerszy zakres ustrukturyzowanych typów danych XSD w porównaniu z prostszymi formatami serializacji oraz oferują modułowość i ponowne wykorzystanie za pośrednictwem przestrzeni nazw XML .

Zobacz też

Uwagi

Bibliografia

Dalsza lektura

Zewnętrzne linki