Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Объявление в директе количество символов: Символы объявлений Я.Директ

Содержание

Как работать с минус-словами в контекстной рекламе

Вы подобрали ключевые слова, настроили таргетинг, отслеживание конверсий и ждете, когда контекстная реклама начнет привлекать посетителей на сайт. Но клики по объявлениям идут, а продаж нет. Возможно, дело в том, что вы не подобрали минус-слова, и пользователи переходят по нецелевым запросам.

Рассмотрим, что такое минус-слова и как их настроить для кампаний в Google Ads и Яндекс.Директе, а также автоматизировать подбор минус-слов с помощью Click.ru.

Минус-слова в Google Ads

Типы минус-слов

Минус-слова — слова, которые блокируют показ объявлений по нецелевым запросам. Например, если вы продаете детскую обувь, то запросы «мужская обувь»/«женская обувь» являются для вас нецелевыми. Включите в список минус-слов слова «мужская»/«женская». Это позволит исключить клики, которые не приводят к продажам.

В Google Ads выделяют три уровня настройки минус-слов:

  • На уровне групп объявлений. Подбираются слова, которые учитывают несоответствия предлагаемого вами продукта и запросов пользователей. Не соответствовать могут характеристики продукции, географическая привязка, условия оплаты/доставки и т. д. Например, если вы продаете шубы из искусственного меха, то нужно исключить запросы «шубы из натурального меха», «шубы из норки», «шубы из кролика» и т. д. Если вы предлагаете строительные услуги в Москве и МО, отминусуйте остальные регионы (хотя бы самые крупные).

  • На уровне рекламной кампании. В случае с рекламой товаров/услуг в список минус-слов обычно включают слова, которые не отражают намерение пользователей сделать заказ. Это информационные запросы и запросы DIY: «что такое», «форум» «отзывы», «фото», «как сделать», «своими руками», «сам». Например, если вы продаете выпечку собственного производства, то для вас нецелевыми запросами будут: «как приготовить торт», «торт своими руками», «рецепт торта».

  • На уровне аккаунта. Например, сюда входят слова, отсеивающие трафик низкого качества: «дешево», «халява», «бесплатно». Запросы вторичного рынка: «подержанный», «бу», «авито» и др. Также на этом уровне исключаются слова «эротика», «скачать», «торрент», «юмор» и т. д.

На уровне аккаунта можно использовать готовые списки минус-слов, которые можно найти в интернете. В них входят запросы, которые являются нецелевыми практически для всех кампаний. Но перед использованием готовых списков убедитесь (!), что все приведенные слова действительно являются нецелевыми для вашей кампании.

Еще один способ быстро подобрать минус-слова — воспользоваться планировщиком ключевых слов Click.ru. Этот инструмент подберет ключевые слова исходя из контента вашего сайта и автоматически сгенерирует минус-фразы, основываясь на статистике эффективности переходов пользователей. Также в сервисе предусмотрена возможность подбора минус-слов на основе Wordstat.

В Google Ads минус-слова настраиваются для рекламы на поиске, в КМС и для видеокампаний. Но работают они по-разному: в поиске они отсекают нецелевые запросы, а в КМС и видеокампаниях — блокируют показ объявлений на сайтах и видеороликах неподходящей тематики.

Иногда в медийных и видеокампаниях реклама показывается на площадках, которые содержат заданные вами минус-слова. Это происходит потому, что система при подборе площадок учитывает другие настройки (ключевые слова, геотаргетинг и т. д.). Для исключения показа рекламы на неподходящих площадках рекомендуется исключать контент и категории сайтов.

Настройка минус-слов на уровне аккаунта

На панели инструментов кликните на значок «Инструменты и настройка». В открывшемся меню в разделе «Общая библиотека» выберите пункт «Списки минус-слов».

Нажмите на «+» для добавления списка минус-слов.

Назовите список, введите слова вручную или скопируйте их.

Нажмите «Сохранить» — система добавит минус-слова.

Добавленные минус-слова будут действовать на уровне вашего аккаунта. По мере необходимости пополняйте и редактируйте список.

Настройка минус-слов на уровне кампаний и групп объявлений

В главном правом меню нажмите на «Ключевые слова». В открывшемся списке выберите «Минус-слова».

Для добавления минус-слов нажмите «+»:

Выберите один из двух способов добавления минус-слов:

Рассмотрим, как работать с минус-словами в каждом из этих случаев.

В пункте «Куда добавить?» укажите кампанию, в которую надо добавить готовый список. Нажмите «Сохранить», чтобы к кампании применялись минус-слова.

Важно! При составлении списка минус-слов могут использоваться такие символы: амперсанды (&), надстрочные знаки (а’, ấ) и звездочки (*). Минус-слова, которые отличаются только этими знаками, система воспринимает как разные слова. Остальные символы и знаки пунктуации система не распознает.

Создание нового списка минус-слов

Если у вас нет готового списка минус-слов или вы хотите составить новый список, придерживайтесь такой последовательности действий:

1. Выберите пункт «Добавить минус-слова или создать список».

2. Определите, куда хотите добавить минус-слова. Доступно два варианта:

  • Добавить минус-слова в кампанию. Кликните на стрелочку возле пункта «Куда добавить». В появившемся меню выберите «Кампания». Далее кликните «Выбрать кампанию» и укажите подходящий вариант.

  • Добавить в группу объявлений. В списке «Куда добавить» выберите «Группа объявлений». Далее кликните «Выберите группу объявлений» и укажите группу.

3. Внесите минус-слова для выбранной кампании/группы объявлений.

Важно! При составлении списка минус-слов каждое слово пишется с новой строки без разделяющих знаков.

4. Нажмите «Сохранить». Система добавит минус-слова в указанную кампанию/группу и создаст такую таблицу:

Вы можете:

  • Добавлять новые слова. Нажмите на знак «+» вверху таблицы. В открывшемся окне укажите новые минус-слова и добавьте их в свою кампанию/группу.

  • Скачать минус-слова. Вверху таблицы на панели инструментов нажмите «Скачать». В появившемся меню выберите формат (Excel CSV, CSV, TSV, PDF, Google Таблицы). 

  • Редактировать добавленные слова. Отметьте галочкой минус-слово. Сверху на панели инструментов нажмите «Изменить». В появившемся меню кликните «Удалить», если хотите исключить слово из списка; «Изменить текст ключевых слов» — если хотите исправить ошибку или внести другие изменения в слово или фразу. Сохраните изменения.

  • Изменить тип соответствия минус-слов. Система по умолчанию присваивает всем словам в списке широкое соответствие. Для изменения типа соответствия отметьте слова. Во всплывающем окне установите нужный тип соответствия: вместо широкого можно выбрать фразовое или точное соответствие. Нажмите кнопку «Сохранить».

Типы соответствия минус-слов в Google Ads

Типы соответствия в минус-словах используются в поисковых кампаниях для более точной настройки показа объявлений по запросам. Для этой же цели используются и типы соответствия ключевых слов.

По умолчанию  для ключевых слов и для минус-слов устанавливается широкое соответствие. Но разница заключается в том, что  для ключевых слов в широком соответствии система сама подбирает синонимы, ошибочные варианты, сокращения и близкие словоформы, а для минус-слов все это приходится подбирать вручную.

Подробнее об этом вы можете прочитать в полном гайде по типам соответствия ключевых слов в Google Ads.

Рассмотрим, как работают типы соответствия в поисковых кампаниях на примере минус-слова «кожаные рюкзаки».

Широкое соответствие

Объявления не показываются по запросам, которые содержат минус-слова в любом порядке и падеже. Если запрос содержит отдельные слова минус-слова, то объявление будет показываться.

Фразовое соответствие

Объявления не показываются по запросам, которые содержат минус-слова в заданном порядке. При этом поисковые запросы могут включать в себя другие слова. То есть показ по запросу  будет, если минус-фраза будет разбита другими словами.

Точное соответствие

Объявления не показываются по запросам, которые содержат минус-слово в указанном порядке без дополнительных слов. Если в запросе есть дополнительные слова, то пользователи увидят объявление.

Типы соответствия минус-слов в КМС

В отличие от поисковых кампаний, в КМС используется точное соответствие для минус-слов. Работает оно так: пользователю не показывается объявление, даже если ключевое слово явно не указано на странице, но его тема связана с набором минус-слов.

Например, в кампанию в КМС вы добавили минус-слово «мужские куртки». В результате система будет исключать из показа страницу про мужские пальто, даже если на этой странице не будет встречаться фраза «мужские куртки». Остальные страницы сайта, на которых представлены другие предметы мужской одежды (джинсы, рубашки, свитера) или женские куртки, не исключаются.

Минус-слова в Яндекс.Директе

Правила показа минус-слов и минус-фраз в Яндекс.Директе

В Яндекс.Директе  разделяются понятия минус-слов и минус-фраз. Связано это с особенностями минусовки в этой системе.

Минус-слово — одно слово, которое не должно находиться в запросе пользователя. В Яндекс.Директе минус-слова добавляются на уровне ключевой фразы.

Минус-фраза — несколько слов, исключающих из показа объявления по запросам, где встречается вся фраза полностью. Может добавляться на уровне группы объявлений и кампании.

Правила показа минус-слов и минус-фраз в Яндекс.Директе:

  • Минус-слова и минус-фразы игнорируются, если они полностью/частично пересекаются с ключевой фразой. Например, ключевая фраза «купить елочные игрушки» и минус-фраза «елочные игрушки» пересекаются. Возникает конфликт: вы продаете елочные игрушки и исключаете их из показа. В таком случае система будет показывать объявления по запросу «купить елочные игрушки».

  • Минус-слова и минус-фразы дополняют друг друга, но не заменяют. К ключевому слову применяются все указанные минус-слова и минус-фразы, которые установлены для данной группы объявлений и кампании. Поэтому показов не будет по всем добавленным минус-слова и минус-фразам.

В Яндекс.Директе вы можете добавить минус-слова и минус-фразы сразу в несколько объявлений. Для этого воспользуйтесь Директ.Коммандером, API Яндекс.Директа, XLS/XLSX-файлами.

Операторы соответствия в минус-словах

Для более точной формулировки в Яндекс.Директе используются операторы: » «, [], ! и +.

Подробнее вы можете прочитать в полном гайде по типам соответствия ключевых слов в Яндекс.Директе.

Ниже указаны примеры работы операторов по ключевой фразе «рюкзак». Минус-фраза на группу — «кожаный черный».

Минусовка без оператора

Объявление не показывается, если в запросе находилась заданная минус-фраза. При этом слова могут располагаться в любом порядке. Если в запросе минус-фраза отображена частично (одно или несколько слов), то реклама будет показываться.

Минус-слова с оператором «!» 

Оператор «!» фиксирует число, время и падеж слова перед которым стоит. Минус-фраза будет учитываться, если пользователь ввел запрос в том же падеже (времени/числе), в котором задано слово в настройках.

Минус-слова с оператором «+»

Оператор «+» фиксирует стоп-слова, в том числе служебные части речи, местоимения и любые слова, которые не несут дополнительного смысла. Минус-фраза будет учитываться, если стоп-слова сформулированы по другому (запрос введен в другом падеже, времени, имеет другой порядок слов).

Минус-слова с оператором []

Оператор [] фиксирует порядок слов, учитывая все словоформы и стоп-слова. Минус-фраза будет учитываться, если пользователь введет запрос в другой форме или укажет слова в другом порядке.

Минус-слова с оператором “ ”

Фиксирует количество слов. Минус-фраза будет учитываться, если в запросе пользователя будут все слова из минус-фразы — в любом порядке и словоформе.

Работа с операторами позволяет избежать неточных формулировок и снизить число нецелевых кликов.

При подборе слов в Яндекс.Wordstat также используются операторы. Все перечисленные выше операторы можно применять на вкладках «По словам» и «По регионах». На вкладке «История запросов» применяется только оператор +. Подробнее об использовании подборщика слов читайте в статье «Яндекс Wordstat: как применять в контекстной рекламе».

Способы добавления минус-фраз в Яндекс.Директе

В Яндекс.Директе минус-слова задаются на уровне ключевых слов, а минус-фразы — на уровне групп объявлений и кампаний.

Как добавить минус-фразы в кампанию

Добавьте минус-фразы на этапе создания кампании. Для этого перейдите в раздел «Ограничения на кампанию» и кликните на значок «развернуть» напротив пункта «Минус-фразы».

В открывшемся окне укажите минус-фразы через запятую или с новой строки без знаков препинания.

Ограничения по минус-фразам:

  • максимальное количество слов в минус-фразе — 7;

  • максимальное количество символов — 20 000 (без учета пробелов).

Как добавить минус-фразы в группу объявлений

После создания кампании приступайте к созданию группы объявлений. На этом этапе вы можете добавить минус-фразы в группы объявлений. Для этого найдите раздел «Ключевые фразы и минус-фразы».

Нажмите на кнопку «Минус-фразы». В открывшемся окне введите ключевые слова и минус-фразы.

Минусовка с помощью генератора ключевых фраз

Для расширения набора ключевых слов и минус-фраз воспользуйтесь инструментом подбора фраз. Для этого нажмите на кнопку «Подобрать фразы».

Введите слова в комбинатор ключевых фраз.

После заполнения столбцов комбинатора нажмите на кнопку «Создать комбинации». Инструмент перенесет все запросы в столбец «Фразы».

Проверьте запросы по каждой фразе. Подходящие для продвижения кампании ключевики добавьте в столбец «Ключевые фразы». Для этого нажмите на знак «+» в строке, где находится выбранная фраза. Неподходящие для продвижения запросы занесите в столбец «Минус фразы», нажав на знак «-» в соответствующей строке.

Задайте операторы для минус-фраз. Для этого выберите фразу и нажмите на значок в виде ручки.

Добавьте подобранные ключевые фразы и минус-фразы к группам объявлений. Для этого нажмите «Добавить к группам объявлений».

Появится общий список ключевых фраз и минус-фраз:

После окончательного оформления списков нажмите кнопку «Готово».

Как добавить минус-слова на уровне ключевого слова

В разделе «Мои кампании» выберите кампанию для редактирования. Перейдите на вкладку «Ставки и фразы».

В списке выберите фразу и нажмите на знак ручки.

В окне «Фраза с минус-словами» введите минус-слово. Сохраните изменения.

После добавления минус-фразы напротив ключевого слова появится надпись с количеством добавленных минус-слов:

Добавьте к ключевой фразе несколько минус-слов, если хотите повысить точность показа объявления.

Работа с минус-словами в Click.ru

В сервисе Click.ru вы можете одновременно подбирать ключевые слова и минус-фразы для рекламных кампаний в Google Ads и Яндекс.Директ.

Возможности сервиса при работе с минус-словами:

Автоматическая кросс-минусовка

При подборе ключевых слов для рекламных кампаний часто возникает их пересечение. Такие фразы конкурируют между собой и снижают эффективность рекламной кампании.

Например, в кампании запущены фразы «купить соковыжималку» и «купить шнековую соковыжималку». По первому запросу написан общий текст о соковыжималках, по второму — описание шнековой модели соковыжималки.

Когда пользователь вводит фразу «купить шнековую соковыжималку», система может выдать ему объявление по запросу «купить соковыжималку», потому что оно также релевантно этому запросу. В результате пользователь увидит обобщенную рекламу вместо описания интересующего его товара.

Решить эту проблему помогает инструмент автоматической корректировки фраз минус-словами Click.ru. Он будет добавлять к запросу «купить соковыжималку» минус-слово «шнековая». Результат — запросы не будут пересекаться между собой.

Автоматическая корректировка фраз минус-словами задается на этапе настройки кампании. Для этого:

1. Зарегистрируйтесь/авторизуйтесь в Click.ru. Подробную инструкцию о регистрации и добавлении кампаний в Click.ru вы найдете здесь;

2. В меню выберите раздел «Семантика». Во всплывающей вкладке кликните на «Подбор слов и медиапланирование».

В разделе «Медиапланирование» введите URL сайта, выберите рекламную систему, настройте геотаргетинг.

Убедитесь, что напротив пункта «Автоматическая корректировка фраз минус-словами» стоит флажок. В этом случае система выполнит перекрестную минусовку.

После внесения всех параметров кампании нажмите «Начать новый подбор».

Добавление минус-слов на уровне группы объявлений

Вы можете добавить минус-слова в медиаплане или при составлении объявлений. Ниже рассмотрим каждый из этих двух способов.

Добавление минус-слов в медиаплане

Система сама подбирает ключевые слова к кампании, основываясь на контенте сайта. Также дополнить ключевые фразы можно словами конкурентов и словами из счетчиков статистики.

Для быстрого подбора ключевых слов воспользуйтесь словами конкурентов. Для этого кликните на вкладку «Слова конкурентов», установите флажки напротив сайтов конкурирующих компаний и нажмите кнопку «Показать слова конкурентов».

Выберите подходящие ключевые слова и нажмите кнопку «Добавить в медиаплан».

Система автоматически подбирает к ключевым словам минус-слова и отображает их в медиаплане.

Для редактирования минус-слов нажмите на знак «-» напротив соответствующего ключевого слова.

Воспользуйтесь автоматически подобранными минус-фразами, если у вас подключены счетчики статистики или выберите подходящие минус-фразы на основе Wordstat.

Сохраните изменения, чтобы система добавила минус-слова к выбранному ключевому слову.

В таблице в столбце «Ключевое слово» появится сообщение о числе добавленных минус-слов. 

Для просмотра добавленных минус-слов нажмите на знак «-».

По завершению работы над медиапланом нажмите кнопку «Создать объявления».

Добавление минус-слов на уровне кампании

Настройте минус-слова на уровне кампании, чтобы отсечь запросы пользователей, которые не собираются сделать заказ.

Добавить слова можно на этапе медиапланирования или редактирования групп объявлений. Для этого нажмите на знак «-», который расположен в шапке таблицы.

В открывшееся окно занесите общий список минус-фраз и сохраните изменения.

В результате всем группам объявлений в данной кампании будет присвоен общий список минус-слов.

В системе Click.ru вы можете не только быстро запустить контекстную рекламу и управлять ею, но и зарабатывать. Подключитесь к системе и получайте вознаграждение в размере до 12% от расходов ваших клиентов на контекстную и до 18% — на таргетированную рекламу.

Как быстро настроить «Яндекс.Директ» на 1 000 ключей

От слов «Настроить „Директ“ на пару тысяч ключей» у новичков начинают трястись руки. Кажется, что эта задача заберёт лучшие годы жизни.

Спокойно! Есть два проверенных и бесплатных способа сэкономить время при создании объявлений: старые-добрые XLS-таблицы и «Директ Коммандер». Я расскажу, как ими пользуюсь, раскрою свои секреты и «директ-хаки». После прочтения вы больше не захотите настраивать рекламу в интерфейсе «Яндекс.Директа», до боли медленном и неудобном.

Инструкция получилась немаленькой. Для тех, кому лень читать, я записала скринкаст. Ищите его в конце поста. Только не судите строго  — первый раз делала такую штуку.

Подготовим семантику

Прежде чем начать безжалостно строчить объявления, я тщательно разбираю и группирую семантику (а как правильно собрать семантику, чтобы охватить больше запросов, читайте в посте моей коллеги Кати «Ключевые слова для «Яндекс.Директа» — собрать ВСЕ!»).

Из-за того, что «Яндекс» ввёл ограничение на показы объявлений по низкочастотным фразам, мода на «один ключ — одно объявление» давно прошла. Поэтому, прежде чем настраивать рекламу, я отсекаю от семантики все ключевые фразы, у которых меньше 10 показов в месяц. Оставшиеся делю так, чтобы можно было добавить их к одной группе объявлений.

Фразы в одной группе должны подходить к одной странице. Объявления в этой группе должны содержать максимальное количество ключевых слов из всех объединенных нами фраз.

В моём примере я буду настраивать рекламу для завода, который производит дымоходы из нержавеющей стали. Вот какие фразы я объединяю в одну группу:

  • дымоход 316 купить,
  • дымоход 316 сталь купить,
  • дымоход aisi 316 купить,
  • дымоходы из нержавейки 316 купить.

Я быстро группирую фразы, потому что храню семантику в таблицах. Сначала сортирую столбец с фразами по алфавиту. Так совсем однотипные, вроде «дымоход 316 купить» или «дымоход 316 сталь купить», сразу оказываются рядом. Эти фразы я записываю в одну группу. Потом с помощью фильтра нахожу в семантике ещё подобные запросы (например, всё что содержит «316») и переношу их в ту же группу.

Вот примеры групп, которые у меня получились. В каждой я выделила ключ, по которому объединяла фразы:

Если с семантикой порядок, можно приступать к настройке объявлений.

Старые-добрые XLS-таблицы

Если таблицы вас не пугают и не навевают тоску, этот способ вам подходит. Он очень удобен, особенно когда за ограниченное время нужно создать дофига объявлений в новом рекламном кабинете.

Первое, что понадобится — шаблон таблицы, которую будем заполнять. Я не пользуюсь стандартным, что предлагает «Яндекс.Директ». Предпочитаю, чтобы в шаблоне уже была заготовка нужного мне объявления, из которого я буду копировать тексты, быстрые ссылки и уточнения для будущих.

Для этого открываем рекламный кабинет и создаём рекламную кампанию.

В параметрах кампании указываем визитку, регион показа и набор общих минус-слов. Всё остальное добавим уже после загрузки объявлений — практика показала, что другие параметры частенько «отваливаются», когда кампании прогоняешь через таблицы и «Директ Коммандер».

В созданную кампанию добавляем группу объявлений и тщательно заполняем все предложенные поля. На основе этого объявления мы будем делать остальные, поэтому важно сразу всё сделать правильно:

  • заполнить быстрые ссылки и их описания,
  • прописать уточнения и отображаемый URL,
  • указать ключевые фразы и минус-слова.

Чтобы видеть, как объявление будет смотреться в поисковой выдаче, в окне просмотра справа выберем параметры «На поиске» и «Навигационный ответ»:

Если всё готово, сохраняем объявление, переходим на страницу «Мои кампании» и в самом низу кликаем по ссылке «XLS/XLSX».

Выбираем для выгрузки созданную кампанию и подходящий формат: XLS или XLSX. Я выбираю второй.

Открываем полученный файл в любом табличном редакторе. Я предпочитаю работать с «Гугл Таблицами», которые корректно воспринимают только формат XLSX.

Называем файл и удаляем ненужные столбцы: «ID группы», «Статус „Мало показов“», «ID фразы» и «ID объявления».

Копируем последнюю строчку (только проверьте, чтобы в столбце «Дополнительное объявление» стояло значение «—») и вставляем ниже.

Перемещаемся на строчку ниже, вставляем эту строку и удаляем значения столбцов «Название группы», «Номер группы», «Фраза с минус словами», «Заголовок 1», «Заголовок 2» и «Текст».

В зависимости от типа сайта и количества товаров удалите или оставьте поля «Ссылка», «Отображаемая ссылка» и «Минус-фразы на группу».

Поле «Ссылка» не надо удалять, если все объявления будут вести на одну страницу. «Отображаемую ссылку» тоже можно не менять, если у вас всего один товар, например, дымоходы. Поле «Минус-фразы» я заполняю самым последним, когда тексты объявлений уже написаны.

