Kontynuujemy nasze badania nad XML-em iw tym artykule zapoznamy się z konstrukcjami XML, takimi jak instrukcje przetwarzania, komentarze, atrybuty i inne elementy XML. Te elementy są podstawowe i pozwalają elastycznie, ściśle zgodnie ze standardem, oznaczać dokumenty o absolutnie dowolnej złożoności.

Niektóre punkty, takie jak tagi XML, omówiliśmy już częściowo w poprzednim artykule „”. Teraz jeszcze raz poruszymy ten temat i przeanalizujemy go bardziej szczegółowo. Robi się to celowo, aby ułatwić wizualizację całego obrazu konstrukcji XML.

Elementy XML. Puste i niepuste elementy XML

Jak wspomniano w poprzednim artykule, znaczniki w XML nie tylko oznaczają tekst, jak ma to miejsce w HTML, ale wyróżniają poszczególne elementy (obiekty). Z kolei elementy hierarchicznie porządkują informacje w dokumencie, co z kolei czyni je podstawowymi jednostkami strukturalnymi języka XML.

W XML elementy mogą być dwojakiego rodzaju — puste i niepuste. Puste elementy nie zawierają żadnych danych, takich jak tekst lub inne konstrukcje. W przeciwieństwie do pustych elementów, niepuste elementy mogą zawierać dowolne dane, takie jak tekst lub inne elementy i konstrukcje XML. Aby zrozumieć sedno powyższego, spójrzmy na przykłady pustych i niepustych elementów XML.

Pusty element XML

Niepusty element XML

Zawartość elementu...

Jak widać na powyższym przykładzie, główna różnica między pustymi i niepustymi elementami polega na tym, że składają się one tylko z jednego znacznika. Ponadto warto również zauważyć, że w XML wszystkie nazwy uwzględniają wielkość liter. Oznacza to, że nazwy myElement, MyElement, MYELEMENT itd. są różne, więc ten moment należy natychmiast o tym pamiętać, aby uniknąć błędów w przyszłości.
Więc wymyśliliśmy elementy. Przejdźmy teraz do następnego punktu, takiego jak logiczna organizacja dokumentów XML.

Logiczna organizacja dokumentów XML. Struktura drzewiasta danych XML

Jak pamiętasz, główną strukturą języka XML są elementy, które mogą zawierać inne zagnieżdżone struktury i tym samym tworzyć strukturę hierarchiczną w postaci drzewa. W tym przypadku elementem nadrzędnym będzie korzeń, a wszystkie pozostałe elementy potomne będą gałęziami i liśćmi drzewa XML.

Aby ułatwić zrozumienie istoty powyższego, spójrzmy na poniższy obrazek z przykładem.

Jak widać, organizacja dokumentu XML w postaci drzewa jest strukturą dość prostą do przetworzenia. Jednocześnie ekspresyjna złożoność samego drzewa jest dość duża. Jest to reprezentacja drzewa, która jest najbardziej optymalnym sposobem opisu obiektów w XML.

Atrybuty XML. Zasady pisania atrybutów w XML

W XML elementy mogą również zawierać atrybuty z przypisanymi do nich wartościami, które są ujęte w pojedyncze lub podwójne cudzysłowy. Atrybut elementu jest ustawiany w następujący sposób:

W tym przypadku użyto atrybutu o nazwie „atrybut” i wartości „wartość”. Tutaj warto od razu zauważyć, że atrybut XML musi zawierać jakąś wartość i nie może być pusty. W przeciwnym razie kod będzie niepoprawny pod względem XML.

Należy również zwrócić uwagę na użycie cudzysłowów. Wartości atrybutów mogą być ujęte w cudzysłowy pojedyncze lub podwójne. Ponadto możliwe jest również użycie niektórych cytatów w innych. Aby to zademonstrować, rozważ poniższe przykłady.

