웹의 문자열: 언어 및 방향 메타데이터

W3C 최초 공개 작업 초안

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2026/WD-string-meta-20260716/
최신 게시 버전:
https://www.w3.org/TR/string-meta/
최신 편집자 초안:
https://w3c.github.io/string-meta/
이력:
https://www.w3.org/standards/history/string-meta/
커밋 이력
편집자:
(W3C)
(초청 전문가)
피드백:
GitHub w3c/string-meta (풀 리퀘스트, 새 이슈, 열린 이슈)

초록

이 문서는 웹에서 사용되는 문자열의 언어와 방향을 식별하기 위한 모범 사례를 설명합니다.

이 문서의 상태

이 절에서는 이 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 간행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.

이 문서에 대한 의견을 환영합니다. 다만 의견을 더 쉽게 추적할 수 있도록 각 의견마다 별도의 이슈를 제기하고, URL을 사용하여 의견을 제시하는 절을 가리켜 주십시오.

이 문서는 국제화 작업 그룹권고안 트랙을 사용하여 최초 공개 작업 초안으로 발행했습니다.

최초 공개 작업 초안으로 발행되었다고 해서 W3C와 그 회원이 이를 지지한다는 의미는 아닙니다.

이 문서는 초안이며 언제든지 다른 문서에 의해 갱신되거나, 대체되거나, 폐기될 수 있습니다. 진행 중인 작업 이외의 것으로 이 문서를 인용하는 것은 적절하지 않습니다.

이 문서는 W3C 특허 정책에 따라 운영되는 그룹이 작성했습니다. W3C는 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지하며, 해당 페이지에는 특허를 공개하는 방법도 포함되어 있습니다. 자신이 필수 청구항을 포함한다고 판단하는 특허를 실제로 알고 있는 개인은 필수 청구항에 관한 정보를 W3C 특허 정책 제6절에 따라 공개해야 합니다.

이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.

1. 소개

이 문서는 JSON, WebIDL 및 기타 비마크업 데이터 언어를 기반으로 하는 형식과 관련된 일련의 명세 검토 과정에서 국제화 작업 그룹이 관찰한 결과를 바탕으로 개발되었습니다. XML과 같은 마크업 형식과 달리, 이러한 데이터 언어는 일반적으로 확장 가능한 속성을 제공하지 않으며 언어 또는 방향 메타데이터가 내장된 형태로 고안되지 않았습니다.

이 문서의 개념은 정형화된 데이터 구조의 일부로 사용되거나 단순히 JavaScript 스크립팅 또는 저장된 문자열 목록에서 생성되는 경우를 포함하여 웹에서 문자열이 사용되는 모든 상황에 적용할 수 있습니다.

웹의 자연어 정보는 언어 및 방향 메타데이터의 존재에 의존하며 그로부터 이점을 얻습니다. 유니코드 지원과 함께, 텍스트 범위의 블록 방향자연어를 포함하고 지정하는 메커니즘은 웹을 위한 새로운 형식과 기술을 개발할 때 고려해야 하는 핵심 국제화 요소 중 하나입니다.

HTML 및 XML과 같은 마크업 형식과 CSS 및 XSL과 같은 관련 스타일링 언어는 상당히 성숙해 있으며, 내장 기능을 통해 전 세계 언어의 교환과 표현을 지원합니다. 문자열 및 문자열 기반 데이터 형식도 전 세계 언어와 문화를 완전하고 일관되게 지원하려면 이와 유사한 메커니즘이 필요합니다.

1.1 문서 규칙

이 문서에서 [RFC2119]의 대문자 기울임꼴 키워드는 일반적인 의미를 갖습니다. 또한 다음과 같은 스타일 규칙을 사용합니다.

정의는 이와 같이 다른 배경색과 장식으로 표시됩니다.

모범 사례는 이와 같이 다른 배경색과 장식으로 표시됩니다.

1.2 용어

이 절에서는 이 문서의 내용을 이해하는 데 필요한 핵심 용어를 간략히 정의합니다. 여기에서 다루는 용어의 대부분은 [I18N-GLOSSARY]에서 가져왔으며, 편의를 위해 여기에서 다시 설명합니다.

참고

양방향 텍스트 또는 오른쪽에서 왼쪽으로 쓰는 텍스트에 익숙하지 않다면 여기에서 기본적인 소개를 확인할 수 있습니다. 이 자료는 유니코드 양방향 알고리즘의 작동 방식과 이 알고리즘이 블록 방향과 상호 작용하는 방식을 기본적으로 이해하도록 도와주며, 이 문서를 읽는 데 유용한 기반을 제공합니다. 추가 자료는 국제화 작업 그룹의 명세 개발자를 위한 모범 사례에서 확인할 수 있습니다.

메타데이터는 데이터에 관한 데이터입니다. 즉, 추가적인 맥락, 의미 또는 표현 정보를 제공하기 위해 데이터 구조에 포함되는 정보입니다. 이 문서에서 메타데이터의 기능은 방향 및 언어에 관한 정보를 표현하는 것입니다. [I18N-GLOSSARY]

생산자는 나중에 저장, 처리 또는 교환하기 위해 자연어 문자열 데이터를 생성하는 모든 프로세스입니다. [I18N-GLOSSARY]

소비자는 표시 또는 처리를 위해 자연어 문자열을 수신하는 모든 프로세스입니다. [I18N-GLOSSARY]

직렬화 규약은 문자열 메타데이터의 직렬화 방식, 즉 이를 이해하고, 직렬화하고, 읽고, 전송하고, 제거하는 방법 등에 관해 생산자와 소비자가 공유하는 공통된 이해입니다. [I18N-GLOSSARY]

유니코드 양방향 알고리즘 [UAX9]은 UBA라고도 하며, 단락 방향의 개념을 정의합니다. 이는 "단락"의 초기 기본 방향이며, 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 중 하나로 결정됩니다. "단락"이라는 용어는 UBA 내부에서 특별한 의미를 갖습니다. 이 문서의 맥락에서는 웹의 문자열과 기타 데이터가 일반적으로 특정 문서 형식의 "텍스트 단락"이 아니므로 이 용어가 오해를 불러일으킬 수 있습니다. 이 문서에서는 일반적으로 다음과 같은 더 구체적인 두 용어를 사용합니다.

블록 방향. 텍스트 블록의 초기 기본 방향으로, 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽 중 하나로 결정됩니다. 블록은 문서의 단락이나 데이터 파일의 문자열처럼 하나의 전체 단위로 취급되는 텍스트를 의미합니다. "블록"이라는 이름은 인라인 방향과 대비하기 위해 선택되었습니다. 유니코드는 이 값을 단락 방향이라고 부릅니다. [I18N-GLOSSARY]

문자열 방향. 문자열 내부의 방향성 구간이 표시되는 순서를 나타내는 특정 문자열의 전체 방향입니다. 다양한 데이터 구조 안에서 전송되는 문자열은 흔히 블록(예: 단락)에 삽입됩니다. 이 경우 문자열 방향은 문자열의 양방향 격리를 구성하는 일부로 필요합니다.

이 문서에서는 전체 문자열의 문자열 방향을 식별하고, 다양한 맥락에서 문자열을 표시할 때 문자열 방향을 전송하고 적용하는 방법을 다룹니다. 문자열 내부의 텍스트 구간에 대한 방향 또는 표시 방식을 결정하는 방법은 다루지 않습니다.

양방향 알고리즘은 주로 문자 속성에 따라 인접한 문자를 배치하는 데 중점을 둡니다. 블록 방향은 (a) 강한 방향성을 가진 LTRRTL 문자 구간이 표시되는 시각적 순서와 방향, 그리고 (b) 문장 부호와 같이 약한 방향성을 가지거나 중립적인 문자가 있을 때 해당 항목이 다른 콘텐츠를 기준으로 배치되는 위치를 결정합니다.

1.3 문자열 수명 주기

문자열 메타데이터를 처리하는 대안을 맥락 없이 검토할 수는 없습니다. 문자열 처리와 데이터 형식을 논의하기 위한 프레임워크를 먼저 확립해야 합니다.

1.3.1 생산자

문자열은 콘텐츠 작성자가 일반 텍스트 편집기, 문자 메시지 또는 편집 도구에 문자열을 입력하거나, 스크립트가 웹 페이지에서 텍스트를 추출하거나, 다른 애플리케이션 또는 저장소에서 기존 문자열 집합을 가져오는 등 다양한 방식으로 생성될 수 있습니다. 이 문서에서 고려하는 데이터 형식에서는 많은 문자열이 백엔드 데이터 저장소 또는 여러 종류의 데이터베이스에서 생성됩니다. 문자열의 출처는 데이터의 문자열 방향과 언어에 관한 정보를 포함하는 인터페이스, API 또는 메타데이터를 제공할 수 있습니다. 일부 출처는 방향이나 언어가 제공되거나 지정되지 않았을 때 사용할 적절한 기본값도 제공합니다. 이 문서에서 문자열의 생산자는 사람이든 메커니즘이든 저장 또는 전송을 위해 문자열을 생성하거나 제공하는 출처입니다.

문자열이 생성될 때는 (a) 문자열과 연결할 적절한 언어와 문자열 방향을 감지하거나 캡처하고, (b) 필요한 경우 언어와 문자열 방향을 저장하고 전달할 수 있도록 문자열을 설정해야 합니다.

예를 들어 HTML 양식에서 추출된 문자열의 경우, 문자열 방향은 양식 필드의 계산된 값에서 감지할 수 있습니다. 이러한 값은 html 요소와 같은 앞선 요소에서 상속될 수도 있고, input 요소 자체의 마크업 또는 스타일링을 사용하여 설정될 수도 있습니다. 사용자는 키보드 단축키를 사용하여 양식 필드의 방향을 변경함으로써 텍스트 방향을 설정할 수도 있습니다. dirname 속성은 양식을 제출할 때 해당 값을 자동으로 전달하는 방법을 제공합니다.

마찬가지로 HTML 양식의 언어 정보는 일반적으로 html 태그의 lang 속성 또는 트리에서 lang 속성을 가진 상위 요소에서 상속됩니다.

문자열 생산자가 다른 생산자가 저장한 위치에서 문자열을 수신하고 있으며 해당 위치에서 문자열 방향과 언어가 이미 확립되어 있다면, 생산자는 언어와 문자열 방향이 이미 설정되었음을 이해하고 이 정보를 소비자를 위해 변환하거나 인코딩하는 방법을 이해해야 합니다.

1.3.2 소비자

소비자는 처리를 위해 문자열을 수신하고, 사용자가 볼 수 있는 맥락에 문자열을 배치할 수도 있는 애플리케이션 또는 프로세스입니다. 표시 목적의 경우 소비자는 해당 맥락에서 문자열의 블록 방향과 언어가 문자열에 올바르게 적용되도록 해야 합니다. 처리 목적의 경우 소비자는 적어도 언어와 방향을 유지해야 하며, 언어별 작업을 수행하기 위해 언어 및 방향 데이터를 사용해야 할 수도 있습니다.

문자열을 올바르게 표시하려면 추가 마크업을 적용하거나, 제어 코드를 추가하거나, 표시 속성을 설정하여 문자열 방향과 언어를 렌더링 문서 또는 프로세스에 제공해야 합니다. 이는 이 표시 맥락에서 문자열이 올바르게 나타나도록 문자열에 적용해야 하는 문자열 방향 또는 언어를 렌더링 소프트웨어에 나타냅니다. 언어와 방향 모두에서 해당 언어가 적용되는 텍스트 범위의 경계를 명확히 해야 합니다. 텍스트 방향의 경우 양방향 알고리즘 [UAX9]의 영향이 주변 텍스트로 번지는 것을 방지하기 위해 포함된 문자열을 주변 텍스트로부터 격리해야 합니다.

한 문서 형식의 소비자가 다른 문서 형식의 생산자일 수도 있다는 점에 유의하십시오.

1.3.3 직렬화 규약

모든 생산자소비자 사이에는 문서 형식에 포함되는 내용과 각 필드 또는 속성의 데이터가 의미하는 바에 대한 규약이 필요합니다. 문자열 생산자가 해당 문자열의 문자열 방향 또는 언어에 관한 정보를 수집하고 전달하기 위해 특별한 조치를 취할 때마다, 문자열 소비자가 생산자가 이 정보를 인코딩한 방법을 이해할 것이라는 전제하에 그렇게 해야 합니다.

생산자가 아무런 조치를 취하지 않더라도, 소비자는 적절한 문자열 방향과 언어를 결정하기 위해 어떤 규칙을 따를지 정해야 합니다. 이는 단지 어떤 형태의 기본값을 제공하는 것일 수도 있습니다.

일부 시스템 또는 문서 형식에서는 문자열 생산자와 소비자에게 필요한 동작이 완전히 명시되어 있습니다. 다른 경우에는 이러한 규약이 제공되지 않으므로 필요한 언어 또는 방향 정보를 인코딩하고, 전송하고, 나중에 디코딩하는 방법에 대한 규약을 사용자가 제공해야 합니다. JSON과 같은 저수준 명세는 기본적으로 문자열 메타데이터 구조를 제공하지 않으므로 이를 기반으로 하는 모든 문서 형식은 자체적으로 "규약"을 제공해야 합니다.