Копируем строчку, из которой мы удалили значения — это будет заготовка для новых объявлений. Дальше выделяем номера пустых строк ниже (их потребуется столько, сколько у вас ключевых фраз), нажимаем Ctrl+V. Шаблон готов.

Ещё рекомендую создать себе удобное рабочее пространство: подвиньте таблицу так, чтобы в экран входили все столбцы, которые надо заполнять. Поля с заголовками и текстом объявлений стоит сделать шире. Остальные столбцы можно уменьшить.

Вот как выглядит моя таблица, когда я начинаю с ней работать. Поля, которые я заполняю, визуально выделяются. Мне не приходится тратить время на то, чтобы двигать таблицу влево-вправо в поисках нужного столбца: всё и сразу перед глазами.

Дальше копируем группу ключевых фраз из семантики, вставляем её в столбец «Фраза (с минус-словами)», называем эту группу в столбце «Название группы» и даём ей порядковый номер.

Если несколько фраз входят в одну группу объявлений, то для них значения всех столбцов, что мы заполняем, должны быть одинаковыми. В таблице очень легко копировать значение ячеек хоть на сотню строчек: просто выделяем нужные и тянем вниз.

Чтобы заполнять заголовки и тексты объявлений правильно, запомните несколько цифр:

  • «Заголовок 1» не может содержать больше 35 символов;
  • «Заголовок 2» не может содержать больше 30 символов;
  • «Текст» не может быть длиннее 81 символа;
  • «Отображаемая ссылка» — не длиннее 20 символов.

Скорее всего, первые 20 объявлений вы будете заполнять медленно, но дальше набьёте руку и значительно ускоритесь.

Как только заполните таблицу, сохраните её. Если вы, как и я, делали её в «Гугл Таблица», просто выгрузите в формате XLSX.

Чтобы загрузить кампании из файла в рекламный кабинет, «Директ» придумал очень мутную тему с баллами. Не засоряйте этим голову и загружайте полученные таблицы сначала в «Директ.Коммандер».

«Коммандер» найдёт ошибки в объявлениях и подскажет их местоположение. Их легко исправить в интерфейсе самой программы. В «Коммандере» можно быстро редактировать большое количество кампаний, объявлений, фраз и так далее. Поэтому устанавливайте не раздумывая.

«Директ.Коммандер», спасибо, что ты есть!

Скачать приложение можно здесь. После установки авторизуйтесь под вашим логином в «Яндекс.Директе».

Чтобы загрузить созданные нами объявления в «Коммандер», кликните по кнопке «Импорт».

В появившимся окне выберите созданный файл XLSX и нажмите «Открыть».

Если в таблице есть ошибки, система вам об этом сообщит с помощью красного значка:

Наведите курсор на предупреждение, чтобы понять, какую ошибку допустили.

Если допустили одну ошибку в нескольких объявлениях, воспользуйтесь поиском и массовой заменой. Для этого во втором окне на вкладке «Группы» нажмите Ctrl+A чтобы выделить всё и перейдите на вкладку «Объявления». Затем кликните по кнопке «Заменить».

В появившемся окне укажите параметры поиска и замены: какой текст и на что меняем, в каких полях и объявлениях. Нажмите «Заменить».

Если рядом с загруженной кампанией увидите зелёную иконку — вы всё заполнили правильно. Поздравляю! Можно переходить к следующему шагу.

Выберите загруженную кампанию, и справа откроются её параметры. Здесь можно изменить название, регион, выбрать стратегию, добавить счетчик метрики, минус-слова и так далее.

Если нужно задать ставки, это тоже удобно делать в «Коммандере». Выделите все объявления в кампании, перейдите на вкладку «Фразы» и нажмите кнопку «Ставки».

Когда кампания будет готова, останется только нажать кнопку «Отправить». Всё, ваша кампания загружена в рекламный кабинет и ждёт модерации.

Нет лекарства от лени

Таблицы и «Директ.Коммандер» — это не лекарство от лени, но облегчить ваши страдания они смогут.

Делитесь в комментариях своими страданиями и как вы настраиваете «Директ». Если понравился мой пост, и хотите дальше читать про «Яндекс.Директ», подписывайтесь на канал в Telegram «Лена строит директ». Иногда буду скидывать туда всякие интересности. А может и нет.

Желаю высоких конверсий!

А вот и обещенный скринкаст.

Первый настоящий конвертер кампаний Директа в Adwords / Хабр

Вопрос переноса и конвертации рекламных кампаний из Яндекс Директа в Google Adwords предо мной встал практически сразу, как я начал заниматься контекстной рекламой. И как показывает практика — не у меня одного есть такая потребность. Почему именно из Директа в Adwords, а не наоборот? Да всё просто — создавать кампанию в excel для Директа гораздо проще.

Что мы имеем на текущий момент из инструментов для такой задачи:

  1. Табличный конвертер в Google Docs от сообщества Adwords.
  2. Файл Excel с настроенными макросами (похож по функционалу на предудущий) ссылка
  3. Бесплатный конвертер от агентства «Точно»
  4. И наш новый сервис Synapse-transfer.ru

Для простоты изложения далее по тексту я буду называть первые три инструмента по их положению в списке: «первый», «второй» и «третий сервис» сервис соответственно.

С недавнего времени в Adwords ввели новый формат текстовых объявлений — «Развернутые текстовые объявления». Его основные отличия от стандартных: два поля «Заголовок» (до 30 символов в каждом) и одно длинное поле «Описание» (до 80 символов). И с 31 января 2017 г. в AdWords нельзя будет создавать и изменять стандартные текстовые объявления. При создании объявлений необходимо будет использовать новый формат – развернутые текстовые объявления. В этом есть большая проблема текущих версий «табличных» конвертеров — они его не поддерживают. То есть с февраля 2017 года вы фактически не сможете пользоваться ни первым, ни вторым конвертером из списка выше.

Но это их не единственная проблема. Даже если и добавят поддержку нового формата, то есть ряд проблем который тянется за ними уже довольно долго:

  • Даже со старым форматом объявлений конвертеры работают плохо — заголовки более 30 символов они ни как не обрабатывают и предлагают переписывать их руками. А если у вас уникальные заголовки сгенерированные на основе ключей, переписывать прийдется много.
  • Типы соответствия ключевых слов они отрабатывают или плохо или ни как. В лучшем случае у ключей будут удалены все знаки и оставлены «+» у предлогов. В худшем — оставят всё как есть. А типы соответствия в Директе не равны таковым в Adwords, и опять прийдется править всё руками.
  • Теряется структура кампании. Если вдруг у вас по несколько объявлений в группе, опять же без ручного вмешательства не обойтись.
  • Расширения объявлений приходится переносить руками. Добавление быстрых ссылок и уточнений может отнять значительно времени даже если у вас 5-10 кампаний. А если вы переносите кампании регулярно — вас скорее всего это уже достало.
  • Настройки кампаний не переносятся. Каждую перенесенную кампанию приходится настраивать — выставлять стратегию, регион показа, ставки и прочее. Времени занимает немного, но это рутина которая утомляет.
  • Минус-слова не переносятся и не обрабатываются ни на каком уровне. Хорошую кампанию с высоким CTR без минус-фраз как известно вы никак не получите. Но по каким-то причинам текущие конвертеры (1-3 в списке) или крайне плохо или вообще ни как не обрабатывают минус-слова. Есть «минуса» на уровне кампании, группы объявлений и кросс-минусовка. Как минимум минус-слова на уровне кампании нужно перенести предварительно просклоняв, так как Adwords этого не делает.

Чтобы не быть голословным, я взял одну из своих последних созданных кампаний, и попробовал перенести её через все доступные инструменты. (Кампанию сократил, изменил url и заменил части текста (с сохранением оригинального количество символов) для сохранения конфиденциальности.). Скачать файл кампании.

Что из этого получилось:

  • Объявления. Вместо 118 объявлений в кампании я получил 84 и 116 при загрузке в Adwords Editor для первого и второго конвертера соответсвенно. Каким группам какие объявления достались — пойди разберись. Третий обработал количество правильно, но вот с длиной заголовков проблема. При конвертации я выбрал новый формат объявлений Adwords и ручками дописал универсальный второй заголовок ко всем объявлениям (что не совсем корректно, но об этом позже). А для первой части заголовка в Adwords был взят заголовок объявления Директа без изменений. Следственно часть заголовков прийдется переписывать — они получились длиннее 30 символов.
  • Типы соответствия ключевых слов. Первый и третий конвертер отработали похоже. Знак«!» не был удален, а Adwords не знает оператора закрепления словоформы, следственно, Editor выдает ошибку. Точное соответствие ключа в Директе превратилось во фразовое в Adwords — что неверно, ещё появились дубли ключевых слов. У второго конвертера на выходе получилось 209 ключей из 348 (какие группы что потеряли даже разбираться не хочу), все ключи в широком соответсвии, у предлогов сохранены «+».
  • Минус-слова. Отсутствуют какие-либо минус-слова у первого и второго конвертера. Третий, минус слова кампании не перенес, но попытался сохранить подобие кросс-минусовки. Но слова он не просклонял, а это показ по всем вариантам падежей, родов и чисел минус-слов. К тому он имеет ограничение в два минус-слова на группу.
  • Расширения не перенес ни один конвертер.
  • Настройки кампаний не перенес ни один конвертер.

Важное замечание — все инструменты я использовал «как есть», без своих доработок и следуя инструкции если таковая прилагалась. Знаю, что если сделать некоторые изменения в табличных конвертерах можно победить несколько их болячек. Но такие изменения приходится делать индивидуально под каждую конкретную кампанию.

Как мы видим — результат далек от идеала. Конечно бывают и удачные кампании для конвертации, например те, в которых все заголовки не длиннее 30 символов. Но не вижу смысла ставить себе такие ограничения, когда просто можно воспользоваться более совершенным инструментом — конвертером Synapse-transfer.

Что мы предлагаем.

Сервис Synapse-transfer.ru. Цель сервиса — максимальная автоматизация процесса переноса и конвертаций кампаний. И уже сейчас это самое продвинутое решение из всех что можно найти. Работает он напрямую с аккаунтами Директа и Adwords через через API. То есть никаких таблиц, скриптов, макросов и десктопных приложений вы не увидите ни на одном этапе переноса. 

Та же кампания которая использовалась для теста конвертеров из списка выше, переносится сервисом Synapse-transfer за 40 секунд и без единой ошибки. Для сравнения — только скрипт «первого» конвертера в Google Docs выполнялся более двух минут.

Сейчас мы проводим бета-тестирование сервиса. Все участники получают месяц бесплатного и безлимитного использования. 

 
Функционал на время бета-теста:

  1. Одна кампания переносится за раз.
  2. Корректно конвертируются только поисковые кампании.
  3. Сохраняется структура кампании — группы объявлений, объявления и ключи находятся на тех же местах что и в Директе.
  4. Автоматически конвертируются заголовки и тексты объявлений в формат Adwords (Развернутые текстовые объявления).
  5. Конвертируются типы соответствий ключевых слов по логике максимального соответствия их работе в Директе и Adwords.
  6. Переносятся и автоматически склоняются минус-слова на уровнях кампании и групп-объявлений. В каждую группу объявлений в Adwords будут перенесены минуса из соответствующей группы в Директе. Сервис автоматически просклоняет все слова у которых не закреплена словоформа (знаком «!»). Из минус-слов на уровне кампании создаются списки минус-слов в Adwords и присваиваются загруженным кампаниям.
  7. Опция сохранения кросс-минусовки путем переноса её на уровень групп объявлений (доступно, если у вас структура 1 группа-1 ключ)
  8. Переносятся быстрые ссылки с описаниями и уточнения. Сейчас они записываются на уровень группы объявлений. Даже если у вас в Директе у каждой группы в кампании уникальные быстрые ссылки, они сохранятся в таком же виде и в Adwords.
  9. Опция изменения части значения UTM-меток при переносе: yandex, yan, y на google, goog, g соотвественно.
  10. Частично переносятся настройки кампании.

Таким образом, уже при текущем функционале можно сэкономить от 10-20 минут, до нескольких часов на переносе только одной кампании. Время зависит от сложности исходной кампании в Директе и того, на сколько у вас набита рука. А такую вещь как кросс-минусовку в Adwords вообще нецелесообразно делать вручную — обречете себя на несколько часов монотонного Ctrl+C/Ctrl+V.

Детальное описание нюансов конвертации заголовков, ключевых слов и других элементов кампании сервисом Synapse-transfer, вы можете прочитать в разделе «Инструкция» в личном кабинете сервиса.

Не обошлось без недостатков. Но это исключительно издержки беты:

  1. Сейчас нет возможности за раз выбрать несколько кампаний для переноса.
  2. Сервис не показывает ошибок при конвертации. Но мы постарались свести их количество к минимуму, и в данный момент у нас нет кампаний на которых конвертер «падает» или отрабатывает не корректно.
  3. Нужно ускорить загрузку кампаний в Adwords. Из-за большого количества минус-слов записываемых в группы-объявлений при имитации кросс-минусовки Директа время загрузки одной кампании может составлять 3-5 минут. Сейчас мы работаем над ускорением процесса, а так же со временем добавим фоновую загрузку кампаний. Это сведет на нет проблему массового переноса кампаний с нескольких логинов одновременно.

Функционал мы планируем так же наращивать: добавить перенос и конвертацию РСЯ кампаний, полностью переносить настройки кампаний, есть запросы на добавление функции синхронизации кампаний Директа и Adwords, и много всего того, о чем говорить ещё пока рано.

Отвечу на один из первых и главных вопросов пред использованием сервиса:

«А на сколько безопасно им пользоваться? Ведь давать доступ к аккаунтам по API дело довольно интимное»

Этот вопрос мне задали в сообществе Google Adwords Россия и там я на него подробно ответил. Приведу краткую версию ответа и здесь:

Данные проходящих через сервис кампаний мы не храним. И не загружаем в аккаунты ничего, кроме тех кампаний, которые вы выберите сами из своего логина Директа. Так же все элементы загружаются со статусом «Остановлено» и без вашего ведома новые кампании показываться не будут. 

К тому же, Adwords просто так не дает доступ к своему API. Мы прошли многоуровневое тестирование и проверки Google перед тем как его получить.

А если же хотя бы у одного пользователя случится неприятность в виде утечки рекламных кампаний или загрузки в аккаунты того, чего там быть не должно, об этом узнают и репутация сервиса будет навсегда утеряна. А этого нам ни в коем случае не нужно.

Мы открыты для предложений, и если у вас есть идеи или пожелания по работе сервиса смело высказывайте их в комментариях или нашей группе в VK.

Лендинг с более подробным описанием функционала.
Бета-тест предположительно продлится до середины февраля 2017 года.

Шаблоны объявлений в Яндекс Директ: создание и использование

23.03.2021


Шаблоны объявлений в Яндекс Директ – это один из инструментов для продвижения сайта (товаров и услуг), с помощью которого специалисты могут создавать однотипные объявления, а ключевые запросы будут подставляться автоматически, в соответствии с тематикой ключа. Несмотря на то, что многие PPC-специалисты считают такой инструмент явной халтурой, на деле, при правильной настройке и использовании, шаблоны объявлений освобождают от части рутинной работы, экономя при этом время и нервы.

Содержание


Как работают шаблоны объявлений в Яндекс Директ и для чего нужны