Zanim przejdziemy do rozważenia innych konstrukcji XML, warto również zauważyć, że przy tworzeniu atrybutów, takich jak: Symbole specjalne, jak ampersand „&” lub nawiasy kątowe ”<>”. Te znaki są zarezerwowane jako znaki kontrolne („&” to jednostka, a „<» и «>” otwiera i zamyka tag elementu) i nie może być używany w „czysty” sposób. Aby z nich skorzystać, musisz uciekać się do zastępowania znaków specjalnych.

Instrukcje przetwarzania XML (instrukcje przetwarzania). Deklaracja XML

W XML można zawrzeć w dokumencie instrukcje zawierające określone informacje dla aplikacji, które będą przetwarzać dany dokument. Instrukcje przetwarzania w XML są tworzone w następujący sposób.

Jak widać na powyższym przykładzie, w XML instrukcje przetwarzania są ujęte w ukośne cudzysłowy, po których następuje znak zapytania. To jest trochę jak zwykły, który przyjrzeliśmy się w naszych pierwszych samouczkach PHP. Pierwsza część instrukcji przetwarzania określa aplikację lub system, dla którego przeznaczona jest druga część tej instrukcji lub jej treść. Jednak instrukcje przetwarzania są ważne tylko dla aplikacji, do których są adresowane. Przykładem instrukcji przetwarzania może być następująca instrukcja.

Warto zauważyć, że w XML istnieje specjalna konstrukcja, która wygląda bardzo podobnie do instrukcji przetwarzania, ale sama w sobie nie jest. To jest deklaracja XML, która przechodzi do przetwarzania oprogramowanie niektóre informacje o właściwościach dokumentu XML, takie jak kodowanie, wersja języka, zgodnie z którym jest napisany ten dokument itp.

Jak widać na powyższym przykładzie, deklaracja XML zawiera tak zwane pseudoatrybuty, które są bardzo podobne do zwykłych atrybutów, o których mówiliśmy powyżej. Dzieje się tak, ponieważ z definicji deklaracja XML i instrukcje przetwarzania nie mogą zawierać atrybutów, dlatego deklaracje te nazywane są pseudoatrybutami. Warto o tym pamiętać na przyszłość, aby uniknąć różnych błędów.

Ponieważ zajmowaliśmy się pseudoatrybutami, spójrzmy, co one oznaczają.

  • Kodowanie - odpowiada za kodowanie dokumentu XML. Zwykle kodowanie to UTF8.
  • Wersja — wersja języka XML, w którym napisano ten dokument. Zwykle jest to XML w wersji 1.0.

Cóż, przejdźmy teraz do ostatniej części artykułu i rozważmy takie konstrukcje XML, jak komentarze i sekcje CDATA.

Czy istnieje znak ucieczki dla podwójnego cudzysłowu w xml? Chcę napisać tag taki jak:

ale jeśli wstawię ", oznacza to, że linia się skończyła. Potrzebuję czegoś takiego (c++):

Printf("Cytat = \" ");

Czy istnieje znak, który należy zapisać przed podwójnym cudzysłowem, aby go uniknąć?

Nowa, ulepszona odpowiedź na stare, często zadawane pytanie...

Kiedy uciec przed podwójnym cudzysłowem w XML?