1.4 지역화 가능한 텍스트가 아닌 문자열

웹은 대부분의 데이터를 인코딩하기 위해 문자열과 문자 시퀀스를 사용합니다. 서로 다른 데이터 유형 (예: 숫자, 시간 값 또는 base64와 같은 바이너리 데이터 직렬화)을 제외하더라도, 문자열 데이터 유형을 사용하는 것으로 정의되었지만 자연어 데이터 값으로 사용하기 위한 것이 아닌 값이 여전히 존재합니다. 예를 들어 CSS의 예약 키워드나 WebIDL 문서에 있는 다양한 정의의 이름처럼 명세에서 정의한 구문 콘텐츠는 해당 문서 형식 또는 프로토콜의 지역화 가능한 텍스트에 속하지 않습니다.

많은 명세는 사용자가 특정 네임스페이스 또는 문서 형식 안에서 사용자 제공 값을 지정할 수 있도록 허용하기도 합니다. 예를 들어 Wifi 네트워크의 SSID는 사용자가 정의합니다. CSS 스타일시트의 클래스 이름도 마찬가지입니다. 대부분의 명세는 이러한 이름에 광범위한 유니코드 문자를 허용하며, 그렇게 하도록 권장됩니다. 대부분의 사용자는 값을 더 쉽게 다룰 수 있도록 하나 이상의 자연어에서 단어로 인식할 수 있는 값을 선택합니다. 그러나 이러한 문자열이 자연어 단어로 구성되어 있더라도, 이런 유형의 문자열은 지역화 가능한 텍스트로 간주되지 않으며 언어 또는 문자열 방향과 관련된 추가 메타데이터를 붙일 필요가 없습니다. 일반적으로 이들은 컴퓨터가 값을 일치시키는 데 사용하는 식별자일 뿐입니다.

때때로 유용한 판단 기준은 식별자를 tK0001.37B와 같은 임의의 문자열로 바꾸더라도 여전히 허용되고, 정상적으로 작동하며, "일반적인" 상태라면 해당 문자열은 지역화 가능한 텍스트가 아니라는 것입니다.

예를 들어 아래의 기본 예제에서 JSON 문서의 모든 키 (id, title, authors, language, publisher 등)는 구문 콘텐츠입니다. ISBN, 언어 태그 및 발행일과 같은 데이터 값도 구문 콘텐츠입니다. 실제 책 제목, 저자 이름 및 출판사 이름만 자연어 데이터 값이며, 따라서 지역화 가능한 텍스트입니다.

2. 모범 사례, 권고 사항 및 격차

이 절은 웹의 데이터 형식에서 언어와 문자열 방향을 식별하기 위한 국제화(I18N) 작업 그룹의 모범 사례 모음으로 구성됩니다. 일부 경우에는 기존 표준에 공백이 있어 I18N 작업 그룹의 권고 사항을 구현하기 위해 추가적인 표준화가 필요하거나 완전한 채택을 가로막는 장벽이 있을 수 있습니다.

주요 문제는 데이터 값의 생산자와 소비자 사이에 공통된 직렬화 규약을 확립하여, 각 데이터 필드의 언어와 문자열 방향을 인코딩하고, 찾고, 해석하는 방법을 양쪽 모두가 알 수 있게 하는 것입니다. 자연어 문자열 필드의 언어와 문자열 방향을 모두 제공하기 위해 메타데이터를 사용하면, 필요한 정보가 존재하도록 보장하고, 최소한의 처리만으로 정보를 제공하고 추출할 수 있으며, 생산자 또는 소비자가 데이터를 검색하거나 변경할 필요가 없습니다.

국제화 작업 그룹이 모든 명세에서 확인하는 가장 기본적인 모범 사례는 다음과 같습니다.

§

자연어 텍스트를 포함하는 모든 문자열 필드에서는 해당 문자열의 언어와 문자열 방향을 결정할 수 있어야 합니다. 이러한 결정에는 문자열 또는 문서 수준의 메타데이터를 사용해야 하며, 휴리스틱에 의존해서는 안 됩니다.

2.2 언어와 방향을 알 수 없는 경우

§

다른 정보가 없는 경우 기본 방향과 기본 언어를 알 수 없는 것으로 지정하십시오.

명시적 메타데이터를 사용할 수 있다면 휴리스틱을 적용할 필요보다 우선합니다. 휴리스틱 방식만으로는 필요한 방향을 신뢰성 있게 추론할 수 없고, 메타데이터가 명시적으로 제공되었다면 이를 신뢰할 수 있는 정보로 사용하려는 의도가 있다고 볼 수 있으므로 이는 논리적입니다.

소비자가 데이터에 대체 전략을 적용해야 하는 시점을 알 수 있도록 언어와 방향이 알 수 없는 값이라는 사실을 아는 것이 필수적입니다. 이러한 전략에는 언어 감지 또는 방향에 대한 첫 강한 문자 휴리스틱이 포함될 수 있습니다. 특히 기본 방향을 LTR로 설정해서는 안 됩니다. 그렇게 하면 RTL 문자 체계로 작성된 문자열에 더 적합한 첫 강한 문자 감지가 필요하지 않은 것으로 처리되기 때문입니다.

§

문자열 방향을 알 수 없는 경우 소비자가 첫 강한 문자 휴리스틱을 사용하여 각 문자열의 문자열 방향을 식별하도록 지정하십시오.

메타데이터를 사용할 수 없는 경우 문자열 소비자는 문자열의 기본 방향을 감지하기 위해 휴리스틱을 사용해야 하며, 유니코드 표준의 첫 강한 문자 감지 알고리즘을 기반으로 하는 것이 좋습니다.

첫 강한 문자 알고리즘은 문자열에서 첫 번째 강한 방향성 문자를 찾고 (일부 앞부분 문자열은 건너뜀), 이 문자가 전체 문자열의 문자열 방향을 나타낸다고 가정합니다. 그러나 첫 번째 강한 방향성 문자가 항상 전체 문자열의 실제 또는 의도된 문자열 방향과 일치하지는 않으므로, 필요한 경우 이 문제를 해결할 수 있도록 메타데이터를 제공할 수 있어야 합니다.

§

첫 강한 문자 휴리스틱에 의존하는 경우 콘텐츠 개발자가 특정 기본 방향을 강제해야 할 때 문자열 시작 부분에서 RLM/LRM을 사용할 수 있도록 허용하되, 기존 문자열 앞에 이러한 문자를 추가하지 마십시오.

§

대부분의 경우 RLM/LRM 서식 문자를 사용할 수 있다고 가정하지 마십시오.

문자열 데이터가 웹 양식이나 기타 단순한 환경에서 사용자 또는 콘텐츠 개발자에 의해 제공되는 경우, 사용자는 이러한 서식 문자를 입력하지 못할 수 있습니다. 실제로 대부분의 사용자는 이러한 문자가 존재하는지 또는 사용하는 방법조차 알지 못할 가능성이 큽니다. 웹 양식은 입력의 블록 방향을 설정하면(설정해야 함) 즉시 검사할 때 이러한 문자를 사용할 필요가 없게 할 수 있습니다.

§

방향 메타데이터를 사용할 수 없고 다른 방식으로 제공할 수도 없는 경우가 아니라면, 명세는 문자열 방향사용 가능한 언어 메타데이터에서 추론하도록 허용해서는 안 됩니다.

모든 리소스가 사용 가능한 메타데이터 메커니즘을 사용하는 것은 아닙니다. 언어 태그의 문자 체계 하위 태그(또는 [BCP47] 및 [LDML]에 기반한 "가능성이 높은" 문자 체계 하위 태그)는 다른 데이터를 사용할 수 없을 때 블록 방향 또는 문자열 방향을 추론하는 데 사용할 수 있습니다. 언어 정보를 사용하는 것은 "최후의 수단"이며 명세는 이를 블록 방향을 나타내는 기본 방법으로 사용해서는 안 됩니다. 메타데이터를 제공할 수 있도록 노력하십시오.

2.3 명세에서 양방향 키워드 정의하기

자연어 텍스트 값을 포함하는 문서 형식 또는 프로토콜의 명세는 각 자연어 콘텐츠 값의 블록 방향을 저장하기 위한 데이터 필드 또는 속성을 정의해야 합니다. 상호 운용성을 보장하려면 이러한 정의가 웹 전체에서 일관되어야 합니다. 한 문서 형식의 소비자는 자신이 수신한 값의 블록 방향을 자신이 생성하는 필드에 매핑하거나, 콘텐츠를 표시할 때 각 문자열의 문자열 방향을 제어해야 하기 때문입니다. 이 절에서는 사용할 구체적인 콘텐츠와 함께 이러한 정의를 제공하는 방법을 설명합니다.

콘텐츠 방향을 정의하는 두 가지 일반적인 사용 사례가 있습니다. (i) 데이터 구조의 필드로 문자열 방향을 저장하고 전송하기 위한 방향 메타데이터 필드를 정의하는 경우 또는 (ii) 특정 자연어 콘텐츠에 블록 방향을 연결하기 위한 방향 속성을 정의하는 경우입니다.

방향 메타데이터 필드. 방향 메타데이터 필드(줄여서 방향 필드)는 특정 자연어 문자열 필드 또는 데이터 값에 문자열 방향을 연결하는 데 사용되는 데이터 구조의 필드입니다.

방향 속성. 방향 속성은 일반적으로 마크업 언어의 속성으로 표현되며, 연결된 자연어 문자열 콘텐츠의 문자열 방향을 제공하는 필드 또는 값입니다.

§

데이터 구조 또는 프로토콜에서 방향 메타데이터 필드를 정의할 때 필드 이름 direction을 사용하십시오.

데이터 값에는 direction이라는 이름이 선호됩니다. dir도 허용 가능한 대안입니다.

§

방향 속성을 정의할 때 필드 이름 dir을 사용하십시오.

마크업 언어와 같은 환경의 속성에는 dir이라는 이름이 선호됩니다. 속성에 direction을 사용하는 것은 이름이 길고 이 사용 사례에서 상대적으로 드물기 때문에 권장되지 않습니다. [HTML]과 [XML10] 모두 내장 dir 속성을 갖고 있다는 점에 유의하십시오. dir 속성은 문서 안에서 적용 범위를 가져야 하며 양방향 격리를 제공하도록 정의되어야 합니다.

§

방향 메타데이터 필드 또는 방향 속성의 값은 ltr, rtlauto 값을 포함하고 이 값으로만 제한되도록 정의하십시오.

ltr 값은 CSS 쓰기 모드 [CSS-WRITING-MODES-4]에서 나타내는 방식과 정확히 동일하게 왼쪽에서 오른쪽 방향을 나타냅니다.

rtl 값은 CSS 쓰기 모드 [CSS-WRITING-MODES-4]에서 나타내는 방식과 정확히 동일하게 오른쪽에서 왼쪽 방향을 나타냅니다.

auto 값은 사용자 에이전트가 [HTML]에서 정의한 auto 알고리즘을 사용하여 블록 방향(" 단락 방향")을 결정함을 나타냅니다. 이 휴리스틱은 양방향 알고리즘 [UAX9]의 단락 수준 결정과 유사한 방식으로 강한 방향성을 가진 첫 번째 문자를 찾습니다.

auto가 여러 필드 또는 문서 전체에 적용되면 각 필드의 방향을 개별적으로 도출해야 함을 의미합니다. 자동으로 결정할 수 없는 경우에는 문자열별 메타데이터가 이를 재정의합니다. 이는 대부분의 문자열에서 문자열 방향을 첫 강한 문자 휴리스틱으로 신뢰성 있게 결정할 수 있을 때 방향이 혼합된 문자열 그룹에 레이블을 지정하는 데 유용할 수 있습니다. 가능하면 개별 문자열의 실제 문자열 방향(ltr 또는 rtl)을 auto 대신 저장하거나 교환해야 합니다. 값이 실제로 알려지지 않은 경우에는 방향 필드를 생략하는 것이 더 좋습니다.

2.4 명세에 예제 작성하기

문서 형식 또는 프로토콜의 명세에는 일반적으로 예제가 포함됩니다. 예제에는 필연적으로 자연어 텍스트 필드가 포함됩니다.

§

명세에 예제를 작성할 때는 자연어 텍스트를 포함하는 필드에 대해 항상 이 문서에 있는 직렬화와 모범 사례를 사용하십시오. 형식 또는 프로토콜이 리소스 전체 기본값을 지원한다면 예제에서 기본값을 설정하는 모습을 보여 주십시오. 형식 또는 프로토콜이 문서 수준 기본값을 지원하지 않거나 기본값을 표시하기 불편하다면 예제에서 단일 언어 지역화 가능 텍스트 필드 또는 언어 맵을 사용하십시오.

2.5 생산자를 위한 지침

