Коли слід використовувати 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