Może pojawić się podwójny cudzysłów (") bez wyjścia :

    W treści tekstowej XML:

    Powiedział: „Nie cytuj mnie”.

    W atrybutach XML oddzielonych pojedynczymi cudzysłowami ("):

    Notatka: przekazywanie do pojedynczych cudzysłowów (") również nie wymaga ucieczki:

Cudzysłów (") musi być ekranowany :

    W atrybutach XML oddzielonych podwójnymi cudzysłowami:

dolna linia

Podwójny cudzysłów () powinien być zmieniany jako „w XML” tylko w bardzo ograniczonym kontekście.

Jeśli po prostu potrzebujesz czegoś szybko spróbować, oto szybkie i brudne rozwiązanie. Użyj pojedynczych cudzysłowów jako wartości atrybutu:

W C++ możesz użyć API EscapeXML ATL. To jest właściwy sposób obsługi znaków specjalnych...

Oto typowe znaki, które muszą być zmienione w XML, zaczynając od podwójnych cudzysłowów:

  1. podwójne cudzysłowy (") zmieniają się w "
  2. ampersand (&) przechodzi do &
  3. pojedyncze cudzysłowy (") zamieniają się w "
  4. mniej (<), экранируется до <
  5. większe niż (>), uciekło do >

Inni odpowiedzieli, jak radzić sobie z konkretną ucieczką w tym przypadku.

Szersza odpowiedź brzmi: nie próbuj robić tego samemu. Korzystaj z API XML - dostępnych jest wiele dla prawie każdej nowoczesnej platformy programistycznej.

Interfejs API XML zajmie się takimi rzeczami automatycznie, dzięki czemu dużo trudniej się pomylić. O ile nie piszesz sam XML API, rzadko musisz się martwić o takie szczegóły.

Od dłuższego czasu standard nakazuje wstawianie zwykłych cudzysłowów w tekst HTML użyj konstrukcji "W obrębie tagów, cudzysłowy "" są używane do oznaczenia atrybutów.

Jednak nie spotkałem się jeszcze z przeglądarką, która nie pokazywałaby w cudzysłowie prostego symbolu „POZA jakimiś tagami. Więc powiedzcie mi drodzy koledzy, może używanie” poza tagami to po prostu niepotrzebna uciążliwość? Można spokojnie i bez zbędnych ceregieli pisać „? Zwłaszcza w tekstach, w których jest dużo cudzysłowów, a przestrzeganie ścisłych zasad projektowania (o prawidłowym stosowaniu cudzysłowów narodowych) jest nieistotne.

IMHO, wiele osób to robi… ale pytanie nie jest do końca jasne: jeśli rozumiesz, że zgodnie ze standardami trzeba pisać cytaty typu „, ale leniwie, pomimo tego, że wiele witryn tak działa, to co czy spodziewasz się usłyszeć?Myślę, że czy wyświetlanie cytatów będzie obsługiwane w nowych wersjach przeglądarek, nikt nie wie, więc najbardziej oczywistą rekomendację można podać: jeśli nie chcesz problemów w przyszłości, trzymaj się standardy 100% :) Ale już to wiesz, to wszystko, zapomnij, a za 10 lat wszystko będzie tak samo, gwarantuję (Microsoft, Mozilla itp.)?

Lynn "Coffee Man" [dossier]
tak, przy okazji ... teraz warto to przeczytać, nigdzie nie jest napisane, że cytaty powinny być reprezentowane jako „
http://www2.stack.ru/~julia/HTML401/charset.html :

Niektórzy autorzy używają odwołania do jednostki znaku """ do kodowania wystąpień podwójnych cudzysłowów ("), ponieważ ten znak może być użyty do rozgraniczenia wartości atrybutów.

o czym, potrzebować użyj dokładnie jednostki, o której jest powiedziane<, >oraz &:

Jeśli autor chce umieścić znak "<", во избежание возможной путаницы с началом тега (метка начала тега) он должен использовать ссылку "<" (десятичный код ASCII 60). Точно так же во избежание проблем со старыми версиями пользовательских агентов, некорректно принимающих символы ">" na końcu znacznika (znak końca znacznika), należy użyć odwołania ">" (kod dziesiętny ASCII 62).

Aby uniknąć pomyłek z odwołaniami do znaków (znacznik początkowy odwołania do znaku), zamiast „&” należy użyć odwołania „&” (kod dziesiętny ASCII 38). Ponadto odwołanie „&” powinno być również używane w wartościach atrybutów, ponieważ odwołania do znaków w wartościach atrybutów CDATA są dozwolone.

Ale oczekuję tylko odpowiedzi Lynn: że tak naprawdę nie ma takiego standardu. Nawet mi to nie przyszło do głowy – moje informacje pochodzą z popularnych podręczników i ze względu na to, że „wszyscy to robią”.

Albo inna opcja: ale jeśli zastosujesz się do nowych standardów, których nie spotkałem w swojej praktyce - jak xhtml (dokładnie, sprawdziłem xhtml), to taka sztuczka nie zadziała. Dlatego nie ma potrzeby stwarzania problemów z przenośnością napisanego kodu HTML.

Lub wreszcie, jak sam to robisz?

&, przy okazji, generuje podobne pytanie. Powyższy dokument mówi „aby uniknąć zamieszania”. Ale pomyłka jest możliwa tylko wtedy, gdy po & następuje jeden z podanych kodów. A co, jeśli jest to, powiedzmy, adres URL, taki jak „..../script?A=1&B=2” ? Czy coś ryzykuję, jeśli przez pomyłkę określiłem taki URL jako href (co oczywiście działa poprawnie podczas testu)? Cokolwiek innego niż skrajnie mało prawdopodobna sytuacja, że ​​za 10 lat (kiedy strona jest nieaktualna lub została już dziesięciokrotnie przepisana) pojawi się podmiot o ekstrawaganckiej nazwie &B bez zwiastuna; ? Innymi słowy, jak dokładnie należy sprawdzać wszystkie takie przypadki?

Danielu, jeśli jesteś pewien, że nie masz problemów z istniejącymi kodami, to możesz po prostu napisać &. Jeśli w przyszłości się pojawi nowy kod- wtedy myślę, że zostanie zadeklarowany jawnie, a nie w specyfikacji HTML 4.01, dlatego nie powinien mieć wpływu na normalnie zadeklarowany dokument. Czy spodziewasz się, że zapewnisz wsparcie dla przyszłych standardów do prosta zmiana schemat dokumentu?

Daniel Alievsky[dossier]
W XML zwykły cytat jako tekst również nie stanowi problemu (odpowiednio, oczywiście w XHTML). Cytaty IMHO są zwykle tłumaczone na " tylko z jednego powodu - nie chcesz pisać dwóch funkcji, które przyniosą tekst do bezpiecznej postaci podczas zastępowania w XML / HTML / XHTML.

Witam, drodzy odwiedzający witrynę! Kontynuujmy temat języka znaczników XML i przyjrzyjmy się wykorzystaniu atrybutów. Atrybuty mogą być obecne na elementach XML, tak jak w HTML. Atrybuty zapewniają Dodatkowe informacje o żywiole.

Atrybuty XML

W Atrybuty HTML podać dodatkowe informacje o elementach:

Atrybuty XML muszą być cytowane

Wartości atrybuty w xml musi być zawsze ujęty w cudzysłów. Można używać zarówno pojedynczych, jak i podwójnych cudzysłowów. Aby określić płeć elementu osoby, możesz napisać tak:

Jeśli sama wartość atrybutu zawiera podwójne cudzysłowy, możesz użyć pojedynczych cudzysłowów, jak w tym przykładzie:

Elementy XML a atrybuty

Spójrz na następujące przykłady:

Wiktoria
Pietrowa

kobieta
Wiktoria
Pietrowa

W pierwszym przykładzie płeć (płeć) jest atrybutem. W tym ostatnim elementem jest seks. Oba przykłady dostarczają tych samych informacji.

Nie ma reguł dotyczących tego, kiedy używać atrybutów, a kiedy używać elementów. Atrybuty są przydatne w HTML. W XML radzę ich unikać. Zamiast tego użyj elementów.

Moja ulubiona metoda

Poniższe trzy dokumenty XML zawierają dokładnie te same informacje:

Atrybut data XML jest używany w pierwszym przykładzie:

Rozszerzony element daty jest używany w trzecim: (TO JEST MÓJ ULUBIONY SPOSÓB):



10
01
2008

Petya
Sveta
Przypomnienie

Unikaj atrybutów XML?

Niektóre problemy z używaniem atrybutów xml:

  • atrybuty nie mogą zawierać wielu wartości (elementy mogą)
  • atrybuty nie mogą zawierać struktur drzewiastych (elementy mogą)
  • atrybuty są trudniejsze do rozszerzenia (do przyszłych zmian)

Nie rób tego w ten sposób:

to="Wasia" od="Sveta" nagłówek="Przypomnienie"
body="Nie zapomnij zadzwonić do mnie jutro!">

Atrybuty XML dla metadanych



Wasiasz
Sveta
Przypomnienie
Nie zapomnij zadzwonić do mnie jutro!


Sveta
Wasiasz
Odp.: Przypomnienie
OK

Powyższe atrybuty id służą do identyfikowania różnych notatek. Nie są częścią samej notatki.

Chcę tutaj powiedzieć, że metadane (dane o danych) powinny być przechowywane jako atrybuty xml, a same dane powinny być przechowywane jako elementy.

Dziękuję za uwagę!.

Jak w HTML, Elementy XML może mieć atrybuty. W tym samym czasie wartość atrybuty w XML a zasada ich tworzenia jest pod wieloma względami podobna do .

Atrybuty dostarczają dodatkowych informacji o elemencie.

Atrybuty XML

W HTML atrybuty dostarczają dodatkowych informacji o elemencie:

Atrybuty często dostarczają informacji, które nie są częścią danych. W poniższym przykładzie typ pliku nie zależy od danych, ale ta informacja może być ważna dla aplikacji, które będą manipulować tym elementem:

komputer.gif

Atrybuty XML muszą być ujęte w cudzysłów

Wartość atrybutu musi być zawsze ujęta w cudzysłów. Mogą to być cudzysłowy podwójne lub pojedyncze. Na przykład płeć postaci można zapisać w następujący sposób:

albo tak:

Jeśli sama wartość atrybutu zawiera podwójne cudzysłowy, można użyć pojedynczych cudzysłowów. Na przykład:

lub użyj symboli encji:

Elementy lub atrybuty XML

Spójrz na następujące przykłady:

Przykład 1

Ania Kowal

Przykład #2

kobieta Ania Kowal

W pierwszym przykładzie płeć jest określona w atrybucie. W drugim płeć jest zapisana jako element. Oba przykłady dostarczają tych samych informacji.

Nie ma zasad regulujących, kiedy używać atrybutów, a kiedy używać elementów. Atrybuty są szeroko stosowane w HTML. W XML myślę, że najlepiej jest ich unikać i zamiast tego używać elementów.

Co lepsze?

Poniższe trzy dokumenty XML zawierają dokładnie te same informacje:

Data jest zapisana jako atrybut:

Tove Jani Przypomnienie

Data jest zapisana jako element:

10/01/2008 Tove Jani Przypomnienie Nie zapomnij o mnie w ten weekend!

Data jest zapisana jako element rozszerzony(Moim zdaniem najlepsza opcja):

10 01 2008 Tove Jani Przypomnienie Nie zapomnij o mnie w ten weekend!

Unikasz atrybutów XML?

Podczas korzystania z atrybutów występują pewne problemy:

  • atrybuty nie mogą zawierać wielu wartości (elementy mogą)
  • atrybuty nie mogą zawierać struktur drzewiastych (elementy mogą)
  • atrybuty są trudne do rozszerzenia (do przyszłych zmian)

Nigdy nie używaj następujących konstrukcji:

Atrybuty XML dla metadanych

Czasami elementom nadawane są identyfikatory. Te identyfikatory są używane do identyfikowania elementów XML w dokładnie taki sam sposób, jak atrybuty identyfikacyjne w HTML. Poniższy przykład ilustruje to:

Tove Jani Przypomnienie Nie zapomnij o mnie w ten weekend! Jani Tove Odp.: Przypomnienie nie zapomnę

W powyższym przykładzie atrybut id służy do identyfikowania różnych notatek. Ta informacja nie jest częścią samej notatki.

Główną ideą wszystkiego, co zostało powiedziane, jest to, że metadane (dane o danych) powinny być zapisywane jako atrybuty, a same dane jako elementy.