이 문서에서 설명하는 다양한 언어 및 방향 메타데이터 메커니즘을 제공하는 명세의 구현자를 포함한 콘텐츠 생산자는 여기의 모범 사례를 구현하는 방법에 어느 정도 재량을 가집니다. 예를 들어 문서 형식이 리소스 전체 기본값과 단일 언어 지역화 가능 텍스트 필드를 모두 제공한다면 사용자는 어느 쪽을 우선해야 합니까?

§

문서 형식 또는 프로토콜이 언어에 대한 리소스 전체 기본값을 제공한다면, 문서 콘텐츠에 가장 적절한 언어로 항상 설정해야 합니다. 이는 흔히 문서를 생성하는 사용자의 로캘입니다.

§

문서 형식 또는 프로토콜이 방향에 대한 리소스 전체 기본값을 제공한다면, 문서 콘텐츠와 가장 밀접하게 연결된 방향으로 항상 설정해야 합니다. 일반적으로 이 방향은 문서 수준의 기본 언어가 제공된 경우 해당 언어와 일치합니다.

예를 들어 문서의 리소스 전체 언어가 en-US (영어, 미국)라면 해당 언어와 연결된 방향이 왼쪽에서 오른쪽이므로 문서의 리소스 전체 방향은 LTR이어야 할 가능성이 큽니다.

§

생산자리소스 전체 기본값이 제공되고 문자열별 값이 해당 기본값과 일치한다면 문자열별 언어 또는 방향 메타데이터를 포함해서는 안 됩니다.

§

생산자는 특정 문자열의 값이 리소스 전체 기본값보다 더 구체적이거나 완전히 다른 경우 문자열별 언어 메타데이터를 포함해야 합니다.

예를 들어 리소스 전체 기본값fr(프랑스어)이고 문자열과 연결된 언어가 fr-FR(프랑스어, 프랑스)라면 생산자는 더 구체적인 fr-FR 태그를 사용하여 문자열별 메타데이터를 생성해야 합니다. 마찬가지로 언어가 de(독일어)처럼 완전히 다른 경우에도 생산자는 문자열별 메타데이터를 생성해야 합니다.

언어 태그는 더 많은 하위 태그를 포함할수록 더 구체적입니다.

참고
§

생산자는 문자열 자체의 방향이 명확하더라도 콘텐츠의 문자열 방향이 제공된 리소스 전체 기본값과 반대라면 문자열별 방향 메타데이터를 포함해야 합니다.

많은 문자열은 전체 문자열 방향과 일치하는 강한 방향성 문자만으로 구성됩니다. 이 방향이 리소스 전체 기본값과 일치하지 않고 기본값이 존재하는 경우, 문자열 방향을 포함해야 합니다. 그러면 소비자가 방향을 결정하기 위해 문자열을 내부적으로 검사할 필요가 없으며, 필터링이나 선택과 같은 프로세스가 콘텐츠의 방향을 잘못 판단하지 않습니다.

2.6 소비자를 위한 지침

언어 및 문자열 방향 메타데이터를 수집하고, 직렬화하고, 전송하는 목적은 소비자가 이를 사용하여 문자열 데이터를 올바르게 표시하고 처리할 수 있게 하는 것입니다.

§

소비자는 연결된 문자열 값을 처리하거나 표시할 때 문서 형식 또는 프로토콜에서 제공하는 모든 언어 메타데이터를 사용해야 합니다.

§

소비자는 연결된 문자열 값을 처리하거나 표시할 때 문서 형식 또는 프로토콜에서 제공하는 모든 문자열 방향 메타데이터를 사용해야 합니다.

§

문자열이 문서에 표시되거나 삽입될 때 소비자는 문자열을 주변 텍스트로부터 방향상 격리해야 합니다.

§

소비자는 문자열을 문서에 삽입할 때 방향 메타데이터를 적용해야 합니다. 이 문자열 방향이 문자열과 연결된 메타데이터에 의해 제공된다면 소비자는 이를 사용해야 합니다. 이러한 메타데이터를 사용할 수 없다면 첫 강한 문자 휴리스틱을 사용하여 방향을 할당해야 합니다.

삽입된 문자열 값을 양방향 격리로 감싸는 것은 문제를 일으키지 않으며, 그렇게 하면 번짐 효과를 방지하여 최상의 결과를 얻을 수 있습니다.

§

소비자는 문자열을 문서에 삽입할 때 언어 메타데이터를 적용해야 합니다. 관련 문서 속성 또는 API를 사용하여 사용 가능한 모든 언어 메타데이터를 문자열에 적용하십시오.

표현(예: 글꼴 선택) 또는 텍스트 처리(예: 하이픈 넣기)에서 최상의 결과를 얻으려면 삽입된 텍스트의 언어를 문서 또는 텍스트를 처리하는 API에서 설정해야 합니다. [HTML]에서는 lang 속성을 설정하여 이를 수행합니다. [XML]에서는 xml:lang 속성을 설정하여 이를 수행합니다.

§

소비자는 상호 운용성을 보장하기 위해 언어 태그를 정규화할 수 있습니다.

예를 들어 많은 구현은 [CLDR]의 언어 태그 변환에 정의된 정규화를 사용합니다. 이 정규화는 그 밖에도 더 이상 사용되지 않는 하위 태그를 대체하고 변형 하위 태그를 알파벳순으로 정렬합니다.

§

생산자이기도 한 소비자는 언어 및 방향 메타데이터를 하위 소비자에게 전달하도록 주의해야 합니다.


2.7 JSON-LD 사용하기

§

문서 수준 기본값으로 [JSON-LD]의 @context 및 내장 @language 속성을 사용하는 것이 권장됩니다.

이를 사용하는 문서 형식의 경우 [JSON-LD]에는 문자열 모음 (전체 리소스 포함)에 언어 메타데이터를 할당하는 데 도움이 되는 일부 데이터 구조가 포함되어 있습니다. 그러나 단락 방향 메타데이터는 포함되지 않습니다. 특히 JSON 블록 또는 개별 객체와 연결할 수 있는 컨텍스트 범위의 @language 값 형태로 "문자열 국제화"라고 부르는 기능을 정의합니다. 기본 방향에 대한 정의가 없으므로 @context 메커니즘은 현재 이 문서에서 제기하는 모든 문제를 해결하지 못합니다.

§

명세는 [JSON-LD] 1.1에 정의된 RDF 리터럴용 i18n 네임스페이스 기능을 사용해야 합니다.

§

i18n 네임스페이스를 사용할 수 없거나 사용하기에 적절하지 않은 경우, 명세는 자연어 값에 대해 [JSON-LD] 일반 문자열 리터럴이 문자열별 언어 정보를 제공하도록 요구해야 합니다.

[RDF-PLAIN-LITERAL]과 같이 문자열 값의 일부로 언어 메타데이터를 직렬화할 수 있게 하는 데이터 유형이 이미 존재합니다.

2.8 레거시 프로토콜 또는 형식의 일부인 문자열

§

레거시 형식상의 이유로 방향을 지정할 수 없는 문자열의 경우, 명세는 각 문자열의 문자열 방향이 첫 강한 문자 휴리스틱에 따라 결정되도록 명시해야 합니다.

§

지역화 가능한 텍스트아닌 문자열 값 및 문자열 필드의 경우, 명세는 해당 필드가 본질적으로 비언어적임을 명시하고 각 문자열 값에 언어 태그 zxx ("언어 콘텐츠 없음")를 연결하도록 권장해야 합니다.

§

지역화 가능한 텍스트를 포함하는 것으로 알려져 있지만 기본 형식에서 언어 메타데이터를 제공할 가능성이 없는 문자열 값 및 문자열 필드의 경우, 명세는 콘텐츠의 언어를 알 수 없는 것으로 명시하고 각 문자열에 언어 태그 und("미확정")를 연결하도록 권장해야 합니다. 적절한 경우 최후의 수단으로 명세는 휴리스틱 사용 또는 다른 필드 값에서 언어를 추론하는 것을 허용할 수 있습니다.

참고

많은 프로토콜 또는 형식은 자연어 텍스트를 의도한 것은 아니지만 사람이 해석할 수 있는 토큰으로 사용하기 위한 값을 사용합니다. 이를 통해 디버깅 등에 해당 값을 사용할 수 있습니다. 여기에는 사람이 값을 보고 상호 작용할 것으로 예상되는 일반적인 프로토콜 요소가 포함될 수 있습니다.

일반적인 예로 도메인 이름과 이메일 주소가 있습니다. 이러한 값 공간에서 유니코드를 더 폭넓게 사용할 수 있게 되면서 값의 표시는 시스템과 환경에 따라 달라질 수 있습니다. 예를 들어 언어에 따라 달라질 수 있는 글꼴 선택은 기본 로캘이 다른 시스템에서 서로 다를 수 있습니다.

일부 명세는 기존 프로토콜 또는 형식에서 정의한 문자열 값과 상호 작용합니다. 흔히 이러한 문자열에는 언어 또는 방향 메타데이터가 연결되어 있지 않거나 제공되지 않습니다. 예를 들어 많은 HTTP 헤더는 콘텐츠가 자연어 텍스트일 것으로 예상되더라도 해당 콘텐츠가 지역화 가능한 텍스트가 아닌 것처럼 정의합니다. 이러한 문자열 값의 소비자 또는 생산자 역할을 하는 명세에는 언어 또는 방향 메타데이터를 알아낼 방법이 없으며 그러한 메타데이터를 연결할 메커니즘도 없습니다.

2.9 추가 모범 사례

§

명세는 언어 식별에 유니코드 "언어 태그" 문자(코드 포인트 U+E0000부터 U+E007F까지)를 사용해서는 안 됩니다.

[Unicode]는 언어 태그를 전달하기 위해 태그 문자를 사용하는 것은 매우 권장되지 않는다고 하며, U+E0001 LANGUAGE TAG 문자의 사용도 매우 권장되지 않는다고 명시합니다.

§

명세는 쌍을 이루는 양방향 제어 문자의 생성 또는 사용을 요구해서는 안 됩니다.

이를 다른 방식으로 표현하면 다음과 같습니다. 구현이 통과하는 데이터를 수정하도록 요구하지 마십시오. 유니코드 양방향 제어 문자는 생산자 또는 데이터 출처가 텍스트를 올바르게 표시하기 위해 사용한 특정 문자열 콘텐츠 안에 이미 포함되어 있을 수 있습니다. 즉, 이미 데이터의 일부일 수 있습니다. 구현은 발견한 제어 문자를 변경하지 않아야 하지만 자체적으로 추가 제어 문자를 생성하도록 요구되어서도 안 됩니다.

§

동일한 값에 대해 여러 언어의 Localizable 문자열을 제공할 수 있는 경우, 명세는 언어 인덱싱의 사용을 권장해야 합니다.

생산자는 때때로 동일한 콘텐츠 항목 또는 데이터 레코드에 대해 여러 언어 값을 제공해야 합니다 (지역화 고려 사항 참조). 이는 소비자가 수행하는 언어 협상에 사용할 수 있습니다.

참고

3. 요구 사항 및 사용 사례

참고: 여기서 시작

웹의 양방향 및 언어 메타데이터 사용 사례 문서에서 번짐 효과나 로캘 기반 렌더링과 같은 문제를 명확히 보여 주는 상세한 사용 사례를 확인하십시오. 이 절에서는 해당 문서의 핵심 사항과 언어 및 방향 메타데이터가 필요한 이유를 요약합니다.

3.1 이것이 중요한 이유는 무엇인가?

콘텐츠의 언어에 관한 정보는 여러 가지 이유로 지역화 가능한 텍스트를 처리하고 표시할 때 중요합니다. 언어 정보가 없으면 외형이나 기능이 저하되어 사용자가 불편을 겪거나, 콘텐츠를 이해할 수 없게 되거나, 중요한 기능이 비활성화될 수 있습니다. 영향을 받는 프로세스에는 다음이 포함됩니다.

마찬가지로 방향 메타데이터도 웹에서 중요합니다. 문자열에 오른쪽에서 왼쪽으로 진행되는 문자 체계의 텍스트가 포함되어 있다면 최종 사용자에게 도달했을 때 해당 문자열을 올바르게 표시할 수 있어야 합니다. 이를 위해서는 문자열 전체에 어떤 문자열 방향을 적용해야 하는지 확립해야 합니다. 적절한 문자열 방향은 문자열을 보기만 해서는 항상 추론할 수 없습니다. 추론이 가능한 경우에도 문자열의 생산자와 소비자는 방향을 해석하기 위해 동일한 휴리스틱을 사용해야 합니다.

웹 페이지의 본문이나 전자책의 콘텐츠와 같은 정적 콘텐츠에는 문서 형식이나 콘텐츠 메타데이터의 일부로 언어 또는 방향 정보가 제공되는 경우가 많습니다. 웹에서 사용되는 데이터 형식은 일반적으로 이러한 메타데이터를 제공하지 않습니다. Microformats, WebIDL, JSON 등의 기본 명세는 추가 메타데이터 없이 자연어 텍스트를 문자열 객체에 저장하는 경향이 있습니다.

이로 인해 애플리케이션 작성자와 데이터 형식 설계자는 자발적으로 메타데이터를 제공해야 하는 부담을 갖게 됩니다. 표준화된 형식이 그 결과로 발생하는 문제를 다루지 않으면 데이터 자체는 온전하게 도착하더라도 그 처리나 표현을 완전히 복원할 수 없게 될 수 있습니다.

