Введение в XML DTD. DTD - Атрибуты

Как раз таковыми и являются. Причём XML сам по себе предусматривает расширяемость. Документы созданные с помощью этих языков могут быть «корректными (well-formed)» и «допустимыми (valid)».

С проверкой документа на корректность проблем не возникает: если ошибок не выскочило и всё отобразилось так, как мы хотели, то документ корректен. Например, если в HTML-документе написать что-то вроде « Привет! », то наш документ будет полностью корректен, но проигнорирован браузером. Почему? Потому что браузер ничего не знает о том, что это за «Z» такой. И если мы проверим наш документ на допустимость с помощью валидатора , то документ таковым признан не будет. А как об этом узнает валидатор и на основании чего он вынес такой вердикт?

Допустимость проверяется с помощью определения типа документа (DTD, document type definition). Например, для «строгого» HTML он выглядит так .

DTD может быть описан как внутри документа, так и вынесен в отдельный файл (аналогия с CSS: встроенные и подключаемые таблицы стилей).

Объявление DTD

Объявление DTD располагается перед первым (корневым) элементом документа, начинается с последовательности « ».

Внутреннее DTD описывается так:

Между квадратными скобками располагается содержимое DTD, так называемое внутреннее подмножество , например:

] >

Если DTD вынесено в отдельный файл (обычно имеющий расширение.dtd), то его объявление в документе записывается так:

Соответственно, в этом файле и прописываются все правила, так называемое внешнее подмножество .

Имя, указанное за словом « DOCTYPE » (в нашем случае « catalog »), должно соответствовать имени корневого элемента. То есть, XML-документ должен быть примерно таким:

Hello, world!

Вместо ключевого слова « SYSTEM » может быть использовано слово « PUBLIC », указывающее, что DTD применяется для широкого использования:

Внутренние и внешние подмножества могут быть заданы одновременно (опять же, аналогия с CSS):

] >

Здесь, сначала зачитывается содержимое файла « catalog.dtd », а потом содержимое, указанное внутри квадратных скобок.

Элементы документа

Элементы объявляются в DTD с помощью ключевого слова « ELEMENT », после которого следует имя элемента и его содержимое заключенное в круглые скобки:

Если у элемента есть дочерние элементы, то это записывается так:

что соответствует документу:

