xml:lang в схемах XML документа

Питання

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

Коли слід використовувати свій власний element (елемент) або attribute (атрибут)

Коли значення мови - насправді є атрибутом або meta даними для деякого зовнішнього контенту, тоді xml:lang не слід використовувати. У цих випадках ви хочете зберегти інформацію про мову, але мова безпосередньо не відноситься до контенту XML документа (або містить такий контент, як зображення, які обробляються як частина документа). У цьому випадку ви повинні визначити елемент або атрибут використовуючи іншу назву і не слід використовувати атрибут xml:lang. Для вибору значення елемента або атрибута слід використовувати BCP 47, так само, як для xml:lang.

Деякі приклади цього можуть включати в себе:

Вам слід створити ваш власний 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 до атрибуту - немає жодного способу, щоб:

  1. визначити більш ніж одну мову в title attribute (атрибуті заголовку)

    <p title="French (français)">Bonjour</p>
  2. відокремлювати мову, яка використовується в 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 (атрибуту)? Особливо: