XML — ma’lumotni ierarxik, o‘qiladigan va platformadan mustaqil markup shaklida ifodalash uchun yaratilgan text format. To‘liq nomi Extensible Markup Language. XML foydalanuvchi yoki standart tomonidan belgilangan element va atributlardan foydalanadi.
XML document, configuration, web service, office format, metadata va boshqa tizimlarda qo‘llanadi.
Element
XML ma’lumot elementlar orqali ifodalanadi:
<user>
<name>Farrukh</name>
</user>
user parent element, name child element.
Element start tag va end tagga ega.
Bo‘sh element qisqa shaklda yozilishi mumkin:
<active />
Root element
XML documentda bitta root element bo‘lishi kerak.
Masalan:
<users>
<user />
<user />
</users>
Root tashqarisida ikkinchi top-level element bo‘lsa document well-formed hisoblanmaydi.
Atribut
Element start tagida atribut bo‘lishi mumkin:
<user id="15" active="true">
Atribut nomi unique bo‘lishi kerak.
Element va atribut orasidagi model tanlovi schema hamda semantikaga bog‘liq.
Text
Element ichida text content bo‘lishi mumkin.
Reserved characterlar escape qilinadi:
<→<;>ayrim contextda;&→&;- quote atribut ichida mos entity bilan.
Noto‘g‘ri escape documentni buzadi.
Well-formed XML
XML parser documentni qabul qilishi uchun asosiy sintaksis qoidalari bajariladi:
- bitta root;
- taglar to‘g‘ri yopilgan;
- nesting tartibli;
- atribut quote ichida;
- nomlar valid;
- character encoding to‘g‘ri.
Bu well-formed tushunchasi.
Schema’ga moslik bundan alohida.
Case sensitivity
XML element va atribut nomlari case-sensitive.
<User>
va:
<user>
ikki xil nom.
Naming convention contractda bir xil saqlanadi.
XML declaration
Document boshida declaration bo‘lishi mumkin:
<?xml version="1.0" encoding="UTF-8"?>
U XML versiyasi va encodingni ko‘rsatadi.
Actual byte encoding declaration bilan mos bo‘lishi kerak.
Namespace
Namespace turli vocabulary elementlarini ajratadi.
Masalan:
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
soap prefix local qisqartma.
Element identity prefix emas, namespace URI va local name kombinatsiyasiga bog‘liq.
Default namespace
Prefixsiz elementlar default namespace’ga tegishli bo‘lishi mumkin.
Atributlar uchun namespace qoidasi elementlardan farq qilishi ehtimoli bor.
Parser va XPath query namespace’ni aniq hisobga oladi.
Comment
Comment:
<!-- izoh -->
ko‘rinishida yoziladi.
Comment ichida ayrim character ketma-ketliklariga ruxsat yo‘q.
Sensitive ma’lumot commentga joylashtirilmaydi, chunki document bilan birga tarqaladi.
CDATA
CDATA section ichidagi text markup sifatida parse qilinmaydi:
<![CDATA[
<example>text</example>
]]>
CDATA contentni shifrlamaydi yoki xavfsiz qilmaydi.
U faqat escape ehtiyojini kamaytiradi.
Processing instruction
XML processing instruction parser yoki applicationga qo‘shimcha instruction berishi mumkin.
Uning semantikasi applicationga bog‘liq.
Har parser noma’lum instructionni bir xil qayta ishlamasligi mumkin.
DTD
Document Type Definition element va entitylarni belgilashi mumkin.
DTD internal yoki external bo‘lishi mumkin.
External entity resolution XXE xavfini yaratgani sabab ko‘p applicationlarda DTD o‘chiriladi.
XML Schema
XSD XML documentning:
- element;
- atribut;
- data type;
- required field;
- occurrence;
- constraint
qoidalarini belgilaydi.
Valid document well-formed bo‘lishi va schema talablariga mos kelishi kerak.
XPath
XPath XML daraxtidagi node’larni tanlash tili.
Masalan, ma’lum element yoki atributga yo‘l orqali murojaat qilinadi.
User input XPath expressionga concatenation qilinsa XPath Injection xavfi yuzaga kelishi mumkin.
XSLT
XSLT XML documentni boshqa XML, HTML yoki text formatga transform qiladi.
Template va XPath expressionlardan foydalanadi.
Untrusted stylesheet yoki external resource access security xavfini yaratishi mumkin.
Parser turlari
DOM parser butun documentni memory’da daraxt sifatida yaratadi.
Streaming parser elementlarni ketma-ket o‘qiydi.
Katta document uchun streaming memoryni kamaytiradi.
Schema, entity va depth limit ikkala modelda ham muhim.
XML va JSON
XML:
imkoniyatlariga ega.
JSON object va array modeli bilan web API’da sodda.
Tanlov data va interoperability talabiga bog‘liq.
Security
XML parser quyidagi xavflarni hisobga oladi:
- XXE;
- entity expansion;
- deep nesting;
- katta document;
- external schema;
- XInclude;
- signature wrapping;
- XPath injection.
Xavfsiz parser konfiguratsiyasi va size limit ishlatiladi.
Mixed content
XML element text va child elementlarni aralash saqlashi mumkin:
<p>Salom <strong>dunyo</strong>.</p>
Bu document formatlar uchun qulay, lekin oddiy object mappingni murakkablashtiradi. Text node’lar tartibi saqlanishi kerak.
Canonicalization
Digital signature uchun semantik jihatdan bir xil XMLning aniq byte representationi kerak. Namespace, atribut tartibi va bo‘sh joy canonicalization qoidalari bilan normallashtiriladi. Signaturani tekshiruvchi application aynan imzolangan node’ni ishlatadi.
Encoding
UTF-8 keng tarqalgan, ammo XML boshqa encodingni ham e’lon qilishi mumkin. Parser declaration va actual byte’ni mos tekshiradi. Noto‘g‘ri decoding security filter va application talqinini farqlashi mumkin.
Whitespace
XML elementlar orasidagi bo‘sh joy ayrim documentlarda semantik text node bo‘lishi mumkin. Pretty-print qilish mixed contentni o‘zgartirib yubormasligi kerak. Schema va application whitespace’ni qanday talqin qilishi farq qiladi.
Line ending
Turli platformadagi line ending parser uchun odatda normallashtiriladi. Digital signature va byte-level comparisonda canonical representation ishlatiladi.
Bog‘liq tushunchalar
Extensible Markup Language, Element, Attribute, Namespace, XML Schema, DTD, XPath, XSLT, XXE, SOAP, Markup language