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

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

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

<aaa:element

 xmlns:aaa="http://www.Π°Π°Π°.com"

 xmlns:bbb="http://www.bbb.com"

 xmlns:ccc="http://www.ccc.com">

 <aaa:anotherelement/>

 <ccc:element/>

 <bbb:anotherelement/>

 ...

</aaa:element>

Π’Π΅ΡΡŒΠΌΠ° ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования пространства ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ пространства ΠΈΠΌΠ΅Π½ Π² Π²ΠΈΠ΄Π΅

<элСмСнт xmlns="URI">

 ...

</элСмСнт>

позволяСт ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ прСфиксы Π² ΠΈΠΌΠ΅Π½Π°Ρ… элСмСнтов.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пСрСписан ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

<element xmlns="http://www.aaa.com">

 <anotherelement/>

 <ссс:element xmlns:ccc="http://www.ccc.com"/>

 <anotherelement xmlns="http://www.bbb.com"/>

 ...

</element>

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ пространство ΠΈΠΌΠ΅Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹ΠΌ использованиСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° xmlns Π² Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтах.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚

<element xmlns="http://www.Π°Π°Π°.com">

 <element/>

 <element xmlns="http://www.bbb.com">

  <element/>

  <element xmlns="http://www.ccc.com"/>

 </element>

</element>

эквивалСнтСн Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρƒ

<aaa:element

 xmlns:aaa="http://www.aaa.com"

 xmlns:bbb="http://www.bbb.com"

 xmlns:ccc="http://www.ccc.com">

 <aaa:element/>

 <bbb:element>

  <bbb:element/>

  <ccc:element/>

 </bbb:element>

</aaa:element>

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, пространства ΠΈΠΌΠ΅Π½ β€” это ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ выдСлСния Π² тСкстС XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° элСмСнтов ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ логичСским схСмам Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½ "пространство ΠΈΠΌΠ΅Π½" часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ эквивалСнт логичСской схСмС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° говорят "элСмСнт template ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ пространству ΠΈΠΌΠ΅Π½ XSLT", подразумСваСтся, Ρ‡Ρ‚ΠΎ элСмСнт template ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ Π² языкС XSLT ΠΈ описываСтся Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмС.

БинтаксичСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ опрСдСлСния пространств ΠΈΠΌΠ΅Π½, Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π½Π΅ Π² спСцификации XML, Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ β€” Π² тСхничСской Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ "Namespaces in XML" (пространства ΠΈΠΌΠ΅Π½ Π² XML), которая доступна ΠΏΠΎ адрСсу http://www.w3.org/TR/REC-xml-names. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒ эти ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ ΠΎΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΉ языка XML, ΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π° [NS1], [NS2] ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

ΠŸΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΡ NSAttName описываСт ΠΈΠΌΠ΅Π½Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… пространства ΠΈΠΌΠ΅Π½:

[NS1] NSAttName       ::= PrefixedAttName | DefaultAttName

[NS2] PrefixedAttName ::= 'xmlns:' NCName

[NS3] DefaultAttName  ::= 'xmlns'

Имя NCName, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ использовалось Π² ΠΏΡ€Π°Π²ΠΈΠ»Π΅ PrefixedAttName, β€” это имя прСфикса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для обозначСния принадлСТности элСмСнтов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌΡƒ пространству ΠΈΠΌΠ΅Π½. Π­Ρ‚ΠΎ имя отличаСтся ΠΎΡ‚ ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Name Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ двоСточия:

[NS4] NCName     ::= (Letter | '_') (NCNameChar)*

[NS5] NCNameChar ::= Letter | Digit | '.' | '-' | '_'

                     | CombiningChar | Extender

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°

ИспользованиС пространств ΠΈΠΌΠ΅Π½ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ измСняСт понятиС ΠΈΠΌΠ΅Π½ΠΈ. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Ссли www:template, xsl:template ΠΈΠ»ΠΈ просто template ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π΅ΠΌ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π΄ΠΎΠ»ΠΆΠ½Π° ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅ просто символьная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, которая Π΅Π³ΠΎ составляСт, Π° Π½Π΅Ρ‡Ρ‚ΠΎ большСС.

ВслСдствиС этого Π² спСцификациях Π³Ρ€ΡƒΠΏΠΏΡ‹ XML-языков вводится Ρ‚Π°ΠΊΠΎΠ΅ понятиС, ΠΊΠ°ΠΊ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ состоит ΠΈΠ· Π΄Π²ΡƒΡ… частСй: локальной части ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° пространства ΠΈΠΌΠ΅Π½, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ соотвСтствуСт прСфиксу ΠΈΠΌΠ΅Π½ΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ сСбС элСмСнт Π²ΠΈΠ΄Π°

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"/>

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ имя этого элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· локальной, части stylesheet ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° пространств ΠΈΠΌΠ΅Π½ http://www.w3.org/1999/XSL/Transform.

Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ, Ссли ΠΈΡ… Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ части Ρ€Π°Π²Π½Ρ‹ ΠΈ, ΠΏΡ€ΠΈ этом, ΠΎΠ½ΠΈ относятся ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ пространству ΠΈΠΌΠ΅Π½.

