{"id":52640,"date":"2019-11-13T00:00:00","date_gmt":"2019-11-12T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu"},"modified":"2020-02-18T14:00:25","modified_gmt":"2020-02-18T11:00:25","slug":"xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu","title":{"rendered":"XML jest prawie zawsze u\u017cywany niezgodnie z przeznaczeniem","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"XML jest prawie zawsze u\u017cywany niezgodnie z przeznaczeniem\" src=\"\/wp-content\/uploads\/2019\/11\/8152077415a94ef74806af230ef44bd7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nJ\u0119zyk XML zosta\u0142 wynaleziony w 1996 roku. Ledwo si\u0119 pojawi\u0142, a ju\u017c zacz\u0119to go niew\u0142a\u015bciwie wykorzystywa\u0107, a dla cel\u00f3w, do kt\u00f3rych go pr\u00f3bowano dostosowa\u0107, nie by\u0142 najlepszym wyborem.<\/p>\n<p>Nie b\u0119dzie przesad\u0105 powiedzie\u0107, \u017ce przewa\u017caj\u0105ca wi\u0119kszo\u015b\u0107 schemat\u00f3w XML, kt\u00f3re mia\u0142em okazj\u0119 zobaczy\u0107, by\u0142a niecelowym lub b\u0142\u0119dnym wykorzystaniem XML. Co wi\u0119cej, takie zastosowanie XML \u015bwiadczy\u0142o o fundamentalnym braku zrozumienia, czym przede wszystkim jest XML.<\/p>\n<p>XML to j\u0119zyk znacznik\u00f3w. <b>To nie jest format danych.<\/b>. W wi\u0119kszo\u015bci schemat\u00f3w XML to rozgraniczenie nie by\u0142o wyra\u017anie uwzgl\u0119dniane, myl\u0105c XML z formatem danych, co w efekcie oznacza\u0142o b\u0142\u0105d w wyborze XML, poniewa\u017c w rzeczywisto\u015bci potrzebny by\u0142 format danych.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNie zag\u0142\u0119biaj\u0105c si\u0119 w szczeg\u00f3\u0142y, XML najlepiej nadaje si\u0119 do annotowania blok\u00f3w tekstu ze struktur\u0105 i metadanymi. Je\u015bli twoim g\u0142\u00f3wnym celem nie jest praca z blokiem tekstu, wyb\u00f3r XML raczej nie b\u0119dzie uzasadniony.<\/p>\n<p>Z tej perspektywy istnieje prosty spos\u00f3b, aby sprawdzi\u0107, jak dobrze zbudowany jest schemat XML. We\u017amy na przyk\u0142ad dokument w za\u0142o\u017conym schemacie i usu\u0144my z niego wszystkie znaczniki i atrybuty. Je\u015bli w tym, co pozosta\u0142o, nie ma sensu (lub je\u015bli pozosta\u0142a pusta linia), to albo tw\u00f3j schemat jest \u017ale skonstruowany, albo po prostu nie powiniene\u015b by\u0142 u\u017cywa\u0107 XML.<\/p>\n<p>Nast\u0119pnie przedstawi\u0119 kilka najcz\u0119\u015bciej spotykanych przyk\u0142ad\u00f3w b\u0142\u0119dnie skonstruowanych schemat\u00f3w.<\/p>\n<pre><code class=\"xml\"><\/code><\/pre>\n<p>\nTutaj widzimy przyk\u0142ad niew\u0142a\u015bciwej i dziwnej (cho\u0107 bardzo powszechnej) pr\u00f3by wyra\u017cenia j\u0119zykiem XML prostego s\u0142ownika \u201eklucz-warto\u015b\u0107\u201d. Je\u015bli usuniemy wszystkie znaczniki i atrybuty, pozostanie pusta linia. W zasadzie ten dokument przedstawia, jak absurdalnie by to nie brzmia\u0142o, semantyczn\u0105 adnotacj\u0119 pustej linii.<\/p>\n<pre><code class=\"xml\">&lt;root name=\"John\" city=\"London\" \/&gt;<\/code><\/pre>\n<p>\nCo gorsza, nie mamy tutaj po prostu semantycznej adnotacji pustego wiersza jako ekstrawaganckiego sposobu wyra\u017cania s\u0142ownika \u2013 tym razem \u201es\u0142ownik\u201d jest bezpo\u015brednio zakodowany w postaci atrybut\u00f3w elementu g\u0142\u00f3wnego. W zwi\u0105zku z tym ustalony zestaw nazw atrybut\u00f3w na elemencie staje si\u0119 nieokre\u015blony i dynamiczny. Co wi\u0119cej, st\u0105d wida\u0107, \u017ce wszystko, co tak naprawd\u0119 chcia\u0142 wyrazi\u0107 autor, to prosty sk\u0142adnik \u201eklucz-warto\u015b\u0107\u201d, ale zamiast tego podj\u0105\u0142 ca\u0142kowicie dziwn\u0105 decyzj\u0119, by zastosowa\u0107 XML, wymuszaj\u0105c wykorzystanie pojedynczego pustego elementu tylko jako prefiksu do u\u017cycia sk\u0142adni atrybut\u00f3w. I takie schematy zdarzaj\u0105 mi si\u0119 bardzo cz\u0119sto.<\/p>\n<pre><code class=\"xml\">John\n  London<\/code><\/pre>\n<p>\nTo ju\u017c troch\u0119 lepiej, ale teraz klucze s\u0105 z jakiego\u015b powodu metadanymi, a warto\u015bci nie. Do\u015b\u0107 dziwny spos\u00f3b patrzenia na s\u0142owniki. Je\u015bli usuniemy wszystkie tagi i atrybuty, po\u0142owa informacji zostanie utracona.<\/p>\n<p>Poprawne wyra\u017cenie s\u0142ownika w XML powinno wygl\u0105da\u0107 mniej wi\u0119cej tak:<\/p>\n<pre><code class=\"xml\">Nazwa\n    John\n  \n  \n    Miasto\n    London<\/code><\/pre>\n<p>\nAle je\u015bli ludzie podj\u0119li dziwn\u0105 decyzj\u0119, by stosowa\u0107 XML jako format danych, a nast\u0119pnie za jego pomoc\u0105 porz\u0105dkowa\u0107 s\u0142ownik, to musz\u0105 rozumie\u0107, \u017ce to, co robi\u0105, jest niew\u0142a\u015bciwe i niewygodne. Jeszcze cz\u0119\u015bciej projektanci b\u0142\u0119dnie wybieraj\u0105 XML do budowy swoich aplikacji. Ale jeszcze cz\u0119\u015bciej pogarszaj\u0105 sytuacj\u0119 bezsensownym stosowaniem XML w jednym z opisanych powy\u017cej form, ignoruj\u0105c fakt, \u017ce XML do tego po prostu si\u0119 nie nadaje.<\/p>\n<p><b>Najgorszy schemat XML?<\/b> Przy okazji, nagroda za <i>najgorszy schemat XML, jaki kiedykolwiek widzia\u0142em,<\/i> przypad\u0142 formatowi pliku konfiguracyjnego automatycznego przydzielania zasob\u00f3w dla telefon\u00f3w VoIP Polycom. Takie pliki wymagaj\u0105 pobierania plik\u00f3w XML \u017c\u0105dania przez TFTP, kt\u00f3re\u2026 C\u00f3\u017c, oto fragment jednego z takich plik\u00f3w:<\/p>\n<pre><code class=\"xml\">&lt;softkey\n        softkey.feature.directories=\"0\"\n        softkey.feature.buddies=\"0\"\n        softkey.feature.forward=\"0\"\n        softkey.feature.meetnow=\"0\"\n        softkey.feature.redial=\"1\"\n        softkey.feature.search=\"1\"\n\n        softkey.1.enable=\"1\"\n        softkey.1.use.idle=\"1\"\n        softkey.1.label=\"Foo\"\n        softkey.1.insert=\"1\"\n        softkey.1.action=\"...\"\n\n        softkey.2.enable=\"1\"\n        softkey.2.use.idle=\"1\"\n        softkey.2.label=\"Bar\"\n        softkey.2.insert=\"2\"\n        softkey.2.action=\"...\" \/&gt;<\/code><\/pre>\n<p>\nTo nie jest czyj\u015b nieudany \u017cart. I to nie jest moja wymy\u015blona historia:<\/p>\n<ul>\n<li>Elementy s\u0105 po prostu u\u017cywane jako prefiksy do do\u0142\u0105czania atrybut\u00f3w, kt\u00f3re same w sobie maj\u0105 hierarchiczne nazwy.\n<\/li>\n<li>Je\u015bli trzeba przypisa\u0107 warto\u015bci kilku instancjom rekordu okre\u015blonego typu, nale\u017cy u\u017cy\u0107 nazw atrybut\u00f3w, <i>kt\u00f3re maj\u0105 indeksy.<\/i>.\n<\/li>\n<li>Ponadto atrybuty, kt\u00f3re zaczynaj\u0105 si\u0119 od <code>softkey.<\/code>, nale\u017cy umieszcza\u0107 na elementach <code>&lt;softkey\/&gt;<\/code>, atrybuty, kt\u00f3re zaczynaj\u0105 si\u0119 od <code>feature.<\/code>, nale\u017cy umieszcza\u0107 na elementach <code>&lt;feature\/&gt;<\/code> itd., mimo \u017ce wygl\u0105da to zupe\u0142nie na zbyteczne i na pierwszy rzut oka absurdalne.\n<\/li>\n<li>Wreszcie, je\u015bli mieli\u015bcie nadziej\u0119, \u017ce pierwszy komponent nazwy atrybutu zawsze b\u0119dzie odpowiada\u0142 nazwie elementu \u2014 nic z tego! Na przyk\u0142ad atrybuty <code>up.<\/code> powinny by\u0107 do\u0142\u0105czane do <code>&lt;userpreferences\/&gt;<\/code>. Kolejno\u015b\u0107 do\u0142\u0105czania nazw atrybut\u00f3w do element\u00f3w jest dowolna i praktycznie ca\u0142kowicie chaotyczna.\n<\/li>\n<\/ul>\n<p>\n<b>Dokumenty lub dane<\/b>. Co jaki\u015b czas kto\u015b robi ca\u0142kowicie dziwne rzeczy, pr\u00f3buj\u0105c por\u00f3wnywa\u0107 XML i JSON, \u2014 i tym samym pokazuj\u0105c, \u017ce nie rozumie ani jednego, ani drugiego. XML to j\u0119zyk znacznik\u00f3w dokument\u00f3w. JSON to z kolei format danych strukturalnych, wi\u0119c por\u00f3wnywanie ich ze sob\u0105 jest jak pr\u00f3ba por\u00f3wnania ciep\u0142ego z mi\u0119kkim.<\/p>\n<p>Zrozumienie tego pomo\u017ce poj\u0119cie r\u00f3\u017cnicy mi\u0119dzy <i>dokumentami a danymi.<\/i>Jako analogi\u0119 XML mo\u017cna umownie wzi\u0105\u0107 maszynowo czytelny dokument. Chocia\u017c jest on przeznaczony do odczytu przez maszyn\u0119, metaforycznie odnosi si\u0119 do dokument\u00f3w i z tej perspektywy jest w\u0142a\u015bciwie por\u00f3wnywalny z dokumentami formatu PDF, kt\u00f3re najcz\u0119\u015bciej nie s\u0105 maszynowo czytelne. <\/p>\n<p>Na przyk\u0142ad w XML kolejno\u015b\u0107 element\u00f3w ma znaczenie. A w JSON kolejno\u015b\u0107 par 'klucz-warto\u015b\u0107' wewn\u0105trz obiekt\u00f3w nie ma sensu i nie jest okre\u015blona. Je\u015bli chcesz uzyska\u0107 nieuporz\u0105dkowany s\u0142ownik par 'klucz-warto\u015b\u0107', faktyczna kolejno\u015b\u0107, w kt\u00f3rej elementy wyst\u0119puj\u0105 w tym pliku, nie ma znaczenia. Mo\u017cesz jednak stworzy\u0107 z tych danych wiele r\u00f3\u017cnych <i>dokument\u00f3w,<\/i>poniewa\u017c w dokumencie istnieje okre\u015blona kolejno\u015b\u0107. Metaforycznie jest to analogia dokumentu na papierze, chocia\u017c nie ma on fizycznych rozmiar\u00f3w w przeciwie\u0144stwie do druku lub pliku PDF.<\/p>\n<p>W moim przyk\u0142adzie w\u0142a\u015bciwego przedstawienia s\u0142ownika w j\u0119zyku XML pokazano kolejno\u015b\u0107 element\u00f3w w s\u0142owniku, w przeciwie\u0144stwie do przedstawienia w j\u0119zyku JSON. Nie mog\u0119 zignorowa\u0107 tej kolejno\u015bci: taka linearno\u015b\u0107 jest pierwotnie charakterystyczna dla modelu dokument\u00f3w i formatu XML. Kto\u015b przy interpretacji tego dokumentu XML mo\u017ce postanowi\u0107 zignorowa\u0107 t\u0119 kolejno\u015b\u0107, ale dyskusja na ten temat jest bezcelowa, poniewa\u017c ten temat wychodzi poza ramy dyskusji o samym formacie. Co wi\u0119cej, je\u015bli przekszta\u0142cimy dokument w formie przegl\u0105darki, do\u0142\u0105czaj\u0105c do niego kaskadow\u0105 tabel\u0119 styl\u00f3w, mo\u017cna zobaczy\u0107, \u017ce elementy s\u0142ownika uk\u0142adaj\u0105 si\u0119 w okre\u015blonej kolejno\u015bci, a nie w \u017cadnej innej.<\/p>\n<p>Innymi s\u0142owy, s\u0142ownik (fragment ustrukturyzowanych danych) mo\u017ce by\u0107 przekszta\u0142cony w <i>n<\/i> r\u00f3\u017cne mo\u017cliwe dokumenty (w formacie XML, PDF, na papierze itp.), gdzie <i>n<\/i> \u2014 liczba mo\u017cliwych kombinacji element\u00f3w w s\u0142owniku, nie uwzgl\u0119dniamy jeszcze innych mo\u017cliwych zmiennych.<\/p>\n<p>Jednocze\u015bnie wynika z tego, \u017ce je\u015bli chcesz przekaza\u0107 jedynie dane, u\u017cywanie dokumentu do odczytu maszynowego b\u0119dzie nieskuteczne. Wykorzystuje model, kt\u00f3ry w tym przypadku jest zb\u0119dny, jedynie przeszkadza. Co wi\u0119cej, aby wydoby\u0107 dane \u017ar\u00f3d\u0142owe, trzeba b\u0119dzie napisa\u0107 program. Raczej nie ma sensu u\u017cywa\u0107 XML do czego\u015b, co na pewnym etapie nie b\u0119dzie formatowane jako dokument (powiedzmy, za pomoc\u0105 CSS lub XSLT, lub obu), poniewa\u017c to jest g\u0142\u00f3wny (je\u015bli nie jedyny) pow\u00f3d, aby pozosta\u0107 przy modelu dokumentu.<\/p>\n<p>Co wi\u0119cej, poniewa\u017c w XML nie ma poj\u0119cia liczb (ani wyra\u017ce\u0144 logicznych, ani innych typ\u00f3w danych), wszystkie liczby przedstawione w tym formacie s\u0105 traktowane wy\u0142\u0105cznie jako tekst dodatkowy. Aby wydoby\u0107 dane, nale\u017cy zna\u0107 struktur\u0119 oraz jej powi\u0105zanie z odpowiednimi danymi. Nale\u017cy tak\u017ce wiedzie\u0107, kiedy w kontek\u015bcie dany element tekstu przedstawia liczb\u0119, kt\u00f3r\u0105 nale\u017cy przekszta\u0142ci\u0107 w liczb\u0119, itd.<\/p>\n<p>Proces wyci\u0105gania danych z dokument\u00f3w XML nie r\u00f3\u017cni si\u0119 zbytnio od rozpoznawania zeskanowanych dokument\u00f3w, kt\u00f3re zawieraj\u0105 na przyk\u0142ad tabelki, sk\u0142adaj\u0105ce si\u0119 z wielu stron danych liczbowych. Tak, technicznie jest to mo\u017cliwe, ale nie jest to najbardziej optymalna droga \u2013 chyba \u017ce w skrajnych sytuacjach, gdy nie ma \u017cadnych innych opcji. Rozs\u0105dniejszym rozwi\u0105zaniem jest po prostu znalezienie cyfrowej kopii oryginalnych danych, kt\u00f3re nie s\u0105 osadzone w modelu dokumentu, w kt\u00f3rym dane s\u0105 po\u0142\u0105czone z ich konkretnym tekstowym przedstawieniem.<\/p>\n<p>Nie dziwi mnie, \u017ce XML jest popularny w biznesie. Powodem tego jest fakt, \u017ce format dokument\u00f3w (papierowych) jest zrozumia\u0142y i znany dla biznesu, kt\u00f3ry chce dalej korzysta\u0107 z dobrze znanego i wygodnego modelu. Z tego samego powodu w biznesie zbyt cz\u0119sto korzysta si\u0119 z dokument\u00f3w w formacie PDF zamiast z bardziej odpowiednich do przetwarzania maszynowego format\u00f3w \u2013 poniewa\u017c wci\u0105\u017c s\u0105 one zwi\u0105zane z koncepcj\u0105 wydrukowanej strony o okre\u015blonym fizycznym rozmiarze. Dotyczy to nawet tych dokument\u00f3w, kt\u00f3re z pewno\u015bci\u0105 nigdy nie b\u0119d\u0105 drukowane (na przyk\u0142ad plik PDF dokumentacji rejestru licz\u0105cy 8000 stron). Z tej perspektywy u\u017cycie XML w biznesie jest zasadniczo wyrazem skevomorfizmu. Ludzie rozumiej\u0105 metaforyczn\u0105 ide\u0119 wydrukowanej strony o ograniczonym rozmiarze i wiedz\u0105, jak tworzy\u0107 procesy biznesowe na podstawie papierowych dokument\u00f3w. Je\u015bli to jest twoim punktem odniesienia, dokumenty bez ograniczonego fizycznego rozmiaru, kt\u00f3re s\u0105 maszynowo czytelne \u2013 dokumenty XML \u2013 stanowi\u0105 innowacj\u0119, b\u0119d\u0105c jednocze\u015bnie znajomym i komfortowym odpowiednikiem dokumentu. Co nie zmienia faktu, \u017ce pozostaj\u0105 one b\u0142\u0119dnym i nadmiernie skevomorficznym sposobem przedstawiania danych.<\/p>\n<p>Do tej pory jedynymi schematami XML, kt\u00f3re mog\u0119 rzeczywi\u015bcie uzna\u0107 za poprawne zastosowanie tego formatu, s\u0105 XHTML oraz DocBook.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/475474\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042f\u0437\u044b\u043a XML \u0431\u044b\u043b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0432 1996 \u0433\u043e\u0434\u0443. \u0415\u0434\u0432\u0430 \u043e\u043d \u0443\u0441\u043f\u0435\u043b \u043f\u043e\u044f\u0432\u0438\u0442\u044c\u0441\u044f, \u043a\u0430\u043a \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u043d\u0430\u0447\u0430\u043b\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0438 \u0434\u043b\u044f \u0442\u0435\u0445 \u0446\u0435\u043b\u0435\u0439, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0435\u0433\u043e \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043e\u043d \u0431\u044b\u043b \u043d\u0435 \u043b\u0443\u0447\u0448\u0438\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c. \u041d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u0434\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u0445\u0435\u043c XML, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043d\u0435 \u0434\u043e\u0432\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u0442\u044c, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0438 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0435 \u0438\u043b\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 XML. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":52641,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52640","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042f\u0437\u044b\u043a XML \u0431\u044b\u043b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0432 1996 \u0433\u043e\u0434\u0443.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47XML \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042f\u0437\u044b\u043a XML \u0431\u044b\u043b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0432 1996 \u0433\u043e\u0434\u0443.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-12T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:00:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47XML jest prawie zawsze stosowane niezgodnie z przeznaczeniem | ProHoster","description":"J\u0119zyk XML zosta\u0142 wynaleziony w 1996 roku.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47XML \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043f\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e | ProHoster","og:description":"\u042f\u0437\u044b\u043a XML \u0431\u044b\u043b \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d \u0432 1996 \u0433\u043e\u0434\u0443.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/xml-prakticheski-vsegda-primenyaetsya-ne-po-naznacheniyu","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-12T21:00:00+00:00","article:modified_time":"2020-02-18T11:00:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52640","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 04:19:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:11:32","updated":"2026-01-24 04:19:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/52640","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=52640"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/52640\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/52641"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=52640"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=52640"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=52640"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}