Когда следует использовать xml:lang
и когда нужно определить свой собственный элемент или атрибут для передачи
языковых значений в схему XML документа (DTD)?
Иногда документы содержат или включают различные типы естественного речевого контента. В других случаях они необходимы для хранения значения естественного
языка в качестве внешних по отношению к документу данных или meta данных. Так как различные приложения используют аналогичные форматы, дизайнеры схем
иногда путают, когда они должны использовать xml:lang
а, когда определять свой собственный связанный с языком элемент или атрибут.
Например, в XHTML 1.0 есть атрибут hreflang
в element a
(элементе) и также xml:lang
(или lang
атрибут, в случае с HTML 4.0) для контента element (елемента) a
:
<a xml:lang="en" href="xyz" hreflang="de">Click for German</a>
Атрибут xml:lang
описывает язык, который содержится в element (элементе) a
("Click for
German"), в то время как атрибут hreflang
это meta данные, в этом случае описывает язык некоторого внешнего по отношению к этой
Веб странице контента.
xml:lang
Контент, непосредственно связанный с XML документом (или содержится непосредственно в документе или рассматривается как часть документа
когда он обрабатывается или предоставляется) должен использовать атрибут xml:lang
для указания языка контента. xml:lang
имеет резервироваться для авторов
контента для непосредственного обозначения любого естественного речевого контента, что они могут иметь.
xml:lang
определяется в XML 1.0 как общий атрибут, который может использоваться для определения языка любого
контента element (елемента). Сюда включается как текст, который можно прочитать, так и другой контент (такой как встроенные объекты, такие как изображения и звуковые файлы), содержащийся
в element (элементе) в котором он появился. Значение xml:lang
применяется к любым sub-elements, содержащихся в element (элементе). Это также применяется
к значениям атрибута, которые связаны с element и sub-elements (Хотя использование естественного языка в атрибутах это не лучшая идея). Значение
атрибута xml:lang
- это language тэг, который определяется в BCP 47.
Например, вот xml:lang
в element (элементе) t
:
<t xml:lang="en">
This is some text contained by the 't' element. The use
of the xml:lang attribute indicates the language so that, for
example, the correct font could be applied when rendered or
the correct spell-checker could be used when proofing the
document. If we didn't have xml:lang, we might have problems
with embedded content, such as the phrase <span xml:lang="fr">
C'est la vie</span>, which is in another language.
</t>
Этот пример показывает, как xml:lang
применяется к атрибуту:
<para>Il faut utiliser <abbr title="Simple Object Access Protocol"
xml:lang="en">SOAP</abbr></para>
Когда значение языка - на самом деле является атрибутом или meta данными для некоторого внешнего контента, тогда xml:lang
не следует
использовать. В этих случаях вы хотите сохранить информацию о языке, но язык непосредственно не относится к содержанию XML документа
(или содержит такой контент, как изображения, которые обрабатываются как часть документа). В этом случае вы должны определить элемент или атрибут
используя другое название и не следует использовать атрибут xml:lang
. Для выбора значения элемента или атрибута следует использовать BCP 47, так же, как для xml:lang
.
Некоторые примеры этого могут включать в себя:
a
в XHTML), что указывает на написанную на другом языке версию этого
документаВам следует создать ваш собственный element (элемент) (или attribute (атрибут)) тогда, когда есть необходимость передать значение языка (как часть структуры
данных или как meta данные для внешнего документа), а не чтобы указать язык конкретной части контента. Не используйте xml:lang
для описания значений внешне языка - это позволит избежать создания проблем для авторов контента, которым необходимо отмечать контент для
обработки текстов.
Например, документ XML может выглядеть так:
<item type="DVD">
<title xml:lang="fr">Cyrano de Bergerac</title>
<!-- indicates the language of the film title -->
<runningTime value="137" />
<!-- not language affected -->
<dialogue>en</dialogue>
<!-- indicates the language of the dialogue -->
<subtitles track="1" language="zh-Hant" />
<!-- this track contains Traditional Chinese subtitles -->
<subtitles track="2" language="zh-Hans" />
</item>
В этом примере атрибут xml:lang
передает информацию о естественном языке текста, который появляется в
этом документе. Элемент dialogue
(диалог) и атрибут language
(язык) элемента subtitles
(подзаголовки) определены в схеме XML документа и передают значение
естественного языка, который с ними связан. Например, он передает информацию, с subtitles (подзаголовки), что написанные на Track (запись) #1 или показанные на
Традиционном Китайском языке (zh-Hant
).
Важно помнить, что xml:lang
обладает свойством: элементы более низкого уровня наследуют language attribute (речевой атрибут). Это можно
использовать для того, чтобы определить язык для большинства контента (без redundant (избыточных) language тэгов для каждого element (элемента)). Например, это хорошая идея, чтобы
разместить xml:lang
в свой html
element (елемент) в начале своего XHTML документа и использовать его только там
где меняется язык текста. Дополнительную информацию смотрите в статье Language тэги
в HTML и XML.
Проблематичным является приминення xml:lang
к атрибуту - нет никакого способа, чтобы:
определить более чем один язык в title attribute (атрибуте заголовка)
<p title="French (français)">Bonjour</p>
отделять язык, используемый в attribute (атрибуте) от того, что используется в element (элемент).
<a title="anglais" href="qa-when-xmllang.en.html" lang="en"
xml:lang="en">English</a>
Обратите внимание, что три языка схем (XML DTD, XML Schema, и RELAX NG) отличаются по вопросу: должен ли пользователь
определить xml:lang
перед использованием его в качестве attribute (атрибута)? Особенно:
XML DTDs требует, чтобы любой элемент, который использует xml:lang
в качестве attribute (атрибута) назначал его в DTD
XML Schema требует чтобы xml namespace (пространство имен) было назначено и импортировано к использованию xml:lang
(и другие значения xml namespace (пространства имен))
RELAX NG предварительно назначает xml namespace (пространство имен), как в XML, поэтому не нужно никакого дополнительного назначения.
BCP 47, Тэги для Определения Языков Определяет, как использовать language тэги для значений xml:lang
.
Language тэги в HTML и XML Описывает как использовать language тэги.
Ссылки по теме, Разработка XML