ΠŸΡ€Π΅Ρ„ΠΈΠΊΡ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ пространства ΠΈΠΌΠ΅Π½ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Π²Ρ‹Π±Ρ€Π°Π½ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (Ссли имССтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ объявлСниС), Π»ΠΈΠ±ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ.

Для описания ΠΈΠΌΠ΅Π½ элСмСнтов ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠ΅ прСдставлСниС, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ продукция QName:

[NS6] QName ::= (Prefix ':')? LocalPart

НСтСрминалу Prefix соотвСтствуСт прСфикс ΠΈΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡƒΡ‰Π΅Π½ вмСстС со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π·Π° Π½ΠΈΠΌ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‰ΠΈΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ, LocalPart соотвСтствуСт локальной части ΠΈΠΌΠ΅Π½ΠΈ.

[NS7] Prefix    ::= NCName

[NS8] LocalPart ::= NCName

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° XML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

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

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ вСрсии XML для опрСдСлСния логичСской структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² использовался Π½Π°Π±ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΈΠ», Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ DTD β€” Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (document type declaration). Помимо этого, Π² Π½Π°Ρ‡Π°Π»Π΅ мая 2001 Π³ΠΎΠ΄Π° Π±Ρ‹Π»Π° принята новая тСхничСская рСкомСндация языка ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ XML-схСма (XML Schema), которая Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π΅Ρ‚ Π»ΠΎΠ³ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, опрСдСляСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, количСство ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ основы логичСского построСния Π₯МL-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² с использованиСм DTD.

ДСкларация Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (DTD)

ДСкларация Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€Π°Π²ΠΈΠ»-ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ частности, DTD позволяСт Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°:

β–‘ ELEMENT β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ элСмСнта;

β–‘ ATTLIST β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ списка Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² элСмСнта;

β–‘ ENTITY β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сущности;

β–‘ NOTATION β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ.

Π­Ρ‚ΠΈ опрСдСлСния ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ с использованиСм конструкции DOCTYPE нСпосрСдствСнно Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅:

<!DOCTYPE advert [

<!-- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ -->

<!-- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ -->

ΠΈ Ρ‚.Π΄.

]>

Π”Ρ€ΡƒΠ³ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ опрСдСлСния Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° являСтся использованиС внСшнСго Ρ„Π°ΠΉΠ»Π°:

<!DOCTYPE advert SYSTEM "advert.dtd">

Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒ внСшниС опрСдСлСния Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ:

<!DOCTYPE advert SYSTEM "advert.dtd" [

<!-- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ -->

<!-- ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ -->

ΠΈ Ρ‚.Π΄.

]>

ДСкларация Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° опрСдСляСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ EBNF-ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠ΅ΠΉ:

[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S?

                     ('[' (markupdecl | DeclSep)* ']' S?)? '>'

Имя, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ†ΠΈΠΈ Name, которая ΠΈΠ΄Π΅Ρ‚ слСдом Π·Π° ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом DOCTYPE, опрСдСляСт имя ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠ³ΠΎ элСмСнта Π₯МL-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² ΠΊΠΎΡ€Π½Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡ‚ΠΎΡΡ‚ΡŒ элСмСнт advert.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (S ExternalID) ? ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ дСкларация Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π²ΠΎ внСшнСм источникС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Ρ„Π°ΠΉΠ»Π΅), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ описываСтся внСшним ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ExternalID.

[75] ExternalID ::= 'SYSTEM' S SystemLiteral

                    | 'PUBLIC' S PubidLiteral S SystemLiteral

Π’ случаС систСмного ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ("SYSTEM"), SystemLiteral опрСдСляСт URI опрСдСлСния Ρ‚ΠΈΠΏΠ° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ случаС ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°, ΠΊ этому ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ добавляСтся PubidLiteral, ΡΠΎΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ рСсурсС. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя DTD для Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°. НапримСр, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, написанныС Π½Π° языкС XHTML, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ объявлСниСм:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN"

 "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ с Ρ‚Π°ΠΊΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ, смоТСт ΠΏΠΎ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ создан Π½Π° языкС XHTML, Π° Π·Π½Π°Ρ‡ΠΈΡ‚, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π² соотвСтствии со стандартом этого языка. Если ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π² курсС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ XHTML, ΠΎΠ½Π° смоТСт Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡŽ Ρ‚ΠΈΠΏΠ° ΠΏΠΎ адрСсу http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd. ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² языках, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΡ… ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ распространСниС, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ логичСской структуры Π±ΡƒΠ΄Π΅Ρ‚ извСстСн ΠΈ Π±Π΅Π· Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ DTD.