분산 웹에서는 모든 소비자가 다른 프로세스나 시스템의 생산자가 될 수도 있습니다. 따라서 특정 소비자는 한 문서 형식과 하나의 직렬화 규약에서 얻은 언어 및 방향 메타데이터를 다른 문서 형식을 사용하는 또 다른 소비자에게 전달해야 할 수 있습니다. 직렬화 규약에서 언어와 방향 메타데이터를 표현하는 방식이 일관되지 않으면 상호 운용성이 저해되고 일관된 구현을 가로막게 됩니다.

3.2 예제

고객의 전자책 라이브러리를 보여 주는 웹 페이지를 만들고 있다고 가정해 보겠습니다. 전자책은 데이터 카탈로그에 존재하며 일반적인 데이터 값으로 구성됩니다. 단일 항목의 JSON 파일은 다음과 같은 형태일 수 있습니다.

{
    "id": "978-111887164-5",
    "title": "HTML و CSS: تصميم و إنشاء مواقع الويب",
    "authors": [ "Jon Duckett" ],
    "language": "ar",
    "pubDate": "2008-01-01",
    "publisher": "مكتبة",
    "coverImage": "https://example.com/images/html_and_css_cover.jpg",
    // etc.
},

위의 각 항목은 어딘가에 있는 데이터베이스의 데이터 필드입니다. 책이 어떤 언어로 작성되었는지에 관한 정보도 있습니다. ("language": "ar")

국제화를 올바르게 지원하는 카탈로그에는 위에 표시된 것 외에 추가 메타데이터가 포함됩니다. 즉, titleauthors 필드처럼 지역화 가능한 텍스트를 포함하는 각 필드에는 언어와 문자열 방향 정보가 메타데이터로 저장되어야 합니다. 동아시아 언어 정보를 정렬하기 위한 발음 메타데이터와 같은 다른 값도 있을 수 있습니다. 데이터 소비자는 이러한 메타데이터 값을 사용하여 처리에 영향을 주고 항목을 다양한 방식으로 표시할 수 있습니다. JSON 데이터 구조에는 이러한 값을 저장하거나 교환할 위치가 없으므로 국제화된 애플리케이션을 구성하기가 더 어렵습니다.

한 가지 해결 방법은 HTML과 유니코드 양방향 제어 문자를 혼합하여 값을 인코딩하는 것이며, 데이터 값은 다음 중 하나와 같은 형태가 될 수 있습니다.

// following examples are NOT recommended
// contains HTML markup
"title": "<span lang='ar' dir='rtl'>HTML و CSS: تصميم و إنشاء مواقع الويب</span>",
// contains LRM as first character
"authors": [ "\u200eJon Duckett" ],

그러나 JSON은 데이터 교환 형식이므로 콘텐츠가 최종적으로 HTML 맥락에서 제목 필드로 표시되지 않을 수도 있습니다. 위의 JSON은 네이티브 컨트롤을 사용하여 제목을 표시하는 로컬 데이터 저장소를 채우는 데 사용될 수 있으며, 이러한 컨트롤은 HTML을 문자열 콘텐츠로 취급합니다. 데이터의 생산자와 소비자는 추가 데이터를 제공하거나 제거하거나 메타데이터로 노출하기 위해 데이터를 내부적으로 검사할 것을 예상하지 않을 수 있습니다. 대부분의 JSON 라이브러리는 자신이 직렬화하는 콘텐츠의 구조에 관해 알지 못합니다. 생산자는 데이터베이스와 같은 로컬 데이터 저장소에서 직접 JSON 파일을 생성하려 합니다. 소비자는 각 문자열의 콘텐츠를 추가로 고려하지 않고 사용할 값을 저장하거나 검색하려 합니다. 또한 생산자나 소비자에게는 필드 길이 제한과 같이 추가 제어 문자나 마크업의 삽입으로 영향을 받는 다른 고려 사항이 있을 수 있습니다. 이러한 모든 고려 사항은 구현자가 필요한 메타데이터를 직렬화, 역직렬화, 관리 및 교환하기 위한 임의의 수단을 만들도록 특별한 부담을 주며, 그 과정에서 상호 운용성이 희생됩니다.

참고로 위 예제에 표시된 마크업은 제목과 삽입된 마크업 자체가 브라우저에서 올바르게 표시되도록 하는 데 실제로 필요합니다.

3.3 유니코드만으로 충분하지 않은가?

[Unicode]와 UTF-8 같은 문자 인코딩은 웹과 웹 형식의 핵심 요소입니다. 이를 통해 인터넷 전체에서 모든 언어의 텍스트를 일관되게 인코딩하고 교환할 수 있습니다. 그러나 유니코드는 완전한 교환을 보장하더라도 그 자체만으로 자연어 텍스트의 완전한 표현과 처리를 보장하지는 않습니다.

유니코드의 여러 기능이 언어 및 방향 메타데이터를 제공하는 해결책의 일부로 제안되기도 합니다. 특히 방향 메타데이터를 처리하기 위해 유니코드 양방향 제어 문자가 제안됩니다. 또한 유니코드의 U+E0000 블록에는 원래 언어 태그로 사용하기 위한 "태그" 문자가 있지만, 현재 이러한 용도는 폐기되었습니다.

교환 형식의 데이터에 문자를 추가하는 것이 좋지 않은 이유는 다양합니다. 여기에는 다음이 포함됩니다.

참고

마지막 고려 사항은 특히 강조할 필요가 있습니다. 문서 형식은 흔히 여러 코드 계층을 사용하여 구성되고 직렬화됩니다. 범용 JSON 라이브러리와 같은 라이브러리는 전달받은 데이터를 충실하게 저장하고 검색할 것으로 기대됩니다. 더 높은 수준의 구현도 일반적으로 전달받은 값을 충실하게 직렬화하고 역직렬화하는 데 중점을 둡니다. 데이터 자체를 변경하는 모든 프로세스는 바람직하지 않은 변동성을 발생시킵니다. 예를 들어 문서에서 반환된 문자열이 문서를 생성하는 데 사용한 데이터 카탈로그의 문자열과 동일한지 확인하는 애플리케이션 단위 테스트를 생각해 보십시오. 양방향 제어 문자, HTML 마크업 또는 유니코드 언어 태그가 삽입, 제거 또는 변경되면 두 문자열이 같을 것으로 예상되더라도 동일한 것으로 비교되지 않을 수 있습니다.

3.4 방향을 지원하기 위해 소비자가 수행해야 하는 작업

양방향 텍스트의 사용 사례를 고려하면 소비자가 추가 작업이나 준비 없이 문자열을 대상 위치에 단순히 삽입할 수 없다는 점이 분명합니다. 먼저 삽입할 문자열에 적절한 문자열 방향을 확립하고, 그다음 문자열 주변에 양방향 격리를 적용해야 합니다.

이를 위해 문자열 주변에 마크업이나 유니코드 서식 제어 문자가 있어야 합니다. 문자열의 실제 방향이 삽입 대상 콘텐츠의 방향과 반대라면 마크업이나 제어 코드가 문자열을 정확히 감싸야 합니다. 서로 인접하게 삽입되는 문자열은 이전 절에서 살펴본 번짐 문제를 방지하기 위해 각각 개별적으로 감싸야 합니다.

[HTML]은 dir 속성이나 bdi 요소를 사용할 때 모든 인라인 요소에 기본 방향 제어와 격리를 제공합니다. 문자열을 일반 텍스트 환경에 삽입할 때는 격리용 유니코드 서식 문자를 사용해야 합니다. 안타깝게도 유니코드 표준이 일반 텍스트 및 비마크업 애플리케이션의 기본값으로 권장하는 이러한 격리 문자의 지원은 아직 보편적이지 않습니다.

핵심은 마크업이나 제어 문자가 제공하는 방향 정보가 문자열의 문자열 방향을 반영하도록 보장하는 것입니다.

4. 문자열 방향을 식별하기 위해 고려된 접근 방식

양방향 텍스트 값의 근본적인 문제는 문자열이 최종적으로 사용자에게 표시될 때 문자열의 소비자가 어떤 문자열 방향을 사용해야 하는지 아는 방법입니다. 방향을 식별하거나 추정하는 이러한 접근 방식 중 일부는 특정 애플리케이션에서 유용하며 [HTML]과 같은 여러 명세에서 사용되고 있습니다. 여기서 다루는 문제는 어떤 접근 방식이 일반적으로 채택하기에 적절하며 문서 형식의 모범 사례로 사용하도록 명시할 수 있는지입니다.

4.1 첫 강한 문자 속성 감지

이 접근 방식은 단독으로 사용하는 것은 권장되지 않지만, 다른 접근 방식과 함께 대체 방법으로 사용하는 것은 권장됩니다.

4.1.1 작동 방식

생산자는 아무 작업도 할 필요가 없습니다.

문자열은 그대로 저장됩니다.

소비자는 문자열에서 강한 유니코드 방향 속성을 가진 첫 번째 문자를 찾고, 그 문자와 일치하도록 문자열 방향을 설정해야 합니다. 그런 다음 문자열이 필요한 방식으로 표시되도록 적절한 작업을 수행합니다. 다음과 같은 이유로 이는 겉보기만큼 단순하지 않습니다.

  1. 첫 번째 강한 문자를 찾으려면 문자열 시작 부분의 강한 방향이 없는 문자(예: 문장 부호, 숫자 등)와 문자열 안의 격리된 시퀀스, 즉 RLI/LRI/FSI...PDI 서식 문자로 둘러싸인 문자 시퀀스를 건너뛰어야 합니다.
  2. 감지 알고리즘은 문자열 시작 부분의 마크업을 처리할 수 있어야 합니다. 해당 마크업이 단순한 문자열 텍스트인지, 대상 위치에서 파싱해야 하는 마크업인지 구분할 수 있어야 합니다. 파싱해야 하는 경우에는 마크업을 이해하고 마크업에 포함된 방향 관련 정보도 이해해야 합니다.

첫 강한 문자 감지는 필요한 문자열 방향이 아직 알려지지 않은 경우에만 필요합니다. 문자열별 메타데이터나 리소스 전체 선언을 통해 문자열의 방향이 지정되어 있다면 첫 강한 문자 휴리스틱을 호출해서는 안 됩니다. 예를 들어 첫 강한 문자 휴리스틱은 "HTML و CSS: تصميم و إنشاء مواقع الويب"와 같은 문자열에 잘못된 결과를 생성합니다. 정보에 근거한 의도를 나타내는 메타데이터를 사용하면 이를 수정할 수 있으며, 결과를 다시 잘못 만들 수 있는 휴리스틱을 적용할 필요도 없고 적용해서도 안 됩니다.

그러나 메타데이터를 적용할 메커니즘이 없거나 그러한 메커니즘이 있지만 콘텐츠 개발자가 사용하지 않았다면 첫 강한 문자 휴리스틱은 전부는 아니지만 많은 경우에 기본 방향을 확립하는 데 도움이 될 수 있습니다. 강한 방향성을 가진 서식 문자를 적용하면 방금 언급한 예와 같은 일반 텍스트 문자열에 올바른 결과를 제공할 수 있지만 항상 이러한 문자를 적용할 수 있는 것은 아닙니다 (4.3 RLM/LRM 표시자를 삽입하여 첫 강한 문자 보완하기 참조).

4.1.2 장점

신뢰할 수 있는 경우 문자열을 변경하지 않고도 방향 정보를 얻을 수 있으며, 별도 메타데이터를 지원하는 데 필요한 규약과 구조도 필요하지 않습니다.

4.1.3 문제점

이 접근 방식의 주요 문제는 다음과 같은 경우에 잘못된 결과를 생성한다는 것입니다.

  1. 문자열 전체에 필요한 방향과 다른 강한 방향성 문자로 시작하는 문자열(예: 해시태그로 시작하는 아랍어 게시물)
  2. 강한 방향성 문자가 없는 문자열(예: 전화번호). 이러한 문자열은 RTL 맥락에서 잘못 표시될 가능성이 높습니다.
  3. span과 같은 마크업으로 시작하여 첫 번째 강한 문자가 항상 LTR이 되는 문자열

전체 문자열이 RLI/LRI/FSI...PDI 서식 문자로 시작하고 끝나는 경우 유니코드 양방향 알고리즘을 따르면 첫 번째 강한 문자를 감지할 수 없습니다. 알고리즘이 양방향으로 격리된 텍스트를 감지 대상에서 제외하도록 요구하기 때문입니다.

문자열에서 강한 방향성 문자를 찾지 못하면 방향을 LTR로 가정하고 소비자가 그에 따라 동작해야 할 가능성이 높습니다. 그러나 이는 아직 충분히 검증되지 않았습니다.

문자열에 소비자가 마크업으로 파싱할 마크업이 포함되어 있다면 추가 문제가 발생합니다. 첫 번째 강한 방향성 문자를 검색할 때 문자열 시작 부분의 그러한 마크업도 건너뛰어야 합니다.