</book> </p><p>Если у элемента несколько <a href="/nedopustimyi-dochernii-element-instrukciya-po-importu-failov-ot.html">дочерних элементов</a>, то они перечисляются через запятую и должны следовать строго в указанном порядке:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> </p><p>Приведённый выше пример читается следующим образом. Элемент « book » должен содержать только один элемент « title », за которым должен следовать только один элемент « author ». Сами элементы « title » и « author » никаких элементов не содержат, а могут содержать лишь какой-нибудь текст.</p> <p>С помощью следующих <a href="/prikolnye-statusy-iz-simvolov-specialnye-simvoly-dlya-nika-zv-zdochki.html">специальных символов</a> можно определять количественное присутствие элемента:</p> <ul><li>Символ « * », следующий после элемента, означает, что элемент может присутствовать один или несколько раз, или не присутствовать вовсе(от нуля до + бесконечности)</li> <li>Символ « + », следующий после элемента, означает, что элемент может присутствовать один или несколько раз(от 1 до + бесконечности)</li> <li>Символ « ? », следующий после элемента, означает, что элемент может либо отсуствовать, либо присутствовать только один раз(0 или 1)</li> </ul> <!ELEMENT book (title, author)> ... <!ELEMENT book (title*, author)> ... <!ELEMENT book (title+, author)> ... <!ELEMENT book (title?, author)> <p>Если существует необходимость указать один из нескольких элементов (или title, или author — любой из них, но не оба), надо испольовать символ « | »:</p><p> <!ELEMENT book (title | author)> </p><p>Текст тоже равноправный участник игры. Ключевое слово « PCDATA » указывает на анализируемые символьные данные, поэтому любой текст содержащий символы разметки (« < », « > » и « & ») будет трактоваться как разметка. <a href="/sovmestnoe-ispolzovanie-simmetrichnyh-i-asimmetrichnyh-shifrov-chto-takoe.html">Совместное использование</a> текста и элементов называется <i>смешанным содержимым </i>. При объявлении смешанного содержимого, « PCDATA » необходимо указывать первым:</p><p> <!ELEMENT book (#PCDATA | title | author)> </p><p>Следующий фрагмент документа валиден вышеприведенному примеру:</p><p> <book> <title /> </book> <book> <author /> </book> <book> Нет данных </book> </p><p>Группы элементов заключаются в круглые скобки. Элемент « book » должен содержать либо текст, либо (один « title », один или неколько « author » и может быть один « pubyear » именно в таком порядке):</p><p> <!ELEMENT book (#PCDATA | (title, author+, pubyear?))> <!ELEMENT disc (#PCDATA | title)*> </p><p>Данному примеру соответствует следующий фрагмент XML-документа:</p><p> <disc /> <book> <title /> <author /> <author /> </book> <book> Нет данных </book> </p><p>Элемент может быть пустым. Такой элемент не может содержать не дочерних элементов ни текста (например, элемент « br » в HTML). Такой элемент задается с ключевым словом « EMPTY »:</p><p> <!ELEMENT photo EMPTY> </p><p>Элемент также может быть объявлен с ключевым словом « ANY » означающее, что элемент может содержать и элементы, и текст, и все это вместе, и даже быть пустым.</p> <h3>Атрибуты элементов</h3> <p>Элементы в XML-документе могут иметь атрибуты, которые записываются в виде « имя = значение » в открывающем или пустом тегах. Общее объявление атрибутов конкретного элемента начинается с ключевого слова « ATTLIST », после которого следует имя <a href="/oshibki-v-predopredel-nnyh-elementah-ustanovka-predopredelennyh-elementov-predopredelennyi-element-o.html">данного элемента</a> и объявления самих атрибутов:</p><p> <!ELEMENT title (#PCDATA)> <!ATTLIST title id CDATA #REQUIRED stock CDATA #IMPLIED> </p><p>Ключевое слово « REQUIRED » указывает на то, что атрибут обязателен. Ключевое слово « IMPLIED », наоборот, говорит, что атрибут необязателен.</p> <p>У атрибутов могут быть перечисленны разрешенные значения:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED> </p><p>Также может быть задано значение по-умолчанию:</p><p> <!ATTLIST title readonly (yes|no) #REQUIRED "yes"> pubyear CDATA #IMPLIED "2007"> </p><p>Атрибут может быть и константой, то есть у него может быть только то значение, которое заявлено в объявлении атрибута. Делается это с помощью ключевого слова « FIXED »:</p><p> <!ATTLIST title copyright <strong>#FIXED "udvikler"> </p><p>Тип атрибута « CDATA »позволяет использовать любые символы кроме « < », « > », « & », « " » и « " ». В случае использования, данные символы должны быть заменены на спецсимволы типа « < » и т.п. Внимание : в DTD ключевое слово « CDATA » имеет другое значение, чем раздел « CDATA » в XML-документе!</p> <p>Помимо типа CDATA, атрибуты могут иметь следующие типы:</p> <ul><li>NMTOKEN - может содержать только буквы, цифры, « . », « - », « _ » и « : »</li> <li>NMTOKENS - может содержать те же символы, что и « NMTOKEN », а также символы пробела, возврата каретки, перевода строки и табуляции</li> </ul> <!ATTLIST title id CDATA #REQUIRED stock NMTOKEN #IMPLIED publisher NMTOKENS #IMPLIED> <p>Еще один тип атрибута « ID » разрешает задавать те же значения, что и тип NMTOKEN, но начинаться значение должно либо с буквы, либо с « _ », либо с « : ». У любого элемента может быть только один атрибут с типом « ID ». Атрибут типа « ID » не может быть константой (объявляться как « FIXED »). Значение атрибута типа « ID » должно быть уникальным для всего XML-документа:</p><p> <!ELEMENT book (title, author)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ATTLIST title id ID #REQUIRED stock CDATA #IMPLIED> <!ATTLIST author id ID #REQUIRED city CDATA #IMPLIED> </p><p>Атрибут элемента может быть ссылкой на атрибут типа « ID » другого элемента. Для этого он объявляется как атрибут типа « IDREF ». Если атрибут должен ссылаться на атрибут типа « ID » нескольких элементов, то испольуется ключевое слово « IDREFS »:</p><p> <!ELEMENT book (title+, author, year, publisher)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT publisher (#PCDATA)> <!ATTLIST title id ID #REQUIRED> <!ATTLIST author id ID #REQUIRED> <!ATTLIST year ref IDREF #REQUIRED> <!ATTLIST publisher from IDREFS #REQUIRED> </p><p>В XML-документе это будет выглядить так:</p><p> <book> <title id="t1" /> <title id="t2" /> <title id="t3" /> <author id="a1" /> <year ref="t2" /> <publisher from="t1 t2 a1" /> </book> </p><h3>Объявление сущностей</h3> <p>Помимо элементов и их атрибутов, мы можем определить <i>сущности </i>, записываемые с помощью ключевого слова « ENTITY »:</p><p> <!ENTITY name "SuperMegaMaster"> </p><p> <userName>&name;</userName> </p><p>В результате чего, на место имени сущности « name », будет подставлено ее значение, в нашем случае — « SuperMegaMaster ».</p> <p>И для полноты нашего счастья, надо добавить, что атрибуты элементов могут иметь в качестве значения подобные сущности — <i>сущности-атрибуты </i>. Они тоже определяются с помощью ключевого слова « ENTITY », но имеют одно ограничение — они должны ссылаться на внешние неанализируемые сущности, определенные во внешнем подмножестве DTD:</p><p> <!DOCTYPE catalog [ <!ENTITY list SYSTEM "companyList.html" NDATA parse> <!ELEMENT catalog (user+)> <!ELEMENT user (name)> <!ATTLIST user company ENTITY #REQUIRED> <!ELEMENT name (#PCDATA)> ] > </p><p>В вышеприведённом примере, объявлена сущность « list », которая ссылается на внешний документ « companyList.html ». Ключевое слово « NDATA », говорит о том, что внешний документ неявляется XML-документом. Далее, для элемента « user » объявляется атрибут « company », который является обязательным и имеет тип « ENTITY », то есть ссылается на какую-либо сущность. Поскольку в нашем пример задана только одна сущность (« list »), то именно она и только она может быть значением атрибута « company » в XML-документе:</p><p> <catalog> <user company="list"> <name>SuperMegaMaster</name> </user> </catalog> </p><p>Осталось только понять, что означает « parse » в строке объявления сущности « list »? Когда используются неанализируемые данные, то есть те, которые не анализируются синтаксическим анализатором XML, хорошо было бы дать информацию приложению (использующему данный XML-документ), каким образом обработать эту сущность, если все-таки потребуется. Для этого нужно использовать нотацию, задаваемую ключевым словом « NOTATION » и дополнить наш DTD следующим образом:</p><p> <!NOTATION parse SYSTEM "iexlorer"> <!ENTITY list SYSTEM "companyList.html" NDATA parse> </p><p>Слово « parse » в объявлении сущности лист указывает на то, каким образом можно проанализировать файл « companyList.html » — найти нотацию с именем « parse » и следовать ее указаниям. В нашем случае, приложение может открыть MS InternetExplorer и загрузить в него документ « companyList.html ».</p> <p>Шпаргалка по <i><b>DTD </b> </i>.</p> <p><i><b>DTD </b> </i> – Один из способов формализованного описания схемы документа <i><b>XML </b> </i>, сделанного на языке, понятном программе-анализатору.</p> <p>В настоящее <a href="/sbilos-vremya-na-androide-chto-delat-ne-idet-vremya-na-telefone-pochemu.html">время идет</a> отказ от использования <i><b>DTD </b> </i> в пользу <i><b>XSD </b> </i> (<i><b><a href="/opisanie-dannyh-s-pomoshchyu-xml-opisanie-struktury-xml-dokumentov-yazyk-xml-schema.html">XML Schema</a> Definition </b> </i>), по ряду причин:</p> <ul><li><i><b>DTD </b> </i> использует отличный от <i><b>XML </b> </i> синтаксис.</li> <li>Отсутствует типизация узлов.</li> <li>Отсутствует поддержка пространств имён.</li> </ul><p>Тем не менее этот способ ещё широко применяется поскольку является более простым и удобным для описания <a href="/zanimatelnaya-radiotehnika-shemy-shemy-dlya-doma.html">несложных схем</a> документов.</p> <h4><i><u>КОНСТРУКЦИИ </u> </i><i><u>DTD </u> </i></h4> <p>Описание схемы состоит из объявлений разметки (<i><b>markup declaration </b> </i>), начинающихся с пары символов “<i><b><! </b> </i>” далее идет одно из слов:</p> <ul><li><i><b>ELEMENT </b> </i> (указывает, что объявляется <i><u>элемент </u> </i>)</li> <li><i><b>ATTLIST </b> </i> (<i><u>список атрибутов </u> </i>)</li> <li><i><b>ENTITY </b> </i> (<i><u>сущность </u> </i>)</li> <li><i><b>NOTATION </b> </i> (<i><u>обозначение </u> </i>)</li> </ul><p>объявление разметки заканчивается “<i><b>> </b> </i>”</p> <h4><i><u>ОБЪЯВЛЕНИЕ ТИПА ЭЛЕМЕНТА </u> </i></h4> <p>(должен быть описан каждый элемент документа)</p> <p><!ELEMENT имя_элемента содержимое></p> <p>Содержимое:</p> <ul><li><i><b>EMPTY </b> </i> – пустой (например <br />)</li> <li><i><b>ANY </b> </i> – любое содержимое (встречается редко)</li> <li><i><b>(</b><b>#PCDATA) </b> </i>– только символьные данные</li> <li><i><b>(список имен вложенных элементов ч.з. запятую) </b> </i> – вложенные элементы должны следовать в документе в том порядке, в котором они перечислены в объявлении. Объявляется только один уровень вложенности. Элементы можно группировать скобками.<br> Использование разделителя <b>“<i>| </i>” </b> между элементами указывает, что встречается один из разделенных элементов.<br> После элементов или скобок: <ul><li><b>“<i>? </i>” </b> – встречается 0 или 1 раз</li> <li><b>“<i>* </i>” </b> – 0 или несколько раз</li> <li><b>“<i>+ </i>” </b> – 1 или несколько раз</li> </ul></li> </ul><h4><i><u>ОБЪЯВЛЕНИЕ АТРИБУТОВ </u> </i></h4> <p>Атрибуты объявляются после объявления самого элемента. Все атрибуты одного элемента объявляются сразу, одним списком.</p> <p><!ATTLIST имя_элемента имя_атрибута тип свойства></p> <p>Для каждого атрибута записывается его имя, тип и признак обязательности.</p> <h6><i><u>Типы атрибутов: </u> </i></h6> <ul><li><i><b>CDATA </b> </i> – (<i><b>Character set of data </b> </i>) строка символов</li> <li><b>Список значений атрибута в скобках, перечисл чз “|” </b></li> <li><i><b>ID </b> </i> – уникальный идентификатор</li> <li><i><b>IDREF </b> </i> – идентификатор, содержащий одно из значений атрибута <i><b>ID </b> </i>, исп в качестве ссылки на др элементы</li> <li><i><b>IDREFS </b> </i> – идентификатор, содержащий набор значений атрибута типа <i><b>ID </b> </i>, перечисленных через пробел, так же исп в качестве ссылки сразу на несколько элементов.</li> <li><i><b>ENTITY </b> </i> – имя не проверяемой анализатором сущности (<i>объявленные в том же описании </i><b><i>DTD </i> </b>)</li> <li><i><b>ENTITIES </b> </i> – имена не проверяемых анализатором сущностей.</li> <li><i><b>NMTOKEN </b> </i> – слово, содержащее только символы, применяемые в именах (<i>имена др элементов или атрибутов, например чтобы ссылаться на них </i>)</li> <li><i><b>NMTOKENS </b> </i> – слова, перечисленные через пробелы</li> <li><i><b>NOTATION </b> </i> – обозначение (<i>обозначения, расшифрованные в описании </i><i>DTD </i>)</li> <li><i><b>NOTATIONS </b> </i> – список нотаций</li> </ul><h6><i><u>признак обязательности: </u> </i></h6> <ul><li><b>Значение атрибута по умолчанию </b> – указывается в кавычках и обозначает что атрибут необязателен.</li> <li><b># </b><b>REQUIRED </b> – атрибут надо обязательно записывать в элементе.</li> <li><b># </b><b>IMPLIED </b> – атрибут необязателен, у него нет значения по умолчанию.</li> <li><b># </b><b>FIXED </b> – у атрибута есть только одно значение, кот записывается тут же через пробел.</li> </ul><p>При исп пространства имен надо всегда указывать уточненное (<b>QName </b>), а не локальное имя.</p> <p>Атрибуты не входят в пространство имен по умолчанию.</p> <p>Атрибуты “<i><b>xml:lang </b> </i>” и “<i><b>xml:space </b> </i>” так же дол быть объявлены в <i><b>DTD </b> </i> в случае их применения</p> <h4><i><u>ОБЪЯВЛЕНИЕ СУЩНОСТЕЙ </u> </i></h4> <p>(начинаются с “&”, а заканчиваются “;”)</p> <p><b>Внутренние сущности </b> – задаются при объявлении сущности.</p> <p><!ENTITY имя_сущности “сущность”> — можно применять дальше в самом <i><b>DTD </b> </i> ниже объявления.</p> <p><b>Внешние сущности </b> – содержатся в <a href="/zashifrovalis-vse-faily-na-kompyutere-srok-deistviya-shifrovalnogo.html">отдельном файле</a> или встроены в программу-анализатор.</p> <p><!ENTITY имя_сущности SYSTEM “URI”></p> <p><!ENTITY имя_сущности PUBLIC “общеизвестное_объявление” “URI”></p> <p><b>Параметризованные сущности </b>– исп только внутри описания <i><b>DTD </b> </i></p> <p><!ENTITY % имя_сущности “сущность”></p> <p>Сущности делятся на разбираемые(<b><i>parsed </i> </b>) и не разбираемые (<b><i>unparsed </i> </b>). Разбираемые предст собой фрагмент документа <i><b>XML </b> </i> или целый документ и подлежат обработке программой-анализатором после подстановки. После подстановки разборки сущность становится частью <i><b>XML </b> </i> документа.</p> <p>Двоичный <a href="/kak-kod-na-yazyke-programmirovaniya-programmnyi-kod-primery-algoritmov-na.html">программный код</a>, чертеж, изображение и др. не надо обрабатывать средствами <i><b>XML </b> </i>, для этого сущность надо объявить не разбираемой. Для этого в конце объявления сущности делается пометка “<i><b>NDATA </b> </i>” и указывается обозначение (<i><b>notation </b> </i>) вставляемого объекта.</p> <p><!ENTITY file_pic SYSTEM "file.jpg" NDATA jpg></p> <h6><i><u>ПРЕДОПРЕДЕЛЕННЫЕ СУЩНОСТИ В </u> </i><i><u>XML </u> </i></h6> <!ENTITY lt ""> <!ENTITY amp "&"> <!ENTITY apos """> <!ENTITY quot """> <h4><i><u>ОБЪЯВЛЕНИЕ ОБОЗНАЧЕНИЯ (</u> </i><i><u>NOTATION) </u> </i></h4> <p>Объявляются подобно сущностям, также могут быть внутренними и внешними.</p> <p><b>Внутренняя </b></p> <p><!NOTATION имя_обозначения “расшифровка”></p> <p><b>Внешняя </b></p> <p><i><b>SYSTEM </b> </i> | <i><b>PUBLIC </b> </i> — в <a href="/aifon-4-razblokirovat-kak-tolko-ekstrennyi-pokazyvaet-s-pomoshchyu.html">данном случае</a> равнозначны т.к. в public не обязательно общеизвестная ссылка.</p> <h4><i><u>РАЗМЕЩЕНИЕ </u> </i><i><u>DTD </u> </i></h4> <p>Либо в отдельном файле “<i><b>*.dtd </b> </i>” указав его имя в кавычках во второй части пролога <i><b>DOCTYPE </b> </i>, либо включить описание непосредственно во вторую часть пролога, заключив его в <a href="/pryamougolnaya-skobka-na-klaviature-podrobno-o-tom-kak-sdelat-na.html">квадратные скобки</a>.</p> <p><!DOCTYPE root_element SYSTEM "schema.dtd"></p><p> <?xml version="1.0" standalone="yes" ?> <!DOCTYPE foo [ <!ELEMENT foo (#PCDATA)> ]> <foo> бла </foo></p> <p>В этой главе мы обсудим о атрибутах DTD. Атрибут дает <a href="/chto-ponimaetsya-pod-bitom-informacii-bolshaya-enciklopediya-nefti-i.html">больше информации</a> о элементе или более точно он определяет свойство элемента. <a href="/xml-tehnologiya-elementy-i-atributy-dlya-realizacii-veb-servisov.html">Атрибут XML</a> всегда в форме пары им-значения. Элемент может иметь любое число уникально атрибутов.</p> <p>Объявление атрибута очень много подобно к объявлениям элемента в много путей за исключением одного; вместо объявлять позволяемое содержание для элементов, вы объявляете список позволяемых атрибутов для каждого элемента. Эти списки вызваны объявлением ATTLIST.</p> <h2>Синтаксис</h2> <p>Основной синтаксис объявления атрибутов DTD следующим образом:</p><p> <!ATTLIST element-name attribute-name attribute-type attribute-value> </p><p>В вышеуказанном синтаксисе</p> <ul><p>Старт атрибутов DTD с <! Ключевое слово ATTLIST если элемент содержит атрибут.</p> <p><b>элемент-имя </b> определяет имя элемента к которому атрибут применяется.</p> <p><b>атрибут-имя </b> определяет имя атрибута который включен с элемент-именем.</p> <p><b>атрибут-тип </b> определяет тип атрибутов. Мы обсудим больше на этом в следующих разделах.</p> <p><b>атрибут со значением </b> принимает фикчированное значение которое атрибуты должны определить. Мы обсудим больше на этом в следующих разделах.</p> </ul><h2>Пример</h2> <p>Ниже простой пример для объявления атрибута в DTD:</p><p> <?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (name)> <!ELEMENT name (#PCDATA)> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id="123">Tanmay Patil</name> </address> </p><p>Препятствуйте нам пойти через вышеуказанный Код:</p> <ul><p>Начните с объявлением XML с следующим заявлением:</p><p> <?xml version = "1.0"?></p> <p>Немедленно после коллектора <a href="/sitemap-xml-vordpress-tak-kakoi-tip-ispolzovat-onlain-generatory-sitemap.html">XML тип</a> объявление документа, обыкновенно называемое DOCTYPE:</p><p> <!DOCTYPE address [ </p><p>DOCTYPE сообщает парсер что DTD связан с этим документом XML. Объявление DOCTYPE имеет восклицательный знак (!) в начале имени элемента.</p> <p>Следование тело DTD. Здесь мы объявляли элемент и атрибут:</p> </ul> <!ELEMENT address (name)> <!ELEMENT name (#PCDATA)> <p><i>Удостоверение личности </i> атрибута для <i>имени </i> элемента определено как:</p><p> <!ATTLIST name id CDATA #REQUIRED> </p><p>Здесь тип атрибута <i>CDATA </i> и свое значение <i>#REQUIRED </i>.</p> <h2>Правила объявления атрибута</h2> <ul><p>Все атрибуты используемые в документе XML необходимо объявить в определении типа документа (DTD) используя объявление Атрибут-Списка</p> <p>Атрибуты могут только появиться в старт или пустые бирки.</p> <p>Ключевое слово ATTLIST должно находиться в верхушке - случае</p> <p>Никакие двойные имена атрибута не будут позволены внутри список атрибута для, котор дали элемента.</p> </ul><h2>Типы атрибута</h2> <p>Объявляя атрибуты, вы можете определить как обработчик должен отрегулировать данные которые появляются в значение. Мы можем классифицировать атрибут печатаем внутри 3 главным образом категории на машинке:</p> <ul><p>Тип строки</p> <p>Типы Tokenized</p> <p>Перечисленные типы</p> </ul><p>Следовать таблица обеспечивает сводку <a href="/osobennosti-proverki-tranzistora-multimetrom-bez-vypaivaniya-kak.html">различных типов</a> атрибута:</p> <table class="table table-bordered"><tr><th>Тип </th> <th> Описание </th> </tr><tr><td>CDATA </td> <td>CDATA данные по характера (текст и не повышение цены). <i>Тип атрибута строки </i>. </td> </tr><tr><td>Удостоверение личности </td> <td>Это уникально обозначение атрибута. Оно не должен появиться больше чем раз. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>IDREF </td> <td>Оно использован для того чтобы снабдить ссылками удостоверение личности другого элемента. Оно использован для того чтобы установить элементы связь между. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>IDREFS </td> <td>Оно использован для того чтобы снабдить ссылками множественное удостоверение личности. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>РЕАЛЬНОСТЬ </td> <td>Она представляет внешнюю реальность в документе. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>РЕАЛЬНОСТИ </td> <td>Оно представляет список внешних реальностей в документе. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>NMTOKEN </td> <td>Оно подобен к CDATA и атрибут со значением состоит из действительного имени XML. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>NMTOKENS </td> <td>Оно подобен к CDATA и атрибут со значением состоит список действительного имени XML. <i>Тип атрибута Tokenized </i>. </td> </tr><tr><td>НОТАЦИЯ </td> <td>Элемент будет снабжен ссылками к объявленной нотации в <a href="/opredelenie-tipa-dokumenta-dtd-vvedenie-v-xml-dtd.html">документе DTD</a>. <i>Перечисленный тип атрибута </i>. </td> </tr><tr><td>Обозначение </td> <td>Оно позволяет определить специфический список значений где одно из значений должно соответствовать. <i>Перечисленный тип атрибута </i>. </td> </tr></table><h2>Объявление атрибута со значением</h2> <p>В пределах каждого объявления атрибута, вы должны определить как значение появится в документ. Вы можете определить если атрибут:, то</p> <ul><p>смогите иметь автоматически принимаемое значение</p> <p>смогите иметь фикчированное значение</p> <li><p>подразумевает</p> </ul><h3>Автоматически принимаемые значения</h3> <p>Он содержит автоматически принимаемое значение. Значения могут быть заключили в одиночные кавычки (") или двойные цитаты (")</p> <b>Синтаксис </b> <p>Следование синтаксис значения:</p><p> <!ATTLIST element-name attribute-name attribute-type "default-value"> </p><p>где значени по умолчанию-<i>значение </i> <a href="/css-selektory-pravila-znachenie-atributa-nachinaetsya-s-opredelennogo.html">определенный атрибут</a> со значением.</p> <b>Пример </b> <p>Следование простой пример объявления атрибута с автоматически принимаемым значением:</p><p> <?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (name)> <!ELEMENT name (#PCDATA)> <!ATTLIST name id CDATA "0"> ]> <address> <name id="123"> Tanmay Patil </name> </address> </p><p>В этом примере мы имеем элемент <i>имени </i> с <i>удостоверением личности </i> атрибута которого автоматически принимаемое значение <i>0 </i>. Автоматически принимаемое значение заключено в пределах двойных цитат.</p> <h3>ФИКЧИРОВАННЫЕ значения</h3> <p>ключевое слово #FIXED следовать фикчированным значением использовано когда вы хотите определить что атрибут со значением постоянн и не может быть изменен. Общяя польза фикчированных атрибутов определяет номера версии.</p> <b>Синтаксис </b> <p>Следование синтаксис фикчированных значений:</p><p> <!ATTLIST element-name attribute-name attribute-type #FIXED "value" > </p><p>где #FIXED определенный атрибут со значением.</p> <b>Пример </b> <p>Следование простой пример объявления атрибута с ФИКЧИРОВАННЫМ значением:</p><p> <?xml version="1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name="tutorialspoint"></company> </address> </p><p>В этом примере мы использовали #FIXED ключевого слова где оно показывает что значение «tutorialspoint» единственное значение для <i>имени </i> атрибута <company> элемента. Если мы пробуем изменить атрибут со значением после этого, то он дает ошибку.</p> <p>Следование инвалидный DTD:</p><p> <?xml version="1.0"?> <!DOCTYPE address [ <!ELEMENT address (company)*> <!ELEMENT company (#PCDATA)> <!ATTLIST company name NMTOKEN #FIXED "tutorialspoint"> ]> <address> <company name="abc">we are a free online teaching faculty</company> </address> </p><h3>НЕОБХОДИМЫЕ значения</h3> <p>Когда вы хотите определите что атрибут необходим, используйте ключевое слово #REQUIRED.</p> <b>Синтаксис </b> <p>Следование синтаксис #REQUIRED:</p><p> <!ATTLIST element-name attribute-name attribute-type #REQUIRED> </p><p>где #REQUIRED определенный тип атрибута.</p> <b>Пример </b> <p>Следование простой пример объявления <a href="/dtd---atributy.html">атрибута DTD</a> с ключевым словом #REQUIRED:</p><p> <?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (name)> <!ELEMENT name (#PCDATA)> <!ATTLIST name id CDATA #REQUIRED> ]> <address> <name id="123"> Tanmay Patil </name> </address> </p><p>В этом примере мы использовали ключевое слово #REQUIRED для того чтобы определить что <i>удостоверение личности </i> атрибута необходимо предусмотреть для <i>имени элемент- </i>имени</p> <h3>ПОДРАЗУМЕВАЕМЫЕ значения</h3> <p>Объявляя атрибуты вы должны всегда определять объявление значения. Если атрибут вы объявляете не имеет никакое автоматически принимаемое значение, то не имеет никакое фикчированное значение, и не требует, тогда вы должны объявить что атрибут как <i>подразумевали </i>. #IMPLIED ключевого слова использовано для того чтобы определить атрибут как <i>подразумевали </i>.</p> <b>Синтаксис </b> <p>Следование синтаксис #IMPLIED:</p><p> <!ATTLIST element-name attribute-name attribute-type #IMPLIED> </p><p>где #IMPLIED определенный тип атрибута.</p> <b>Пример </b> <p>Следование простой пример #IMPLIED</p><p> <?xml version = "1.0"?> <!DOCTYPE address [ <!ELEMENT address (name)> <!ELEMENT name (#PCDATA)> <!ATTLIST name id CDATA #IMPLIED> ]> <address> <name /> </address> </p><p>В этом примере мы использовали #IMPLIED ключевого слова по мере того как мы не хотим определить любые атрибуты, котор нужно включить в <i>имени </i> элемента. Оно опционный.</p> XML для описания подобных "самодеятельных" тэгов используются <i>схемы </i>. Они необходимы для того, чтобы:<ul><li>описать, что именно является разметкой;</li> <li>описать точно, что означает разметка.</li> </ul><p>Наиболее <a href="/luchshie-poiskovye-sistemy-interneta-na-russkom-yazyke-samye-izvestnye-poiskovye.html">известными языками</a> описания схем являются следующие:</p><ul><li>DTD (Document <i> </i> Type <i> </i> Definition) - язык определения типа документов, который первоначально использовался в качестве язык описания структуры SGML-документа.</li> <li> XDR (XML <i> </i> Data <i> </i> Reduced) – диалект схемы XML, разработанный Microsoft, который поддерживался в <a href="/kak-ochistit-vremennye-faily-internet-explorer-kak-pochistit-internet.html">Internet Explorer</a> 4 и 5 версий.</li> <li>XML Schema или просто XSD (<i>язык определения схем </i> XML) – рекомендация консорциума W3C с 2001 года.</li> </ul><p>Рассмотрим подробнее первые два из них. Третий язык описания схем рассматривается в <a href="/laboratornaya-rabota-po-informatike-na-temu-access-i-laboratornye.html">лабораторной работе</a> 11.</p> <h3>DTD схема</h3><p>Схема DTD предоставляет <i>шаблон </i> разметки документа, в котором указываются <i>наличие </i>, <i>порядок </i> <i>следования </i> и <i>расположение </i> <i>элементов </i> и их <i>атрибутов </i> в документе XML .</p><p>В рамках DTD модель содержимого XML документа можно описать следующим образом:</p><p>Каждый <i>элемент </i> документа может иметь один из типов:</p><table border="0" class="xml_table" cellpadding="2" cellspacing="1"><tr><th bgcolor="#d8d8d8"> <b>Содержание </b> </th> <th bgcolor="#d8d8d8"> <b>Синтаксис </b> </th> <th bgcolor="#d8d8d8"> <b>Комментарий </b> </th> </tr><tr><td bgcolor="#eaeaea" valign="top">Данные </td> <td bgcolor="#eaeaea" valign="top"><!ELEMENT имя (#PCDATA)> </td> <td bgcolor="#eaeaea" valign="top">Содержит только текстовые данные </td> </tr><tr><td bgcolor="#eaeaea" valign="top">Другие элементы </td> <td bgcolor="#eaeaea" valign="top"><span><!ELEMENT имя (дочерний элемент 1, дочерний элемент 2)> </span> </td> <td bgcolor="#eaeaea" valign="top">Содержит только дочерние элементы </td> </tr><tr><td bgcolor="#eaeaea" valign="top">Смешанное </td> <td bgcolor="#eaeaea" valign="top"><span><!ELEMENT имя (#PCDATA, дочерний элемент)*> </span> </td> <td bgcolor="#eaeaea" valign="top">Содержит комбинацию текстовых данных и дочерних элементов </td> </tr><tr><td bgcolor="#eaeaea" valign="top">EMPTY </td> <td bgcolor="#eaeaea" valign="top"><!ELEMENT имя EMPTY> </td> <td bgcolor="#eaeaea" valign="top">Ничего не содержит </td> </tr><tr><td bgcolor="#eaeaea" valign="top">ANY </td> <td bgcolor="#eaeaea" valign="top"><!ELEMENT имя ANY> </td> <td bgcolor="#eaeaea" valign="top">Может содержать текстовые данные или дочерние элементы </td> </tr></table><p>Атрибуты, находящиеся внутри тэгов документа, описываются отдельно с помощью синтаксиса:</p><p><!ATTList имя_элемента имя_атрибута1 (тип) значение_по_умолчанию …………………………………………………………………………………... имя_элемента имя_атрибутаN (тип) значение_по_умолчанию ></p><p>При этом атрибут в DTD может иметь один из трех типов:</p><ul><li>Строка</li> <li>Маркированные атрибут</li> <li>Атрибута с перечислением</li> </ul><p>Кроме типа атрибута можно также задавать и его модальность:</p><p>Рассмотрим в качестве примера описание атрибутов <i>строкового </i> типа для элемента, описывающего некоторое сообщение:</p><p><!ATTLIST message number CDATA #REQUIRED date CDATA #REQUIRED from CDATA #FIXED status CDATA #IMPLIED></p><p>Если этот элемент содержит атрибуты с <i>перечислением </i>, то их описание может выглядеть, например, следующим образом:</p><p><!ATTLIST message number ID #REQUIRED from CDATA #REQUIRED alert (low | normal | urgent) "normal"></p><p>Маркированных атрибуты элемента могут быть четырех типов:</p><p>И, наконец, в DTD можно использовать следующие индикаторы вхождения последовательностей:</p><table border="0" class="xml_table" cellpadding="2" cellspacing="1"><tr><th bgcolor="#d8d8d8"> <b>Символ </b> </th> <th bgcolor="#d8d8d8"> <b>Пример </b> </th> <th bgcolor="#d8d8d8"> <b>Описание </b> </th> </tr><tr><td bgcolor="#eaeaea" valign="top"> , </td> <td bgcolor="#eaeaea" valign="top">(a, b, c) </td> <td bgcolor="#eaeaea" valign="top">Последовательное использование элементов списка </td> </tr><tr><td bgcolor="#eaeaea" valign="top">| </td> <td bgcolor="#eaeaea" valign="top">(a | b | c) </td> <td bgcolor="#eaeaea" valign="top">Используется один из членов списка </td> </tr><tr><td bgcolor="#eaeaea" valign="top"> </td> <td bgcolor="#eaeaea" valign="top">date </td> <td bgcolor="#eaeaea" valign="top">Используется один и только один элемент </td> </tr><tr><td bgcolor="#eaeaea" valign="top"> ? </td> <td bgcolor="#eaeaea" valign="top"> subject ? </td> <td bgcolor="#eaeaea" valign="top">Необязательное использование (0 или 1 раз) </td> </tr><tr><td bgcolor="#eaeaea" valign="top">+ </td> <td bgcolor="#eaeaea" valign="top">paragraph+ </td> <td bgcolor="#eaeaea" valign="top">Используется один или несколько раз </td> </tr><tr><td bgcolor="#eaeaea" valign="top">* </td> <td bgcolor="#eaeaea" valign="top">brother* </td> <td bgcolor="#eaeaea" valign="top">Используется ноль или несколько раз </td> </tr></table><p>В качестве примера приведем DTD схему, описывающую структуру электронного почтового ящика:</p><p><!ELEMENT mailbox (message*)> <!ELEMENT message (head, body)> <!ATTLIST message uid CDATA #REQUIRED> <!ELEMENT head (from,to+, subject?, CC*, notify?) > <!ELEMENT from (#PCDATA)> <!ELEMENT to (#PCDATA)> <!ELEMENT subject (#PCDATA)> <!ELEMENT CC (#PCDATA)> <!ELEMENT notify EMPTY> <!ELEMENT body (#PCDATA)></p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div> <div class="comment_box" id="comments"> </div> </div> <div id="sidebar"> <div class="widget widget_nav_menu" id="nav_menu-2"> <div class="menu-mainmenu-container"> <ul id="menu-mainmenu-2" class="menu"> <li class="submenu"><a href="/category/internet/">Интернет</a> </li> <li class="submenu"><a href="/category/programs/">Программы</a> </li> <li class="submenu"><a href="/category/instructions/">Инструкции</a> </li> <li class="submenu"><a href="/category/browsers/">Браузеры</a> </li> <li class="submenu"><a href="/category/windows-10/">Windows 10</a> </li> <li class="submenu"><a href="/category/android/">Android</a> </li> <li class="submenu"><a href="/category/ios/">Ios</a> </li> <li class="submenu"><a href="/category/communication/">Связь</a> </li> </ul> </div> </div> <div class="widget"> <div class="heading star">Последние записи</div> <div class="popular_posts"> <div class="news_box"> <a href="/kak-sdelat-krasivyi-shrift-v-skaipe-specialnye-vozmozhnosti.html" class="thumb"><img width="95" height="95" src="/uploads/c1afcb15cc18934c2083c812c47be1aa.jpg" class="attachment-mini size-mini wp-post-image" alt="Специальные возможности в скайп" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/kak-sdelat-krasivyi-shrift-v-skaipe-specialnye-vozmozhnosti.html">Специальные возможности в скайп</a> </div> </div> </div> <div class="news_box"> <a href="/nazvanie-dlya-torgovyh-i-proizvodstvennyh-kompanii-nastroika-podklyucheniya-k.html" class="thumb"><img width="95" height="95" src="/uploads/d460c0cdd6e5b902fa0045dc91ae3933.jpg" class="attachment-mini size-mini wp-post-image" alt="Настройка подключения к интернету по PPPoE в Windows XP Сведения об исправлении" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/nazvanie-dlya-torgovyh-i-proizvodstvennyh-kompanii-nastroika-podklyucheniya-k.html">Настройка подключения к интернету по PPPoE в Windows XP Сведения об исправлении</a> </div> </div> </div> <div class="news_box"> <a href="/video-urok-po-ustanovke-operacionnoi-sistemy-windows-cherez-bios-ili-bios.html" class="thumb"><img width="95" height="95" src="/uploads/e8e7f51b4651c595ca3e98372d23557b.jpg" class="attachment-mini size-mini wp-post-image" alt="Как поменять винду на старом биосе" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/video-urok-po-ustanovke-operacionnoi-sistemy-windows-cherez-bios-ili-bios.html">Как поменять винду на старом биосе</a> </div> </div> </div> <div class="news_box"> <a href="/kak-snyat-kopiyu-zhestkogo-diska-sozdanie-tochnoi-kopii.html" class="thumb"><img width="95" height="95" src="/uploads/8af0adc90f179ac888910383b161320a.jpg" class="attachment-mini size-mini wp-post-image" alt="Создание точной копии системы со всеми программами при помощи Acronis True Image" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/kak-snyat-kopiyu-zhestkogo-diska-sozdanie-tochnoi-kopii.html">Создание точной копии системы со всеми программами при помощи Acronis True Image</a> </div> </div> </div> <div class="news_box"> <a href="/portativnyi-akkumulyator-10400-mah-vneshnie-akkumulyatory-xiaomi.html" class="thumb"><img width="95" height="95" src="/uploads/4e7448a706361c57dce78ae0692750b6.jpg" class="attachment-mini size-mini wp-post-image" alt="Внешние аккумуляторы Xiaomi" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/portativnyi-akkumulyator-10400-mah-vneshnie-akkumulyatory-xiaomi.html">Внешние аккумуляторы Xiaomi</a> </div> </div> </div> </div> </div> <div class="widget"> <div class="heading star">Популярное</div> <div class="popular_posts"> <div class="news_box"> <a href="/kak-dobavit-fotki-v-oblako-chto-takoe-oblachnoe-hranilishche-i-zachem-ono.html" class="thumb"><img width="95" height="95" src="/uploads/fcc4d2d44087b5a90a6e78dc82bc824b.jpg" class="attachment-mini size-mini wp-post-image" alt="Что такое "Облачное хранилище" и зачем оно нужно?" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/kak-dobavit-fotki-v-oblako-chto-takoe-oblachnoe-hranilishche-i-zachem-ono.html">Что такое "Облачное хранилище" и зачем оно нужно?</a> </div> </div> </div> <div class="news_box"> <a href="/ne-obnovlyaetsya-xiaomi-puti-resheniya-problemy-obnovlenie-xiaomi-cherez-tri-tochki-miui-ne.html" class="thumb"><img width="95" height="95" src="/uploads/a7bef9d8b84da40907cac709e07fa301.jpg" class="attachment-mini size-mini wp-post-image" alt="Обновление Xiaomi через три точки Miui не удалось загрузить обновление" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/ne-obnovlyaetsya-xiaomi-puti-resheniya-problemy-obnovlenie-xiaomi-cherez-tri-tochki-miui-ne.html">Обновление Xiaomi через три точки Miui не удалось загрузить обновление</a> </div> </div> </div> <div class="news_box"> <a href="/gromko-rabotaet-kuler-na-noutbuke-chto-delat-esli-silno-shumit.html" class="thumb"><img width="95" height="95" src="/uploads/8e9e00cec38fd86a3217cf3e6e8e1646.jpg" class="attachment-mini size-mini wp-post-image" alt="Что делать, если сильно шумит кулер" sizes="(max-width: 95px) 100vw, 95px" / loading=lazy></a> <div class="element"> <div class="title"> <a href="/gromko-rabotaet-kuler-na-noutbuke-chto-delat-esli-silno-shumit.html">Что делать, если сильно шумит кулер</a> </div> </div> </div> </div> </div> <div class="widget"> <div class="heading">Новости</div> <div class="business_news"> <div class="news"> <div class="date">2024-05-29 01:42:15</div> <a href="/samye-deshevye-internet-magaziny-kitaya-kitaiskie-internet-magaziny-pokupki-iz-kitaya-cherez-internet-n.html" class="title">Китайские интернет-магазины Покупки из китая через интернет на русском</a> </div> <div class="news"> <div class="date">2024-05-29 01:42:15</div> <a href="/obzor-naushnikov-beats-tour-otlichnoe-mobilnoe-reshenie-obzor-naushnikov.html" class="title">Обзор наушников Beats Tour: отличное мобильное решение Beats Mixr: складные и легкие наушники</a> </div> <div class="news"> <div class="date">2024-05-29 01:42:15</div> <a href="/aksessuary-dlya-fitnes-brasletov-fitnes-braslet-xiaomi-mi-band.html" class="title">Фитнес-браслет Xiaomi Mi Band: описание, инструкция, отзывы Браслет мии</a> </div> <div class="news"> <div class="date">2024-05-28 01:38:25</div> <a href="/yandeks-navigator-v-ispanii-kakie-prilozheniya-sleduet-skachat-pered.html" class="title">Какие приложения следует скачать перед поездкой в Испанию?</a> </div> <div class="news"> <div class="date">2024-05-27 01:38:39</div> <a href="/huavei-gr-5-huawei-gr3-sravni-ceny---kupi-vygodno-apparatnaya-platforma-i-proizvoditelnost.html" class="title">Huawei GR3 • Сравни цены - купи выгодно!</a> </div> </div> </div> <div class="widget ai_widget" id="ai_widget-5"> <div class='dynamic dynamic-13' style='margin: 8px 0; clear: both;'> </div> </div> </div> </div> </div> </div> <div id="footer"> <div class="fixed"> <div class="inner"> <div class="footer_l"> <a href="/" class="logo" style="background:none;">viws.ru</a> <div class="copyright"> <p>viws.ru - Все о современной технике. Поломки, соцсети, интернет, вирусы</p> <p><span>© 2024 - Все права защищены</span></p> </div> </div> <div class="footer_c"> <ul id="menu-topmenu-1" class="nav"> <li><a href="/feedback.html">Контакты</a></li> <li><a href="">О сайте</a></li> <li><a href="">Реклама на сайте</a></li> </ul> <div class="footer_menu"> <ul id="menu-nizhnee-1" class=""> <li id="menu-item-"><a href="/category/internet/">Интернет</a></li> <li id="menu-item-"><a href="/category/programs/">Программы</a></li> <li id="menu-item-"><a href="/category/instructions/">Инструкции</a></li> <li id="menu-item-"><a href="/category/browsers/">Браузеры</a></li> </ul> <ul id="menu-nizhnee-2" class=""> <li id="menu-item-"><a href="/category/internet/">Интернет</a></li> <li id="menu-item-"><a href="/category/programs/">Программы</a></li> <li id="menu-item-"><a href="/category/instructions/">Инструкции</a></li> <li id="menu-item-"><a href="/category/browsers/">Браузеры</a></li> </ul> </div> </div> </div> </div> </div> </div> <script type="text/javascript">jQuery(function($) { $(document).on("click", ".pseudo-link", function(){ window.open($(this).data("uri")); } );} );</script> <script type='text/javascript' src='https://viws.ru/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.9.2'></script> <script type='text/javascript' src='https://viws.ru/wp-content/plugins/table-of-contents-plus/front.min.js?ver=1509'></script> <script type='text/javascript' src='https://viws.ru/wp-content/themes/delo/assets/scripts/theme.js'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "sidebar", "margin_top" : 60, "margin_bottom" : 200, "stop_id" : "", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['text-8','ai_widget-5'] } ; </script> <script type='text/javascript' src='https://viws.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script async="async" type='text/javascript' src='https://viws.ru/wp-content/plugins/akismet/_inc/form.js?ver=4.0.1'></script> </body> </html>