Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВСхнология XSLTΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 14

Автор АлСксСй Π’Π°Π»ΠΈΠΊΠΎΠ²

[7] NmToken  ::= (NameChar)+

[8] NmTokens ::= NmToken (S NmToken)*

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. Π’ XML ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ сущности (EntityValue), Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° (AttValue), систСмный Π»ΠΈΡ‚Π΅Ρ€Π°Π» (SystemLiteral), Π° Ρ‚Π°ΠΊΠΆΠ΅ PubidLiteral β€” Π»ΠΈΡ‚Π΅Ρ€Π°Π», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ рСсурса (см. Ρ€Π°Π·Π΄Π΅Π» "ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сущности" Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Ρ‹):

[9] EntityValue    ::= '"' ([^%&"] | PEReference | Reference)* '"'

                       | "'" ([^%&'] | PEReference | Reference)* "'"

[10] AttValue      ::= '"' ([^<&"] | Reference)* '"'

                       | ([^<&"] | Reference)* "'"

[11] SystemLiteral ::= ('"' [^"]* '"')

                       | ("'" [^']* "'")

[12] PubidLiteral  ::= '"' PubidChar* '"'

                       | "'" (PubidChar - "'")*

[13] PubidChar     ::= #x20 | #xD | #xA

                       | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]

Π’ Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ… EntityValue ΠΈ AttValue допустимо ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ сущностСй (PEReference, Reference). Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ сущностСй ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ссылки Π½Π° сущности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² элСмСнтС Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠ°ΠΊ:

<song title="ΠšΡ€Π΅ΠΉΡΠ΅Ρ€ &quot;AΠ²popa&quot; "/>

Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ title ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ крСйсСр "Аврора". Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ посрСдством встроСнных сущностСй.

Π‘ΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠ΅ΠΉ CharData, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π»ΡŽΠ±Ρ‹Ρ… символов, ΠΊΡ€ΠΎΠΌΠ΅ символов "<" ΠΈ "&", ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² XML Π² качСствС ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ…. CharData Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² сСкциях CDATA, ΠΈ, соотвСтствСнно, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ "]]>".

[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)

XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния спСцификации

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ практичСски всС структурныС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ XML, ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ стандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ синтаксис для самих XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Им соотвСтствуСт продукция document:

[1] document ::= prolog element Misc

Π˜Ρ‚Π°ΠΊ, XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ состоит ΠΈΠ· ΠΏΡ€ΠΎΠ»ΠΎΠ³Π°, СдинствСнного ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ элСмСнта ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° Misc, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ инструкции ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Π΅ символы:

[27] Misc ::= Comment | PI | S

ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΠΌΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π½Π° ΠΏΡ€ΠΎΠ»ΠΎΠ³Π΅ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΎΠ»ΠΎΠ³ состоит ΠΈΠ· Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ XML (XMLDecl), Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (doctypedecl), инструкций, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»ΡŒΠ½Ρ‹Ρ… символов:

[22] prolog ::= XMLDeci? Misc* (doctypedecl Misc*)?

Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, насколько строго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ спСцификации XML ΠΈ собствСнным DTD-объявлСниям, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ (well-formed) ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ (valid).

Π₯ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ соотвСтствуСт всСм синтаксичСским ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ XML ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ограничСниям, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

β–‘ ΠΈΠΌΡ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π° элСмСнта Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ Π΅Π³ΠΎ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π³Π°;

β–‘ ΠΈΠΌΠ΅Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² элСмСнта Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ;

β–‘ Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ "<". Π­Ρ‚ΠΎΡ‚ символ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π½Π° ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ;

β–‘ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄ΠΎ использования;

β–‘ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΠΈ-ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Π»ΠΎΠΊΠ°Ρ… DTD;

β–‘ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ СдинствСнный ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ элСмСнт, содСрТащий всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’Π½Π΅ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, инструкции ΠΏΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, дСкларация XML ΠΈ Π±Π»ΠΎΠΊ DTD.

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΌΠΈ, ΠΈ ΠΏΡ€ΠΈ этом ΠΈΡ… логичСская структура Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ объявлСниям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (DTD).

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ прилоТСниями стандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π±Ρ‹Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹ΠΌ. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого трСбования ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π΅Π½ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса, ΠΈ для Π΅Π³ΠΎ логичСского прСдставлСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· стандартных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ. НапримСр, Ссли Π² элСмСнтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π°Π²Ρ‚ΠΎΡ€Π°, это Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ, ΠΎΠ΄Π½Π°ΠΊΠΎ, стандартными срСдствами Ρ‚Π°ΠΊΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π΅ удастся.

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΠΎΠ΅ соотвСтствиС Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ логичСской схСмС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ОбъявлСния Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ограничСния с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΌΠΎΠ³ Π±Ρ‹Ρ‚ΡŒ стандартным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синтаксичСскими, Π½ΠΎ ΠΈ сСмантичСскими процСссорами, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ синтаксис XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½ΠΎ ΠΈ "ΠΏΠΎΠ½ΡΡ‚ΡŒ" Π΅Π³ΠΎ смысл, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ.

ИспользованиС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ XML

Вряд Π»ΠΈ удастся ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ всС мноТСство ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π·Π°Π΄Π°Ρ‡, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ XML-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ области, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использованиС XML стало ΡƒΠΆΠ΅ классикой. Π§ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅ ΠΌΡ‹ рассмотрим нСсколько Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹Ρ… классов Π·Π°Π΄Π°Ρ‡ XML.

Пока ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ β€” нСсмотря Π½Π° всю ΠΌΠΎΡ‰ΡŒ XML, это Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ панацСя ΠΈ Π½Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ всСх ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ. НуТно Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ XML β€” это всСго лишь Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ описания Π΄Π°Π½Π½Ρ‹Ρ…. Π§Π΅Ρ‚ΠΊΠΈΠΉ, ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ, нСзависимый, ΠΌΠΎΡ‰Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ описания Π΄Π°Π½Π½Ρ‹Ρ… β€” Π½ΠΎ Π½Π΅ Π±ΠΎΠ»Π΅Π΅! XML-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ прСдставлСния, нСсоотвСтствия синтаксиса сСмантикС ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, Π½ΠΎ ΠΎΠ½ΠΈ Π½Π΅ смогут Ρ€Π΅ΡˆΠΈΡ‚ΡŒ чисто программистских Π·Π°Π΄Π°Ρ‡ β€” ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ эти Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. XML Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ особого смысла Π²Π½Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡.

Π’ качСствС Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ привСсти язык XSLT (язык Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹Ρ… стилСй для ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ, extensible Stylesheet Language for Transformations), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ находится Π² фокусС этой ΠΊΠ½ΠΈΠ³ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° XSLT, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ прСобразованиями, ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² прямом смыслС XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ логичСской схСмС языка XSLT. ΠŸΡ€ΠΈ этом прСобразования Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ Π±Ρ‹ смысла Π±Π΅Π· XSLT-процСссора, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌ. Они Π±Ρ‹Π»ΠΈ Π±Ρ‹ просто тСкстом.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π±Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΈΡ… сСмантику β€” это всС Ρ€Π°Π²Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° языкС программирования, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅ сущСствуСт трансляторов ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ². Они ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π±Π΅Π·ΡƒΠΏΡ€Π΅Ρ‡Π½ΠΎ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ, Π½ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ бСсполСзными.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΈ совсСм Π½Π΅ слоТный синтаксис XML ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ» ΠΌΠ½ΠΎΠ³ΠΈΠΌ компаниям Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ срСдства для синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ XML-парсСрами (Π°Π½Π³Π». parse β€” Ρ€Π°Π·Π±ΠΈΡ€Π°Ρ‚ΡŒ, Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ). Π’ настоящСС врСмя сущСствуСт Π΄Π²Π° основных Ρ‚ΠΈΠΏΠ° XML-парсСров: SAX-парсСры ΠΈ DOM-парсСры. Оба Ρ‚ΠΈΠΏΠ° ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… прилоТСниях β€” парсСры ΠΈΠ·Π±Π°Π²Π»ΡΡŽΡ‚ ΠΎΡ‚ нСобходимости ΠΏΠΈΡΠ°Ρ‚ΡŒ собствСнныС синтаксичСскиС Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹, ΡˆΡ‚ΡƒΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ спСцификации ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. ΠœΡ‹ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ опишСм ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих Ρ‚ΠΈΠΏΠΎΠ².

SAX-парсСры

SAX Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ΡΡ ΠΊΠ°ΠΊ Simple API for XML, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ "ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ интСрфСйс программирования для XML". Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ ΠΈ Π΅ΡΡ‚ΡŒ β€” идСология SAX ΠΎΡ‡Π΅Π½ΡŒ проста. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ слСдуСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚Ρƒ ΠΈΠ»ΠΈ ΠΈΠ½ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π° парсСр ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΡƒΠΆΠ΅ сам Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия. Π˜Π½Ρ‹ΠΌΠΈ словами, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° производится Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° события, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, ΠΊΠΎΠ³Π΄Π° парсСр встрСчаСт Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ элСмСнт, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ DOM-парсСров, SAX-парсСры Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, оставляя эту Π·Π°Π΄Π°Ρ‡Ρƒ Π½Π° совСсти программиста. ВслСдствиС этого SAX-парсСры ΠΌΠ΅Π½Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ ΠΊ рСсурсам, Ρ‡Ρ‚ΠΎ часто Π±Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹ΠΌ. Однако это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ сказываСтся Π½Π° ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ SAX-парсСры ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅Π·Π°ΠΌΠ΅Π½ΠΈΠΌΡ‹ΠΌΠΈ инструмСнтами для синтаксичСского Ρ€Π°Π·Π±ΠΎΡ€Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π—Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ, Π±ΠΎΠ»Π΅Π΅ слоТныС DOM-парсСры ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ SAX ΠΊΠ°ΠΊ ΡΠΎΡΡ‚Π°Π²Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ.

DOM-парсСры

Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ упомянуто Π°Π±Π·Π°Ρ†Π΅ΠΌ Π²Ρ‹ΡˆΠ΅, Π»Π΅Π³ΠΊΠΈΠ΅ SAX-парсСры Π½Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния Π₯МL-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π²ΠΏΠΎΠ»Π½Π΅ справСдливо считая, Ρ‡Ρ‚ΠΎ этим придСтся Π·Π°Π½ΡΡ‚ΡŒΡΡ программисту.

ВмСстС с Ρ‚Π΅ΠΌ, дрСвовидная организация Π΄Π°Π½Π½Ρ‹Ρ… Π² Π₯МL-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π°, Ρ‡Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ прСдставлСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ использовались Π² ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… прилоТСниях, совпадали практичСски Π² точности. Вакая ситуация ΠΏΡ€ΠΈΠ²Π΅Π»Π° ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ интСрфСйс Π½Π΅ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ сдСлано Π² SAX, Π° для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ.

Набор Ρ‚Π°ΠΊΠΈΡ… интСрфСйсов ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π½Π°Π·Π²Π°Π½ΠΈΠ΅ DOM (document object model, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Π°Ρ модСль Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°). DOM-парсСр ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, создавая ΠΏΡ€ΠΈ этом Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ΅ прСдставлСниС. ΠŸΡ€ΠΈ этом DOM содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ опрСдСлСния интСрфСйсов, Π½ΠΈΠΊΠΎΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ рСгулируя Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ самой ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. ВсС обращСния ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ структурС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, происходят посрСдством Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… интСрфСйсах.