문자열의 파싱 가능한 마크업에 의도된 문자열 방향에 관한 정보가 포함되어 있다면 (예: HTML에서 값이 rtldir 속성), 첫 강한 문자 휴리스틱에 의존하기보다 해당 정보를 사용해야 합니다. 이는 두 가지 면에서 문제가 됩니다. (a) 문자열 소비자가 마크업의 의미 체계를 이해한다고 가정합니다. 모든 당사자가 HTML 마크업만 사용한다는 규약이 있다면 괜찮을 수 있지만 임의의 XML 어휘를 다룰 때는 문제가 될 수 있습니다. (b) 소비자는 문자열의 처음 일부에만 마크업이 있어 마크업이 전체 문자열이 아니라 인라인 텍스트 범위에 적용되는 상황을 인식하고 처리할 수 있어야 합니다.

이슈 1

다음 단락에서 링크가 끊어진 예제가 어디에 있거나 이전에 어디에서 사용되었는지 명확하지 않습니다.

그러나 꺾쇠괄호로 묶인 콘텐츠가 실제 마크업이 아니라 마크업의 예제라면 해당 마크업을 건너뛰어서는 안 됩니다. RTL 맥락에서 마크업 소스 코드를 표시하려 하면 매우 혼란스러운 결과가 발생합니다. 그러나 문자열 소비자가 예제와 파싱 가능한 문자열의 차이를 항상 어떻게 알 수 있는지는 명확하지 않습니다.

4.1.4 추가 참고 사항

첫 강한 문자 감지는 유니코드 양방향 알고리즘(UBA) [UAX9]에 설명되어 있지만 문자열 방향을 추정하기 위해 언급된 유일한 상위 수준 프로토콜은 아닙니다. 예를 들어 X(이전의 Twitter)와 Facebook은 현재 텍스트의 기본 방향을 추측하기 위해 서로 다른 기본 휴리스틱을 사용합니다. 어느 쪽도 단순한 첫 강한 문자 감지만 사용하지 않으며, 한쪽은 완전히 다른 방법을 사용합니다.

4.2 메타데이터

이 접근 방식은 권장됩니다.

여기서 '메타데이터'란 데이터 형식에서 특정 문자열이나 문자열 집합과 연결된 필드 기반 정보 또는 문자열 데이터 유형에 내장된 정보를 의미합니다(4.7 새로운 양방향 데이터 유형 만들기도 참조).

예를 들면 다음과 같습니다.

{
    "title": "HTML و CSS: تصميم و إنشاء مواقع الويب",
    "direction": "rtl",
    "language": "ar",
},

적절한 필드를 사용하여 리소스의 모든 문자열에 적용되는 기본 방향을 나타내는 메타데이터를 설정할 수도 있습니다.

4.2.1 작동 방식

생산자는 문자열의 문자열 방향을 확인하고, 문자열이 저장되거나 전송될 때 함께 전달되는 메타데이터 필드에 이를 추가합니다.

메타데이터를 사용하는 방법에는 여러 가지가 있습니다.

  1. 모든 문자열에 문자열 방향 레이블을 지정합니다.
  2. 블록 방향에 대한 문서 수준 기본값을 제공하고 값이 다른 문자열에만 메타데이터를 포함합니다. 문자열의 방향을 알 수 없을 때는 auto 값을 사용합니다.
  3. 소비자가 첫 강한 문자 감지를 수행하도록 하고, 잘못된 결과를 생성할 문자열, 즉 왼쪽에서 오른쪽으로 쓰는 강한 문자로 시작하는 오른쪽에서 왼쪽 문자열에만 레이블을 지정합니다.

한 번에 문자열 집합을 저장하거나 전송하는 경우 리소스 전체에 적용되는 전역 기본 문자열 방향을 설정하는 필드가 있으면 리소스의 모든 문자열이 이를 상속할 수 있어 유용합니다. 전역 필드 외에도 문자열의 문자열 방향이 기본값과 다른 경우에는 문자열별 메타데이터 필드를 연결할 수 있어야 합니다. 개별 문자열에 설정된 문자열 방향은 항상 기본값보다 우선해야 합니다.

소비자는 문자열과 함께 전송된 메타데이터를 읽는 방법을 이해해야 하며, 메타데이터가 없을 때는 첫 강한 문자 휴리스틱을 적용해야 합니다.

JSON 기반 문서 형식의 개별 값에는 언어와 방향 메타데이터를 모두 결합하고 일관되게 채택될 경우 서로 다른 형식 간의 교환을 쉽게 만드는 Localizable 딕셔너리 구조를 사용하는 것이 권장됩니다.

참고

여기에서 언급했듯이 [JSON-LD]에는 문자열 모음과 전체 리소스에 언어 메타데이터를 할당하는 데 도움이 되는 일부 데이터 구조가 포함되어 있지만 방향 메타데이터는 포함되지 않습니다. 리소스 또는 항목 수준에서 미리 구성된 메타데이터 지원에 이러한 공백이 있다는 점은 이 문서가 개발된 주요 이유 중 하나입니다.

4.2.2 장점

메타데이터를 문자열과 별개의 데이터 값으로 전달하면 문자열의 실제 콘텐츠에 영향을 주지 않고 의도된 문자열 방향을 전달하는 간단하고 효과적이며 효율적인 방법을 제공합니다.

모든 문자열에 방향 레이블이 지정되어 있거나 전역 설정과 문자열별 예외를 적용하여 모든 문자열의 방향을 확인할 수 있다면 각각의 문자열을 검사하고 휴리스틱을 실행하여 문자열 방향을 결정할 필요가 없습니다.

4.2.3 문제점

별도 정보는 문자열과 연결하여 함께 유지해야 합니다. 이는 정의된 프레임워크에 속하지 않는 일부 문자열 데이터 집합에서 문제가 될 수 있습니다.

특히 JSON-LD에서는 언어와 같은 방식으로 개별 문자열에 방향을 연결할 수 없습니다.

4.3 RLM/LRM 표시자를 삽입하여 첫 강한 문자 보완하기

이 접근 방식은 모든 상황에서 사용할 수 있는 것은 아닙니다.

4.3.1 작동 방식

생산자는 문자열의 문자열 방향을 확인하고, 문자열 시작 부분에 표시자 문자(U+200F RIGHT-TO-LEFT MARK (RLM) 또는 U+200E LEFT-TO-RIGHT MARK (LRM))를 추가합니다. 표시자는 기능적으로 동작하지 않습니다. 즉, 소비자가 사용할 수 있는 기본 방향을 문자열에 자동으로 적용하는 것이 아니라 단순한 표시자일 뿐입니다.

가능한 접근 방식은 여러 가지가 있습니다.

  1. 모든 문자열에 표시자를 추가합니다(권장되지 않음).
  2. 소비자가 첫 강한 문자 감지를 수행하도록 하고, 잘못된 결과를 생성할 문자열(예: LTR 강한 문자로 시작하는 RTL 문자열)에만 표시자를 추가합니다.
  3. LTR을 기본값으로 가정하고 표시자를 사용하지 않으며 RLM 표시자만 적용합니다.

소비자는 첫 강한 문자 휴리스틱을 적용하여 문자열의 문자열 방향을 감지합니다. RLM 및 LRM 문자는 방향상 강한 유형이므로 적절한 기본 방향이 감지되어야 합니다.

4.1 첫 강한 문자 속성 감지에서 설명한 것처럼 방향 정보가 메타데이터를 통해 제공된다면 이 접근 방식은 관련이 없습니다.

4.3.2 장점

생산자가 표시자를 신뢰성 있게 적용할 수 있다면 기본 방향을 나타내는 신뢰할 수 있는 방법을 제공합니다.

이론적으로 올바른 RLM/LRM이 문자열 앞에 추가되어 있다면 마크업으로 시작하는 문자열에서도 첫 강한 문자를 더 쉽게 찾을 수 있습니다.

4.3.3 문제점

생산자가 사람이라면 이론적으로 문자열을 만들 때 이러한 문자 중 하나를 적용하여 방향성을 나타낼 수 있습니다.

특히 모바일 기기에서 중요한 문제는 RLM/LRM 문자를 입력할 수 없거나 입력하기 불편하다는 것입니다. 모바일 기기의 키보드는 일반적으로 RLM/LRM 문자용 키를 제공하지 않습니다. 더 중요한 점은 해당 문자가 보이지 않고 유니코드 양방향 처리가 복잡하므로 사용자가 문자를 효과적으로 사용하는 방법을 알기 어렵다는 것입니다. 실제로 많은 사용자는 이러한 문자가 무엇인지 또는 어떤 역할을 하는지 알지 못합니다.

또한 사용자가 RTL 페이지의 HTML 양식에 정보를 입력하거나 단축키를 사용하여 양식 필드의 방향을 설정하면 RLM/LRM을 추가하지 않아도 문자열이 올바르게 보입니다. 그러나 해당 맥락 밖에서 사용하면 필요한 블록 방향 정보와 연결되지 않는 한 문자열이 잘못 표시됩니다. 마찬가지로 html 요소에 dir=rtl이 설정된 웹 페이지에서 추출한 문자열은 일반적으로 HTML의 문자열 시작 부분에 RLM/LRM 문자가 없으며 필요하지도 않습니다.

생산자가 사용하는 단계에 문자열의 원래 맥락에서 방향 정보를 검사하는 작업을 포함할 수 있습니다. 예를 들어 HTML 양식 필드의 계산된 방향을 검사한 뒤 필요한 경우 문자열 시작 부분에 RLM/LRM 표시자를 자동으로 삽입할 수 있습니다. 이 접근 방식의 문제는 문자열 값과 동일성을 변경한다는 것입니다. 일부 생산자는 표시자를 추가하고 다른 생산자는 추가하지 않는 경우 특히 문자열 길이나 포인터 위치를 처리할 때도 문제가 발생할 수 있습니다.

방향 정보가 소비자가 마크업으로 파싱할 마크업 안에 포함된 경우(예: HTML의 dir=rtl) 문자열 생산자는 RLM/LRM 문자를 적절히 설정하거나 설정하지 않기 위해 해당 마크업을 이해해야 합니다. 생산자가 항상 그러한 문자열 시작 부분에 RLM/LRM을 추가한다면 소비자는 이를 알고 있어야 합니다. 생산자가 마크업이 해석될 것이라고 가정한다면 소비자는 해당 마크업을 이해해야 합니다.

문자열 생산자는 문자열 시작 부분에 RLM이나 LRM을 자동으로 적용해서는 안 되며, 필요한지 검사해야 합니다. 예를 들어 텍스트에 이미 RLM이 있다면 다른 RLM을 추가할 필요가 없습니다. 첫 강한 문자 휴리스틱으로 맥락이 올바르게 전달된다면 추가 문자를 넣을 필요도 없습니다. 그러나 이러한 종류의 보조 방향 정보가 필요한지 검사하려면 생산자가 문자열의 원래 맥락에 접근할 수 있으며 자신이 해당 맥락에 접근할 수 있다는 사실을 알아야 합니다. 많은 문서 형식은 원래 맥락과 떨어져 저장된 데이터에서 생성됩니다. 예를 들어 위의 원래 예제에 있는 책 카탈로그는 양방향 텍스트를 입력한 사용자와 분리되어 있습니다.

4.4 쌍을 이루는 서식 문자

이 접근 방식은 권장되지 않습니다.

4.4.1 작동 방식

생산자는 문자열의 문자열 방향을 확인하고, 문자열 시작 부분에 방향 서식 문자(U+2066 LEFT-TO-RIGHT ISOLATE (LRI), U+2067 RIGHT-TO-LEFT ISOLATE (RLI), U+2068 FIRST STRONG ISOLATE (FSI), U+202A LEFT-TO-RIGHT EMBEDDING (LRE) 또는 U+202B RIGHT-TO-LEFT EMBEDDING (RLE) 중 하나)를 추가하고 끝부분에 U+2069 POP DIRECTIONAL ISOLATE (PDI) 또는 U+202C POP DIRECTIONAL FORMATTING (PDF)을 추가합니다.

가능한 접근 방식은 여러 가지가 있습니다.

  1. 모든 문자열에 서식 코드를 추가합니다.
  2. 소비자가 첫 강한 문자 감지를 수행하도록 하고, 잘못된 결과를 생성할 문자열(예: LTR 강한 문자로 시작하는 RTL 문자열)에만 표시자를 추가합니다.

이론적으로 소비자는 표시할 위치에 문자열을 삽입하고 서식 코드가 방향성을 관리하도록 하면 됩니다. 그러나 실제로는 그렇게 단순하지 않습니다(아래 참조).

쌍을 이루는 서식 문자에는 두 가지 유형이 있습니다. 기존 제어 문자 집합은 유니코드 양방향 알고리즘에 양방향 "임베딩"의 추가 수준을 넣는 기능을 제공합니다. 이후 유니코드는 이를 보완하는 "격리" 제어 문자 집합을 추가했습니다. 격리 제어 문자는 문자열을 둘러싸는 데 사용됩니다. 문자열 내부는 독립적인 양방향 시퀀스로 취급되며 문자열은 주변 텍스트와 관련된 번짐 효과로부터 보호됩니다. 바깥 문자열은 둘러싸인 전체 문자열을 양방향 재정렬에서 무시되는 단일 단위로 취급합니다. 이 문제는 여기에서 설명합니다.