Шаблон в Яндекс Директ – это простой в освоении инструмент маркетинга, который, по сути, служит для того, чтобы перенести ключевую фразу, которая вызвала показ вашего объявления, в текст, адрес сайта, заголовок и посадочную страницу (ссылку). Принцип работы данного инструмента также максимально прост: место, в котором планируется отобразить шаблонную фразу, веб-специалист выделяет знаками решетки (##).


Допустим, перед пользователем стоит цель создать группу из 555 однотипных рекламных объявлений в поиске, каждое из которых будет ориентировано на отдельный ключевой запрос, иметь свой УРЛ-адрес и описание. Чтобы создать такое количество однотипных объявлений понадобится достаточно много времени, поэтому перед веб-специалистом встает весьма лаконичный вопрос: возможно ли упростить, а также ускорить данный процесс, не нанеся при этом вред уникальности статьи и, как следствие, стоимости клика?


Для решения подобных маркетинговых целей компанией Яндекс и был разработан специальный инструмент – шаблоны. С помощью шаблонов удается избежать «штамповки» однотипных рекламных объявлений, избегая при этом статуса «Мало показов». Работает все это довольно просто. К примеру, когда конкретный ключевой запрос (фраза) приводит к показу объявления, то Яндекс Директ подставляет этот запрос в текст статьи, заголовок и отображаемую ссылку (УРЛ-адрес) на рекламируемом сайте или блоге. Таким образом по каждой ключевой фразе будет создано уникальное рекламное объявление. Использовать такой метод для создания большой рекламной кампании в интернете можно не только для мелкого и среднего бизнеса, но также и для крупного, при этом совершенно любой направленности.


Как создать шаблон


Чтобы создать шаблон достаточно выбрать новую группу объявлений или перейти к уже существующей. В том месте, где должен стоять ключевой запрос, необходимо использовать символ «#». Символ «#» ставится с двух сторон (между ключевым запросом).


Если вы хотите сэкономить время на создании однотипных объявлений для продвижения сайта, товара или услуг в интернете, то для этого отлично подойдут шаблонные объявления. Например, вот как выглядит шаблон для контекстной рекламы:


Что нужно учитывать при создании шаблонов


При создании шаблона для продвижения бизнеса в Яндекс Директ важно следовать некоторым правилам:

  1. Все ключевые фразы создаются с правильным окончанием.
  2. Первая буква словосочетания обязательно должна ставиться капсом (заглавной). Поскольку при подстановке их регистр не меняется.
  3. Аббревиатуры и названия городов также начинаются с заглавной буквы.


Самое главное правило при создании шаблонов в Яндекс Директ заключается в том, что все ключевые фразы должны быть с предлогами, правильно встроены и иметь правильное окончание. К примеру, собрав в Яндекс Wordstat ключевые запросы для сайта, одним из которых может быть «гантель москва интернет магазин купить», запрос нужно переделать таким образом, чтобы получилось «Купить гантели в Москве в интернет-магазине». В таком случае, главная фраза в тексте будет смотреться более гармонично, повышая кликабельность и соответственно авторитетность сайта (блога), а это уже главная цель любого маркетинга и рекламы. Ведь чем выше кликабельность, тем ниже стоимость клика!


Основные преимущества и недостатки шаблонов


Шаблонные объявления в Яндекс Директ – это отличная возможность экономии личного времени на продвижении и создании рекламной кампании, в случаях, когда стоит задача создать большое количество однотипных объявлений.


Однако несмотря на явные преимущества, у шаблонных объявлений Яндекс Директ есть определенные недостатки:

  1. Все поля для создания шаблонов имеют определенный лимит знаков (в соответствии с разделом). К примеру, для заголовков предусмотрено всего 35 знаков. В случае, если не вложиться в этот лимит, то вместо заголовка будет отображаться текст, который заключен между знаками ##. Обычно низкочастотные ключевые запросы содержат большое количество символов, почему и попадают в «Мало показов». Если пользователь не будет придерживаться данных лимитов, то никакого эффекта от использования шаблона больше не будет. И если для других тегов это правило весьма лояльно, то для заголовка этот критерий играет важную роль.


  2. Обычно пользователи используют нижний регистр при вводе поисковых фраз, в то время как система уделяет регистру особое внимание. В связи с этим, объявление может потерять свою привлекательность, что в свою очередь негативно отобразится на кликабельности (CTR).


Несмотря на незначительные недостатки, Яндекс Директ – это отличный способ сэкономить время при продвижении услуг и товаров (или даже сайта/блога), а также удобный инструмент если вы хотите создать большое количество однотипных объявлений для рекламной кампании. Именно по этой причине, шаблоны Яндекс Директ пользуются популярностью у многих профессиональных веб-мастеров и интернет-агентств.


Также подобный способ для создания и продвижения большой рекламной кампании однотипных объявлений есть и у корпорации Google. Для этого в поиске используется схожий способ формирования рекламы, но с некоторыми определенными отличиями для клиентов.


Заключение


Шаблоны в Яндекс Директ – это действительно удобный интернет инструмент для бизнеса, с помощью которого специалист может облегчить процесс продвижения. Однако, если неправильно подобрать стратегию продвижения и настройку автоматизации объявлений, появляется риск нарушить читабельность статьи, а в следствие и привлекательность рекламного объявления для пользователей (клиентов). Именно по этой причине выгода от использования шаблонов для рекламной кампании может быть только при соблюдении всех правил их формирования.


Правильно задействовав шаблоны в Яндекс Директ, мы получаем возможность значительно упростить объем трудоемкой работы в интернете, рационализировав временные затраты и увеличив общую производительность.


Помимо этого, хорошим способом увеличить кликабельность и понизить стоимость клика является наш инструмент – бид-менеджер. Он анализирует статистику и корректирует ставки по фразам каждые 5 минут с учетом конверсий в достижении цели и ее стоимости.


Читайте также:

Как настроить рекламу в Яндекс Директ. Инструкция

С каждым годом количество интернет-пользователей растет на несколько миллионов, в связи с этим многие компании вкладывают огромные бюджеты в продвижение своих сайтов и привлечение целевого трафика. Контекстная реклама как нельзя лучше справляется с этой задачей.

Контекстная реклама – это один из самых эффективных методов продвижения в интернете, превращающий входящий трафик в заявку, которая не стоит баснословных денег. Рекламные объявления размещаются над и под результатами поисковой выдачи, выглядят они вот так:

Для того чтобы размещать подобные объявления в выдаче, необходимо зарегистрироваться в сервисе Яндекс.Директ. 

Переходим на сайт, нажимаем на кнопку “Запустить рекламу” и регистрируемся в сервисе, после регистрации вы увидите страницу приветствия:

Заполняем основные данные, принимаем условия договора и нажимаем “Начать пользоваться сервисом”. 

После этого Яндекс.Директ предложит выбрать тип кампании. В этой статье мы рассмотрим стандартную текстово-графическую кампанию, которая подходит практически для всех сайтов.

Приступаем к созданию рекламной кампании. Шаг 1 из 2.

Перед тем как запустить первую рекламную кампанию, нам необходимо задать ее настройки.

Название рекламной кампании будет видно только вам, поэтому называть ее нужно так, чтобы была возможность быстро сориентироваться и понять ее суть. Например, если вы хотите рекламировать Samsung Galaxy S10 в Москве и Московской области только на поиске, то можно назвать кампанию так “Samsung_GS10_Поиск_Москва и область”, если у вас будут десятки кампаний в аккаунте, то с такой разметкой вы всегда сможете быстро сориентироваться в нем.

Дата проведения кампаний. Автоматически выставляется сегодняшняя дата, но вы можете изменить настройки и выбрать нужное число.
Зачем это нужно? Если вы решили провести акцию или другое мероприятие, которое начинается через несколько дней, то можно выставить нужную дату и кампания запустится автоматически, также можно установить и дату окончания кампании.

Временной таргетинг. Настройка показывает в какие дни, и часы будет показано рекламное объявление. По умолчанию расписание показа 24/7. Если для вас важно, чтобы реклама работала в определенное время, например, исключительно тогда, когда операторы могут ответить на звонок, то вы можете изменить график, нажав на галочки внизу или слева. Также есть возможность изменять цену клика в определенные часы (для этого нужно перейти в режим управления ставками).

Регион показов. Здесь все просто, нужно указать место, где будет показываться ваша рекламная кампания. Справа есть панель быстрого выбора, которая позволяет не копаться в списке, а сразу подобрать нужную область. Также есть функция корректировки ставок в зависимости от региона.

Расширенный географический таргетинг позволяет показывать объявления при поиске по запросам, включающим название региона показа, даже если пользователь находится в другом регионе. Т.е. если кто-то, например в Новосибирске, ищет “купить телефон galaxy s10 в москве”, в то время как установленный регион таргетинга в кампаниях – Москва/Москва и область, то ему покажется ваше объявление.

Стратегия – важный пункт в настройке рекламных кампаний. Существуют автоматические и ручные стратегии. На начальном этапе, когда у ваших кампаний не накопилось достаточного количества конверсий (минимум 100 конверсий в месяц), стоит пользоваться исключительно ручной стратегией управления ставок. В противном случае, вы рискуете потратить весь рекламный бюджет и принести очень дорогие конверсии, разочароваться в эффективности контекстной рекламы и остановить продвижение.

Разберем более подробно этот пункт. В самом верху мы видим площадки размещения рекламы. Мы не рекомендуем настройку “на всех площадках”, так как эффективность таких кампании гораздо ниже, а при дальнейшей аналитике будет сложно определить что показало положительный результат, а что отрицательный. Лучше создать 1 кампанию только для поиска, а другую, такую же, но с немного другими текстами, только для показа в сетях.

Далее указываем дневной бюджет – это сумма, которую будет тратить Яндекс.Директ за сутки. Существует 2 режима показа:

  1. Стандартный. Реклама будет показываться без ограничений, пока расходы не достигнут среднего дневного бюджета, после этого кампании отключатся до наступления следующих суток. Этот режим показа является оптимальным, именно его мы рекомендуем выбирать при создании кампаний.
  2. Распределенный. При данном режиме бюджет будет растягиваться на сутки. Яндекс.Директ будет показывать ваши объявления не всегда, когда потребитель будет искать Samsung, а лишь иногда по своему усмотрению, из-за чего теряются драгоценные конверсии.

При помощи корректировки ставок вы можете снизить или увеличить цену клика для целевых аудиторий (которые можно создать в Яндекс.Метрике и Яндекс.Аудиториях), мобильных устройств и определенных групп людей. Стоит отметить, что такие корректировки нужно устанавливать, опираясь исключительно на данные аналитических систем, никак не на собственные ощущения.

Обязательно включайте настройку “Останавливать объявления при неработающем сайте”. Если ваш сайт неожиданно перестанет работать, то рекламные объявления автоматически остановятся и включатся, когда сайт снова станет доступен. В противном случае пользователи будут кликать на объявления и практически сразу же уходить с сайта, а деньги списываться с вашего счета.

Визитка помогает вам сделать объявление заметнее, стимулирует звонки мобильных пользователей и повышает уровень доверия. В визитке вам нужно заполнить данные о компании. В объявлениях она выглядит вот так.

Сюда необходимо вписать номер вашего счетчика Яндекс.Метрики. Мы не советуем запускать рекламные кампании без настройки аналитики, ведь так вы не сможете оценить эффективность контекстной рекламы и понять насколько она эффективна.

Для рекламных кампаний можно задавать ключевые цели, ориентируясь на которые система будет автоматически корректировать ставки. Также вы можете задать ценность конверсии.

!!! Всегда размечайте ссылки для Яндекс.Метрики. К  ссылке подставится дополнительный параметр, который будет передавать в Метрику информацию о конкретных кликах по объявлению

Чат с оператором – недавно появившаяся опция, которая позволяет добавить чат Яндекс.Диалогов в рекламные кампании. Это позволяет увеличить объем рекламного объявления и повысить CTR. Объявление с чатом выглядит вот так.

На выбранную почту вам будут приходить сообщения о расходе денежных средств, их поступлении на счет, результатах модерации, достижении дневного бюджета и другие.

Рассмотрим последнюю группу настроек

В процессе ведения рекламных кампаний мы можем видеть, что с некоторых площадок размещения приходит нецелевой трафик (перешли на сайт и сразу же вышли, просмотрели только 1 страницу и вышли и так далее). Такие площадки могут тратить внушительную часть бюджета и не приносить конверсий, поэтому лучше их исключать (разумеется при достаточном количестве кликов) и вносить в “Запрещенные площадки и внешние сети”.

Минус-фразы. Важная настройка в рекламных кампаниях, в чем ее суть рассмотрим немного позже.

Дополнительные релевантные фразы предназначены для того, чтобы помочь рекламодателю расширить семантическое ядро и охватить те ключевые фразы, которых на данный момент нет в кампаниях. В новых кампаниях данная настройка включена по умолчанию. Но на начальных этапах освоения Яндекс.Директ мы не рекомендуем пользоваться ей, так как есть вероятность, что релевантные, по мнению яндекса, фразы, будут совершенно нерелевантны услугам и товарам, которые продвигаете вы.

После того как вы создадите рекламную кампанию у вас будет возможность видеть количество кликов по ключевым фразам, ставки, минус-фразы и т.д. на отдельной странице. Эта настройка позволяет вам установить количество групп, которые будут помещаться на 1 страницу.

Если вы хотите, чтобы реклама не показывалась определенным IP-адресам, то их можно вписать сюда. Например, у вас большая компания, и сотрудники иногда могут переходить на сайт из поиска. Чтобы они случайно не кликали на рекламную кампанию и не тратили бюджет, можно внести все IP-адреса в список запрещенных.

На этом с шагом 1 мы закончили, теперь переходим к созданию групп, объявлений и подбору ключевых фраз.

Приступаем к созданию группы объявлений. Шаг 2 из 2.

Название группы. Называйте группу так, чтобы вы могли понимать какие ключи/объявления в ней содержатся. Это поможет быстро ориентироваться в аккаунте и не открывать лишний раз группу, чтобы понять какие ключевые слова в ней содержатся

Вы можете выбрать один из нескольких типов объявлений:

1. Текстово-графическое – универсальное объявление, которое подходит для рекламы большинства товаров и услуг;

2. Графическое – объявление, которое представляет собой картинку с текстом;

3. Видео – это короткий (15 секунд) рекламный ролик, при помощи которого вы также можете продвигать свои товары и услуги;

Заголовок 1. Первое, что видит потенциальный клиент – это первый заголовок, он должен быть релевантен запросу и содержать ключевое слово, это повысит CTR и привлекательность объявления. Максимальная длина заголовка 35 символов.

Заголовок 2. Здесь вы можете указать информацию (в пределах 30 символов), которая, по вашему мнению, будет отличать вас от конкурентов и привлекать покупателя.

Текст объявления. Напишите здесь параметры, которые смогут убедить покупателя совершить заказ. Используйте больше цифр и конкретных формулировок.

Ссылка. Указывайте релевантные запросу пользователя страницы сайта. Если вы в объявлении говорите о черном Samsung Galaxy S10, то пользователь должен попасть не на главную страницу сайта, а на определенную модель. Так вы сможете уменьшить показатель отказов и повысить шансы на конверсию.

Отображаемая ссылка – это псевдоадрес страницы, который будет показан в объявлении как продолжение адреса сайта. Здесь лучше указывать страницу, на которую попадет пользователь после того как кликнет на объявление.

Выбираем нужную виртуальную визитку и добавляем ее в объявление (мы создавали визитку на шаге 1).

Цена в объявлении – недавнее обновление Яндекс.Директ, которое позволяет показывать ваши объявления в товарной галерее на поиске. Для этого нам нужно указать цену рекламируемого продукта (В нашем случае это цена Samsung Galaxy S10) и изображение. В поисковой выдаче объявления выглядят так:

Быстрые ссылки. Данное дополнение позволяет вам указывать страницы, которые могут заинтересовать покупателя. Суммарная длина быстрых ссылок должна быть не больше 66 символов

Уточнения – это короткие тексты, в которых вы можете описать свои преимущества или особенности. Они будут показаны в дополнительной строке внизу объявления и смогут повысить CTR объявления до 3%! Длина одного уточнения должна быть не более 25 символов, а общая – не более 66 символов. Выглядят они так

Подбираем ключевые фразы

Автотаргетинг – позволяет не подбирать самостоятельно ключевые слова. Алгоритм анализирует текст объявления, посадочную страницу и покажет объявление, если сочтет его релевантным запросу. Но мы рекомендуем все-таки собирать ключевые фразы самостоятельно, так как вы сможете тщательнее следить за рекламой и точно знать по каким запросам она будет показываться.

Новые ключевые фразы лучше всего подбирать в Яндекс.Вордстат – это сервис, который помогает получить информацию о запросах пользователей Яндекса. Например, он позволяет узнать, сколько людей в месяц ищут ту или иную фразу, и посмотреть запросы, похожие по смыслу на вашу фразу. 

Выбираем регион размещения рекламы, вписываем предполагаемый поисковый запрос и выбираем подходящие поисковые фразы для нашей кампании 

В правом столбце – похожие на введенный запрос фразы, которые могут вас заинтересовать. Копируем подходящие ключевые слова и добавляем их в кампанию. Если мы видим какие-то “лишние слова”, по которым не нужно показывать рекламу, то добавляем их в минус-фразы на уровне кампании (пункт 15) или же на уровне группы. Например, в нашем магазине не продаются накладки на Самсунг – минусуем.
Нажимаем на кнопку “Сохранить” – наша первая рекламная кампания готова! Теперь вы знаете как задать первичные настройки для запуска рекламной кампании в Яндекс.Директ.

Создание объявления в Яндекс Директ: текст и заголовок рекламы

Грамотно составленное объявление — успех рекламной кампании (РК). Однако кроме этого, оно должно также соответствовать правилам рекламной сети. Сегодня AdButton расскажет, как это сделать в системе Яндекс Директ.

Требования Яндекса

В рекламной сети Директ есть перечень запрещенных тематик, реклама которых не пропускается ни в каком виде:

  • алкоголь;
  • никотиновые изделия, курительные смеси и электронные сигареты;
  • оружие и наркотики;
  • ювелирные интернет-магазины;
  • интернет-аптеки;
  • казино, азартные игры и адалт.

Для продукции или услуг, касающихся финансов, перевозок, медицины, страхования и другого, требуется предоставить разрешительную документацию.

Что касается самого текста объявления, то и тут есть ряд запретов:

  • составление сообщения из заглавных букв;
  • повторы;
  • размещение знаков внимания (!!!) в самом начале заголовка;
  • прописывать каждое слово с заглавной буквы;
  • широкий текст;
  • телефоны и электронную почту;
  • сравнения с товарами похожей группы;
  • недостоверные сведения.

Как правильно подобрать поисковые запросы

Используя специальный сервис Wordstat Yandex нужно составить список ключевых запросов, по которым будет транслироваться реклама в поиске. Вначале определяются популярные запросы в поисковиках, после — уточняющие, синонимы и минус-слова. Чем больше наполнение списка — тем эффективнее будет кампания и точнее трансляция.

Определяем главный запрос. У нас это «палатка для зимней рыбалки».

Теперь нужно создать семантическое ядро РК. Полученный список нужно скопировать в таблицы и очистить от нерелевантных ключей. Тут же определяем и минус-слова. Если список небольшой, желательно делать это вручную. Это поможет улучшить качество выдачи, а значит, и трафика, соответственно. Если же список минус площадок для рся большой и вручную его не осилить — на помощь придут такие программы как Key Collector, Yandex Wordstat Assistant. 

Работа с операторами

Для улучшения рекламной кампании стоит использовать не только ключи для рся, но и так называемые «операторы» — специальные символы, при помощи которых можно прописать специальную реакцию на отдельную фразу.

Операторы:

  1. «+» (плюс). Используется в случае, когда необходим запрос с предлогами и союзами. К примеру, фраза «для зимней рыбалки» будет транслировать сообщения по ключам «зимняя рыбалка», «зимняя рыбалка в Карпатах», и т.д.

Запрос «+ для зимней рыбалки» покажет объявление лишь при поиске конкретно этой фразы.

  1. «-» (минус). В Директе — минус слова. Применяют при отладке кампании по высокочастотным запросам. Чем более точно указаны минус-слова, тем более качественным будет трафик.
  2. «!» (восклицание). Данный оператор закрепляет словоформу в запросе. Фраза «+для! летнего! отдыха» будет выдавать объявление по поиску «для летнего отдыха», «места для летнего отдыха», но не будет транслироваться по «куда поехать на летний отдых».
  3. «» (кавычки). Дает возможность закрепить фразу. Показ происходит только по ней, в любой словоформе.
  4. «()» (скобки). При помощи этого оператора можно объединить в одну группу несколько однотипных ключей. Все они прописываются внутри скобок через знак «|». Например «гитара акустическая (Cort|Yamaha|Trembita). Конверсия на таких фразах ниже за счет нерелевантности.
  5. «[]» (квадратные скобки). В этом случае оператор поможет закрепить необходимый порядок слов. При поиске «самолет Киев-Варшава» будут транслироваться и объявления «Варшава-Киев». Использование квадратных скобок «самолет [Киев-Варшава]» исключит такой вариант.

Создание текстового рекламного сообщения

Проработка заголовка

Заголовок в рекламе — первое, что видит пользователь в объявлении. Существует очень много методов составления конверсионного названия, но работая в «Директе» не стоит использовать их вслепую. Чем больше заголовок рекламного текста соответствует теме поиска — тем выше будет кликабельность.

Если финансы позволяют, то желательно составлять текстовые объявления для каждого ключа в списке. Если речь идет о товарах, можно прибегнуть к использованию специальных сервисов, которые автоматически сгенерируют объявления под каждый товар. В таком случае заголовок рекламы будет совпадать с названием товара и точным ключом на поиске.

В рекламной сети Яндекса (РСЯ) трансляция происходит без подвязки к поисковым фразам. Главная цель РСЯ — заинтересовать читателя и вынудить совершить переход.

Эффективность максимального уровня будет достигнута в том случае, если под поиск и РСЯ будут создаваться отдельные рекламные сообщения.

Формулы, по одной из которых желательно составлять заголовок:

  1. Качество/товар/созданный для/преимущество.
  2. Займитесь желаемым делом без/неприятные эмоции/неожиданный метод.
  3. Уберите проблему/неожиданным методом.

С недавних пор в объявлениях Яндекса разрешено составлять два заголовка. Первый, например, может состоять из поискового ключа, а второй — иметь эмоциональную составляющую. Для первого варианта доступно не больше 35 символов, второго — 30. Плюс дополнительно 15 символов на знаки препинания.

Составление текста

В описание не обязательно интегрировать поисковые фразы, тем более, если это уже сделано в заголовке. При наличии достаточного количества информации, которую стоит указать в тексте, запросы можно не дублировать. И наоборот — при неимении данных обыгрываем ключи в самом описании.

Тут допускается:

  • раскрытие и уточнение данных названия;
  • подача дополнительных сведений о продукции;
  • представление рекламодателя, компании, бренда;
  • обращение к потребностям и желаниям клиента.

Общее количество символов — 81, поэтому тут правило «Краткость — сестра таланта» особенно актуально. На знаки так же выделяется 15 символов.

Быстрые ссылки

К каждому сообщению можно крепить до 4-ех быстрых ссылок. Это сделает серфинг более удобным. Требования для ссылок:

  • приводят на разные веб-страницы;
  • название соответствует главной теме;
  • ведут на ресурс заказчика или его страницы в соцсетях.

Этот инструмент делает ваши возможности значительно шире, и при правильном использовании может принести большую пользу.

Задача этого блока объявления:

  • Быстрый доступ к дополнительным данным.
  • Сделать проще поиск и сортировку продукции по разным критериям.
  • Предложить сопутствующие товары.

Добавление изображения

Трансляция картинок будет производиться в сообщениях РСЯ. Файл должен быть должного качества и соответствовать продукту, который рекламируется. Лого и текст на изображении могут занимать не больше 20% общей площади. Присутствие изображений людей и детей допустимо в случае, если это соответствует тематике.

Подбор фото лучше делать в соответствии с контекстом объявления:

  • Продавая товары — его изображение на белом фоне крупным планом, но без мелких деталей.
  • Если речь идет о продвижении популярного бренда — вместо иллюстрации лучше поместить его логотип.
  • При рекламе услуг вставляйте фотографии из результата. Для парикмахерской — стрижку, тренажерного зала — накачанное тело, туристического оператора — фото моря и пляжа.

Ограничение максимальной длины пути — приложения Win32

  • 4 минуты на чтение

В этой статье

В Windows API (за некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути составляет MAX_PATH , что определяется как 260 символов. Локальный путь структурирован в следующем порядке: буква диска, двоеточие, обратная косая черта, компоненты имени, разделенные обратными косыми чертами, и завершающий нулевой символ.Например, максимальный путь на диске D равен «D: \ , некоторая строка пути из 256 символов », где «» представляет собой невидимый завершающий нулевой символ для текущей системной кодовой страницы. (Символы <> используются здесь для наглядности и не могут быть частью допустимой строки пути.)

Например, вы можете столкнуться с этим ограничением, если клонируете репозиторий git с длинными именами файлов в папку с длинным именем.

Примечание

Функции файлового ввода-вывода в Windows API преобразуют «/» в «\» как часть преобразования имени в имя в стиле NT, за исключением случаев использования префикса «\\? \», Как подробно описано в следующих разделах.

Windows API имеет множество функций, которые также имеют версии Unicode, чтобы разрешить путь увеличенной длины для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратной косой чертой, каждый до значения, возвращаемого в параметре lpMaximumComponentLength функции GetVolumeInformation (это значение обычно составляет 255 символов). Чтобы указать путь с увеличенной длиной, используйте префикс «\\? \». Например, «\\? \ D: \ очень длинный путь ».

Примечание

Максимальный путь в 32 767 символов является приблизительным, поскольку префикс «\\? \» Может быть расширен системой до более длинной строки во время выполнения, и это расширение применяется к общей длине.

Префикс «\\? \» Также может использоваться с путями, построенными в соответствии с универсальным соглашением об именах (UNC). Чтобы указать такой путь с помощью UNC, используйте префикс «\\? \ UNC \». Например, «\\? \ UNC \ server \ share», где «server» — это имя компьютера, а «share» — имя общей папки.Эти префиксы не используются как часть самого пути. Они указывают на то, что путь должен быть передан в систему с минимальными изменениями, что означает, что вы не можете использовать косую черту для обозначения разделителей путей, точки для представления текущего каталога или двойных точек для представления родительского каталога. Поскольку вы не можете использовать префикс «\\? \» С относительным путем, относительные пути всегда ограничены общим числом MAX_PATH символов.

Нет необходимости выполнять какую-либо нормализацию Unicode для строк пути и имени файла для использования функциями API ввода-вывода файлов Windows, поскольку файловая система обрабатывает путь и имена файлов как непрозрачную последовательность WCHAR s.Любая нормализация, которая требуется вашему приложению, должна выполняться с учетом этого, вне каких-либо вызовов связанных функций API ввода-вывода файлов Windows.

При использовании API для создания каталога указанный путь не может быть настолько длинным, чтобы нельзя было добавить имя файла 8.3 (то есть имя каталога не может превышать MAX_PATH минус 12).

Оболочка и файловая система имеют разные требования. С помощью Windows API можно создать путь, который пользовательский интерфейс оболочки не может правильно интерпретировать.

Включить длинные пути в Windows 10, версия 1607 и более поздние версии

Начиная с Windows 10 версии 1607, MAX_PATH были сняты ограничения с общих функций файлов и каталогов Win32. Однако вы должны согласиться на новое поведение.

Чтобы включить новое поведение длинного пути, должны быть выполнены оба следующих условия:

  • Раздел реестра Computer \ HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem \ LongPathsEnabled (Тип: REG_DWORD) должен существовать и иметь значение 1.Значение ключа будет кэшироваться системой (для каждого процесса) после первого вызова затронутой функции файла Win32 или каталога (список функций см. Ниже). Ключ реестра не будет перезагружен в течение всего времени существования процесса. Чтобы все приложения в системе распознали значение ключа, может потребоваться перезагрузка, поскольку некоторые процессы могли быть запущены до того, как был установлен ключ.

Вы также можете скопировать этот код в файл .reg , который может установить это для вас, или использовать команду PowerShell из окна терминала с повышенными привилегиями:

  Редактор реестра Windows версии 5.00

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem]
"LongPathsEnabled" = двойное слово: 00000001

  
  New-ItemProperty -Path "HKLM: \ SYSTEM \ CurrentControlSet \ Control \ FileSystem" `
-Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force

  

Примечание

Этим ключом реестра также можно управлять с помощью групповой политики по адресу Computer Configuration> Administrative Templates> System> Filesystem> Enable Win32 long paths .

  • Манифест приложения также должен включать элемент longPathAware .

      
        
             true 
        
    
      

Это функции управления каталогом, которые больше не имеют ограничений MAX_PATH , если вы выбираете поведение длинного пути: CreateDirectoryW, CreateDirectoryExW GetCurrentDirectoryW RemoveDirectoryW SetCurrentDirectoryW.

Это функции управления файлами, которые больше не имеют ограничений MAX_PATH , если вы выбираете поведение длинного пути: CopyFileW, CopyFile2, CopyFileExW, CreateFileW, CreateFile2, CreateHardLinkW, CreateSymbolicLinkW, DeleteFileW, FindFirstFileW, GetFirstFileExiles , SetFileAttributesW, GetFullPathNameW, GetLongPathNameW, MoveFileW, MoveFileExW, MoveFileWithProgressW, ReplaceFileW, SearchPathW, FindFirstFileNameW, FindNextFileNameW, FindFirstStreamW, GetNextressFileNameW,.

Строки и символы VBA — строковый тип данных

Строковый тип данных

В VBA есть два типа строковых переменных: фиксированная длина и переменная длина

фиксированная длина

Строковый тип данных фиксированной длины может содержать от 1 до 65 400 символов .
Максимальная длина 65 535 символов
Этот тип данных использует? (длина строки)
Значение по умолчанию — количество пробелов, равное длине строки.
Строка фиксированной длины определяется следующим образом:

 Dim sFirstName As String * 20 

sFirstName = "Monday"
Call Msgbox ("" ​​"" & sFirstName & "" "")

В приведенном выше коде отображается следующее сообщение «Рассел».
Это показывает, что содержимое дополнено пробелами для достижения фиксированной длины.

Они объявляются с указанным количеством символов.
Когда вы объявляете переменную как строку типа данных, вы можете указать максимальную длину этой строки.
Работа со строками фиксированной длины немного более эффективна, чем работа со строками переменной длины.
Строки фиксированной длины часто передаются в Windows API.

Переменная длина

Строковый тип данных переменной длины может содержать от 0 до 2 миллиардов символов.
Этот тип данных использует? (10 + длина строки)
Значение по умолчанию — пустая строка «».
Этот тип данных автоматически увеличивается и уменьшается в размере в зависимости от количества символов.

Строка переменной длины определяется следующим образом:

 Dim sFirstName As String 

Строковая переменная этого типа может содержать строку любой длины.
Этот тип используется чаще всего.

Строке переменной длины по умолчанию назначается строка нулевой длины («»), пустая строка или пустая строка.
Не следует путать с пустым значением неназначенного варианта.
Строка нулевой длины не является ни пустой (поскольку ей присвоено значение), ни NULL.


© 2021 Better Solutions Limited. Все права защищены. © 2021 Better Solutions Limited TopPrevNext

Extensible Markup Language (XML) 1.0 (пятое издание)

1 Введение

Extensible Markup Language, сокращенно XML, описывает класс данных
объекты, называемые XML-документами и частично
описывает поведение компьютерных программ, которые их обрабатывают.XML — это
профиль приложения или ограниченная форма SGML, Standard Generalized Markup
Язык [ISO 8879]. По своей конструкции XML-документы соответствуют
Документы SGML.

XML-документы состоят из единиц хранения, называемых сущностями,
которые содержат проанализированные или не проанализированные данные. Анализируемые данные состоят из символов, некоторые из которых образуют символ
данные, а некоторые из них образуют разметку.
Разметка кодирует описание схемы хранения документа и логические
состав. XML предоставляет механизм для наложения ограничений на структуру хранилища.
и логическая структура.

[Определение: программный модуль под названием
XML-процессор используется для чтения XML-документов и предоставления доступа
к их содержанию и структуре.]
[Определение: Это
предполагается, что процессор XML выполняет свою работу от имени другого модуля,
называется приложением .] В данной спецификации описывается
требуемое поведение процессора XML с точки зрения того, как он должен читать XML
данные и информацию, которую они должны предоставить приложению.

1.1 Происхождение и цели

XML был разработан рабочей группой XML (первоначально известной как SGML
Редакционный совет по обзору), сформированный под эгидой Консорциума World Wide Web.
(W3C) в 1996 году.Его председательствовал Джон Босак из Sun Microsystems с активным
участие XML Special Interest Group (ранее известной как SGML
Рабочая группа), также организованная W3C. Членство в XML Working
Группа приведена в приложении. Дэн Коннолли был контактным лицом Рабочей группы с
W3C.

Цели разработки XML:

  1. XML должен быть легко доступен через Интернет.

  2. XML должен поддерживать широкий спектр приложений.

  3. XML должен быть совместим с SGML.

  4. Программа, обрабатывающая XML-документы, должна быть простой.

  5. Количество дополнительных функций в XML должно быть сведено к абсолютному
    минимум, в идеале ноль.

  6. XML-документы должны быть удобочитаемыми и достаточно четкими.

  7. XML-дизайн должен быть подготовлен быстро.

  8. Дизайн XML должен быть формальным и лаконичным.

  9. XML-документы должны быть легкими в создании.

  10. Краткость разметки XML имеет минимальное значение.

Эта спецификация вместе со связанными стандартами (Unicode [Unicode]
и ISO / IEC 10646 [ISO / IEC 10646] для символов, Internet BCP 47
[IETF BCP 47] и реестр языковых подтэгов [IANA-LANGCODES] для языка
идентификационные метки), обеспечивает
вся информация, необходимая для понимания XML версии 1.0 и
создавать компьютерные программы для его обработки.

Эта версия спецификации XML может распространяться бесплатно до тех пор, пока
все текстовые и юридические уведомления остаются без изменений.

1.2 Терминология

Терминология, используемая для описания XML-документов, определена в теле
эта спецификация. Ключевые слова ДОЛЖНЫ , НЕ ДОЛЖНЫ ,
ТРЕБУЕТСЯ , ДОЛЖЕН , НЕ ДОЛЖЕН ,
ДОЛЖЕН , НЕ ДОЛЖЕН , РЕКОМЕНДУЕТСЯ ,
МАЙ и ДОПОЛНИТЕЛЬНО , когда ВЫЧИСЛЕНА ,
должны интерпретироваться, как описано в [IETF RFC 2119].Кроме того, термины определены
в следующем списке используются в строительстве
эти определения и в описании действий процессора XML:

ошибка

[Определение: нарушение правил данной спецификации;
результаты не определены. Если не указано иное, несоблюдение предписания данной спецификации, обозначенное одним из ключевых слов ДОЛЖНО , ТРЕБУЕТСЯ , НЕ ДОЛЖНО , ДОЛЖНЫ и НЕ ДОЛЖНЫ , является ошибкой.Соответствующее программное обеспечение МОЖЕТ обнаружить ошибку и сообщить об ошибке.
и МАЯ взыскать с него.]

фатальная ошибка

[Определение: ошибка, которую соответствующий процессор XML
ДОЛЖЕН обнаруживать и сообщать приложению.
После обнаружения фатальной ошибки процессор МОЖЕТ продолжить обработку
данные для поиска дополнительных ошибок, и МОЖЕТ сообщать о таких ошибках в приложение.
Для поддержки исправления ошибок процессор МОЖЕТ делать необработанные
данные из документа (со смешанными символьными данными и разметкой) доступны
к приложению.Однако при обнаружении фатальной ошибки процессор
НЕ ДОЛЖЕН продолжать нормальную обработку (т. Е. НЕ ДОЛЖЕН продолжать передавать символ
данные и информация о логической структуре документа для приложения
обычным способом).]

по выбору пользователя

[Определение: соответствующее программное обеспечение
МОЖЕТ или ДОЛЖЕН (в зависимости от модального глагола в предложении) вести себя, как описано;
если это так, он ДОЛЖЕН предоставлять пользователям средства для включения или отключения поведения
описано.]

ограничение срока действия

[Определение: правило, применимое к
все действительные XML-документы. Нарушение срока действия
ограничения — это ошибки; они ДОЛЖНЫ быть сообщены , по выбору пользователя, проверяющими процессорами XML.]

ограничение правильности

[Определение: применимое правило
ко всем правильно сформированным XML-документам. Нарушения
ограничений корректности являются фатальными ошибками.]

соответствие

[Определение: (Строк или имен 🙂 Две строки
или сравниваемые имена идентичны.Персонажи с несколькими возможными
представления в ISO / IEC 10646 (например, символы с предварительно составленными и
базовые + диакритические формы) совпадают, только если они имеют одинаковое представление в обоих
струны. Нет
футляр складывается. (О строках и правилах грамматики 🙂 Строка
соответствует грамматической продукции, если она принадлежит к языку, сгенерированному
это производство. (О моделях содержимого и содержимого 🙂 Элемент соответствует его объявлению
когда он соответствует способу, описанному в ограничении [VC: Element Valid] .]

для совместимости

[Определение: знаки
предложение, описывающее функцию XML, включено исключительно для обеспечения
этот XML остается совместимым с SGML.]

для взаимодействия

[Определение: знаки
предложение, описывающее необязательную рекомендацию, включенную для увеличения
шансы, что XML-документы могут быть обработаны существующим установленным
база процессоров SGML, предшествующих приложению WebSGML Adaptations к ISO 8879.]

2 документа

[Определение: объект данных — это XML
документ
, если он правильно сформирован,
как определено в этой спецификации. Кроме того, XML-документ
действительно, если он отвечает определенным дополнительным ограничениям.]

Каждый XML-документ имеет как логическую, так и физическую структуру. Физически,
документ состоит из единиц, называемых объектами.
Организация может
ссылаться на другие объекты на
вызывают их включение в документ. Документ начинается с «корня»
или документ.Логично, что документ
состоит из объявлений, элементов, комментариев, ссылок на символы и
инструкции по обработке, все из которых указаны в документе явными
разметка. Логические и физические структуры ДОЛЖНЫ правильно размещаться, как описано
в 4.3.2 Хорошо сформированные анализируемые объекты .

2.1 Хорошо оформленные XML-документы

[Определение: текстовый объект — это правильно сформированный
XML-документ, если:]

  1. В целом соответствует документу с маркировкой производства.

  2. Соответствует всем ограничениям правильности формы, указанным в данной спецификации.

  3. Каждая из проанализированных сущностей
    который прямо или косвенно упоминается в документе, имеет правильный формат.

Документ

Соответствие продукции документа подразумевает, что:

  1. Он содержит один или несколько элементов.

  2. [Определение: есть ровно один элемент,
    называется корнем или элементом документа, никакая часть которого не отображается
    в содержании любого другого элемента.] Для
    все остальные элементы, если начальный тег находится в
    содержимое другого элемента, конечный тег
    находится в содержимом того же элемента. Проще говоря, элементы,
    разделены начальным и конечным тегами, правильно вкладываются друг в друга.

[Определение: как следствие этого,
для каждого некорневого элемента C в документе есть еще один элемент P
в документе так, что C находится в содержании P , но
не входит в состав любого другого элемента, который есть в содержании P . P
упоминается как родительский элемент для C и C как
ребенок из P .]

2.2 Символы

[Определение: проанализированный объект содержит текста ,
последовательность символов, которая может
представляют разметку или символьные данные.]
[Определение: символ
является элементарной единицей текста, как указано в ISO / IEC 10646: 2000 [ISO / IEC 10646]. Допустимые символы — табуляция, каретка
возврат, перевод строки и допустимые символы
Unicode и ISO / IEC 10646.В
версии этих стандартов, процитированные в A.1 Нормативные ссылки , были
действующий на момент подготовки этого документа. Могут быть добавлены новые персонажи
к этим стандартам путем внесения поправок или новых редакций. Следовательно, процессоры XML
ДОЛЖЕН принимать любой символ в диапазоне, указанном для Char.
]

Диапазон символов
[2] Char :: = # x9 | #xA | #xD | [# x20- # xD7FF] | [# xE000- # xFFFD] | [# x10000- # x10FFFF] / * любой символ Unicode, за исключением суррогатных блоков, FFFE и FFFF.* /

Механизм кодирования кодовых точек символов в битовые шаблоны может
варьироваться от объекта к объекту. Все процессоры XML ДОЛЖНЫ принимать UTF-8 и UTF-16.
кодировки Unicode [Unicode];
механизмы для сигнализации, какой из двух используется,
или для включения других кодировок в игру, обсуждаются позже, в 4.3.3 Кодирование символов в объектах .

Примечание:

Авторам документов рекомендуется избегать
«совместимые символы», как определено
в разделе 2.3 из [Unicode]. Символы, определенные в следующих диапазонах, также
обескуражен. Это либо управляющие символы, либо постоянно неопределенный Unicode.
символы:

 [# x7F- # x84], [# x86- # x9F], [# xFDD0- # xFDEF],
[# x1FFFE- # x1FFFF], [# x2FFFE- # x2FFFF], [# x3FFFE- # x3FFFF],
[# x4FFFE- # x4FFFF], [# x5FFFE- # x5FFFF], [# x6FFFE- # x6FFFF],
[# x7FFFE- # x7FFFF], [# x8FFFE- # x8FFFF], [# x9FFFE- # x9FFFF],
[# xAFFFE- # xAFFFF], [# xBFFFE- # xBFFFF], [# xCFFFE- # xCFFFF],
[# xDFFFE- # xDFFFF], [# xEFFFE- # xEFFFF], [# xFFFFE- # xFFFFF],
[# x10FFFE- # x10FFFF].

2.3 Общие синтаксические конструкции

В этом разделе определяются некоторые символы, широко используемые в грамматике.

S (пробел) состоит из одного или нескольких пробелов (# x20)
символы, возврат каретки, перевод строки или табуляция.

Белое пространство
[3] S :: = (# x20 | # x9 | #xD | #xA) +

Примечание:

Присутствие #xD в приведенной выше продукции
поддерживается исключительно для обратной совместимости с
Первое издание.Как объясняется в 2.11 Обработка конца строки ,
все символы #xD буквально присутствуют в XML-документе
либо удаляются, либо заменяются символами #xA перед
любая другая обработка сделана. Единственный способ получить символ #xD, соответствующий этой продукции, — это
используйте ссылку на символ в литерале значения объекта.

Nmtoken (токен имени) — это любое сочетание имен
символы.

[Определение: имя — это Nmtoken с ограниченным набором начальных символов.] Запрещенные начальные символы для имен включают цифры, диакритические знаки, точку и дефис.

Имена, начинающиеся со строки « xml »,
или с любой строкой, которая соответствует (('X' | 'x') ('M' | 'm') ('L' | 'l')) ,
зарезервированы для стандартизации в этой или будущих версиях данной спецификации.

Примечание:

Пространства имен в Рекомендации XML [XML Names] присваивают значение
для имен, содержащих символы двоеточия. Поэтому авторам не следует использовать
двоеточие в именах XML, за исключением целей пространства имен, но процессоры XML должны
принять двоеточие как символ имени.

Первый символ имени ДОЛЖЕН быть NameStartChar, а любой
другие символы ДОЛЖНЫ быть NameChars; этот механизм используется для
запретить имена начинаться с европейских (ASCII) цифр или с
основные сочетания персонажей. Почти все символы разрешены в
имена, за исключением тех, которые либо являются, либо разумно могут быть использованы в качестве
разделители. Намерение должно быть инклюзивным, а не исключительным,
так что системы письма, еще не закодированные в Unicode, могут использоваться в
Имена XML.См. J Предложения для имен XML для предложений по созданию
имена.

Авторам документов рекомендуется использовать имена,
значимые слова или комбинации слов на естественных языках, и
чтобы избежать использования символов или пробелов в именах. Обратите внимание, что
ТОЛЧКА, ДЕФИС-МИНУС, ПОЛНЫЙ СТОП (точка), НИЖНЯЯ СТРОКА (подчеркивание) и
СРЕДНЯЯ ТОЧКА явно разрешена.

Символы и знаки препинания ASCII, а также довольно
большая группа символов Unicode, исключена из имен
потому что они более полезны в качестве разделителей в контекстах, где XML
имена используются вне XML-документов; предоставление этой группы дает
в этих контекстах жесткие гарантии того, что не может быть частью
имя XML.Символ # x037E, ГРЕЧЕСКИЙ ВОПРОСНЫЙ ЗНАК, исключен.
потому что при нормализации он становится точкой с запятой, которая может изменить
значение ссылок на сущности.

Имена и токены

Lite

любая строка в кавычках, не содержащая использованных кавычек
как разделитель для этой строки.'] * "'")

[4] NameStartChar :: = ":" | [А-Я] | "_" | [а-я] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# x10000- # xEFFFF]
[4a] NameChar :: = NameStartChar | "-" | "."| [0-9] | # xB7 | [# x0300- # x036F] | [# x203F- # x2040]
[5] Имя :: = NameStartChar (NameChar) *
[6] Имена :: = Имя (# x20 Имя) *
[7ken]

:: = (NameChar) +
[8] Nmtokens :: = Nmtoken (# x20 Nmtoken) *
[12] PubidLiteral :: = '"' PubidChar * '"'
| "'" (PubidChar - "'") * "'"
[13] PubidChar :: = # x20 | #xD | #xA | [a-zA-Z0-9] | [- '() +,. /: =?;! * # @ $ _%]

Примечание:

Хотя
продукция EntityValue позволяет определение
общей сущности, состоящей из одного явного < в буквальном
(е.g., ), настоятельно рекомендуется избегать
эта практика, поскольку любая ссылка на эту сущность приведет к правильной формулировке
ошибка.

2.4 Символьные данные и разметка

Текст состоит из смешанных символьных данных и разметки. [Определение:
Разметка принимает форму начальных тегов, конечных тегов, тегов пустых элементов, ссылок на сущности, символа
ссылки, комментарии, разделители разделов CDATA, документ
объявления типов, инструкции обработки, объявления XML, текстовые объявления,
и любое пустое пространство на верхнем уровне сущности документа (которое
находится вне элемента документа, а не внутри какой-либо другой разметки).]

[Определение: весь текст без разметки.
составляет символьных данных документа.]

Символ амперсанда (&) и левая угловая скобка (<) НЕ ДОЛЖНЫ появляться
в их буквальной форме, кроме случаев, когда они используются в качестве разделителей разметки, или
внутри комментария обработка
инструкция или раздел CDATA.

Если они нужны где-то еще, они ДОЛЖНЫ быть сброшены
с использованием ссылок на числовые символы
или струны "
& amp;
" а также "
& lt;
"
соответственно.Правая угловая скобка (>) может быть представлена ​​строкой "
& gt;
",
и НЕОБХОДИМО, чтобы для совместимости не использовались.
используя либо "
& gt;
"или ссылку на символ, когда он
появляется в строке "
]]>
"в содержании, когда
эта строка не отмечает конец CDATA
раздел.

В содержании элементов символьные данные представляют собой любую строку символов. <&] *)

2.5 комментариев

[:
Комментарии могут появиться
в любом месте документа за пределами другой разметки;
кроме того, они могут появляться в объявлении типа документа в местах
разрешено грамматикой. Они не являются частью характера документа.
данные; XML-процессор МОЖЕТ , но не обязательно, делает возможным
приложение для получения текста комментариев. Для
совместимость, строка "

"(двойной дефис)
НЕ ДОЛЖЕН появляться в комментариях.] Параметр
Ссылки на объекты НЕ ДОЛЖНЫ распознаваться в комментариях .

Комментарии
[15] Комментарий :: = ''

Пример комментария:

  &  -> 

Примечание.
что грамматика не допускает комментарии, оканчивающиеся на --->
в следующем примере не правильно сформирован.

2.6 Инструкции по обработке

[Определение:
Инструкции по обработке
(PI) позволяют документам содержать инструкции для приложений.]

Инструкции по обработке
[16] PI :: = '' Char *)))? '?>'
[17] PITarget :: =
Имя - (('X' | 'x') ('M' |
'm') ('L' | 'l'))

PI не являются частью символа документа
data, но ДОЛЖЕН быть передан приложению.PI начинается
с целью (PITarget), используемой для идентификации приложения
на которую направлена ​​инструкция. Целевые имена "
XML
","
xml
",
и так далее, зарезервированы для стандартизации в этой или будущих версиях этого
Технические характеристики. Механизм нотации XML
может использоваться для формального объявления целей PI. Параметр
ссылки на объекты НЕ ДОЛЖНЫ распознаваться в инструкциях по обработке.

2.7 Разделы CDATA

[Определение:
Разделы CDATA могут встречаться везде, где могут встречаться символьные данные; они используются для выхода из блоков
текста, содержащего символы, которые иначе были бы распознаны как разметка.Разделы CDATA начинаются со строки "

"
и закончить строкой "
]]>
":]

Разделы CDATA
[18] CDSect :: =
CDStart
CData
CDEnd
[19] CDStart :: = '
[20]

CData (симв. * - (симв. *
']]>' Char *))
[21] CDEnd :: = ']]>'

В разделе CDATA только CDEnd строка
распознается как разметка, поэтому могут встречаться левые угловые скобки и амперсанды
в их буквальном виде; их не нужно (и нельзя) избежать с помощью "
& lt;
"
а также "
& amp;
".Разделы CDATA не могут быть вложенными.

Пример раздела CDATA, в котором "
<приветствие>
"
а также "

"распознаются как символьные данные, а не как разметка:

  Hello, world! ]]> 

2.8 Декларация пролога и типа документа

[Определение: XML-документы ДОЛЖНЫ
начните с декларации XML , которая определяет версию
XML используется.] Например, это полный XML-документ, правильно сформированный, но недействительный:

 
 Привет, мир!  

и вот это:

  Привет, мир!  

Функция разметки в XML-документе - описать его хранилище и
логическая структура и связанный атрибут
пары имя-значение с их логической структурой. XML предоставляет механизм,
документ
объявление типа для определения ограничений логической структуры
и для поддержки использования предопределенных единиц хранения.[Определение: документ XML действителен , если с ним связан
объявление типа документа и соответствие документа ограничениям
выражено в нем.]

Объявление типа документа ДОЛЖНО появиться перед первым элементом
в документе.

Prolog

Несмотря на то, что версия VersionNum совпадает
любой номер версии в форме «1.x», документы XML 1.0 НЕ ДОЛЖНЫ указывать номер версии , отличный от «1.0».

Примечание:

Когда XML 1.0 обработчик обнаруживает документ, в котором указано
номер версии 1.x, отличный от 1.0, он будет обрабатывать его как
документ 1.0. Это означает, что процессор XML 1.0 примет
Документы 1.x при условии, что в них не используются какие-либо функции, отличные от 1.0.

[Определение: документ XML
объявление типа
содержит или указывает на разметку
объявления, которые обеспечивают грамматику для класса документов. Этот
грамматика известна как определение типа документа или DTD . Документ
объявление типа может указывать на внешнее подмножество (особый вид внешней сущности), содержащее объявления разметки,
или может содержать объявления разметки непосредственно во внутреннем подмножестве, или
может сделать и то, и другое.DTD для документа состоит из обоих подмножеств, взятых вместе.]

[Определение: декларация разметки
объявление типа элемента, объявление списка атрибутов, сущность
декларация или декларация нотации.]
Эти объявления могут содержаться полностью или частично в параметре
сущности, как описано в ограничениях корректности и достоверности
ниже. Для дальнейшего
информацию см. 4 Physical Structures .

Определение типа документа

Примечание
что можно создать правильно сформированный документ, содержащий doctypedecl
который не указывает на внешнее подмножество и не содержит внутреннего подмножества.

Объявления разметки могут состоять полностью или частично из замещающего текста параметра.
сущности. Производство, приведенное ниже в этой спецификации для индивидуальных
нетерминалы (elementdecl, AttlistDecl,
и так далее) описать объявления после все параметры
объекты были включены.

Параметр
ссылки на сущности распознаются в любом месте DTD (внутренние и внешние
подмножеств и сущностей внешних параметров), за исключением литералов, инструкций обработки,
комментарии и содержимое игнорируемых условных разделов (см. 3.4 Условные разделы ).
Они также распознаются в литералах значений сущностей. Использование сущностей параметров
во внутреннем подмножестве ограничено, как описано ниже.

Ограничение допустимости: Тип корневого элемента

Имя
в объявлении типа документа ДОЛЖЕН соответствовать типу элемента корневого элемента.

Ограничение действительности: правильное объявление / вложение PE

Текст замены объекта параметра
ДОЛЖЕН быть правильно вложен с объявлениями разметки.То есть, если
первый или последний символ объявления разметки (markupdecl
выше) содержится в тексте замены для объекта-параметра
ссылка, оба ДОЛЖНЫ содержаться в одном тексте замены.

Ограничение правильной формы: PE во внутреннем подмножестве

In
внутреннее подмножество DTD, ссылки на сущности параметров
НЕ ДОЛЖЕН встречаться в объявлениях разметки; они могут возникать там, где могут появляться объявления разметки.(Это не относится к ссылкам, которые встречаются во внешних объектах параметров
или к внешнему подмножеству.)

Ограничение корректности: внешнее подмножество

Внешнее подмножество, если оно есть, ДОЛЖНО соответствовать продукту для extSubset.

Ограничение корректности: PE между объявлениями

Текст замены ссылки на сущность параметра
в DeclSep
ДОЛЖЕН соответствовать производственной extSubsetDecl.

Как внутреннее подмножество, внешнее подмножество и любой внешний параметр
упомянутые объекты
в DeclSep
ДОЛЖЕН состоять из серии
полные объявления разметки типов, разрешенных нетерминальным символом markupdecl, с вкраплениями пробелов или ссылок на сущности параметров.Однако части
содержимое внешнего подмножества или этих
сущности внешних параметров можно условно игнорировать с помощью конструкции условного раздела; это не
разрешено во внутреннем подмножестве, но
разрешено во внешних объектах параметров, на которые ссылается внутреннее подмножество.

Внешнее подмножество

Внешнее подмножество и сущности внешних параметров также отличаются от
внутреннее подмножество в том, что в них, параметр-сущность
разрешены ссылки в декларациях разметки ,
не только между объявлениями разметки .

Пример XML-документа с объявлением типа документа:

 

 Привет, мир!  

Системный идентификатор
"
привет.dtd
"
дает адрес (ссылку URI) DTD для документа.

Объявления также можно указывать локально, как в этом примере:

 

]>
 Hello, world!  

Если используются как внешние, так и внутренние подмножества, внутреннее подмножество
ДОЛЖЕН рассматриваться как возникший до внешнего подмножества.Это приводит к тому, что объявления сущностей и списков атрибутов во внутреннем
подмножества имеют приоритет над таковыми во внешнем подмножестве.

2.9 Объявление автономного документа

Объявления разметки могут влиять на содержимое документа, как передано из
процессор XML для приложения; Примеры
являются значениями атрибутов по умолчанию и объявлениями сущностей. Объявление автономного документа,
который может появляться как компонент объявления XML, сигнализирует о том,
нет таких деклараций, которые кажутся внешними по отношению к документу
организация
или в объектах параметров.[Определение: внешний вид
декларация разметки
определяется как декларация разметки, встречающаяся в
внешнее подмножество или в объекте параметра (внешнем или внутреннем, последний
включен, потому что непроверяющие процессоры не обязаны читать
их).]

Декларация автономного документа

В декларации автономного документа значение «да» означает
что нет объявлений внешней разметки, которые
влияют на информацию, передаваемую из процессора XML в приложение.В
значение «нет» указывает на то, что такие внешние
объявления разметки. Обратите внимание, что объявление автономного документа только обозначает
наличие внешних деклараций ; наличие в документе
ссылок на внешние объекты , когда эти объекты являются внутренними
заявлено, не меняет своего автономного статуса.

Если нет объявлений внешней разметки, объявление автономного документа
не имеет значения. Если есть объявления внешней разметки, но нет
автономное объявление документа, предполагается значение «нет».

Любой XML-документ, для которого standalone = "no" содержит, можно преобразовать
алгоритмически в отдельный документ, что может быть желательно для некоторых
приложения сетевой доставки.

Ограничение срока действия: Декларация автономного документа

автономная декларация документа ДОЛЖНА иметь значение "нет", если
любые объявления внешней разметки содержат объявления:

  • атрибутов со значениями по умолчанию,
    если элементы, к которым применяются эти атрибуты, появляются в документе без
    спецификации значений для этих атрибутов или

  • объектов (кроме amp ,
    л. ,
    GT ,
    апо ,
    quot ), если ссылки
    для этих сущностей появляются в документе, или атрибуты

  • с
    токенизированные типы, где
    атрибут появляется в документе со значением, таким, что
    нормализация
    будет производить другую ценность, чем та, которая была бы произведена
    при отсутствии декларации или типов элементов

  • с содержанием элемента,
    если пробелы встречаются непосредственно в любом экземпляре этих типов.

Пример объявления XML с объявлением автономного документа:

  

2.10 Обработка пробелов

При редактировании XML-документов часто удобно использовать "пробелы"
(пробелы, табуляции и пустые строки)
чтобы отделить разметку для большей читабельности. Такое пустое пространство обычно
не предназначен для включения в поставляемую версию документа. На
с другой стороны, «значительное» пустое пространство, которое следует сохранить
в поставленной версии обычное дело, например в стихах и исходном коде.

Процессор XML
ДОЛЖЕН всегда проходить
все символы в документе, которые не размечены до приложения.
Проверяющий процессор XML
ДОЛЖЕН также
проинформируйте приложение, какие из этих символов составляют появившееся пустое пространство
в содержании элемента.

Специальный атрибут с именем xml: space может быть прикреплен к элементу, чтобы сигнализировать о намерении, что в этом элементе
пустое пространство должно быть сохранено приложениями. В действующих документах это
атрибут, как и любой другой, ДОЛЖЕН быть объявлен
если он используется.При объявлении ДОЛЖЕН быть задан в виде пронумерованного
тип, значения которого
являются одним или обоими из «по умолчанию» и «сохранить».
Например:

 

 

Значение «default» сигнализирует о том, что в приложениях используется пробел по умолчанию.
для этого элемента допустимы режимы обработки; значение «сохранить»
указывает на то, что приложения сохраняют все пустое пространство. Этот
заявленное намерение применяется ко всем элементам в контенте.
элемента, в котором он указан, если он не переопределен с помощью
другой экземпляр атрибута xml: space .Эта спецификация не придает значения никаким значениям xml: space , кроме «по умолчанию» и «сохранить». Указание других значений является ошибкой; XML-процессор МОЖЕТ сообщить об ошибке или МОЖЕТ восстановить, проигнорировав спецификацию атрибута или сообщив (ошибочное) значение приложению. Приложения могут игнорировать или отклонять ошибочные значения.

Корневой элемент любого документа считается
не сообщал о намерениях в отношении работы с пространством приложений, если только
он предоставляет значение для этого атрибута или атрибут объявляется с
значение по умолчанию.

2.11 Обработка конца строки

Разобранные XML-объекты часто сохраняются
в компьютерных файлах, которые для удобства редактирования сгруппированы в строки.
Эти строки обычно разделяются некоторой комбинацией символов
ВОЗВРАТ ПЕРЕВОЗКИ (#xD) и ПОДАЧА ЛИНИИ (#xA).

Кому
упростить задачи приложений,
XML
процессор
ДОЛЖЕН вести себя так, как если бы он нормализовал все разрывы строк во внешнем синтаксическом анализе.
сущности (включая сущность документа) при вводе, перед синтаксическим анализом, путем перевода
как двухсимвольная последовательность #xD #xA, так и любая #xD, за которой не следует
#xA до одного символа #xA.

2.12 Идентификация языка

При обработке документов часто бывает полезно идентифицировать естественное или формальное
язык, на котором написано содержание. Особый атрибут
с именем xml: lang может быть вставлен в документы для указания языка
используется в содержимом и значениях атрибутов любого элемента XML-документа.
В действительных документах этот атрибут, как и любой другой, ДОЛЖЕН быть объявлен
.
если он используется. В
значения атрибута являются идентификаторами языка, как определено в [IETF BCP 47], Tags
по определению языков
; кроме того, может быть указана пустая строка.

(Производства с 33 по 38 удалены.)

Например:

 

Быстрая коричневая лисица перепрыгивает через ленивую собаку.

Какого цвета?

Какого цвета?

Хабэ, монахиня, ах! Философия, Juristerei, und Medizin und leider auch Theologie durchaus studiert mit heißem Bemüh'n.

Язык, указанный в xml: lang , применяется к элементу, в котором он указан.
(включая значения его атрибутов) и всем элементам в его содержимом, если только
переопределено другим экземпляром xml: lang . В частности, пустое значение xml: lang используется в элементе B для переопределения
спецификация xml: lang для включающего элемента A без указания другого языка. Внутри B,
считается, что информация о языке недоступна, как если бы xml: lang не был указан
на B или любом из его предков.Приложения определяют, какое из значений атрибута элемента
и какие части его символьного содержимого, если таковые имеются, обрабатываются как языковые значения, описанные в xml: lang .

Примечание:

Информация о языке также может предоставляться внешними транспортными протоколами (например, HTTP или
MIME). Когда эта информация доступна, она может использоваться приложениями XML, но более локальные
информацию, предоставленную xml: lang , следует рассматривать как переопределение.

Простое объявление для xml: lang может иметь вид

, но при необходимости также могут быть указаны конкретные значения по умолчанию. В коллекции
французских стихов для английских студентов, с глоссами и примечаниями на английском языке, xml: lang
атрибут может быть объявлен так:

 

 

3 логические структуры

[Определение: каждый XML
документ содержит один или несколько элементов , границы
из которых либо разделены начальными тегами
и конечные теги, или, если пусто
элементов тегом пустого элемента.Каждый
элемент имеет тип, идентифицируемый по имени, иногда называемый его "универсальным"
идентификатор "(GI), и может иметь набор спецификаций атрибутов.]
Каждая спецификация атрибута имеет имя
и значение.

Элемент

Эта спецификация не ограничивает
семантика приложения, использование или (помимо синтаксиса)
имена типов и атрибутов элементов, кроме имен, начинающихся с
соответствие (('X' | 'x') ('M' | 'm') ('L' | 'l')) зарезервированы для стандартизации
в этой или будущих версиях данной спецификации.

Ограничение корректности: Соответствие типа элемента

Имя
в конечном теге элемента ДОЛЖЕН соответствовать типу элемента в начальном теге.

Ограничение действительности: элемент действителен

Элемент действителен
если есть объявление, соответствующее elementdecl
где Имя соответствует типу элемента, а одно из
имеет место следующее:

  1. Объявление соответствует EMPTY , и элемент не имеет содержимого (даже объект
    ссылки, комментарии, ИП или пробелы).

  2. Объявление соответствует дочерним элементам и
    последовательность дочерних элементов принадлежит
    на язык, сгенерированный регулярным выражением в модели содержимого,
    с необязательным пробелом, комментариями и
    PI (т. Е. Продукция, соответствующая разметке [27] Разное) между
    начальный тег и первый дочерний элемент, между дочерними элементами или между
    последний дочерний элемент и конечный тег. Обратите внимание, что раздел CDATA, содержащий
    только пробел или ссылка
    к объекту, замещающий текст которого представляет собой символьные ссылки, расширяющиеся до белого цвета
    пространство не
    соответствуют нетерминальному S, и
    следовательно, не может появляться в этих позициях; однако
    ссылка на внутренний объект с буквальным значением, состоящим из символа
    ссылки, расширяющиеся до пробела, соответствуют S, поскольку его
    текст замены - это пробел, возникший в результате расширения символа
    использованная литература.

  3. Декларация соответствует Mixed, а содержание
    (после замены
    любые ссылки на сущности с их заменяющим текстом) состоит из
    символьные данные
    (включая разделы CDATA),
    комментарии, PI и дочерние элементы, типы которых соответствуют именам в
    модель контента.

  4. Декларация соответствует ЛЮБОЙ , а содержание (после замены
    любые ссылки на сущности с их заменяющим текстом)
    состоит из символьных данных, CDATA
    разделы, комментарии, ИП
    и дочерние элементы
    типы которых были объявлены.

3.1 Начальные теги, конечные теги и теги пустых элементов

[Определение: начало каждого непустого
Элемент XML помечен начальным тегом .]

Начальный тег

Имя в начальном и конечном тегах задает тип элемента . [Определение: Name-AttValue
пары называются спецификациями атрибутов
element], [Определение: имя в каждой паре именуется именем атрибута
]
и [Определение: содержание AttValue (текст между ' или "
разделители) как значение атрибута .] Примечание
что порядок спецификаций атрибутов в начальном теге или пустом элементе
тег не имеет значения.

Ограничение корректности: уникальная спецификация атрибута

Имя атрибута
НЕ ДОЛЖЕН появляться более одного раза в одном и том же начальном теге или теге пустого элемента.

Ограничение действительности: Тип значения атрибута

Атрибут ДОЛЖЕН
были объявлены; значение ДОЛЖНО иметь объявленный для него тип. (Для атрибута
типы см. 3.3 Объявления списка атрибутов .)

Ограничение корректности: нет ссылок на внешние сущности

Атрибут
значения НЕ ДОЛЖНЫ содержать прямые или косвенные ссылки на внешние объекты.

Ограничение корректности: Нет < в значениях атрибутов

Заменяющий текст любого объекта
прямо или косвенно упоминаемое в значении атрибута НЕ ДОЛЖНО содержать <.

Пример начального тега:

  

[Определение: конец каждого элемента, который начинается
с начальным тегом ДОЛЖЕН быть отмечен конечным тегом , содержащим имя
который повторяет тип элемента, указанный в начальном теге:]

Конечный тег
[42] ETag :: = ''

Пример конечного тега:

[Определение: текст
между начальным и конечным тегами называется содержанием элемента :]

Содержание элементов

[Определение: элемент
без содержимого считается пустым .] Представительство
пустого элемента - это либо начальный тег, за которым следует конечный тег,
или тег пустого элемента. [Определение: пустой элемент
тег
принимает особую форму:]

Теги для пустых элементов

Теги пустых элементов могут использоваться для любого элемента, не имеющего содержимого, независимо от того,
или нет, он объявляется с использованием ключевого слова EMPTY . Для
совместимость, тег с пустыми элементами ДОЛЖЕН
, и СЛЕДУЕТ использовать только для элементов, которые объявлены
ПУСТОЙ.

Примеры пустых элементов:

 



3.2 Объявления типов элементов

Структура элементов XML-документа может для проверки
В целях ограничения используйте объявления типа элемента и списка атрибутов.
Объявление типа элемента ограничивает содержимое элемента.

Объявления типа элемента часто ограничивают, какие типы элементов могут отображаться
как дочерние элементы элемента.У пользователя
вариант, процессор XML МОЖЕТ выдавать предупреждение, когда в объявлении упоминается
тип элемента, для которого не предусмотрено объявление, но это не ошибка.

[Определение: элемент
объявление типа
принимает форму:]

Объявление типа элемента

, где Имя указывает тип объявляемого элемента.

Ограничение действительности: Уникальное объявление типа элемента

Тип элемента НЕ ДОЛЖЕН объявляться более одного раза.

Примеры объявления типов элементов:

 


 
3.2.1 Содержание элемента

[Определение: тип элемента имеет содержимого элемента , когда элементы
этого типа ДОЛЖЕН содержать только дочерний
элементы (без символьных данных), необязательно разделенные пробелами (символы
соответствие нетерминалу S).]
[Определение: в этом случае ограничение включает в себя контент
модель
, простая грамматика, регулирующая допустимые типы
дочерние элементы и порядок, в котором они могут появляться.]
Грамматика построена на частицах содержимого (cps), которые
состоят из имен, списков выбора частиц содержимого или списков последовательностей
содержание частиц:

Модели содержимого элемента

, где каждое Имя - это тип элемента, который
может появиться в детстве. Любой контент
частица в списке выбора может появиться в элементе
содержимое в том месте, где в грамматике появляется список выбора;
частицы содержимого, встречающиеся в списке последовательностей , ДОЛЖНЫ каждая появляться в содержимом элемента в порядке, указанном в списке.Необязательный символ, следующий за именем или списком, определяет, будет ли элемент
или частицы содержимого в списке могут встречаться одной или несколькими ( + ),
ноль или более ( * ), или ноль или один раз (? ). В
Отсутствие такого оператора означает, что элемент или частица содержимого ДОЛЖЕН
появляются ровно один раз. Этот синтаксис и значение идентичны тем, которые используются в
продукции в этой спецификации.

Содержимое элемента соответствует модели содержимого тогда и только тогда, когда оно
можно проследить путь через модель контента, соблюдая последовательность,
операторы выбора и повторения и сопоставление каждого элемента в содержимом
против типа элемента в модели содержимого.Для
совместимость, это ошибка, если модель содержимого
позволяет элементу соответствовать более чем одному вхождению типа элемента в
модель контента. Для получения дополнительной информации см. E Детерминированные модели содержимого .

Ограничение допустимости: правильное вложение группы / PE

Текст замены объекта параметра
ДОЛЖЕН быть правильно вложен в круглые скобки.
группы. То есть, если открывающая или закрывающая круглые скобки в
на выбор, последовательность или смешанный
конструкция содержится в тексте замены для параметра
объект, оба ДОЛЖНЫ, чтобы содержались в одном тексте замены.

Для взаимодействия, если ссылка на параметр-сущность
появляется в конструкциях choice, seq или Mixed, его замещающий текст ДОЛЖЕН содержать в
минимум один непустой символ, и ни первый, ни последний непустой символ
текста замены ДОЛЖЕН быть соединителем ( | или , ).

Примеры моделей содержимого элементов:

 

 
3.2.2 Смешанное содержимое

[Определение: тип элемента
имеет смешанное содержимое , если элементы этого типа могут содержать символы
данные, необязательно с вкраплениями дочернего
elements.] В этом случае типы дочерних элементов могут быть ограничены,
но не их порядок или количество вхождений:

Объявление смешанного содержимого

, где Имена указывают типы элементов, которые
могут появиться как дети. В
Ключевое слово #PCDATA исторически образовано от термина "проанализированный
символьные данные."

Ограничение допустимости: отсутствие повторяющихся типов

одно и то же имя НЕ ДОЛЖНО появляться более одного раза в одном объявлении смешанного содержимого.

Примеры объявлений смешанного содержимого:

 

 

3.3 Объявления списка атрибутов

Атрибуты используются, чтобы связать имя-значение
пары с элементами.Спецификации атрибутов
НЕ ДОЛЖЕН появляться вне начальных тегов и тегов пустых элементов; таким образом, постановки раньше
распознавать их появляются в 3.1 Начальные теги, Конечные теги и Теги пустых элементов . Объявления списка атрибутов
может использоваться:

  • Для определения набора атрибутов, относящихся к данному типу элемента.

  • Чтобы установить ограничения типа для этих атрибутов.

  • Для предоставления значений по умолчанию для
    атрибуты.

[Определение:
Список атрибутов
объявления
определяют имя, тип данных и значение по умолчанию (если есть)
каждого атрибута, связанного с данным типом элемента:]

Объявление списка атрибутов

Имя в списке атрибутовDecl
Правило - это тип элемента. По выбору пользователя, процессор XML может выдавать
предупреждение, если атрибуты объявлены для типа элемента, который сам не объявлен,
но это не ошибка. Имя в AttDef
Правило - это имя атрибута.

Если указано более одного AttlistDecl
для данного типа элемента содержимое всех предоставленных элементов объединяется. Когда
для одного и того же атрибута данного элемента предоставляется более одного определения
type, первое объявление является обязательным, а последующие объявления игнорируются. Для взаимодействия авторы DTD могут выбрать
предоставить не более одного объявления списка атрибутов для данного типа элемента,
не более одного определения атрибута для данного имени атрибута в списке атрибутов
объявление и по крайней мере одно определение атрибута в каждом списке атрибутов
декларация.Для обеспечения взаимодействия XML-процессор МОЖЕТ по выбору пользователя.
выдавать предупреждение, когда предоставлено более одного объявления списка атрибутов
для данного типа элемента или предоставляется более одного определения атрибута
для данного атрибута, но это не ошибка.

3.3.1 Типы атрибутов

Типы атрибутов XML бывают трех видов: строковый тип, набор токенизированных
типы и перечислимые типы. Тип строки может принимать любую буквальную строку как
ценность; токенизированные типы более ограничены.Ограничения достоверности, указанные в грамматике, применяются после атрибута
значение было нормализовано, как описано в 3.3.3 Нормализация значения атрибута .

Типы атрибутов

Ограничение действительности: ID

Значения типа ID
ДОЛЖЕН соответствовать имени продукции. Имя НЕ ДОЛЖНО появляться более одного раза
в XML-документе как значение этого типа; то есть значения идентификатора ДОЛЖНЫ однозначно
определить элементы, которые их несут.

Ограничение допустимости: один идентификатор на тип элемента

Тип элемента НЕ ДОЛЖЕН иметь более одного указанного атрибута идентификатора.

Ограничение действительности: Атрибут ID По умолчанию

Атрибут ID
ДОЛЖЕН иметь заявленное значение по умолчанию #IMPLIED или #REQUIRED .

Ограничение действительности: IDREF

Значения типа IDREF
ДОЛЖЕН
соответствуют Имя продукции и значения типа IDREFS
ДОЛЖЕН соответствовать именам; каждое имя
ДОЛЖЕН соответствовать значению атрибута ID некоторого элемента в документе XML;
я.е. IDREF значений ДОЛЖЕН соответствовать значению некоторого атрибута ID.

Ограничение действительности: Имя объекта

Значения типа ENTITY
ДОЛЖЕН соответствовать продукции Name, значения типа ENTITIES
ДОЛЖЕН соответствовать именам; каждое имя
ДОЛЖЕН соответствовать имени неанализируемого объекта.
заявлено в DTD.

Ограничение действительности: Имя Токен

Значения типа NMTOKEN
ДОЛЖЕН соответствовать производству Nmtoken; значения типа NMTOKENS
ДОЛЖЕН соответствовать Nmtokens.

[Определение:
Перечислимые атрибуты
иметь список допустимых значений в их декларации
]. Они ДОЛЖНЫ принимать одно из этих значений. Есть два типа перечисляемых типов атрибутов:

Перечислимые типы атрибутов

Атрибут NOTATION Атрибут идентифицирует нотацию,
объявленные в DTD с соответствующими системными и / или общедоступными идентификаторами, которые должны быть
используется при интерпретации элемента, к которому прикреплен атрибут.

Ограничение действительности: атрибуты нотации

Значения этого типа
ДОЛЖЕН соответствовать одному из имен нотации .
включены в декларацию; все имена обозначений в декларации ДОЛЖНЫ быть
заявил.

Ограничение допустимости: одна нотация для каждого типа элемента

Тип элемента НЕ ДОЛЖЕН иметь более одной нотации NOTATION
указанный атрибут.

Ограничение действительности: нет обозначения для пустого элемента

Для совместимости
атрибут типа ОБОЗНАЧЕНИЕ
НЕ ДОЛЖЕН быть объявлен в элементе
объявлен ПУСТОЙ .

Ограничение допустимости: нет повторяющихся токенов

Имена нотаций в одном типе нотации
объявление атрибута, а также NmTokens в одном
Объявление атрибута перечисления, ДОЛЖНО, чтобы все были разными.

Ограничение допустимости: Перечисление

Значения этого типа ДОЛЖНЫ совпадать
один из токенов Nmtoken в декларации.

Для взаимодействия тот же Nmtoken
НЕ ДОЛЖЕН встречаться более одного раза в перечисленных
типы атрибутов одного типа элемента.

3.3.2 Значения атрибутов по умолчанию

Объявление атрибута предоставляет информацию
от того, присутствует ли атрибут ТРЕБУЕТСЯ , а если нет, то как процессор XML
должен реагировать, если объявленный атрибут отсутствует в документе.

Параметры атрибута по умолчанию

В объявлении атрибута #REQUIRED означает, что атрибут
ДОЛЖЕН всегда предоставляться , # ПРЕДПОЛАГАЕТСЯ , что значение по умолчанию не предоставляется.

[Определение: если
декларация не является ни # ТРЕБУЕТСЯ , ни # ПРЕДПОЛАГАЕТСЯ , тогда
значение AttValue содержит заявленный по умолчанию
ценить; ключевое слово #FIXED указывает, что атрибут ДОЛЖЕН всегда иметь
значение по умолчанию.Когда процессор XML обнаруживает
элемент
без спецификации для атрибута, для которого он считал значение по умолчанию
значение, он ДОЛЖЕН сообщить атрибут с объявленным значением по умолчанию
значение для приложения.]

Ограничение действительности: обязательный атрибут

Если значение по умолчанию
объявление - это ключевое слово # ТРЕБУЕТСЯ , тогда атрибут ДОЛЖЕН быть
указывается для всех элементов типа в объявлении списка атрибутов.

Ограничение допустимости: значение атрибута по умолчанию синтаксически правильное

Заявленное значение по умолчанию ДОЛЖНО соответствовать синтаксису
ограничения объявленного типа атрибута.То есть значение атрибута по умолчанию:

  • типа IDREF или ENTITY должны соответствовать продукции Name;

  • типа IDREFS или ENTITIES должны соответствовать продукции Names;

  • типа NMTOKEN должен соответствовать продукции Nmtoken;

  • типа NMTOKENS должны соответствовать производству Nmtokens;

  • перечислимого типа (тип NOTATION или перечисление) должен соответствовать одному из перечислимых значений.

Обратите внимание, что только
здесь обязательны синтаксические ограничения типа; другие ограничения (например,
что значение должно быть именем объявленной неразобранной сущности, для атрибута
тип ENTITY) будет сообщено проверяющим
парсер, только если элемент без спецификации для этого атрибута
действительно происходит.

Ограничение действительности: фиксированный атрибут по умолчанию

Если атрибут
имеет значение по умолчанию, объявленное с ключевым словом #FIXED , экземпляры
этот атрибут ДОЛЖЕН соответствовать значению по умолчанию.

Примеры объявлений списка атрибутов:

 

Форма  
3.3.3 Нормализация значения атрибута

Перед тем, как значение атрибута будет передано в приложение или проверено
для достоверности XML-процессор ДОЛЖЕН нормализовать значение атрибута, применяя
приведенный ниже алгоритм или используя какой-либо другой метод, чтобы передаваемое значение
в приложение такое же, как и в алгоритме.

  1. Все разрывы строк ДОЛЖНЫ быть нормализованы на входе в #xA, как описано
    в 2.11 Обработка конца строки , поэтому остальная часть этого алгоритма работает
    на текст, нормализованный таким образом.

  2. Начните с нормализованного значения, состоящего из пустой строки.

  3. Для каждого символа, ссылки на объект или ссылки на символ в
    ненормализованное значение атрибута, начиная с первого и продолжаясь до
    наконец, выполните следующие действия:

    • Для ссылки на символ добавьте указанный символ в
      нормализованное значение.

    • Для ссылки на объект рекурсивно примените шаг 3 этого алгоритма
      к замещающему тексту сущности.

    • Для символа пробела (# x20, #xD, #xA, # x9) добавьте пробел
      (# x20) к нормализованному значению.

    • Для другого символа добавьте его к нормализованному значению.

Если тип атрибута не CDATA, то процессор XML ДОЛЖЕН дополнительно
обработать нормализованное значение атрибута, отбросив все начальные и конечные
пробела (# x20) символов, и путем замены последовательностей пробелов (# x20) символов
одним пробелом (# x20).

Обратите внимание, что если ненормализованное значение атрибута содержит ссылку на символ
к символу пробела, отличному от пробела (# x20), нормализованное значение содержит
сам ссылочный символ (#xD, #xA или # x9). Это контрастирует с
случай, когда ненормализованное значение содержит символ пробела (не
ссылка), который заменяется пробелом (# x20) в нормализованном
значение, а также контрастирует со случаем, когда ненормализованное значение содержит
ссылка на объект, замещающий текст которой содержит символ пробела;
при рекурсивной обработке символ пробела заменяется символом
пробел (# x20) в нормализованном значении.

Все атрибуты, для которых не было прочитано объявление ДОЛЖНЫ быть обработаны
непроверяющим процессором, как если бы он был объявлен CDATA .

Это ошибка, если атрибут
значение содержит ссылку на
объект, для которого не было прочитано объявление.

Ниже приведены примеры нормализации атрибутов. Учитывая следующие
объявления:

 

 

спецификации атрибута в левом столбце ниже будут нормализованы
к символьным последовательностям среднего столбца, если атрибут a
объявляется NMTOKENS и правым столбцам, если a
заявлен CDATA .

Спецификация атрибута a - NMTOKENS a - CDATA
 a = "& d; & d; A & a; & # x20; & a; B & da;" 
 # x20 # x20 A # x20 # x20 # x20 B # x20 # x20 
 а =
"& # xd; & # xd; A & # xa; & # xa; B & # xd; & # xa;" 
 #xD #xD A #xA #xA B #xD #xA 
 #xD #xD A #xA #xA B #xD #xA 

Обратите внимание, что последний пример неверен (но правильно сформирован), если a
заявлен как тип NMTOKENS .

3.4 Условные разделы

[Определение:
Условный
разделы
являются частями типа документа
объявление внешнего подмножества или
сущностей внешних параметров, которые включены или исключены из
логическая структура DTD на основе ключевого слова, которое ими управляет.]

Условный раздел

Ограничение действительности: правильное условное разделение / вложение PE

Если любое из « »,
" [" или "]]> " условного раздела содержится
в тексте замены для ссылки на объект-параметр, все они ДОЛЖНЫ
содержаться в том же тексте замены.

Подобно внутреннему и внешнему подмножествам DTD, условный раздел может содержать
одно или несколько полных объявлений, комментариев, инструкций по обработке или вложенных
условные разделы, смешанные с пустым пространством.

Если ключевое слово условного раздела - INCLUDE , то
содержимое условного раздела ДОЛЖНО обрабатываться как часть DTD. Если ключевое слово
условный раздел - IGNORE , тогда содержимое условного
раздел ДОЛЖЕН НЕ обрабатываться как часть DTD.Если условный раздел с ключевым словом INCLUDE встречается в
условный раздел большего размера с ключевым словом IGNORE , оба внешних
и внутренние условные разделы ДОЛЖНЫ игнорироваться. Содержимое
игнорируемого условного раздела ДОЛЖЕН быть проанализирован путем игнорирования всех символов после
" [" после ключевого слова, за исключением начала условного раздела
« » и заканчивается «]]> », пока не будет найдено соответствующее условие
конец раздела найден.Ссылки на сущности параметра НЕ ДОЛЖНЫ распознаваться в этом
процесс.

Если ключевое слово условного раздела является ссылкой на сущность параметра,
объект параметра ДОЛЖЕН быть заменен его содержимым перед процессором
решает, включать или игнорировать условный раздел.

Пример:

 



]]>

]]> 

4 Физические структуры

[Определение: XML-документ может состоять из одного
или много единиц хранения.Эти
называются юридических лиц ; все они содержат содержимого и являются
все (кроме сущности документа и
подмножество внешнего DTD), идентифицированное
entity name .] Каждый XML-документ имеет одну сущность
называется сущностью документа, которая обслуживает
в качестве отправной точки для процессора XML
и может содержать весь документ.

Объекты можно анализировать или не анализировать. [Определение: содержимое проанализированного
объект
именуется его замещающим
текст; этот текст считается
неотъемлемая часть документа.]

[Определение: неразобранный объект
это ресурс, содержимое которого может быть или не быть текстом,
и если текст, может
быть отличным от XML. У каждой неанализируемой сущности есть связанная нотация, идентифицируемая по имени. Помимо требований
что процессор XML делает идентификаторы сущности и нотации доступными
в приложение XML не накладывает ограничений на содержимое неанализируемых
сущности.]

Анализируемые сущности вызываются по имени с использованием ссылок на сущности; неразобранные сущности
по имени, заданному в значении атрибутов ENTITY или ENTITIES .

[Определение:
Юридические лица
являются объектами для использования в содержимом документа. В этой спецификации общие
организации иногда упоминаются безоговорочным термином организация
когда это не приводит к двусмысленности.]
[Определение:
Параметр
объекты
- это проанализированные объекты для использования в DTD.]
Эти два типа объектов используют разные формы ссылок и распознаются
в разных контекстах. Более того, они занимают разные пространства имен; параметр
сущность и общая сущность с тем же именем - две разные сущности.

4.1 Ссылки на символы и сущности

[Определение: символ
ссылка
относится к определенному символу в символе ISO / IEC 10646
установить, например, недоступный напрямую с доступных устройств ввода.]

Ссылка на символ

Ограничение корректности: Юридический символ

Упомянутые символы
для использования символьных ссылок ДОЛЖЕН соответствовать продукту для Char.

Если ссылка на символ начинается с "
& # x
",
цифры и буквы до завершающего ; - шестнадцатеричный
представление кодовой точки символа в ISO / IEC 10646.Если это начнется
просто с "
и #
", цифры до завершающего ;
предоставить десятичное представление кодовой точки символа.

[Определение: ссылка на объект
относится к содержимому именованной сущности.]
[Определение: ссылки на проанализированные общие сущности используют
амперсанд ( и ) и точка с запятой (; ) в качестве разделителей.]
[Определение:
Ссылки на сущности параметра
используйте знак процента (% ) и точку с запятой (; ) в качестве разделителей.]

Ссылка на объект

Ограничение корректности: объект объявлен

В документе
без какого-либо DTD, документ только с внутренним подмножеством DTD, который содержит
без ссылок на параметры или документ с "
standalone = 'да'
", для
ссылка на сущность, которая не встречается во внешнем подмножестве или параметре
entity, Имя, указанное в ссылке на объект , ДОЛЖНО
соответствует этому в объекте
декларация
, которая не встречается во внешнем подмножестве или
объект параметра, за исключением того, что в правильно сформированных документах не требуется объявлять
любой из следующих объектов: amp ,
л. ,
GT ,
апо ,
quot
объявление общего объекта ДОЛЖНО предшествовать любой ссылке на него, которая появляется
в значении по умолчанию в объявлении списка атрибутов.

Обратите внимание, что непроверяющие процессоры не
обязан
читать и обрабатывать объявления сущностей, происходящие в сущностях параметров или в
внешнее подмножество; для таких документов,
правило, согласно которому объект должен быть объявлен, является только ограничением корректности
если standalone = 'да' .

Ограничение действительности: Объявленная сущность

В документе с внешним подмножеством или ссылками на сущности параметров,
если документ не является автономным (либо " standalone = 'no' "
указано или нет отдельного объявления), то
Имя, указанное в ссылке на объект , ДОЛЖНО
соответствует этому в объекте
декларация
.Для обеспечения совместимости в действительных документах СЛЕДУЕТ декларировать
сущности amp ,
л. ,
GT ,
апо ,
quot , в форме, указанной в 4.6 Предопределенные объекты .
Объявление объекта параметра ДОЛЖНО предшествовать любой ссылке на него. Сходным образом,
объявление общего объекта ДОЛЖНО предшествовать любому списку атрибутов
объявление, содержащее значение по умолчанию с прямой или косвенной ссылкой
к этой общей сущности.

Ограничение корректности: проанализированный объект

Ссылка на объект ДОЛЖНА
НЕ
содержат имя неанализируемой сущности.
На неанализируемые объекты можно ссылаться только в атрибуте
объявлены значения типа ENTITY или ENTITIES .

Ограничение корректности: без рекурсии

Анализируемый объект НЕ ДОЛЖЕН содержать рекурсивную ссылку на себя, прямо или косвенно.

Ограничение корректности: в DTD

Ссылка на сущность параметра НЕ ДОЛЖНА появляться вне
DTD.

Примеры ссылок на символы и объекты:

 Введите  меньше  (& # x3C;) для сохранения параметров.
Этот документ был подготовлен & docdate; а также
засекречен & уровень безопасности ;. 

Пример ссылки на сущность параметра:

 


% ISOLat2; 

4.2 Заявления организаций

[Определение: Объекты объявлены
таким образом:]

Объявление сущности

Имя идентифицирует сущность в сущности
ссылка или, в случае неанализируемого объекта, в значении
атрибут ENTITY или ENTITIES .Если объявлен такой же объект
более одного раза первое встреченное объявление является обязательным; по выбору пользователя,
процессор XML МОЖЕТ выдавать предупреждение, если объекты объявляются несколько раз.

4.2.1 Внутренние объекты

[Определение: если
определение сущности - EntityValue, определенное
сущность называется внутренней сущностью . Нет отдельного физического
объект хранения, а содержимое объекта указано в объявлении.]
Обратите внимание, что для создания
правильный текст замены: см. 4.5 Построение замещающего текста объекта .

Внутренний объект - это проанализированный объект.

Пример объявления внутреннего объекта:

  
4.2.2 Внешние объекты

[Определение: если объект не является внутренним,
это внешняя сущность , объявленная следующим образом:]

Объявление внешней сущности

Если присутствует NDataDecl, это обычная неанализируемая сущность; в противном случае это анализируемая сущность.

Ограничение действительности: Заявленная нотация

Имя
ДОЛЖЕН соответствовать объявленному имени нотации.

[Определение: SystemLiteral называется системой объекта
идентификатор
. Он предназначен для преобразования в ссылку URI.
(как определено в [IETF RFC 3986]),
как часть
процесс разыменования, чтобы получить входные данные для процессора XML, чтобы построить
текст замены объекта.] Это ошибка идентификатора фрагмента
(начинается с символа # ), чтобы быть частью системного идентификатора.Если иное не предусмотрено информацией, выходящей за рамки данной спецификации
(например, особый тип элемента XML, определенный конкретным DTD, или обработка
инструкция, определенная спецификацией конкретного приложения), относительные URI
относительно местоположения ресурса, в котором объявление объекта
происходит. Это определяется как
быть внешней сущностью, содержащей '<', которая начинает объявление, в точка, когда он анализируется как объявление. Таким образом, URI может относиться к документу сущности, к сущности, содержащей внешний Подмножество DTD или какой-либо другой внешний параметр организация.Пытается получить ресурс, идентифицированный URI, может быть перенаправлен на анализатор уровень (например, в преобразователе сущностей) или ниже (на уровне протокола, например, через заголовок HTTP Location: ). При отсутствии дополнительных
информация, выходящая за рамки данной спецификации в пределах ресурса,
базовый URI ресурса всегда является URI фактически возвращенного ресурса.
Другими словами, это URI ресурса, полученного после перенаправления.
произошло.

Система
идентификаторы (и другие строки XML, предназначенные для использования в качестве ссылок URI) могут содержать
символы, которые, согласно [IETF RFC 3986],
должен быть экранирован, прежде чем URI можно будет использовать для получения указанного ресурса.'# x5E и
'`' # x60, а также все символы выше # x7F. Поскольку побег не всегда полностью
обратимый процесс, он ДОЛЖЕН выполняться только в случае крайней необходимости и как можно позже
насколько это возможно в производственной цепочке. В частности, ни процесс конвертации
относительный URI к абсолютному, ни процесс передачи ссылки URI на
процесс или программный компонент, ответственный за разыменование его ДОЛЖЕН сбежать от триггера.
Когда экранирование все же происходит, оно ДОЛЖНО выполняться следующим образом:

  1. Каждый символ, который нужно экранировать, представлен в UTF-8 [Unicode]
    как один или несколько байтов.

  2. Результирующие байты экранируются с помощью
    механизм экранирования URI (то есть преобразованный в %
    HH ,
    где HH - шестнадцатеричное представление байтового значения).

  3. Исходный символ заменяется полученной последовательностью символов.

Примечание:

В будущей редакции этой спецификации рабочая группа XML Core намеревается заменить предыдущий абзац.
и список шагов с нормативной ссылкой на предстоящую редакцию IETF RFC 3987, которая будет определять
«Устаревшие расширенные IRI (LEIRI)».Когда эта версия станет доступной, рабочая группа XML Core WG намерена использовать ее для замены
язык, аналогичный приведенному выше, в любых будущих версиях спецификаций, связанных с XML, в рамках его компетенции.

[Определение: в дополнение к системе
идентификатор, внешний идентификатор может включать в себя открытый идентификатор , .]
Процессор XML, пытающийся получить содержимое объекта, может использовать
любая комбинация
общедоступные и системные идентификаторы, а также дополнительная информация за пределами
области этой спецификации, чтобы попытаться создать альтернативную ссылку URI.Если процессор не может этого сделать, он ДОЛЖЕН использовать URI
ссылка, указанная в системном литерале. Перед попыткой совпадения
все строки пробелов в общедоступном идентификаторе ДОЛЖНЫ быть нормализованы до
одиночные символы пробела (# x20), а также начальные и конечные пробелы ДОЛЖНЫ
удалить.

Примеры объявлений внешних сущностей:

 

 

4.3 Анализируемые объекты

4.3.1 Текстовое объявление

Внешние анализируемые объекты ДОЛЖНЫ каждый начинаться с текстового объявления .

Текстовое объявление

Текстовое объявление ДОЛЖНО предоставляться буквально, а не посредством ссылки.
к анализируемому объекту. Текстовое объявление
НЕ ДОЛЖЕН появляться ни на каком
позиция, отличная от начала внешней анализируемой сущности.Текстовое объявление
во внешнем анализируемом объекте не считается частью его замещающего текста.

4.3.2 Правильно сформированные проанализированные сущности

Сущность документа является правильно сформированной, если она совпадает с производственным помеченным документом. Внешняя общая анализируемая сущность правильно сформирована
если он соответствует продукту с меткой extParsedEnt. Все
сущности внешних параметров правильно сформированы по определению.

Примечание:

Только проанализированные сущности, на которые прямо или косвенно ссылаются в документе, должны быть правильно сформированы.

Правильно сформированный внешний анализируемый объект

Внутренний общий анализируемый объект является правильно сформированным, если его замещающий текст
соответствует продукту с пометкой. Все внутренние
сущности параметров правильно сформированы по определению.

Следствие правильной формы в целом
сущностей заключается в том, что логические и физические
структуры в XML-документе правильно вложены; нет начального тега, конечного тега, тега пустого элемента, элемента, комментария, инструкции обработки, символа
ссылка или ссылка на объект
может начинаться в одном объекте и заканчиваться в другом.

4.3.3 Кодирование символов в объектах

Каждый внешний анализируемый объект в XML-документе может использовать различную кодировку
для его персонажей. Все процессоры XML ДОЛЖНЫ иметь возможность читать объекты в обоих
кодировки UTF-8 и UTF-16. Термины "UTF-8"
и "UTF-16" в этой спецификации не применяются к

связанные кодировки символов, включая, помимо прочего, UTF-16BE, UTF-16LE или CESU-8.

Объекты, закодированные в UTF-16 , ДОЛЖНЫ и объекты
в кодировке UTF-8 MAY начинается с метки порядка байтов, описанной
Приложение H к [ISO / IEC 10646: 2000], раздел
16.8 из [Unicode]
(символ ПРОБЕЛА НУЛЕВОЙ ШИРИНЫ, #xFEFF). Это подпись кодировки,
не является частью разметки или символьных данных XML-документа. XML
процессоры ДОЛЖНЫ иметь возможность использовать этот символ, чтобы различать UTF-8
и документы в кодировке UTF-16.

Если текст замены внешнего объекта должен
начинаются с символа U + FEFF, без объявления текста
присутствует, то ДОЛЖНА присутствовать Метка порядка байтов,
кодируется ли объект в UTF-8 или UTF-16.

Хотя процессор XML требуется только для чтения сущностей в UTF-8
и кодировки UTF-16, признано, что другие кодировки используются вокруг
мир, и процессорам XML может потребоваться чтение сущностей, которые
используй их. В
отсутствие информации о внешней кодировке символов (например, заголовков MIME),
проанализированные объекты, которые хранятся в кодировке, отличной от UTF-8 или UTF-16
ДОЛЖЕН начинаться с текстового объявления (см. 4.3.1 Текстовое объявление ), содержащего
объявление кодировки:

Декларация кодировки
[80] КодировкаDecl :: =
S 'кодирование' Eq
('"' EncName '"' | "'" EncName
"'")
[81] EncName :: = [A-Za-z] ([A-Za-z0-9._] | '-') * / * Кодировка
имя содержит только латинские символы * /

В сущности документа кодировка
объявление является частью объявления XML.
EncName - это название используемой кодировки.

В объявлении кодировки значения "
UTF-8
","
UTF-16
",
"
ISO-10646-UCS-2
", а также "
ISO-10646-UCS-4
"
СЛЕДУЕТ использовать
для различных кодировок и преобразований Unicode / ISO / IEC 10646,
ценности "
ISO-8859-1
","
ISO-8859-2
",
... "
ISO-8859-
n
"(где n
- номер детали) СЛЕДУЕТ использовать для частей ISO 8859, и
ценности "
ISO-2022-JP
","
Shift_JIS
",
а также "
EUC-JP
"
СЛЕДУЕТ использовать для различных кодированных
формы JIS X-0208-1997. Это
РЕКОМЕНДУЕТСЯ , что кодировки символов зарегистрированы (как charset s)
с Управлением по присвоению номеров в Интернете [IANA-CHARSETS],
кроме тех, которые только что перечислены, упоминаться под их зарегистрированными именами;
другие кодировки ДОЛЖНЫ использовать имена, начинающиеся с префикса «x-».XML-процессорам СЛЕДУЕТ сопоставлять имена кодировок символов без учета регистра
путь, и ДОЛЖЕН либо интерпретировать зарегистрированное IANA имя как зарегистрированное кодирование
в IANA для этого имени или рассматривать его как неизвестное (обработчики, конечно, не
требуется для поддержки всех кодировок, зарегистрированных IANA).

При отсутствии информации, предоставленной внешним транспортным протоколом
(например, HTTP или MIME), это фатальная ошибка для
объект, включающий декларацию кодировки, которая должна быть представлена ​​процессору XML
в кодировке, отличной от указанной в объявлении, или для объекта, который
не начинается ни с одной метки порядка байтов
ни объявление кодировки для использования кодировки, отличной от UTF-8.Обратите внимание, что
поскольку ASCII является подмножеством UTF-8, обычные объекты ASCII строго не
нужно объявление кодировки.

Возникновение TextDecl в другом месте является фатальной ошибкой.
чем в начале внешнего объекта.

Это фатальная ошибка, когда процессор XML
встречает объект с кодировкой, которую не может обработать. Это
является фатальной ошибкой, если объект XML определен (по умолчанию, объявление кодировки,
или протокол более высокого уровня), чтобы быть в определенной кодировке, но содержать байт
последовательности, которые недопустимы в этой кодировке.В частности, это
фатальная ошибка, если объект, закодированный в UTF-8, содержит некорректно сформированные последовательности кодовых единиц,
как определено в разделе 3.9 Unicode [Unicode]. Если только кодировка
определяется протоколом более высокого уровня, это также является фатальной ошибкой, если объект XML
не содержит объявления кодировки, и его содержимое не является допустимым UTF-8 или UTF-16.

Примеры текстовых объявлений, содержащих объявления кодировки:

 
 

4.4 Обработка сущностей и ссылок процессором XML

В таблице ниже суммированы контексты, в которых ссылки на символы,
ссылки на сущности и вызовы неанализируемых сущностей могут появиться, и
ТРЕБУЕТСЯ поведение процессора XML
в каждом случае. Метки в крайнем левом столбце описывают контекст распознавания:

Ссылка в контенте

в качестве ссылки в любом месте после начального тега
и перед конечным тегом элемента; соответствует
к нетерминальному содержанию.

Ссылка в значении атрибута

в качестве ссылки в пределах значения атрибута в начальном теге,
или значение по умолчанию в объявлении атрибута;
соответствует нетерминальному AttValue.

Происходит как значение атрибута

как имя, а не ссылка, появляется либо как
значение атрибута, который был объявлен как тип ENTITY ,
или как один из разделенных пробелами токенов в значении атрибута, который
был объявлен как тип ENTITIES .

Ссылка в значении объекта

в качестве ссылки в литерале параметра или внутреннего объекта
значение объекта в объявлении объекта; соответствует нетерминальному EntityValue.

Ссылка в DTD

в качестве ссылки внутри внутреннего или внешнего подмножества DTD, но вне EntityValue, AttValue, PI, Comment, SystemLiteral, PubidLiteral,
или содержимое игнорируемого условного раздела (см. 3.4 Условные разделы ).

.

4.4.1 Не распознан

Вне DTD символ % не имеет особого значения;
таким образом, ссылки на сущности параметров в DTD не распознаются
как разметка в содержании. Точно так же имена неразобранных
объекты не признаются, за исключением случаев, когда они появляются в стоимости надлежащим образом
объявленный атрибут.

4.4.2 Включено

[Определение: объект включен
когда его заменяющий текст извлекается
и обрабатывается вместо самой ссылки, как если бы она была частью
документ в том месте, где была распознана ссылка.] Замена
текст может содержать как символьные данные
и (кроме сущностей параметров) разметка,
который ДОЛЖЕН распознаваться обычным способом. (Струна "
AT&T;
"
расширяется до "
AT&T;
"и оставшийся амперсанд
не распознается как разделитель ссылки на сущность.) Ссылка на символ
включается , когда указанный символ обрабатывается на месте
самой ссылки.

4.4.3 Включено при проверке

Когда процессор XML распознает ссылку на проанализированный объект, по порядку
чтобы проверить документ, обработчик
ДОЛЖЕН
включить его заменяющий текст.Если
сущность является внешней, и процессор не пытается проверить
XML-документ, процессор МАЙ , но нужно
нет, включать заменяющий текст объекта. Если непроверяющий процессор
не включает заменяющий текст, он ДОЛЖЕН сообщить приложению, что
он распознал, но не прочитал сущность.

Это правило основано на признании того, что автоматическое включение обеспечивало
с помощью механизма сущностей SGML и XML, в первую очередь предназначенного для поддержки модульности
при создании, не обязательно подходит для других приложений, в частности
просмотр документов.Браузеры, например, при обнаружении внешнего синтаксического
ссылка на сущность, может предоставить визуальное указание на сущность
присутствие и извлекать его для отображения только по запросу.

4.4.4 Запрещено

Следующее запрещено и является фатальным.
ошибки:

  • появление ссылки на неанализируемый
    субъект, за исключением
    EntityValue в объявлении сущности.

  • появление любого персонажа или ссылки на общую сущность в
    DTD, кроме EntityValue или AttValue.

  • ссылка на внешний объект в значении атрибута.

4.4.5 Включено в литерал

Когда ссылка на объект появляется в
значение атрибута или ссылка на объект параметра появляется в буквальном объекте
значение, его заменяющий текст
ДОЛЖЕН быть обработан
вместо самой ссылки, как если бы она была частью документа по адресу
место, где была распознана ссылка, за исключением одинарного или двойного
кавычка в тексте замены ДОЛЖНА всегда обрабатываться как обычные данные
символ и НЕ ДОЛЖНЫ завершать литерал.Например, это правильный формат:

 
 

, а это не так:

 

'Это перечисление используется SizeString 
', чтобы указать, является ли предоставленный текст
'появляется слева или справа от
'строка результата.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Public Enum
РазмерStringSide
TextLeft = 1
TextRight = 2
Конец Enum

Открытая функция SizeString (текст как строка, длина как длинная, _
Необязательный ByVal TextSide As SizeStringSide = TextLeft, _

Необязательный PadChar как строка
= "") Как строка
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'SizeString
'Эта процедура создает строку указанной длины.Текст - это
оригинальная строка
'для включения, а Длина - это длина результирующей строки. TextSide
указывает, является ли
'Текст должен появиться слева (в этом случае результат дополняется
справа с
'PadChar) или справа (в этом случае строка дополняется
левый). При набивке на
'влево или вправо, заполнение выполняется с помощью PadChar.
персонаж. Если PadChar опущен,
'используется пробел.Если PadChar длиннее одного символа,
крайний левый символ PadChar
' используется. Если PadChar - пустая строка, используется пробел. Если TextSide
не является ни
TextLeft или TextRight, процедура использует TextLeft.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim sPadChar As String

Если Len (Text)> = Length Then
'если исходная строка длиннее указанной длины,
вернуть
'Длина слева символов
SizeString = Left (Текст, длина)
Функция выхода
Конец, если

Если Len (PadChar) = 0, то
PadChar - пустая строка.используйте пространство.
sPadChar = ""
Остальное
'использовать только первый символ PadChar
sPadChar = Левый (PadChar, 1)
Конец Если

Если (TextSide <> TextLeft) And (TextSide <> TextRight) Then
'если TextSide не был ни TextLeft, ни TextRight, используйте
TextLeft.
TextSide = TextLeft
Конец Если

Если TextSide = TextLeft Тогда
'если текст идет слева, заполните правое
места
SizeString = текст и строка (длина - длина (текст), sPadChar)
Остальное
'в противном случае заполните слева и поместите текст справа
SizeString = String (Длина - Len (текст), sPadChar) и текст
Конец Если

Конец функции

PathCompactPathEx

Обратное значение SizeString
это PathCompactPathEx
Функция Windows API.Пока SizeString
предназначен для увеличения длины строки за счет дополнения
характер,
PathCompactPathEx используется для сокращения строки до
указанная длина.
PathCompactPathEx
предназначен для обрезки полных имен файлов до
указанное количество символов, пропуская или усекая имя папки
компонент полного имени файла, но его можно использовать с любой текстовой строкой.
При использовании с полным именем файла часть файла опускается.
имя (например, имя папки), чтобы размер строки соответствовал указанному
количество знаков, заменяя удаленный текст на символы "... ".
Например
PathCompactPathEx с длиной
параметр 30 сократит имя файла приложения Excel до усеченного
нить. Поменяет

C: \ Program Files \ Office
2003 \ OFFICE11 \ Excel.exe
на
C: \ Program Files ... \ Excel.exe

Когда
PathCompactPathEx
используется с произвольным текстом без символов '\', обычно это просто
обрезает InputString, удаляя символы справа и
заменив их на "... ".
Следующая функция,
ShortenTextToChars, это
функция-оболочка для
PathCompactPathEx, который обрабатывает
обработка переменных и строковых буферов и, самое главное, проверка
принадлежащий
Параметр NumberOfCharacters. Если вы пройдете
неверный
NumberOfCharacters значение для
PathCompactPathEx
, это приведет к сбою приложения.
PathCompactPathEx не прощает ни одного
недопустимые входные параметры.В
ShortenTextToChars
функция использует
GetSystemErrorMessageText
функция, доступная здесь, и

Функция TrimToNull
доступна здесь.

Функция частного объявления
PathCompactPathEx Lib "shlwapi.dll" _
Псевдоним "PathCompactPathExA" (_
ByVal pszOut как строка, _
ByVal pszSrc As String, _
ByVal cchMax As Long, _
ByVal dwFlags As Long) As Long

Открытая функция ShortenTextToChars (InputText As String, _
NumberOfCharacters до длины) как строка
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'ShortenTextToChars
'Эта функция возвращает сокращенную версию параметра InputText
то есть
'NumberOfCharacters в длину.Эта функция в первую очередь предназначена для
использовать с
'полные имена файлов. С именем файла функция удалит
или усечь
'элемент пути (например, имя папки), заменяющий удаленный
текст со строкой
'"...". Хотя это предназначено для использования с именами файлов, оно будет работать
с любой текстовой строкой.
'При использовании в тексте, не содержащем символов' \ ', обычно
просто усекает
'правая часть InputText.
'Возвращает vbNullString - произошла ошибка.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''

Dim ResString As String
Dim Res As Long
Dim ErrorNumber As Long
Тусклый текст ошибки в виде строки

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '' ''
'Убедитесь, что InputText не является пустой строкой
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Если InputText = vbNullString, то
MsgBox «Параметр InputText представляет собой пустую строку»
ShortenTextToChars = vbNullString
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '
'Тест на NumberOfCharacters <= 3.Если InputText
'составляет 3 или меньше символа, PathCompactPathEx заменит
'вся строка с "...". Мы этого не хотим. Вернуть весь
'InputText.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Если Len (InputText) <= 3, то
ShortenTextToChars = InputText
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '
'Тест на NumberOfCharacters меньше 3.
'Если NumberOfCharacters <= 3, PathCompactPathEx заменит
'вся InputString с "...".
'Вместо этого верните крайние левые символы и уходите.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Если NumberOfCharacters <= 3, то
ShortenTextToChars = Left (InputText, NumberOfCharacters)
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '' '' '' '' '
'Убедитесь, что у нас есть допустимое количество символов.Если NumberOfCharacters
'меньше или равно 0 или больше длины
'InputText, PathCompactPathEx приведет к сбою приложения.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Если NumberOfCharacters <= 0, то
MsgBox "NumberOfCharacters должно быть больше нуля"
ShortenTextToChars = vbNullString
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' '' '' '' '' '' '
'Здесь мы проверяем, равна ли длина InputTex
'NumberOfCharacters.Если они равны, верните
'всю строку и выход. Если бы мы позволили
'PathCompactPathEx для обработки строки, он усечет
'справа и замените последние три символа на
'прямо с "...". Мы не хотим такого поведения - мы
'хочу вернуть всю строку.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Если Len (InputText) = NumberOfCharacters, то
ShortenTextToChars = InputText
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'Инициализировать буфер.Когда PathCompactPathEx
'создает свою строку, считает NumberOfCharacters
', чтобы включить место для завершающего нулевого символа. Таким образом,
'фактическое количество реальных символов, которое он возвращает, будет
'NumberOfCharacters-1. Таким образом выделяем строку
'в NumberOfCharacters + 2 = 1, потому что нам нужно
'NumberOfCharacters (без завершающего нуля)
'возвращено, +1 для конечного нуля.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
ResString = String $ (NumberOfCharacters + 2, vbNullChar)

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'Сократите текст с помощью PathCompactPathEx
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Res = PathCompactPathEx (ResString, InputText, NumberOfCharacters, 0 и)
Если Res = 0, то
ErrorNumber = Err.LastDllError
ErrorText = GetSystemErrorMessageText (ErrorNumber)
MsgBox "Произошла ошибка с PathCompactPathEx" & vbCrLf &
_
«Номер ошибки:» &
CStr (номер ошибки) & vbCrLf & _
"Описание:" &
ErrorText
ShortenTextToChars = vbNullString
Функция выхода
Конец Если

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'обрезать, чтобы символы слева
'символа vbNullChar.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ResString = TrimToNull (Text: = ResString)

'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
'возвращаем строку результата
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
ShortenTextToChars = ResString

Конечная функция

TrimToNull

Когда вы вызываете функции Windows API, вы
часто требуется передать строковую переменную, которая будет заполнена
с результатом функции.Примером является GetWindowsDirectory.
функция.
В этих случаях вы должны сначала инициализировать строку заданной длиной.
(часто длина определяется константой MAX_PATH
= 260, обязательное для Windows значение максимального
длина полного имени файла). Вы можете использовать
либо String $, либо
Функция Space $ для инициализации строки как
заданная длина:

Общедоступная константа MAX_PATH = 260
'Обязательное значение Windows
StrValue = String $ (MAX_PATH, vbNullChar) 'инициализировать StrValue как
MAX_PATH vbNullChars.
'или
StrValue = Пробел $ (MAX_PATH)
'инициализировать StrValue пробелами MAX_PATH.

Когда вызов API возвращается, буфер остается в
его исходная длина (функции API никогда не изменяют размер буфера результатов).
Функция API поместит нулевой символ (Chr (0)
или vbNullChar)
в конце фактических данных в строковой переменной. Это зависит от вас, как
программист для извлечения данных слева от
vbNullChar.Следующая функция сделает это за вас. Это очень простой
функция, но если вы используете много вызовов API в своем коде, это достойно
собственной функции.

Общественная функция
TrimToNull (текст как строка) как строка
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'TrimToNull
'Эта функция возвращает часть текста, которая находится слева от
vbNullChar
'(то же, что и Chr (0)).Обычно эта функция используется с
струны
'заполняется процедурами Windows API. Это вообще не
используется для
'родные строки VB.
'Если vbNullChar не найден, вся текстовая строка
возвращается.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''
Dim Pos As Integer
Pos = InStr (1; Текст, vbNullChar)
Если Pos> 0, то
TrimToNull = Left (Текст, позиция - 1)
Остальное
TrimToNull = Текст
End If

End Function

С небольшим дополнительным кодом,
TrimToNull можно расширить до обрезки до любого
символ или строка символов.

TrimToChar Следующая функция,
TrimToChar вернет
текст слева от первого или последнего вхождения указанного
символ или строка символов.

Общественная функция
TrimToChar (текст как строка, TrimChar как строка, _
Необязательный SearchFromRight As Boolean = False) As String
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
'TrimToChar
'Эта функция возвращает часть строки Text, которая находится слева
из
'TrimChar.Если SearchFromRight опущен или False, возвращаемая строка
'- это строка слева от ПЕРВОГО вхождения TrimChar. Если
'SearchFromRight имеет значение True, возвращаемая строка - это строка для
слева от
'ПОСЛЕДНЕЕ появление TrimToChar. Если TrimToChar не найден в
строка,
'возвращается вся текстовая строка. TrimChar может быть более одного
персонаж.
'Сравнение выполняется в текстовом режиме (регистр не имеет значения).
'Если TrimChar - пустая строка, возвращается вся текстовая строка.
'' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '
Dim Pos As Integer

'Проверьте, является ли TrimChar vbNullString. Если да, верните
целая строка. Если мы
'не тестируйте здесь и используйте InStr, как в следующем логическом блоке,
пустая строка будет
'быть возвращенным.
Если TrimChar = vbNullString, то
TrimToChar = Текст
Функция выхода
End If

'найти позицию в тексте TrimChar
Если SearchFromRight = True, то
'поиск справа налево
Pos = InStrRev (Текст, TrimChar, -1,
vbTextCompare)
Остальное
'поиск слева направо
Pos = InStr (1; Текст; TrimChar;
vbTextCompare)
Конец, если
'вернуть подстроку
Если Pos> 0, то
TrimToChar = Left (Текст, Поз - 1)
Остальное
TrimToChar = Текст
Конец Если

Конец функции

Вы можете скачать
базовый модуль, содержащий эти
функции здесь.

РЕШЕНО: Напишите объявление файла для файла, который содержит текстовые символы и может храниться в C: \ CSharpProjects \ WorkDirectory. Файл будет использоваться для хранения данных.

Стенограмма видео

Хорошо, этот вопрос требует, чтобы мы создали этот каталог, а затем оттуда поместили в него файл, который будет хранить текстовые данные и последующие упражнения. Так что вам будет легче увидеть, что происходит. Поскольку мы уже работаем с этим файлом, мы просто сделаем его рабочим каталогом.Таким образом, вместо того, чтобы выбирать это случайное место, где мы собираемся выполнять свою работу, имеет смысл просто сделать это в файле. Или, если бы он захотел, вы могли бы создать эти каталоги тем же самым способом, а затем просто делать это оттуда. Но мне нравится работать со всем в одной папке проекта, так что мы просто сделаем это. Итак, для начала я просто скопирую полный путь к этому файлу. Итак, я собираюсь сказать, что весна, которую мы назвали наши пути к файлам, равна И затем помните, нам нужны руки с амперсандом, лодки, а затем мы помещаем наш полный путь посередине, и так что просто получается нас в каталог.И снова, если вам нужно было создать какие-либо верхние каталоги, вы просто используете команду rectory dot Create directory command some path, но нам не нужно этого делать, потому что я работаю в стороне. Уже создан. Но нам действительно нужен файл. В конце концов, мы собираемся хранить материал, потому что сейчас мы просто находимся в папке, поэтому мы собираемся закончить это текстовым файлом с точками данных, поэтому в настоящее время он не существует, поэтому мы должны создать это. И мы собираемся сделать это, используя команды создания точки файла, и мы создаем файл в прошлом файле, и это все, что нужно для этого упражнения.Итак, если я нажму на «пять» и запущу программу здесь, мы увидим, что теперь у нас есть пустой файл с именем data dot text, и теперь, когда он был создан, мы можем выполнять свою работу в следующих упражнениях. И снова я сказал, что даже несмотря на то, что я решил эту проблему для работы с этим каталогом, вы могли бы просто использовать этот кончик каталога, создавать команды каталога, чтобы превратить его в любого директора, который вам нравится, потому что он наиболее удобен. И вы можете видеть все на этой боковой панели задач

Кодирование

| PyCharm

Для правильного отображения и редактирования файлов PyCharm необходимо знать, какую кодировку использовать.Как правило, файлы исходного кода в основном находятся в UTF-8. Это рекомендуемая кодировка, если у вас нет других требований.

Чтобы определить кодировку файла, PyCharm использует следующие шаги:

  • Если присутствует метка порядка байтов (BOM), PyCharm будет использовать соответствующую кодировку Unicode независимо от всех других настроек. Для получения дополнительной информации см. Метка порядка байтов.

  • Если в файле явно указана кодировка, PyCharm будет использовать указанную кодировку.Например, это может относиться к файлам XML или HTML. Явное объявление также отменяет все остальные настройки, но вы можете изменить его в редакторе.

  • Если в файле нет спецификации и явного объявления кодировки, PyCharm будет использовать кодировку, настроенную для файла или каталога в настройках кодировки файла. Если кодировка не настроена для файла или каталога, PyCharm будет использовать кодировку родительского каталога. Если кодировка родительского каталога также не настроена, PyCharm вернется к кодировке проекта, а при отсутствии проекта - к глобальной кодировке.

Изменить кодировку файла, который содержит явную кодировку

  1. Откройте нужный файл в редакторе.

  2. Изменить явную информацию о кодировке. Используйте выделение ошибок, чтобы распознать неправильную кодировку, и нажмите Ctrl + Пробел , чтобы отобразить список доступных кодировок:

Измените кодировку, используемую для просмотра файла

Если PyCharm отображает символы в файле неправильно, это, вероятно, не может ' t определить кодировку файла.В этом случае вам необходимо указать правильную кодировку для использования при просмотре и редактировании этого файла.

  • Открыв файл в редакторе, выберите в главном меню или щелкните виджет «Кодировка файла» в строке состояния и выберите правильную кодировку файла.

    Список кодировок достаточно большой. Вы можете использовать быстрый поиск, чтобы быстро найти правильную кодировку: начните вводить текст, когда всплывающее окно открыто.

    Кодировки, отмеченные значком или могут изменить содержимое файла.В этом случае PyCharm открывает диалоговое окно, в котором вы можете выбрать, что делать с файлом:

    • Перезагрузить: загрузить файл в редактор с диска и применить изменения кодировки только к редактору. Вы увидите изменения содержимого, связанные с выбранной кодировкой, но сам файл не изменится.

    • Конвертировать: перезаписать файл с выбранной кодировкой.

Это добавит ассоциацию для файла в настройки кодировки файла.PyCharm будет использовать указанную кодировку для просмотра и редактирования этого файла.

Настроить параметры кодировки файлов

В диалоговом окне «Настройки / Предпочтения» Ctrl + Alt + S выберите.

PyCharm использует эти параметры для просмотра и редактирования файлов, для которых не удалось определить кодировку, а также использует указанные кодировки для новых файлов.

Выбрать кодировку вывода консоли

По умолчанию PyCharm использует системную кодировку для просмотра вывода консоли.

  1. В диалоговом окне «Настройки / Предпочтения» Ctrl + Alt + S выберите.

  2. Выберите кодировку по умолчанию из списка Кодировка по умолчанию.

  3. Нажмите ОК, чтобы применить изменения.

Последнее изменение: 12 октября 2021 г.

2 строки символов в

рэндах

Введение

Эта глава знакомит вас с основными концепциями создания персонажей.
векторы и символьные строки в R. Вы также узнаете, как R обрабатывает объекты
содержащие символы.

Знаков в R

В R фрагмент текста представлен как последовательность символов (букв,
числа и символы).Тип данных R обеспечивает хранение последовательностей
символов символов . Формально режим объекта, который содержит
Символьные строки в R - это «символ» .

Вы выражаете символьные строки, заключая текст в двойные кавычки:

  "символьная строка в двойных кавычках"  

или вы также можете заключить текст в одинарные кавычки:

  'символьная строка в одинарных кавычках'  

Важно то, что вы должны соответствовать типу котировок, которые у вас
с использованием.Двойная кавычка в начале должна иметь двойную кавычку в конце. Точно так же
строка с открывающей одинарной кавычкой должна быть закрыта одинарной кавычкой.

Ввод символов в R, как в примерах выше, не очень полезен. Обычно
вы собираетесь создать объекты или переменные, содержащие несколько строк. Для
Например, вы можете создать переменную , строку , которая хранит некоторую строку:

  string <- 'делать больше с меньшими затратами'
нить
#> [1] "Делай больше с меньшими затратами"  

Обратите внимание, что когда вы печатаете символьный объект, R отображает его с помощью двойного
кавычки (независимо от того, была ли строка создана с использованием одинарных или двойных
цитаты).Это позволяет быстро определить, содержит ли объект символ.
ценности.

При написании строк вы можете вставлять одинарные кавычки в строку с двойными
котировки, и наоборот:

  # одинарные кавычки внутри двойных кавычек
ex1 <- "Проект R для статистических вычислений"  
  # двойные кавычки внутри одинарных кавычек
ex2 <- 'Проект "R" для статистических вычислений'  

Однако вы не можете напрямую вставлять одинарные кавычки в строку с одиночными кавычками.
кавычки, вы также не можете вставлять двойные кавычки в строку с двойными кавычками
(Не делайте этого!):

  ex3 <- "Это" абсолютно неприемлемо " 
  ex4 <- 'Это' абсолютно неправильно ' 

В обоих случаях R выдаст ошибку из-за неожиданного присутствия
либо двойные кавычки в двойных кавычках, либо одинарные кавычки в одинарных
цитаты.

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

  «Проект« Р »для статистических вычислений»  

Мы поговорим больше о экранировании символов в следующих главах.

Начало работы со строками

Возможно, наиболее распространенное использование символьных строк в R связано с:

  • имена файлов и каталогов

  • наименования элементов в объектах данных

  • текстовых элементов, отображаемых на графиках и графиках

Когда вы читаете файл, например таблицу данных, хранящуюся в файле csv,
вы обычно используете чтение .table () и друзья - например, читать.csv () ,
читать.delim () . Предполагая, что файл dataset.csv находится в вашем рабочем каталоге:

  dat <- read.csv (file = 'dataset.csv')  

Основным параметром функции read.csv () является файл , для которого требуется
символьная строка с путем к файлу.

Другой пример базового использования символов - это когда вы назначаете имена
элементы некоторой структуры данных в R.Например, если вы хотите назвать
элементы (числового) вектора, вы можете использовать функцию names () следующим образом:

  число_век <- 1: 5
имена (num_vec) <- c ('uno', 'dos', 'tres', 'cuatro', 'cinco')
num_vec  

Аналогичным образом, многие параметры в функциях построения графиков требуют
входной строки. Ниже приведен гипотетический пример диаграммы рассеяния, которая включает
несколько графических элементов, таких как основной заголовок ( основной ), подзаголовок ( sub ),
метки для оси x и оси y ( xlab , ylab ), название цвета
( col ) и символ точки ( pch ).

  участок (x, y,
     main = 'Основной заголовок',
     sub = 'Субтитры',
     xlab = 'метка оси x',
     ylab = 'метка оси Y',
     col = 'красный',
     pch = 'x')  

Создание символьных строк

Помимо одинарных кавычек '' или двойных кавычек "" , R предоставляет функцию
character () для создания векторов символов. В частности, символ ()
- это функция, которая создает векторные объекты типа «персонаж» .

При использовании символа () вам просто нужно указать длину вектора.
На выходе будет символьный вектор, заполненный пустыми строками:

  # вектор символов с 5 пустыми строками
char_vector <- символ (5)
char_vector
#> [1] "" "" "" "" ""  

Когда вы использовали бы символ () ? Типичный случай использования - это когда вы хотите
инициализировать пустой вектор символов заданной длины. Идея состоит в том, чтобы
создайте объект, который вы измените позже с помощью некоторых вычислений.

Как и в случае с любым другим вектором, после создания пустого вектора символов,
вы можете добавить к нему новые компоненты, просто присвоив ему значение индекса вне
предыдущий диапазон:

  # еще один пример
пример <- символ (0)
пример
#> символ (0)

# проверить его длину
длина (пример)
#> [1] 0

# добавить первый элемент
пример [1] <- "первый"
пример
#> [1] "первый"

# снова проверьте его длину
длина (пример)
#> [1] 1  

Вы можете добавить дополнительные элементы без необходимости следовать последовательному диапазону индекса:

  пример [4] <- "четвертый"
пример
#> [1] "первый" NA NA "четвертый"
длина (пример)
#> [1] 4  

Обратите внимание, что вектор , пример перешел от одноэлементного к содержанию
четырехэлементный без указания второго и третьего элементов.R заполняет это
разрыв с пропущенными значениями NA .

Пустая строка

Самый простой тип строки - это пустая строка , созданная
последовательные кавычки: "" . Технически "" - это строка с
в нем нет символов, отсюда и название «пустая строка»:

  # пустая строка
empty_str <- ""
empty_str
#> [1] ""

# класс
класс (empty_str)
#> [1] "персонаж"  

Пустой вектор символов

Другая базовая строковая структура - это пустой вектор символов , созданный
символом функции () и ее аргументом length = 0 :

  # пустой вектор символов
empty_chr <- символ (0)
empty_chr
#> символ (0)

# класс
класс (empty_chr)
#> [1] "персонаж"  

Важно не перепутать пустой вектор символов символ (0)
с пустой строкой "" ; одно из основных различий между ними -
что у них разная длина:

  # длина пустой строки
длина (empty_str)
#> [1] 1

# длина пустого вектора символов
длина (empty_chr)
#> [1] 0  

Обратите внимание, что пустая строка empty_str имеет длину 1, а пустая строка
вектор символов empty_chr имеет длину 0.

Кроме того, символ (0) встречается, когда у вас есть вектор символов с одним или
больше элементов, и вы пытаетесь подмножество позиции 0:

  строка <- c ('солнце', 'небо', 'облака')
нить
#> [1] "солнце" "небо" "облака"  

Если вы попытаетесь получить элемент в позиции 0, вы получите:

  строка [0]
#> персонаж (0)  

Функция

c ()

Существует также универсальная функция c () (объединение или объединение), которую вы
можно использовать для создания векторов символов.Просто передайте любое количество символов
элементов через запятую:

  строка <- c ('солнце', 'небо', 'облака')
нить
#> [1] "солнце" "небо" "облака"  

Опять же, обратите внимание, что вы можете использовать одинарные или двойные кавычки для определения символа
элементы внутри c ()

  планет <- c («Меркурий», «Венера», «Марс»)
планеты
#> [1] "меркурий" "венера" ​​"марс"  

- символ () и - символ ()

Относится к символу () R предоставляет две связанные функции:
как.символ () и является символом () . Эти две функции являются методами для
принуждение объектов к типу "персонаж" и проверка того,
Объект R имеет тип "персонаж" . Например, давайте определим два
объекты a и b следующим образом:

  # определить два объекта 'a' и 'b'
a <- "испытай меня"
б <- 8 + 9  

Чтобы проверить, относятся ли a и b к типу «символ» , используйте функцию
есть.символ () :

  # это символы "a" и "b"?
является. персонаж (а)
#> [1] ИСТИНА

is.character (b)
#> [1] ЛОЖЬ  

Аналогично, вы также можете использовать функцию class () , чтобы получить класс
объект:

  # классы "а" и "б"
класс (а)
#> [1] "персонаж"
класс (б)
#> [1] "numeric"  

Функция as.character () является методом приведения. Для лучшего или худшего,
R позволяет преобразовывать (т. Е. Принуждать) несимвольные объекты в символы
строки с функцией as.символ () :

  # преобразование 'b' как символа
b <- как. символ (b)
б
#> [1] "17"  

Строки и объекты R

Прежде чем продолжить обсуждение функций для управления строками, нам нужно поговорить о некоторых важных технических моментах. R имеет пять основных типов объектов для хранения данных: вектор , фактор , матрица (и массив ), data.frame и список . Мы можем использовать каждый из этих объектов для хранения символьных строк.Однако эти объекты будут вести себя по-разному в зависимости от того, храним ли мы символьные данные с другими типами данных. Давайте посмотрим, как R обрабатывает объекты с разными типами данных (например, символьными, числовыми, логическими).

Поведение объектов R со строками символов

Векторы .
Самый простой тип контейнера данных - это векторы. Вы можете думать о векторах как о строительных блоках для других более сложных структур данных. R имеет шесть типов векторов, технически называемых атомарными типами , или атомарными векторами: логический, целочисленный, двойной, символьный, комплексный и необработанный.

логический вектор, содержащий логические значения
целое вектор, содержащий целые значения
двойной вектор, содержащий действительные значения
знак вектор, содержащий символьные значения
комплекс вектор, содержащий комплексные значения
сырой вектор, содержащий байты

Векторы являются атомарными структурами, потому что их значения должны быть и иметь один и тот же тип .Это означает, что любой заданный вектор должен быть однозначно логическим, числовым, сложным, символьным или необработанным.

Итак, что происходит, когда вы смешиваете разные типы данных в векторе?

  # вектор с цифрами и символами
c (1: 5, пи, «текст»)
#> [1] "1" "2" "3" "4"
#> [5] "5" "3.141558979" "" text " 

Как видите, вектор, полученный в результате объединения целых чисел 1: 5 ,
число пи , а какой-то «текст» - это вектор со всеми его элементами
обрабатываются как символьные строки.Другими словами, когда вы объединяете смешанные данные в
векторов, строки будут преобладать. Это означает, что мода вектора будет
«символ» , даже если вы смешиваете логические значения:

  # вектор с числами, логическими числами и символами
c (1: 5; ИСТИНА; пи; "текст"; ЛОЖЬ)
#> [1] "1" "2" "3" "4"
#> [5] "5" "ИСТИНА" "3.141558979" "текст"
#> [9] "ЛОЖЬ"  

Фактически, R следует двум основным правилам приведения типов данных.Самый строгий
Правило: если в векторе присутствует символьная строка, все остальное в
вектор будет преобразован в строки символов. Другое правило принуждения: если
вектор содержит только логические элементы и числа, тогда логические значения будут преобразованы в
числа; ИСТИНА Значения становятся 1, а ЛОЖЬ значения становятся 0.

Соблюдение этих правил избавит вас от многих головных болей и разочарований.
моменты. Более того, вы можете использовать их в свою пользу для манипулирования данными в очень
полезные способы.

Матрицы.
Такое же поведение векторов происходит, когда вы смешиваете символы и числа в
матрицы. Опять же, все будет рассматриваться как символы:

  # матрица с цифрами и символами
rbind (1: 5, буквы [1: 5])
#> [, 1] [, 2] [, 3] [, 4] [, 5]
#> [1,] "1" "2" "3" "4" "5"
#> [2,] "a" "b" "c" "d" "e"  

Кадры данных.
С фреймами данных дело обстоит немного иначе. По умолчанию символьные строки
внутри кадра данных будет преобразовано в коэффициенты:

  # кадр данных с цифрами и символами
df1 = данные.рамка (числа = 1: 5, буквы = буквы [1: 5])
df1
#> цифры буквы
#> 1 1 а
#> 2 2 b
#> 3 3 c
#> 4 4 дн.
#> 5 5 e
# исследуем структуру фрейма данных
str (df1)
#> 'data.frame': 5 набл. из 2 переменных:
#> $ числа: int 1 2 3 4 5
#> $ letter: множитель с 5 уровнями "a", "b", "c", "d", ..: 1 2 3 4 5  

Для отключения data.frame () поведения по умолчанию преобразования строк
на множители используйте аргумент stringsAsFactors = FALSE :

  # кадр данных с цифрами и символами
df2 <- данные.Рамка(
  числа = 1: 5,
  буквы = буквы [1: 5],
  stringsAsFactors = FALSE)

df2
#> цифры буквы
#> 1 1 а
#> 2 2 b
#> 3 3 c
#> 4 4 дн.
#> 5 5 e
# исследуем структуру фрейма данных
ул (df2)
#> 'data.frame': 5 набл. из 2 переменных:
#> $ числа: int 1 2 3 4 5
#> $ письма: chr "a" "b" "c" "d" ...  

Несмотря на то, что df1 и df2 отображаются идентично, их структура
другой.В то время как df1 $ букв сохраняется как "фактор" , df2 $ букв является
хранится как «символ» .

Списки.
Со списками вы можете комбинировать любые типы объектов данных. Тип данных в
каждый элемент списка будет поддерживать соответствующий режим:

  # список с элементами разного режима
список (1: 5, буквы [1: 5], rnorm (5))
#> [[1]]
#> [1] 1 2 3 4 5
#>
#> [[2]]
#> [1] "a" "b" "c" "d" "e"
#>
#> [[3]]
#> [1] -0.507 0,192 -1,172 -2,088 -2,106  

The Workhorse Function

паста ()

Функция paste () , пожалуй, одна из самых важных функций, которые вы
можно использовать для создания и построения строк. paste () принимает один или несколько объектов R,
преобразует их в "символ" , а затем объединяет (вставляет) их, чтобы сформировать
одна или несколько символьных строк. Его использование имеет следующий вид:

  вставить (..., sep = "", collapse = NULL)  

Аргумент ... означает, что требуется любое количество объектов. Аргумент
sep - это символьная строка, которая используется в качестве разделителя. Аргумент
collapse - необязательная строка, указывающая, хотите ли вы, чтобы все термины были
свернулся в одну струну. Вот простой пример с пастой () :

  # паста
ПИ <- паста ("Жизнь", пи)

ПИ
#> [1] "Жизнь 3.141558979"  

Как видите, разделителем по умолчанию является пробел ( sep = "" ).Но ты
можно выбрать другой символ, например sep = "-" :

  # паста
IloveR <- paste («Я», «любовь», «Р», sep = «-»)

IloveR
#> [1] "Я люблю-Р"  

Если вы дадите paste () объектам разной длины, то будет применен
правило утилизации. Например, если вы вставите один символ "X" с
последовательность 1: 5 и разделитель sep = "." , вот что вы получите:

  # паста с предметами разной длины
paste ("X", 1: 5, sep = ".")
#> [1] «X.1» «X.2» «X.3» «X.4» «X.5»  

Чтобы увидеть эффект аргумента collapse , давайте сравним разницу с
разваливается и без него:

  # паста со сворачиванием
paste (1: 3, c ("!", "?", "+"), sep = '', collapse = "")
#> [1] "1! 2? 3+"

# вставить без сворачивания
paste (1: 3, c ("!", "?", "+"), sep = '')
#> [1] "1!" "2?" «3+»  

Одна из потенциальных проблем с пастой () заключается в том, что она преобразует отсутствующие значения NA в символ "NA" :

  # с пропущенными значениями NA
evalue <- paste ("значение 'e' равно", exp (1), NA)

оценивать
#> [1] "значение 'e' равно 2.71828182845905 NA " 

Помимо paste () , существует также функция paste0 () , которая является эквивалентом

  вставить (..., sep = "", свернуть)  
  # сворачивание с пастой0
paste0 («давайте», «свернуть», «все», «эти», «слова»)
#> [1] "давайте свернем все слова"  

Получение текста в R

Мы видели, как выразить символьные строки, используя одинарные кавычки '' или двойные кавычки "" .Но нам также необходимо обсудить, как получить текст в R, то есть как импортировать и читать файлы, содержащие строки символов. Итак, как нам ввести текст в R? Ну, это в основном зависит от формата файлов, которые мы хотим прочитать.

Мы опишем две общие ситуации. Тот, в котором содержимое файла может быть представлено в табличном формате (т.е. строки и столбцы). Другой, когда контент не имеет табличной структуры. Во втором случае у нас есть символы в неструктурированной форме (т.е.е. просто строки строк) или, по крайней мере, в нетабличном формате, таком как html, xml или другой формат языка разметки.

Другая функция - scan () , которая позволяет нам читать данные в нескольких форматах. Обычно мы используем scan () для анализа сценариев R, но мы также можем использовать для импорта текста (символов)

Столы для чтения

Если данные, которые мы хотим импортировать, имеют некоторый табличный формат (например, ячейки и столбцы), мы можем использовать набор функций для чтения таблиц, таких как read.table () и его сестринские функции, например читать.csv () , читать.delim () , читать.fwf () . Эти функции читают файл в формате таблицы и создают из него фрейм данных со строками, соответствующими наблюдениям, и столбцами, соответствующими полям в файле.

читать таблицу () основная функция для чтения файла в формате таблицы
читать .csv () читает файлы CSV, разделенные запятой ","
читать.csv2 () читает файлы CSV, разделенные точкой с запятой ";"
читать. Делим () читает файлы, разделенные табуляцией "\ t"
читать.delim2 () аналогично читать. Delim ()
читать.fwf () чтение файлов формата фиксированной ширины

Предупреждение о встроенных функциях чтения таблиц данных: по умолчанию все они преобразуют символы в R-факторы.Это означает, что если есть столбец с символами, R будет рассматривать эти данные как качественную переменную. Чтобы отключить это поведение, нам нужно указать аргумент stringsAsFactors = FALSE . Таким образом, все символы в импортированном файле будут сохранены как символы после того, как мы прочитаем их в R.

Рассмотрим простой пример чтения файла австралийской радиостанции ABC (http://www.abc.net.au/radio/). В частности, мы прочитаем CSV-файл, содержащий данные радиостанций ABC.Такой файл находится по адресу:

http://www.abc.net.au/local/data/public/stations/abc-local-radio.csv

Чтобы импортировать файл abc-local-radio.csv, мы можем использовать read.table () или read.csv () (просто выберите правильные параметры). Вот код для чтения файла с read.table () :

  # сборка url
abc <- "http://www.abc.net.au/"
радио <- "местные / данные / общественные / станции / abc-local-radio.csv"
abc_radiosl <- paste0 (abc, радио)

# читать данные из URL
радио <- читать.стол(
  файл = abc_radios,
  заголовок = ИСТИНА,
  sep = ',',
  stringsAsFactors = FALSE)  

В этом случае расположение файла определяется в объекте abc, который является первым аргументом, переданным в read.table () . Затем мы выбираем другие аргументы, такие как header = TRUE , sep = "," и stringsAsFactors = FALSE . Аргумент header = TRUE указывает, что первая строка файла содержит имена столбцов. Разделитель (запятая) указывается как sep = "," .И, наконец, чтобы сохранить строки символов в файле как «символ» во фрейме данных, мы используем stringsAsFactors = FALSE .

Если во время операции чтения файла все прошло нормально, следующее, что нужно сделать, это проверить размер созданного фрейма данных с помощью dim () :

  # размер таблицы в 'радио'
тусклый (радио)
#> [1] 53 18  

Обратите внимание, что радио кадра данных представляет собой таблицу с 53 строками и 18 столбцами. Если мы исследуем эту структуру с помощью str () , мы получим информацию о каждом столбце.Аргумент vec.len = 1 указывает, что мы просто хотим, чтобы отображался первый элемент каждой переменной:

  # структура столбцов
str (радио, vec.len = 1)
#> 'data.frame': 53 набл. из 18 переменных:
#> $ State: chr "QLD" ...
#> $ Website.URL: chr "http://www.abc.net.au/brisbane/" ...
#> $ Station: chr "ABC Radio Brisbane" ...
#> $ Town: chr "Брисбен" ...
#> $ Latitude: число -27,5 ...
#> $ Longitude: число 153...
#> $ Talkback.number: chr "1300 222 612" ...
#> $ Enquiries.number: chr "07 3377 5222" ...
#> $ Номер факса: chr "07 3377 5612" ...
#> $ Sms.number: chr "0467 922 612" ...
#> $ Street.number: chr "Серая улица, 114" ...
#> $ Street.suburb: chr "Южный Брисбен" ...
#> $ Street. Почтовый индекс: int 4101 4700 ...
#> $ PO.box: chr "GPO Box 9994" ...
#> $ PO.suburb: chr "Брисбен" ...
#> $ PO.почтовый индекс: int 4001 4700...
#> $ Twitter: chr "abcbrisbane" ...
#> $ Facebook: chr "https://www.facebook.com/abcinbrisbane" ...  

Как вы можете заметить, большинство из 18 переменных находятся в "символьном" режиме . Только $ Latitude , $ Longitude , $ Street.postcode и $ PO.postcode имеют другой режим.

Чтение необработанного текста

Если мы хотим импортировать текст как есть (т.е. мы хотим читать необработанный текст), тогда нам нужно использовать функцию readLines () .Эту функцию следует использовать, если мы не хотим, чтобы R предполагал, что данные находятся в какой-либо конкретной форме.

Мы работаем с readLines () , передавая ему имя файла или имя URL-адреса, который мы хотим прочитать. Результатом является вектор символов с одним элементом для каждой строки файла или URL-адреса. Созданный вектор будет содержать столько элементов, сколько строк в считываемом файле.

Давайте посмотрим, как читать текстовый файл. Для этого примера мы будем использовать текстовый файл с сайта TEXTFILES.COM (Джейсон Скотт) http://www.textfiles.com/music/. Этот сайт содержит раздел текстовых файлов, связанных с музыкой. Для демонстрации рассмотрим «105.3 лучших песен 1991 года» по версии радиостанции «Современный рок» KITS San Francisco . Соответствующий файл txt находится по адресу:

http://www.textfiles.com/music/ktop100.txt.

  # читать файл ktop100.txt
top105 <- readLines ("http://www.textfiles.com/music/ktop100.txt")  

readLines () создает вектор символов, в котором каждый элемент представляет строки URL-адреса, который мы пытаемся прочитать.Чтобы узнать, сколько элементов (т.е. сколько строк) находится в top105 , мы можем использовать функцию length () . Чтобы проверить первые элементы (т.е. первые строки текстового файла), используйте head ()

  # сколько строк
длина (top105)
#> [1] 123

# проверка первых элементов
голова (top105)
#> [1] "От: [email protected] (Эд Сураньи)"
#> [2] "Дата: 12 января 92 21:23:55 GMT"
#> [3] "Группы новостей: rec.music.misc"
#> [4] "Тема: Обратный отсчет до конца года KITS"
#> [5] ""
#> [6] ""  

Если посмотреть на вывод, предоставленный head () , первые четыре строки содержат некоторую информацию о теме электронного письма (обратный отсчет до конца года KITS).Пятая и шестая строки - пустые. Если мы проверим следующие несколько строк, мы увидим, что список песен в top100 начинается со строки номер 11.

  # 5 лучших песен
top105 [11:15]
#> [1] «1. НИРВАНА ЗАПАХИТ ДУХОМ ПОДРОСТКОВ»
#> [2] "2. ЭДС НЕВЕРОЯТНО"
#> [3] "3. Р.Э.М. ПОТЕРЯ СВОЕЙ РЕЛИГИИ"
#> [4] "4. SIOUXSIE & THE BANSHEES ПОЦЕЛУЮ ИХ ДЛЯ МЕНЯ"
#> [5] «5.ПЛОХОЙ. II РУШ " 

В каждой строке есть порядковый номер, за которым следует точка, за которым следует пробел, затем имя исполнителя / группы, за которым следуют несколько пробелов, а затем название песни. Как видите, хитом номер один 1991 года был «Smells like teen spirit» от Nirvana .

А что насчет последних песен в рейтинге KITS? Чтобы получить ответ, мы можем
используйте функцию tail () для проверки последних n = 10 элементов файла:

  # проверка последних 10 элементов
хвост (top105, n = 10)
#> [1] «101.РАЗБИВАТЬ ТЫКВЫ СИВА "
#> [2] "102. ЭЛВИС КОСТЕЛЛО ДРУГАЯ СТОРОНА ..."
#> [3] "103. ВИДИТ ПСИХИЮ"
#> [4] "104. THRILL KILL CULT SEX ON WHEELZ"
#> [5] "105. МЭТЬЮ СВИТ, Я ЖДАЛ"
#> [6] "105,3 ЛЮДЕЙ ЛЮДИ ВСЕ ЕЩЕ СЕКСУЮТ"
#> [7] ""
#> [8] "Эд"
#> [9] "ed @ wente.llnl.gov "
#> [10] ""  

Обратите внимание, что последние четыре строки не содержат информации о песнях.
Причем количество песен не ограничивается 105. Фактически рейтинг идет
до 106 песен (последний номер 105,3)

На этом мы остановим обсуждение этой главы. Однако важно сохранить
помните, что текстовые файлы бывают самых разных форм, форм, размеров и
ароматы. Для получения дополнительной информации о том, как импортировать файлы в R, авторитетный
документ представляет собой руководство по R Data Import / Export (разработано R Core Team)
доступный по адресу:

http: // cran.r-project.org/doc/manuals/r-release/R-data.html

.

Добавить комментарий

Ваш адрес email не будет опубликован.