코드 포인트 약어 설명 코드 포인트 약어 설명
U+200A LRE 왼쪽에서 오른쪽 임베딩 U+2066 LRI 왼쪽에서 오른쪽 격리
U+200B RLE 오른쪽에서 왼쪽 임베딩 U+2067 RLI 오른쪽에서 왼쪽 격리
U+2068 FSI 첫 강한 문자 격리
U+200C PDF 방향 서식 해제(임베딩 종료) U+2069 PDI 방향 격리 해제(격리 종료)

쌍을 이루는 서식 문자를 사용한다면 RLE 또는 LRE가 아니라 RLI, LRI, FSI로 시작하는 격리 문자를 사용해야 합니다.

4.4.2 장점

이 접근 방식을 사용하는 데 실질적인 장점은 없습니다.

4.4.3 문제점

이 접근 방식은 문자열 값을 변경해도 허용되는 경우에만 적절합니다. 문자열 길이나 포인터 위치가 변경되는 문제 외에도 처리 오류나 텍스트 잘림 등으로 쌍을 이루는 문자 중 하나가 유실될 실제적이고 심각한 위험이 있습니다.

문자열의 생산자와 소비자는 서식 문자가 문자열의 일부만 설명하기 때문에 문자열이 쌍을 이루는 서식 문자로 시작하지만 해당 문자로 끝나지 않는 상황을 인식하고 처리해야 합니다.

유니코드는 유효한 임베딩 수에 제한을 지정하며, 임베딩이 시간에 따라 누적되어 해당 제한을 초과할 수 있습니다.

소비 애플리케이션은 격리 서식 문자를 인식하고 적절히 처리해야 합니다. 현재 RLI/LRI/FSI에 대한 이러한 지원은 널리 보급되지 않았습니다.

이 접근 방식을 인식하지 못하는 소비자가 사용할 경우 문자열에 UBA 첫 강한 문자 휴리스틱을 적용할 수 없게 됩니다. 유니코드 양방향 알고리즘은 RLI/LRI/FSI로 시작하고 PDI로 끝나는 문자열의 기본 방향을 확인할 수 없기 때문입니다. 알고리즘이 격리된 시퀀스를 건너뛰고 중립 문자로 취급하기 때문입니다. 문자열의 소비자는 이러한 경우 첫 강한 문자를 찾기 위해 특별한 단계를 수행해야 합니다.

4.5 문자 체계 하위 태그

이 접근 방식은 메타데이터 사용이 불가능한 상황을 위한 해결 방법으로만 권장됩니다.

4.5.1 작동 방식

생산자는 문자열에 언어 메타데이터를 제공하고 필요한 경우 사용 중인 문자 체계를 지정합니다.

가능한 접근 방식은 여러 가지가 있습니다.

  1. 필요에 따라 문자 체계 하위 태그를 포함하여 모든 문자열에 언어 레이블을 지정합니다. 소비자생산자가 문자 체계 하위 태그를 제공하지 않은 경우 이를 계산해야 할 수 있습니다.
  2. 문자 체계 하위 태그가 명시적이거나 암시적으로 RTL을 나타내는 언어 태그로 표시되지 않은 모든 문자열에 대해 LTR을 기본값으로 가정하는 것이 합리적일 수 있습니다.
  3. 또는 첫 강한 문자 휴리스틱이 실패할 것으로 예상되는 상황으로 문자 체계 하위 태그 메타데이터 사용을 제한할 수 있습니다. 단, 이러한 사례를 식별하고 생산자가 적절한 조치를 취할 수 있어야 하며 이는 항상 신뢰할 수 있는 것은 아닙니다. 소비자는 적절한 문자열 방향을 식별하기 위해 문자 체계 하위 태그가 없을 때 첫 강한 문자 휴리스틱을 사용해야 합니다. 그러나 문자 체계 하위 태그의 사용을 방향을 나타내야 하는 문자열로 제한해서는 안 됩니다. 모든 문자열에 문자 체계 하위 태그를 연결하는 것은 완전히 유효합니다.
  4. 더 높은 수준에서 문자열 집합에 기본 언어를 설정하되 필요한 경우 특정 문자열에서 해당 기본값을 재정의할 수 있는 메커니즘을 제공합니다.

소비자는 각 문자열과 연결된 언어 태그에서 문자 체계 하위 태그를 추출하고 필요한 경우 문자열의 문자열 방향을 계산합니다. RTL 문자 체계와 연결된 문자 체계 하위 태그는 연결된 문자열에 RTL 방향을 할당하는 데 사용됩니다.

언어 정보는 [BCP47] 언어 태그를 사용해야 합니다. 정보를 전달하는 언어 태그 부분은 기본 언어 하위 태그가 아니라 문자 체계 하위 태그입니다. 예를 들어 아제르바이잔어는 라틴 문자나 키릴 문자로 LTR로 작성하거나 아랍 문자로 RTL로 작성할 수 있습니다. 따라서 az 하위 태그만으로는 의도된 블록 방향을 명확히 할 수 없습니다. 그러나 az-Arab(아랍 문자로 작성된 아제르바이잔어)과 같은 언어 태그는 일반적으로 블록 방향이 RTL이어야 함을 나타낸다고 신뢰할 수 있습니다.

참고

4.5.2 장점

문자열 자체를 검사하거나 변경할 필요가 없습니다.

이 접근 방식은 첫 번째 강한 문자가 문자열에 필요한 문자열 방향을 나타내지 않을 때 발생하는 첫 강한 문자 감지 문제를 피하고, 마크업 해석과 관련된 문제도 피합니다.

문자열 텍스트 콘텐츠의 언어를 설정하는 마크업(예: <cite lang="zh-Hans">)으로 시작하는 문자열은 여기서 문제가 되지 않습니다. 해당 언어 선언이 문자열 방향 설정에 사용될 것으로 예상되지 않기 때문입니다.

4.5.3 문제점

사용할 수 있다면 위에서 설명한 메타데이터 사용이 훨씬 더 나은 접근 방식입니다. 문자 체계와 관련된 이 접근 방식은 레거시상의 이유로 메타데이터 접근 방식을 사용할 수 없는 경우에만 사용합니다.

언어별로 구분되지는 않지만 올바르게 소비하려면 특정 블록 방향과 반드시 연결되어야 하는 문자열이 많습니다. 예를 들어 RTL 맥락에 삽입된 MAC 주소는 전체 기본 방향을 LTR로 표시하고 주변 텍스트와 격리해야 합니다. 이러한 사례를 다른 사례와 구분하는 방법은 명확하지 않습니다. 방향 메타데이터를 사용할 때 실현 가능한 방식이어야 합니다. 이러한 유형의 콘텐츠를 식별하기 위해 zxx(비언어적)와 같은 특수 언어 태그가 있지만, 이러한 유형의 데이터 필드는 언어 정보가 적용되지 않으므로 일반적으로 언어 정보를 완전히 생략합니다.

문자 체계 하위 태그 목록은 이후에 추가될 수 있습니다. 이 경우 기본 RTL 방향을 나타내는 모든 하위 태그를 문자열 소비자가 사용하는 목록에 추가해야 합니다.

적절한 단락 방향을 문자 체계 하위 태그에서 식별할 수 없는 드문 상황이 있지만 이는 실제로 고어 텍스트 사용에만 제한됩니다. 예를 들어 제2차 세계 대전 이전의 일본어와 중국어 텍스트는 LTR이 아니라 RTL로 작성되는 경우가 많았습니다. 이집트 상형문자나 티피나그 베르베르 문자로 작성되는 언어는 과거에 LTR 또는 RTL로 작성할 수 있었지만 학술 연구의 기본값은 LTR인 경향이 있습니다.

4.5.4 기타 의견

여기에서 설명한 접근 방식은 문자열과 연결할 전체 문자열 방향에 관한 정보를 선언할 때만 적절합니다. 사용 패턴이 서로 대체 가능하지 않으므로 문자열 내부의 텍스트 방향을 나타내기 위해 언어 데이터를 사용하는 것은 권장하지 않습니다.

4.6 콘텐츠에 양방향 마크업 요구하기

HTML 또는 XML 마크업 데이터만 교환할 것으로 예상하는 직렬화 규약을 사용하는 경우를 제외하면 이 접근 방식은 권장되지 않습니다.

4.6.1 작동 방식

생산자는 모든 문자열이 해당 문자열의 적절한 기본 방향을 나타내는 마크업으로 시작하고 끝나도록 보장합니다. 이를 위해 생산자는 문자열을 검사해야 합니다. 문자열이 방향 정보를 가진 마크업으로 둘러싸여 있지 않다면 생산자는 dir 또는 its:direction [ITS20] 속성을 가진 요소나 특정 XML 애플리케이션에 적절한 다른 마크업으로 문자열을 감싸야 합니다. 문자열이 마크업으로 둘러싸여 있지만 HTML h1 요소와 같은 것이라면 생산자는 문자열을 단순히 span으로 감싸는 대신 기존 마크업에 방향 정보를 추가해야 합니다.

이 예제는 HTML 마크업을 사용합니다. 예제를 더 쉽게 읽을 수 있도록 문자가 저장되는 순서가 아니라 표시되어야 하는 순서로 문자열의 텍스트 콘텐츠를 보여 줍니다.

그런 다음 소비자는 문자열이 표시될 때 마크업이 문자열의 텍스트 콘텐츠 주변에 기본 방향을 설정하도록 합니다. 추가 메타데이터가 제공되지 않는 한 소비자는 문자열을 대상 위치에 통합하기 전에 마크업을 제거할 수 없습니다. 생산자가 추가한 마크업과 원래 존재하던 마크업을 구분할 수 없기 때문입니다. 그러나 일반적으로 이러한 추가 마크업은 해롭지 않습니다.

4.6.2 장점

이미 마크업을 사용하는 콘텐츠에 대한 이점은 명확합니다. 콘텐츠가 텍스트의 표시 및 처리에 필요한 완전한 마크업을 이미 제공하거나 출처 페이지의 맥락에서 이를 추출할 수 있습니다. HTML 및 XML 처리기는 이미 이러한 마크업을 처리하는 방법을 알고 있으며 즉시 검증할 수 있습니다.

HTML에서 dir 속성은 콘텐츠를 주변 텍스트와 양방향으로 격리하여 번짐 충돌을 제거합니다. 이는 소비자의 작업을 줄여 줍니다.

마크업은 문자열 자체의 문자열 방향만으로 해결할 수 없는 문자열 내부의 방향 정보에도 사용할 수 있습니다.

4.6.3 문제점

실제로 구현 스택의 모든 수준이 마크업을 이해하는 데 참여하거나 적어도 해를 끼치지 않도록 보장해야 합니다.

시스템이 종단 간 HTML을 사용한다면 적절한 마크업을 사용할 수 있고 그 의미 체계도 이해됩니다. 여기에는 dir 속성과 bdibdo 요소가 포함됩니다. 그러나 XML 애플리케이션에는 양방향 지원을 위한 표준 마크업이 없습니다. 이러한 마크업을 먼저 정의한 뒤 생산자와 소비자가 모두 이해해야 합니다.

이 접근 방식의 주요 단점은 많은 데이터 값이 단순한 문자열이라는 점입니다. 유니코드 태그나 유니코드 양방향 제어 문자를 추가하는 것처럼 문자열에 마크업을 추가하면 원래 문자열 콘텐츠가 변경됩니다. 콘텐츠 길이가 변경되면 임의의 제한을 적용하는 프로세스나 꺾쇠괄호와 같은 HTML/XML 비안전 문자를 이스케이프하여 콘텐츠를 "정리"하는 프로세스에서 문제가 발생할 수 있습니다.

또 다른 문제는 생산자가 문자열을 검사하고 필요에 따라 마크업을 추가하는 데 필요한 작업과 복잡성입니다.

유니코드 양방향 알고리즘이 허용하는 임베딩 수에는 제한이 있습니다. 소비자는 문자열을 더 넓은 맥락에 임베딩할 때 이 제한을 초과하지 않도록 해야 합니다.

마크업을 추가하면 소비자는 XSS 공격과 같은 일반적인 마크업 삽입 문제도 방지해야 합니다.

4.7 새로운 양방향 데이터 유형 만들기

이 접근 방식은 [JSON-LD] 1.1에 추가되었습니다.

4.7.1 작동 방식

이는 앞에서 설명한 문자열과 함께 메타데이터를 전송하는 개념과 비슷합니다. 그러나 메타데이터는 4.2 메타데이터처럼 완전히 별개의 필드에 저장되거나 4.3 RLM/LRM 표시자를 삽입하여 첫 강한 문자 보완하기처럼 문자열 자체에 삽입되는 것이 아니라 문자열 직렬화 형식의 일부로 문자열과 연결됩니다.

[RDF-PLAIN-LITERAL]과 같이 문자열 값의 일부로 언어 메타데이터를 직렬화할 수 있는 데이터 유형이 이미 존재합니다. 그러나 이러한 데이터 유형은 방향을 고려하지 않습니다. 문서 형식이 언어와 방향 메타데이터를 모두 포함하는 자연어 문자열을 직렬화하는 데 사용할 수 있는 새로운 데이터 유형을 정의하거나 기존 데이터 유형을 확장하여 이를 해결할 수 있습니다.

[JSON-LD] 1.1에서는 JSON 문서가 문자열 값과 함께 언어 및 방향 메타데이터를 직접 직렬화할 수 있도록 i18n 네임스페이스를 추가했습니다. 필요한 명세를 위해 RDF로 역직렬화하는 방법도 제공합니다.

마지막 문자열은 내부 데이터 값이므로 언어 정보를 포함하지 않지만, 이러한 종류의 문자열은 LTR 순서로 표시되어야 하므로 방향 정보는 포함합니다.

생산자는 필요에 따라 각 문자열에 문자열 방향을 연결해야 합니다.

소비자는 이 접근 방식을 사용하지 않거나 문자열 방향을 포함하지 않는 문자열에 첫 강한 문자 휴리스틱을 사용해야 합니다. 그러면 생산자는 첫 강한 문자 접근 방식이 잘못된 결과를 생성하는 경우에만 문자열 방향 정보를 추가하면 됩니다. 메타데이터가 필요한 문자열의 수가 상대적으로 적으므로 문자열 관리와 전송할 데이터 양이 간소화될 수 있습니다.

소비자는 문자열에 메타데이터가 연결되어 있는지 확인하고, 연결되어 있다면 표시된 문자열 방향을 설정합니다. 그렇지 않다면 첫 강한 문자 휴리스틱을 사용하여 문자열의 문자열 방향을 결정합니다.

4.7.2 장점

자연어 문자열을 지원하기 위한 새로운 데이터 유형이 JSON에 추가된다면 명세는 해당 유형을 문서 형식에서 사용하도록 쉽게 지정할 수 있습니다. 형식이 표준화되어 있으므로 생산자소비자는 인코딩된 방향 또는 언어 정보를 추측할 필요가 없습니다.

4.7.3 문제점

현재 이 방법이 작동하지 않는다는 사실 외에도 데이터 유형을 추가할 때의 단점은 JSON이 임시 구현을 포함하여 널리 구현된 형식이라는 점입니다. 새로운 직렬화 형식은 이러한 기존 구현을 중단시키거나 상호 운용성 문제를 일으킬 가능성이 높습니다. JSON은 "버전이 지정되는" 형식으로 설계되지 않았습니다. 사용하는 모든 직렬화 형식은 기존 JSON 처리기에 투명해야 하므로 기존 문자열과 형식에 원치 않는 데이터가 추가되거나 데이터가 손상될 수 있습니다.

5. 콘텐츠의 언어를 식별하기 위해 고려된 접근 방식

이 절에서는 문자열 값의 언어를 결정하거나 전달하는 여러 방법을 다룹니다.

5.1 메타데이터

이 접근 방식은 권장됩니다.

5.1.1 작동 방식

생산자는 문자열의 언어를 확인하고(일반적으로 상위 단계에서 제공된 메타데이터에서 확인함), 문자열이 저장되거나 전송될 때 함께 전달되는 메타데이터 필드에 이 정보를 포함합니다.

한 번에 문자열 집합을 저장하거나 전송할 때는 리소스의 모든 문자열이 상속할 수 있는 언어를 설정하는 리소스 전체 필드가 있으면 유용합니다. 전역 필드 외에도 문자열의 언어가 기본값과 다른 경우 문자열별 메타데이터 필드를 연결할 수 있어야 한다는 점에 유의하십시오. 개별 문자열에 설정된 언어는 모든 리소스 수준 값보다 우선해야 합니다.

소비자는 문자열과 연결된 메타데이터를 읽고 이를 자신이 생성하는 표시, 처리 또는 데이터 구조에 적용하는 방법을 이해해야 합니다. 여기에는 개별 값을 직렬화하거나 교환할 때 리소스 수준 기본 언어를 적용해야 하는 경우도 포함될 수 있습니다.

5.1.2 장점

일관되고 명확하게 정의된 데이터 구조를 사용하면 서로 다른 표준을 조합할 수 있고 원활하게 함께 작동할 가능성이 높아집니다.

콘텐츠 자체에 영향을 주지 않고 메타데이터를 제공할 수 있습니다.

메타데이터를 사용할 수 없는 경우 생략할 수 있습니다.

소비자와 생산자는 일반적인 처리 범위를 벗어나 데이터를 내부적으로 검사할 필요가 없습니다.

5.1.3 문제점

딕셔너리와 그 데이터 값을 사용하는 직렬화된 파일에는 추가 필드가 포함되므로 읽기가 더 어려워질 수 있습니다.

기존 문서 형식에서는 교환되는 값의 변경을 의미합니다.

5.2 콘텐츠에 마크업 요구하기

교환되는 콘텐츠가 특정 마크업 언어의 리터럴 값으로 구성될 것으로 예상되고 해당 값으로 제한되는 특별한 경우를 제외하면 이 접근 방식은 권장되지 않습니다.

5.2.1 작동 방식

문서가 HTML 또는 XML 조각으로 구성될 것으로 예상되고 마크업 맥락에서만 처리되고 표시되는 경우, 생산자lang 또는 xml:lang 속성이 있는 요소로 문자열을 감싸 콘텐츠의 언어를 마크업으로 전달할 수 있습니다.

5.2.2 장점

이 접근 방식과 그 장점은 실질적으로 이 절에서 설명한 것과 동일합니다.

5.2.3 문제점

위 내용을 참조하십시오.

5.3 유니코드 언어 태그 문자 사용하기

이 접근 방식은 권장되지 않습니다.

경고

5.3.1 작동 방식

생산자는 문자열에 언어 태그를 지정하기 위해 데이터에 유니코드 태그 문자를 삽입합니다.

소비자는 유니코드 태그 문자를 처리하고 이를 사용하여 언어를 할당합니다.

유니코드는 언어 태그로 사용할 수 있는 특수 문자를 정의합니다. 이러한 문자는 "기본적으로 무시 가능"하며 시각적으로 나타나지 않아야 합니다. 유니코드 태그는 다음과 같이 작동하도록 되어 있습니다.

각 태그는 문자 시퀀스입니다. 시퀀스는 태그 식별 문자로 시작합니다. 현재 정의된 유일한 문자는 U+E0001이며, 이는 [BCP47] 언어 태그를 식별합니다. 비공개 규약을 통해 다른 유형의 태그도 사용할 수 있습니다. 태그를 구성하기 위한 유니코드 블록의 나머지 부분은 출력 가능한 ASCII 문자를 대응시킵니다. 즉, U+E0020은 공백 (U+0020에 대응), U+E0041은 대문자 A (U+0041에 대응)이며, 나머지도 같은 방식입니다. 태그 식별 문자 뒤에서 생산자는 각 태그 문자를 사용하여 대문자와 소문자, 숫자 및 하이픈 문자로 [BCP47] 언어 태그를 작성합니다. ASCII 문자, 숫자 및 하이픈으로 구성된 특정 원본 언어 태그는 각 문자의 코드 포인트에 0xE0000을 더하여 태그로 변환할 수 있습니다. 언어 우선순위 목록과 같은 추가 구조([RFC4647] 참조)는 쉼표나 세미콜론 같은 다른 문자를 사용하여 구성할 수 있지만, 유니코드는 이를 정의하거나 반드시 허용하지는 않습니다.

태그의 적용 범위 끝은 문자열의 끝으로 나타내거나, 취소 태그 문자 U+E007F를 단독으로 사용하여 모든 태그를 취소하거나 언어 태그 식별 문자 U+E0001 앞에 배치하여 명시적으로 나타낼 수 있습니다. 즉, 언어 태그만 끝내려면 <U+E0001,U+E007F> 시퀀스를 사용합니다.

따라서 태그는 최소 세 개의 문자로 구성되며 쉽게 12개 이상의 문자가 될 수 있습니다. 또한 이러한 문자는 보충 문자입니다. 즉, UTF-8에서는 문자마다 4바이트를 사용하여 인코딩되고, UTF-16에서는 서로게이트 쌍(두 개의 16비트 코드 단위)으로 인코딩됩니다. 내부적으로 UTF-16을 사용하는 Java 및 JavaScript와 같은 언어의 문자열 유형에서 이러한 문자를 인코딩하려면 서로게이트 쌍이 필요합니다. 서로게이트를 사용하면 문자열을 다소 이해하기 어렵게 만듭니다. 예를 들어 U+E0020은 UTF-16에서 0xDB40.DC20으로, UTF-8에서는 바이트 시퀀스 0xF3.A0.80.A0으로 인코딩됩니다.

5.3.2 장점

이러한 언어 태그 문자는 문서 형식의 구조를 변경하지 않고 일반 유니코드 텍스트의 일부로 사용할 수 있습니다.

5.3.3 문제점

언어 식별을 위한 유니코드 태그 문자의 사용은 유니코드 컨소시엄에서 강하게 권장하지 않으며 따라서 폐기되었습니다. 이러한 태그 문자는 일반 텍스트 맥락에서 언어 태그를 지정하기 위해 고안되었으며, 대역 내 비마크업 언어 태그를 제공하는 대체 방법으로 자주 제안됩니다. 이를 언어 태그로 사용하는 구현은 알려져 있지 않습니다.

이 문자를 알 수 없는 유니코드 문자로 취급하는 애플리케이션은 이를 두부 문자 (속이 빈 사각형 대체 문자)로 표시하고 길이 제한 등에 포함할 수 있습니다. 따라서 애플리케이션이나 교환 메커니즘이 이 문자를 완전히 인식하고 적절하게 제거하거나 무시할 수 있을 때만 유용합니다. 이 문자는 표시되거나 텍스트 처리에 영향을 주어서는 안 되지만 실제로는 잘림, 줄 바꿈, 하이픈 넣기, 맞춤법 검사 등의 일반적인 텍스트 처리를 방해할 수 있습니다.

설계상 [BCP47] 언어 태그는 ASCII 대소문자를 구분하지 않도록 되어 있습니다. 유니코드 태그 문자를 처리하는 애플리케이션은 언어를 올바르게 식별하기 위해 유사한 대소문자 비구분 처리를 적용해야 합니다. 유니코드 데이터에는 이러한 문자에 대한 대소문자 변환 쌍이 지정되어 있지 않으므로 태그 문자로 인코딩된 언어 태그 값을 처리하고 일치시키는 작업이 복잡해집니다.

또한 언어 태그가 [BCP47]을 준수하려면 유효한 하위 태그로 구성되어야 합니다. 유효한 하위 태그는 IANA 레지스트리에 유지되며 새로운 하위 태그가 정기적으로 추가되므로 이러한 종류의 태그를 처리하는 애플리케이션은 각 하위 태그를 항상 최신 버전의 레지스트리와 대조해야 합니다.

언어 태그 문자는 언어 태그의 중첩을 허용하지 않습니다. 예를 들어 영어 문장 안에 프랑스어 인용문이 있는 것처럼 문자열에 두 언어가 포함되어 있다면 유니코드 태그 문자는 한 언어가 시작되는 위치만 나타낼 수 있습니다. 중첩된 언어를 나타내려면 태그를 문자열 앞에만 추가하는 것이 아니라 텍스트 내부에도 삽입해야 합니다.

구현된 적은 없지만 유니코드 태그 문자를 사용하여 다른 유형의 태그를 문자열이나 문서에 삽입할 수도 있습니다. 이러한 태그는 언어 태그가 지정된 텍스트 구간과 겹칠 수 있습니다.

마지막으로 유니코드는 최근 스코틀랜드 국기(🏴)와 같은 하위 지역 국기를 구성하는 데 이러한 문자를 다시 사용했습니다. 이 국기는 다음 시퀀스로 구성됩니다.

  • 🏴 [U+1F3F4 WAVING BLACK FLAG]
  • [U+E0067 TAG LATIN SMALL LETTER G]
  • [U+E0062 TAG LATIN SMALL LETTER B]
  • [U+E0073 TAG LATIN SMALL LETTER S]
  • [U+E0063 TAG LATIN SMALL LETTER C]
  • [U+E0074 TAG LATIN SMALL LETTER T]
  • [U+E007F CANCEL TAG]
편집자 참고

위 기능은 2017년 6월 유니코드 10.0(UTR#51 버전 5.0)에 추가된 새로운 이모지 기능입니다. 올바른 표시는 시스템에서 이 버전을 지원하는지에 따라 달라집니다.

5.4 언어 감지 휴리스틱 사용하기

이 접근 방식은 권장되지 않습니다.

5.4.1 작동 방식

생산자는 아무 작업도 하지 않습니다.

소비자는 텍스트의 언어를 결정하기 위해 언어 감지 알고리즘을 실행합니다. 일반적으로 언어의 n-그램 빈도를 사용하고 다른 데이터와 결합할 수도 있는 통계 기반 휴리스틱입니다.

5.4.2 장점

이 접근 방식에는 근본적인 장점이 없습니다.

5.4.3 문제점

검사하는 텍스트가 길고 해당 언어를 잘 대표할수록 휴리스틱의 정확도가 높아집니다. 짧은 문자열은 제대로 감지되지 않을 수 있습니다.

언어 감지는 감지기가 존재하는 언어로 제한됩니다.

다른 언어나 문자 체계로 된 사람 이름이나 브랜드 이름 같은 삽입 요소는 감지를 방해할 수 있습니다.

언어 감지는 느린 경향이 있고 많은 메모리를 사용할 수 있습니다. 단순한 소비자는 언어를 결정하는 데 필요한 복잡성을 감당하기 어려울 수 있습니다.

6. 지역화 고려 사항

때때로 생산자생산자소비자 사이에서 어떤 형태의 언어 협상을 수행하여 특정 콘텐츠 항목이나 데이터 레코드의 지역화된 값을 제공할 수 있습니다. 그러면 지역화는 생산자에서 이루어지며, 협상된 언어를 사용하여 반환할 콘텐츠를 선택합니다. 이 접근 방식은 소비자에게 필요한 언어만 반환하면 되므로 지연 시간에 영향을 주는 파일 크기와 복잡성을 줄일 수 있습니다.

그러나 항상 가능한 것은 아니므로 명세에서는 특정 필드에 대해 서로 다른 여러 언어 값을 반환하도록 허용하기도 합니다. 이는 런타임 지역화를 지원하기 위한 것일 수도 있고, 생산자가 여러 언어 값을 가지고 있지만 이를 미리 적절하게 선택할 수 없기 때문일 수도 있습니다.

이러한 경우 콘텐츠 항목의 지역화는 생산자가 해당 항목의 여러 언어 표현을 반환하고 소비자가 표시할 값을 선택하게 하여 이루어집니다. 이 접근 방식은 결과 파일이 여러 사용자를 위해 캐시되는 경우처럼 생산자가 언어를 협상할 수 없고 언어 수가 비교적 적을 때 유용합니다. 많은 언어 모음은 문서를 지나치게 크게 만들어 다루기 어렵게 할 수 있습니다.

언어 인덱싱언어 태그를 사용하여 특정 필드의 여러 언어 버전을 구성함으로써 소비자가 가장 적절한 값을 선택할 수 있게 하는 전략입니다. 명세는 LanguageMap과 같은 데이터 구조를 사용하여 특정 필드의 여러 언어 버전을 제공할 수 있습니다. 특정 필드의 값은 맵으로 정의됩니다. 맵의 키는 언어 태그입니다. 각 언어 태그와 연결된 값은 문자열이거나, 이상적으로는 LanguageEntry 객체입니다.

맵에서 값의 키로 언어 태그를 사용하면 특정 요청에 맞는 올바른 값을 빠르게 선택할 수 있습니다. 언어 태그와 연결된 값이 LanguageEntry인 경우 값에서 언어가 반복되거나 재정의될 수 있다는 점에 유의하십시오. 값의 LanguageTag는 선택 사항이므로 필수는 아닙니다. 값을 추가하는 경우가 아니라면 포함하지 마십시오.

예를 들어 요청된 언어가 미국 영어(en-US)라면 이 형식을 통해 가장 적합한 제목 객체 {"value": "Learning Web Design"}를 더 쉽게 일치시키고 추출할 수 있습니다. 또 다른 잠재적 장점은 인덱싱된 언어 태그가 실제 데이터 값의 언어 태그와 별도로 값의 대상 사용자를 나타낼 수 있다는 점입니다. 예를 들어 다음 예제처럼 더 구체적인 언어 값을 덜 구체적인 언어 태그로 감싸는 언어 범위 [RFC4647]를 사용할 수 있습니다. 이 예제에서 콘텐츠에는 구체적인 언어 태그(de-DE)가 지정되어 있지만 de-CH 또는 de-AT과 같은 다른 독일어 변형을 사용하는 사용자도 이를 사용할 수 있습니다.

덜 일반적인 예로 실제 번역 값이 누락되어 시스템이 인덱싱 언어 태그와 다른 "잘못된" 언어로 특정 값을 제공하는 경우가 있습니다.

이 접근 방식의 주요 문제는 인덱스를 생성하기 위해 콘텐츠에서 인덱싱 언어 태그를 추출해야 한다는 것입니다. 생산자는 인덱싱 언어 태그를 어떤 방식으로든 정규화할지 여부에 관해 소비자직렬화 규약을 정해야 할 수도 있습니다. 예를 들어 언어 태그 cel-gaulish는 [BCP47]의 기존 언어 태그 중 하나입니다. [CLDR]의 규칙을 따르는 구현과 같은 일부 구현은 언어 협상을 위해 이 태그를 현대적인 대체 태그(이 경우 xtg-x-cel-gaulish)로 바꾸는 것을 선호합니다.

[JSON-LD]는 @context 구조의 사용에 의존하는 언어 인덱싱의 특정 구현을 정의합니다. 이 구조는 LanguageEntry 값을 지원하지 않고 문자열 또는 문자열 배열만 지원하므로, [JSON-LD] 문서에서 위 기능 중 일부를 허용하려면 변경이 필요합니다.

A. 데이터 구조의 WebIDL 정의

이 절에는 위의 본문에서 설명한 다양한 구조의 WebIDL 정의가 포함되어 있습니다.

효과적인 사용을 위해 명세 작성자는 대부분의 데이터 형식이 상호 운용될 수 있도록 동일한 형식과 데이터 구조를 일관되게 사용해야 합니다. 즉, 추가 처리를 적용하지 않고도 여러 형식 사이에서 데이터를 복사할 수 있어야 합니다. 단일 언어 지역화 가능 텍스트 필드에는 Localizable을, 언어 맵에는 LanguageMap을 채택할 것을 권장합니다.

언어와 방향을 WebIDL 딕셔너리 형식으로 정의하면 명세에서 특정 문자열 값에 대한 언어 및 방향 메타데이터를 간결하게 포함할 수 있습니다. 구현은 딕셔너리 구현을 쉽게 재사용할 수 있습니다.

A.1 LanguageTag typedef

WebIDLtypedef DOMString LanguageTag;
LanguageTag typedef
유효한 [BCP47] 언어 태그를 포함하는 DOMString입니다.

A.2 Localizable 딕셔너리

WebIDLdictionary Localizable {
    DOMString value;
    LanguageTag lang;
    TextDirection dir = "auto";
};
value 멤버
이 필드의 데이터 값을 포함하는 문자열입니다.
lang 멤버
상속하는 딕셔너리의 사람이 읽을 수 있는 멤버 값에 사용되는 기본 언어를 지정하는 [BCP47] 언어 태그입니다.
dir 멤버
상속하는 딕셔너리의 사람이 읽을 수 있는 멤버에 적용되는 문자열 방향을 지정합니다.

A.3 LanguageMap typedef

WebIDLtypedef record<DOMString,LanguageEntry> LanguageMap;
LanguageMap 레코드
키는 LanguageTag이고, 값은 키와 연결된 지역화 문자열 값과 재정의 메타데이터를 포함하는 LanguageEntry인 맵입니다.

A.4 LanguageEntry 딕셔너리

WebIDLdictionary LanguageEntry {
    DOMString value;
    LanguageTag? lang;   // Optional property for language tag
    TextDirection? dir;  // Optional property for text direction
};
value 멤버
이 필드의 데이터 값(지역화된 텍스트)을 포함하는 문자열입니다.
lang 멤버
(선택 사항) LanguageMapLanguageEntry에 있는 lang 멤버를 재정의하거나 보완하는 LanguageTag입니다. 이 필드는 거의 사용되지 않습니다.
dir 멤버
(선택 사항) 값의 TextDirection입니다.

A.5 TextDirection 열거형

WebIDLenum TextDirection {    
    "auto",
    "ltr",    
    "rtl"
};

텍스트 방향 값은 다음과 같으며, 사람이 읽을 수 있는 멤버의 값이 기본적으로 다음 방향임을 의미합니다.

auto
방향성은 유니코드 양방향 알고리즘 [UAX9]에 의해 결정됩니다.
ltr
왼쪽에서 오른쪽으로 쓰는 텍스트입니다.
rtl
오른쪽에서 왼쪽으로 쓰는 텍스트입니다.

B. 감사의 말

국제화(I18N) 작업 그룹은 이 문서에 기여한 다음 기여자들에게 감사드립니다. Mati Allouche, David Baron, Ivan Herman, Tobie Langel, Emil Lundberg, Sangwhan Moon, Felix Sasaki, Najib Tounsi, 그리고 그 밖의 많은 분들께 감사드립니다.

다음 페이지는 이 문서의 초기 기반이 되었습니다.

C. 참고 문헌

C.1 정보 제공용 참고 문헌

[BCP47]
언어 식별 태그. A. Phillips, 편집자; M. Davis, 편집자. IETF. 2009년 9월. 최선의 현행 관행. URL: https://www.rfc-editor.org/info/rfc5646/
[CLDR]
유니코드 공통 로캘 데이터 저장소. 유니코드 컨소시엄. URL: https://cldr.unicode.org/
[CSS-WRITING-MODES-4]
CSS 쓰기 모드 레벨 4. Elika Etemad; Koji Ishii. W3C. 2019년 7월 30일. W3C 후보 권고안. URL: https://www.w3.org/TR/css-writing-modes-4/
[HTML]
HTML 표준. Anne van Kesteren; Domenic Denicola; Dominic Farolino; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. 현행 표준. URL: https://html.spec.whatwg.org/multipage/
[I18N-GLOSSARY]
국제화 용어집. Richard Ishida; Addison Phillips. W3C. 2024년 10월 17일. W3C 작업 그룹 참고 문서. URL: https://www.w3.org/TR/i18n-glossary/
[INTERNATIONAL-SPECS]
명세 개발자를 위한 국제화 모범 사례. Richard Ishida; Addison Phillips. W3C. 2025년 8월 8일. W3C 작업 그룹 참고 문서. URL: https://www.w3.org/TR/international-specs/
[ITS20]
국제화 태그 집합(ITS) 버전 2.0. David Filip; Shaun McCance; David Lewis; Christian Lieske; Arle Lommel; Jirka Kosek; Felix Sasaki; Yves Savourel. W3C. 2013년 10월 29일. W3C 권고안. URL: https://www.w3.org/TR/its20/
[JSON-LD]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Lanthaler. W3C. 2020년 11월 3일. W3C 권고안. URL: https://www.w3.org/TR/json-ld/
[LDML]
유니코드 기술 표준 #35: 유니코드 로캘 데이터 마크업 언어(LDML). Mark Davis; CLDR 기여자. URL: https://unicode.org/reports/tr35/
[LOCALIZABLE-MANIFESTS]
지역화 가능한 매니페스트 개발. Addison Phillips. W3C. 2025년 2월 14일. W3C 작업 그룹 참고 문서. URL: https://www.w3.org/TR/localizable-manifests/
[RDF-PLAIN-LITERAL]
rdf:PlainLiteral: RDF 일반 리터럴을 위한 데이터 유형(제2판). Jie Bao; Sandro Hawke; Boris Motik; Peter Patel-Schneider; Axel Polleres. W3C. 2012년 12월 11일. W3C 권고안. URL: https://www.w3.org/TR/rdf-plain-literal/
[RFC2119]
RFC에서 요구 수준을 나타내는 데 사용하는 핵심어. S. Bradner. IETF. 1997년 3월. 최선의 현행 관행. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC4647]
언어 태그 일치. A. Phillips, 편집자; M. Davis, 편집자. IETF. 2006년 9월. 최선의 현행 관행. URL: https://www.rfc-editor.org/info/rfc4647/
[RFC9000]
QUIC: UDP 기반 다중화 보안 전송. J. Iyengar, 편집자; M. Thomson, 편집자. IETF. 2021년 5월. 제안 표준. URL: https://www.rfc-editor.org/info/rfc9000/
[UAX9]
유니코드 양방향 알고리즘. Manish Goregaokar मनीष गोरेगांवकर; Robin Leroy. 유니코드 컨소시엄. 2025년 8월 13일. 유니코드 표준 부속서 #9. URL: https://www.unicode.org/reports/tr9/tr9-51.html
[Unicode]
유니코드 표준. 유니코드 컨소시엄. URL: https://www.unicode.org/versions/latest/
[WebIDL]
Web IDL 표준. Edgar Chen; Timothy Gu. WHATWG. 현행 표준. URL: https://webidl.spec.whatwg.org/
[Webtransport]
WebTransport. Nidhi Jaju; Victor Vasiliev; Jan-Ivar Bruaroey. W3C. 2026년 7월 6일. W3C 작업 초안. URL: https://www.w3.org/TR/webtransport/
[XML10]
확장 가능한 마크업 언어(XML) 1.0(제5판). Tim Bray; Jean Paoli; Michael Sperberg-McQueen; Eve Maler; François Yergeau 외. W3C. 2008년 11월 26일. W3C 권고안. URL: https://www.w3.org/TR/xml/