Copyright © 2010-2026 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 문서는 TriG라고 하는 RDF용 텍스트 구문을 정의하며, 이를 통해 RDF 데이터셋을 일반적인 사용 패턴과 데이터타입에 대한 축약형을 사용하여 간결하고 자연스러운 텍스트 형식으로 완전히 작성할 수 있습니다. TriG는 Turtle [RDF12-TURTLE] 형식의 확장입니다.
RDF 1.2 TriG는 다른 트리플의 객체로 사용할 수 있는 네 번째 종류의 RDF 용어로서 [RDF12-TURTLE]와 트리플 용어를 공유하며, 이를 통해 다른 진술에 대한 진술을 만들 수 있습니다. RDF 1.2 TriG는 또한 [RDF12-TURTLE]와 방향성 언어 태그 문자열을 공유합니다.
또한 RDF 1.2 TriG는 [RDF12-TURTLE]와 트리플 구체화 및 주석 구문 확장을 공유하며, 이를 통해 트리플 용어도 단언될 수 있습니다.
이 섹션은 이 문서가 게시된 시점의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있습니다.
이 문서는 RDF 1.2 문서 모음의 일부입니다. TriG는 여러 그래프를 위한 RDF 구문을 정의하라는 RDF & SPARQL Working Group의 헌장 요구사항을 충족하기 위한 것입니다. TriG는 RDF용 Turtle 구문 [RDF12-TURTLE]의 확장입니다. 현재 문서는 Chris Bizer와 Richard Cyganiak의 원래 제안을 기반으로 합니다.
이 문서는 RDF & SPARQL Working Group이 권고안 트랙을 사용하여 작업 초안으로 게시했습니다.
작업 초안으로 게시되었다는 것이 W3C와 그 회원들의 승인을 의미하지는 않습니다.
이 문서는 초안 문서이며 언제든지 다른 문서로 업데이트, 대체 또는 폐기될 수 있습니다. 진행 중인 작업이 아닌 다른 것으로 이 문서를 인용하는 것은 부적절합니다. 향후 이 예정된 권고안의 업데이트에는 새 기능이 포함될 수 있습니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹이 작성했습니다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 특허 공개의 공개 목록을 유지합니다. 해당 페이지에는 특허 공개 방법에 대한 지침도 포함되어 있습니다. 자신이 알고 있는 특허가 필수 청구항을 포함한다고 믿는 실제 지식을 가진 개인은 W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 합니다.
이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받습니다.
이 섹션은 비규범적입니다.
이 문서는 RDF Concepts and Abstract Syntax 문서 [RDF12-CONCEPTS]에서 정의된 RDF를 위한 구체 구문인 TriG를 정의합니다. TriG는 Turtle [RDF12-TURTLE]의 확장이며, 완전한 RDF 데이터셋 표현을 지원하도록 확장되었습니다.
이 명세는 RDF 1.1 TriG [TRIG]에서 정의된 원래 TriG 구문을 확장하여, RDF 1.2 Concepts and Abstract Data Model [RDF12-CONCEPTS]에서 도입된 새 기능을 지원합니다. 이 확장은 완전한 하위 호환성을 가집니다.
이 섹션은 비규범적입니다.
TriG
문서는 RDF 데이터셋을 간결한 텍스트 형식으로 작성할 수 있게 합니다.
이는 지시문, 트리플 진술,
트리플 생성 진술을 포함하는 그래프 진술, 그리고 선택적인 빈 줄의 시퀀스로 구성됩니다.
주석은 다른
어휘 토큰의 일부가 아닌 # 뒤에 주어질 수 있으며,
줄 끝까지 이어집니다.
그래프 진술은
IRI 또는
빈
노드와
중괄호({})로 둘러싸인
트리플 진술 그룹의 쌍입니다.
그래프 진술의 IRI 또는
빈
노드는
다른 그래프 진술에서 사용될 수 있으며,
이는 각 그래프 진술에서 생성된 트리플들의 합집합을 취한다는 것을 의미합니다.
그래프 레이블로 사용된 IRI
또는
빈
노드는
어떤 트리플 진술의 일부로도 다시 나타날 수 있습니다.
선택적으로 그래프 진술은 IRI로 레이블이 지정되지 않을 수도 있습니다.
이러한 그래프 진술은 기본 그래프에 해당하며, 이는 RDF
데이터셋의 기본 그래프입니다.
RDF 데이터셋을 TriG 문서로부터 구성하는 방법은 4. TriG 문법 및 5. 구문 분석에서 정의됩니다.
TriG는 Turtle [RDF12-TURTLE]과 동일한 버전 선언 메커니즘을 사용합니다.
TriG는 Turtle 언어의 확장이므로 Turtle 언어의 모든 구문을 허용합니다. 단순 트리플, 술어 목록, 그리고 객체 목록은 모두 그래프 진술 내부에서 사용하거나, TriG 문서에서처럼 독립적으로 사용할 수 있습니다. 그래프 진술 밖에 있는 경우, 트리플은 기본 그래프의 일부로 간주되며, 이는 RDF 데이터셋의 기본 그래프입니다.
그래프 진술은
IRI 또는
빈
노드를
RDF
그래프와 쌍으로 만듭니다.
그래프를 구성하는 트리플 진술은
{} 안에 둘러싸입니다.
TriG 문서에서 그래프 IRI 또는 빈 노드는 둘 이상의 그래프 진술에 대한 레이블로 사용될 수 있습니다. 그래프 진술의 그래프 레이블은 생략될 수 있습니다. 이 경우 그 그래프는 기본 그래프로 간주되며, 이는 RDF 데이터셋의 기본 그래프입니다.
RDF 데이터셋은 단일 그래프만 포함할 수도 있습니다.
# This document encodes one graph.
PREFIX ex: <http://www.example.org/vocabulary#>
PREFIX : <http://www.example.org/exampleDocument#>
:G1 { :Monica a ex:Person ;
ex:name "Monica Murphy" ;
ex:homepage <http://www.monicamurphy.org> ;
ex:email <mailto:monica@monicamurphy.org> ;
ex:hasSkill ex:Management ,
ex:Programming .
}
RDF 데이터셋은 기본 그래프 및/또는 0개 이상의 명명된 그래프를 포함할 수 있습니다.
# This document contains a default graph and two named graphs.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
# default graph
{
<http://example.org/bob> dc:publisher "Bob" .
<http://example.org/alice> dc:publisher "Alice" .
}
<http://example.org/bob> {
_:a foaf:name "Bob" .
_:a foaf:mbox <mailto:bob@oldcorp.example.org> .
_:a foaf:knows _:b .
}
<http://example.org/alice> {
_:b foaf:name "Alice" .
_:b foaf:mbox <mailto:alice@work.example.org> .
}
TriG는 명료성을 위해 데이터 작성자가 선택할 수 있도록 그래프와 트리플을 작성하는 다양한 대체 방식을 제공합니다.
# This document contains a same data as the previous example.
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX dc: <http://purl.org/dc/terms/>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
# default graph - no {} used.
<http://example.org/bob> dc:publisher "Bob" .
<http://example.org/alice> dc:publisher "Alice" .
# GRAPH keyword to highlight a named graph
# Abbreviation of triples using ;
GRAPH <http://example.org/bob>
{
[] foaf:name "Bob" ;
foaf:mbox <mailto:bob@oldcorp.example.org> ;
foaf:knows _:b .
}
GRAPH <http://example.org/alice>
{
_:b foaf:name "Alice" ;
foaf:mbox <mailto:alice@work.example.org>
}
그 밖의 모든 용어, 구문 형식, 지시문은 RDF Turtle에서 가져옵니다.
서로 다르게 레이블이 지정된 그래프 진술에서 동일한 식별자를 공유하는 빈 노드는 같은 빈 노드로 간주됩니다.
비규범적으로 표시된 섹션뿐 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고 사항은 비규범적입니다. 이 명세의 그 밖의 모든 내용은 규범적입니다.
이 문서에서 핵심 단어 MUST, MUST NOT, 그리고 SHOULD는 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 합니다.
이 명세는 다음에 대한 적합성 기준을 정의합니다.
적합한 TriG 문서는 4. TriG 문법에서 정의된 문법
및 추가 제약을 준수하는 Unicode 문자열이며,
trigDoc 생성식으로 시작합니다.
TriG 문서는 RDF 데이터셋을 직렬화합니다.
적합한 TriG 파서는 애플리케이션을 대신하여 TriG 문서를 읽을 수 있는 시스템입니다. 이는 RDF 데이터셋을 직렬화된 형태에서, 5. 구문 분석에서 정의된 대로 일반적으로 어떤 형태의 API를 통해 애플리케이션에 사용할 수 있게 합니다.
TriG 언어를 식별하는 IRI는
다음과 같습니다.
http://www.w3.org/ns/formats/TriG
이 명세는 TriG 파서가 적합하지 않은 입력 문서를 처리하는 방법을 정의하지 않습니다.
TriG의 미디어 타입은 application/trig입니다.
TriG 콘텐츠의 콘텐츠 인코딩은 항상 UTF-8입니다.
TriG
문서는 UTF-8 [RFC3629]로 인코딩된
RDF
문자열입니다.
U+0000부터 U+D7FF까지,
그리고 U+E000부터 U+10FFFF까지의 범위에 있는
Unicode 스칼라 값만
허용됩니다. 이는
U+D800부터 U+DFFF까지의 범위인
서러게이트 코드 포인트를 제외합니다.
공백(생성식 WS)은 그렇지 않으면 하나의 터미널로
잘못 인식될 수 있는 두 터미널을 구분하는 데 사용됩니다.
아래에서 대문자로 된 규칙 이름은 공백이 의미 있는 위치를 나타냅니다.
이들은 TriG 파서를 구성하기 위한
가능한 터미널 선택지를 형성합니다.
공백은 생성식 String에서 의미가 있습니다.
TriG의 주석은
IRIREF,
STRING_LITERAL_SINGLE_QUOTE,
STRING_LITERAL_QUOTE,
STRING_LITERAL_LONG_SINGLE_QUOTE,
또는
STRING_LITERAL_LONG_QUOTE 밖에 있는
#로 시작하며,
줄 끝(
LFs 또는
CRs로 표시됨)까지
계속되거나, 주석 표시자 뒤에 줄 끝이 없으면 파일 끝까지 계속됩니다.
주석은 공백으로 처리됩니다.
상대 IRI 참조는 Uniform Resource Identifier (URI): Generic Syntax [RFC3986]에 따라 섹션 5.2의 기본 알고리즘만 사용하여 기준 IRI로 해석됩니다. 구문 기반 정규화나 스킴 기반 정규화 (RFC3986의 섹션 6.2.2 및 6.2.3에 설명됨)는 수행되지 않습니다. IRI 참조에서 추가로 허용되는 문자는 Internationalized Resource Identifiers (IRIs) [RFC3987]의 섹션 6.5에 따라 URI 참조의 비예약 문자와 동일한 방식으로 처리됩니다.
@base 또는 BASE 지시문은
[RFC3986] 섹션 5.1.1, "콘텐츠에 포함된
기준 URI"에 따라 상대 IRI 참조를 해석하는 데 사용되는
기준 IRI를 정의합니다.
섹션 5.1.2, "캡슐화 엔터티에서
온
기준 URI"는
SOAP 봉투의 xml:base 지시문이나
Content-Location 헤더가 있는 MIME multipart 문서와 같은 캡슐화 문서에서
범위 내 기준 IRI가 어떻게 올 수 있는지를 정의합니다.
5.1.3, "검색 URI에서 온 기준 URI"에서
식별되는 "검색 URI"는 특정 TriG 문서가 검색된 URL입니다.
위 항목 중 어느 것도 기준 URI를 지정하지 않으면 기본
기준 URI(섹션 5.1.4, "기본 기준 URI")가
사용됩니다.
각 @base 또는 BASE 지시문은
이전 기준 URI에 상대적인 새로운 범위 내 기준 URI를 설정합니다.
TriG 문서에는 세 가지 형태의 이스케이프가 사용됩니다.
숫자 이스케이프 시퀀스는 Unicode 코드 포인트의 값을 나타냅니다.
숫자 이스케이프 시퀀스는 Unicode
서러게이트 범위인
U+D800부터 U+DFFF까지의 범위에 있는
코드 포인트 값을 생성해서는 MUST NOT 안 됩니다.
| 이스케이프 시퀀스 | Unicode 코드 포인트 |
|---|---|
\u hex
hex
hex
hex
|
가장 중요한 자리부터 가장 덜 중요한 자리까지 해석되는 네 개의 16진수 숫자로
인코딩된 값에 대응하는,
U+0000부터 U+D7FF까지 및
U+E000부터 U+D7FF까지의 범위에
있는
Unicode 코드 포인트
|
\U hex
hex
hex
hex
hex
hex
hex
hex
|
가장 중요한 자리부터 가장 덜 중요한 자리까지 해석되는 여덟 개의 16진수 숫자로
인코딩된 값에 대응하는,
U+0000부터
U+D7FF까지
및 U+E000부터 U+10FFFF까지의
범위에 있는
Unicode 코드 포인트
|
여기서 hex는 16진수 문자입니다.
HEX ::= [0-9] |
[A-F] | [a-f]
문자열 이스케이프 시퀀스는 문자열 리터럴에서 전통적으로 이스케이프되는 문자를 나타냅니다.
| 이스케이프 시퀀스 | Unicode 코드 포인트 |
|---|---|
\t |
U+0009 |
\b |
U+0008 |
\n |
U+000A |
\r |
U+000D |
\f |
U+000C |
\" |
U+0022 |
\' |
U+0027 |
\\ |
U+005C |
예약 문자 이스케이프 시퀀스는
\와
그 뒤의 문자 ~.-!$&'()*+,;=/?#@%_ 중 하나로 구성되며,
\ 오른쪽의 문자를 나타냅니다.
| 숫자 이스케이프 |
문자열 이스케이프 |
예약 문자 이스케이프 |
|
|---|---|---|---|
IRI들,
RDF 용어로 사용되거나
PREFIX
또는 BASE 선언에서 사용됨
|
예 | 아니요 | 아니요 |
| 로컬 이름들 | 아니요 | 아니요 | 예 |
| 문자열들 | 예 | 예 | 아니요 |
%-인코딩된 시퀀스는
IRI의 문자 범위 안에 있으며,
로컬 이름에서 명시적으로 허용됩니다.
이들은 '%' 뒤에 두 개의 16진수 문자가 오는 형태로 나타나며,
동일한 세 문자 시퀀스를 나타냅니다.
이 시퀀스들은 처리 중에 디코딩되지 않습니다.
TriG에서 <http://a.example/%66oo-bar>로 작성된 용어는
IRI http://a.example/%66oo-bar를 가리키며,
IRI http://a.example/foo-bar를 가리키지 않습니다.
접두사 PREFIX ex: <http://a.example/>가 있는
ex:%66oo-bar로 작성된 용어도
IRI http://a.example/%66oo-bar를 가리킵니다.
여기서 사용된 EBNF는 XML 1.0 [EBNF-NOTATION]에서 정의됩니다.
참고:
@base',
'@prefix',
'@version',
'a',
'true', 및
'false')는
대소문자를 구분합니다.
큰따옴표 안의 키워드
("BASE",
"PREFIX"), 및
"VERSION")는
대소문자를 구분하지 않습니다.
UCHAR
및 ECHAR는
대소문자를 구분합니다.
trigDoc입니다.
@prefix',
'@base', 및
'@version'는
LANG_DIR의 패턴과 일치하지만,
prefix,
base, 그리고 version 중 어느
것도
등록된 언어 하위태그는 아닙니다.
이 명세는 따옴표로 묶인 리터럴 뒤에 이 토큰들 중 하나가 오는 경우
(예: "A"@base) 그것이 Turtle 언어에 속하는지 여부를 정의하지 않습니다.
| [1] | trigDoc |
::= | (directive | block)* |
| [2] | block |
::= | triplesOrGraph | wrappedGraph | triples2
| ("GRAPH" labelOrSubject wrappedGraph)
|
| [3] | triplesOrGraph |
::= | (labelOrSubject (wrappedGraph | (predicateObjectList '.'))) | (reifiedTriple predicateObjectList? '.') |
| [4] | triples2 |
::= | (blankNodePropertyList predicateObjectList? '.') | (collection predicateObjectList '.') |
| [5] | wrappedGraph |
::= | '{' triplesBlock? '}' |
| [6] | triplesBlock |
::= | triples ('.' triplesBlock?)? |
| [7] | labelOrSubject |
::= | iri | BlankNode |
| [8] | directive |
::= | prefixID |
base | version | sparqlPrefix | sparqlBase
| sparqlVersion
|
| [9] | prefixID |
::= | '@prefix' PNAME_NS IRIREF '.' |
| [10] | base |
::= | '@base' IRIREF '.' |
| [11] | version |
::= | '@version' VersionSpecifier '.' |
| [12] | sparqlPrefix |
::= | "PREFIX" PNAME_NS IRIREF |
| [13] | sparqlBase |
::= | "BASE" IRIREF |
| [14] | sparqlVersion |
::= | "VERSION" VersionSpecifier |
| [15] | VersionSpecifier |
::= | STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE
|
| [16] | triples |
::= | (subject predicateObjectList) | (blankNodePropertyList predicateObjectList?) | (reifiedTriple predicateObjectList?) |
| [17] | predicateObjectList |
::= | verb objectList (';' (verb objectList)?)* |
| [18] | objectList |
::= | object annotation (',' object annotation)* |
| [19] | verb |
::= | predicate |
'a' |
| [20] | subject |
::= | iri | BlankNode | collection
|
| [21] | predicate |
::= | iri |
| [22] | object |
::= | iri | BlankNode | collection
| blankNodePropertyList | literal | tripleTerm
| reifiedTriple
|
| [23] | literal |
::= | RDFLiteral | NumericLiteral | BooleanLiteral |
| [24] | blankNodePropertyList |
::= | '[' predicateObjectList ']' |
| [25] | collection |
::= | '(' object*
')' |
| [26] | NumericLiteral |
::= | INTEGER | DECIMAL | DOUBLE |
| [27] | RDFLiteral |
::= | String (LANG_DIR |
('^^' iri))?
|
| [28] | BooleanLiteral |
::= | 'true' | 'false' |
| [29] | String |
::= | STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE
| STRING_LITERAL_LONG_SINGLE_QUOTE
| STRING_LITERAL_LONG_QUOTE
|
| [30] | iri |
::= | IRIREF | PrefixedName |
| [31] | PrefixedName |
::= | PNAME_LN |
PNAME_NS
|
| [32] | BlankNode |
::= | BLANK_NODE_LABEL | ANON |
| [33] | reifier |
::= | '~' (iri | BlankNode)? |
| [34] | reifiedTriple |
::= | '<<' rtSubject verb rtObject reifier?
'>>' |
| [35] | rtSubject |
::= | iri | BlankNode | reifiedTriple |
| [36] | rtObject |
::= | iri | BlankNode | literal | tripleTerm
| reifiedTriple
|
| [37] | tripleTerm |
::= | '<<(' ttSubject verb ttObject ')>>' |
| [38] | ttSubject |
::= | iri | BlankNode |
| [39] | ttObject |
::= | iri | BlankNode | literal | tripleTerm
|
| [40] | annotation |
::= | (reifier
| annotationBlock)*
|
| [41] | annotationBlock |
::= | '{|' predicateObjectList '|}' |
| [43] | IRIREF |
::= | '<' ([^#x00-#x20<>"{}|^`\]
| UCHAR)* '>'
/* #x00=NULL #x01-#x1F=control codes #x20=space */ |
| [44] | PNAME_NS |
::= | PN_PREFIX?
':' |
| [45] | PNAME_LN |
::= | PNAME_NS PN_LOCAL |
| [46] | BLANK_NODE_LABEL |
::= | '_:' (PN_CHARS_U | [0-9]) ((PN_CHARS
| '.')* PN_CHARS)?
|
| [47] | LANG_DIR |
::= | '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* ('--' [a-zA-Z]+)? |
| [48] | INTEGER |
::= | [+-]? [0-9]+ |
| [49] | DECIMAL |
::= | [+-]? ([0-9]* '.' [0-9]+) |
| [50] | DOUBLE |
::= | [+-]? (([0-9]+ '.' [0-9]* EXPONENT)
| ('.' [0-9]+ EXPONENT)
| ([0-9]+ EXPONENT))
|
| [51] | EXPONENT |
::= | [eE] [+-]? [0-9]+ |
| [52] | STRING_LITERAL_QUOTE |
::= | '"' ([^#x22#x5C#x0A#x0D] | ECHAR | UCHAR)* '"' |
| [53] | STRING_LITERAL_SINGLE_QUOTE |
::= | "'" ([^#x27#x5C#x0A#x0D] | ECHAR | UCHAR)* "'" |
| [54] | STRING_LITERAL_LONG_SINGLE_QUOTE |
::= | "'''" (("'" | "''")? ([^'\] | ECHAR | UCHAR))* "'''" |
| [55] | STRING_LITERAL_LONG_QUOTE |
::= | '"""' (('"' | '""')? ([^"\] | ECHAR | UCHAR))* '"""' |
| [56] | UCHAR |
::= | ('\u' HEX HEX HEX HEX) | ('\U' HEX HEX HEX HEX HEX HEX HEX HEX) |
| [57] | ECHAR |
::= | '\' [tbnrf\"'] |
| [58] | WS |
::= | #x20 | #x09 | #x0D | #x0A |
| [59] | ANON |
::= | '[' WS* ']' |
| [60] | PN_CHARS_BASE |
::= | [A-Z] |
| |
[a-z] |
||
| |
[#xC0-#xD6] |
||
| |
[#xD8-#xF6] |
||
| |
[#xF8-#x02FF] |
||
| |
[#x0370-#x037D] |
||
| |
[#x037F-#x1FFF] |
||
| |
[#x200C-#x200D] |
||
| |
[#x2070-#x218F] |
||
| |
[#x2C00-#x2FEF] |
||
| |
[#x3001-#xD7FF] |
||
| |
[#xF900-#xFDCF] |
||
| |
[#xFDF0-#xFFFD] |
||
| |
[#x00010000-#x000EFFFF] |
||
| [61] | PN_CHARS_U |
::= | PN_CHARS_BASE | '_' |
| [62] | PN_CHARS |
::= | PN_CHARS_U | '-' | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] |
| [63] | PN_PREFIX |
::= | PN_CHARS_BASE ((PN_CHARS |
'.')* PN_CHARS)? |
| [64] | PN_LOCAL |
::= | (PN_CHARS_U | ':' | [0-9] | PLX) ((PN_CHARS
| '.' | ':' | PLX)* (PN_CHARS
| ':' | PLX))?
|
| [65] | PLX |
::= | PERCENT | PN_LOCAL_ESC |
| [66] | PERCENT |
::= | '%' HEX HEX |
| [67] | HEX |
::= | [0-9] | [A-F] | [a-f] |
| [68] | PN_LOCAL_ESC |
::= | '\' ('_' | '~' | '.' | '-' | "!" | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%') |
이 문법의 텍스트 버전은 여기에서 사용할 수 있습니다.
이 문서는 일부 특정 터미널 리터럴 문자열 [EBNF-NOTATION]을 사용합니다. 이러한 터미널 리터럴 문자열에 사용된 Unicode 코드 포인트를 명확히 하기 위해, 다음 표는 이 문서 전반에서 사용되는 특정 문자와 시퀀스를 설명합니다.
| 코드 | 글리프 | 설명 |
|---|---|---|
U+000A |
LF |
줄 바꿈 |
U+000D |
CR |
캐리지 리턴 |
U+0022 |
" |
따옴표 |
U+0023 |
# |
번호 기호 |
U+0027 |
' |
아포스트로피 |
U+002D |
- |
하이픈 |
U+003B |
: |
콜론 |
U+0040 |
@ |
앳 기호 |
U+005C |
\ |
백슬래시 |
U+005F |
_ |
밑줄 |
U+0061 |
a |
라틴 소문자 E |
U+007B |
{ |
왼쪽 중괄호 |
U+007D |
} |
오른쪽 중괄호 |
다른 짧은 터미널 리터럴 문자열은 Unicode 문자의 특정 시퀀스로 구성됩니다.
spaceU+0020"""U+0022를 갖는 세 개의 연결된 따옴표 문자'''U+0027를 갖는 세 개의 연결된 아포스트로피 문자--- 문자RDF Concepts and Abstract Syntax [RDF12-CONCEPTS]
명세는 네 가지 유형의 RDF 용어를 정의합니다.
IRI,
리터럴,
빈
노드, 그리고
트리플
용어입니다.
리터럴은 어휘 형식과
선택적인 언어 태그 [BCP47]—
초기 텍스트 방향을 포함할 수도 있음—
또는 선택적인 데이터타입 IRI로 구성됩니다.
추가 유형인 prefix는 구문 분석 중에 문자열 식별자를
네임스페이스 IRI에 매핑하는 데 사용됩니다.
이 섹션은 4.5 문법의 문법을 따르는 문자열을,
생성식 및 어휘 토큰과 일치하는 문자열을 RDF
용어
또는 그 구성요소(예: 언어 태그, 리터럴의 어휘 형식)에 매핑함으로써
트리플 집합으로 매핑합니다.
문법 생성식은 파서 상태를 변경하고 트리플을 내보냅니다.
TriG를 구문 분석하려면 열 개 항목의 상태가 필요합니다.
base 생성식에 도달했을 때,
두 번째 규칙 인수인 IRIREF는
상대 IRI 참조 해석에 사용되는 기준
URI입니다.
PNAME_NS 및 IRIREF)는
접두사(PNAME_NS)에 대한
네임스페이스 이름(IRIREF)을 할당합니다.
prefixID 생성식 밖에서는 모든 PNAME_NS가
네임스페이스로 대체됩니다.
접두사는 빈 문자열일 수도 있음에 유의하십시오.
이는 PNAME_NS 생성식에 따른 것입니다:
PN_PREFIX? ":".
subject,
rtSubject,
ttSubject,
blankNodePropertyList,
collection,
tripleTerm, 그리고
annotationBlock
생성식에 바인딩됩니다.
verb 생성식에 바인딩됩니다.
일치한 토큰이 a인 경우,
curPredicate는
IRI http://www.w3.org/1999/02/22-rdf-syntax-ns#type에 바인딩됩니다.
object,
rtObject, 그리고
ttObject 생성식에 바인딩됩니다.
reifier 및
annotationBlock 생성식에 바인딩됩니다.
xsd:string curVersion –
문서를 트리플로 구문 분석하는 데 사용되는 RDF 버전입니다.
미디어 타입의 일부로 지정된 경우,
curVersion의 기본값은 version 매개변수에서 가져옵니다.
정의된 유일한 값은 "1.2"입니다. 다른 버전 값에 대한 파서 동작은 정의되지 않습니다.
이 명세는 서로 다른 버전이 curVersion에 제공된 경우의 동작을 정의하지 않습니다.
용어 생성자는 "records the curSubject and curPredicate."와 같은 표현을 사용하여 표시되는 이러한 값들의 스택을 만들 수 있습니다.
이 표는 생성식과 어휘 토큰을 RDF 용어 또는 RDF 용어의 구성요소에 매핑하며, 이들은 5. 구문 분석에 나열되어 있습니다.
| 생성식 | 유형 | 절차 |
|---|---|---|
| IRIREF | IRI | <와 > 사이의 문자를 가져오고, 숫자
이스케이프 시퀀스를 해제하여
IRI를 형성합니다. 상대 IRI 참조 해석은
섹션 6.3에 따라 수행됩니다.
결과 IRI는 일반 IRI 구문의 구문적 제한을
준수해야 MUST 하며, [RFC3986]의
섹션 3.3을 따르고
해당 IRI 스킴 명세가 부과하는 더 좁은 제한을 준수해야 SHOULD 합니다.
|
| PNAME_NS | prefix | prefixID 또는 sparqlPrefix 생성식에서 사용될 때,
prefix는 규칙의 첫 번째 인수와 일치하는, 잠재적으로 빈
RDF 문자열입니다.
그 문자열은 namespaces map의 키로 사용되며,
확장된 두 번째 인수는 향후 조회를 위해 그 키 아래에 저장됩니다.
|
| IRI | PrefixedName
생성식에서 사용될 때, iri는 규칙의 첫 번째 인수에 대응하는
namespaces
map의 값입니다.
|
|
| PNAME_LN | IRI | 잠재적으로 빈 prefix는 첫 번째 시퀀스인 PNAME_NS로 식별됩니다. namespaces map에는 대응하는 namespace가
있어야 MUST 합니다. IRI의 RDF 문자열은
두 번째 인수인 PN_LOCAL의
예약 문자를 이스케이프 해제하고,
이를 namespace에 연결하여 형성됩니다.
결과 IRI는 일반 IRI 구문의 구문적 제한을
준수해야 MUST 하며, 해당 IRI 스킴 명세가 부과하는 더 좁은 제한도
준수해야 SHOULD 합니다.
|
| VersionSpecifier | 리터럴 | curVersion은 일치한 RDF 문자열 어휘 형식과
xsd:string 데이터타입을 사용하는 리터럴에서 가져옵니다.
|
| STRING_LITERAL_SINGLE_QUOTE | 어휘 형식 | 가장 바깥쪽 '들 사이의 문자를 가져오고, 숫자 및 문자열 이스케이프
시퀀스를 해제하여 어휘 형식의 Unicode 문자열을 형성합니다. |
| STRING_LITERAL_QUOTE | 어휘 형식 | 가장 바깥쪽 "들 사이의 문자를 가져오고,
숫자 및 문자열 이스케이프
시퀀스를 해제하여 어휘 형식의 Unicode 문자열을 형성합니다.
|
| STRING_LITERAL_LONG_SINGLE_QUOTE | 어휘 형식 | 가장 바깥쪽 '''들 사이의 문자를 가져오고,
숫자 및 문자열 이스케이프
시퀀스를 해제하여 어휘 형식의 Unicode 문자열을 형성합니다.
|
| STRING_LITERAL_LONG_QUOTE. | 어휘 형식 | 가장 바깥쪽 """들 사이의 문자를 가져오고,
숫자 및 문자열 이스케이프
시퀀스를 해제하여 어휘 형식의 Unicode 문자열을 형성합니다.
|
| LANG_DIR | 언어 태그 | @ 뒤의 문자가
언어 태그와, 일치한 문자에
--가 포함된 경우 선택적으로
초기 텍스트 방향을 형성합니다.
언어 태그는 [BCP47]의
섹션 2.2.9에 따라
올바른 형식이어야 MUST 합니다. 존재하는 경우
초기 텍스트 방향은
ltr 또는 rtl이어야 MUST 합니다.
|
| RDFLiteral | 리터럴 | 리터럴은 첫 번째 규칙 인수인 String의 어휘 형식을 갖습니다.
'^^' iri 규칙이 일치하면
데이터타입 IRI가
iri에서 파생되며, 리터럴에는 언어 태그가 없습니다. LANG_DIR 규칙이
일치하면 언어 태그와 초기 텍스트 방향은
LANG_DIR에서 가져옵니다.
초기 텍스트 방향이 없으면
데이터타입은 rdf:langString입니다. 초기 텍스트 방향이 있으면
데이터타입은 rdf:dirLangString입니다. 어느 것도 일치하지 않으면 데이터타입은
xsd:string이고, 리터럴에는 언어 태그가 없습니다.
|
| INTEGER | 리터럴 | 리터럴은 입력 문자열의 어휘 형식과
xsd:integer 데이터타입을 갖습니다.
|
| DECIMAL | 리터럴 | 리터럴은 입력 문자열의 어휘 형식과
xsd:decimal 데이터타입을 갖습니다.
|
| DOUBLE | 리터럴 | 리터럴은 입력 문자열의 어휘 형식과
xsd:double 데이터타입을 갖습니다.
|
| BooleanLiteral | 리터럴 | 리터럴은 입력과 일치한 항목에 따라 true 또는 false의
어휘 형식과 xsd:boolean 데이터타입을 갖습니다. |
| BLANK_NODE_LABEL | 빈 노드 | 두 번째 인수인 PN_LOCAL와 일치하는 문자열은
bnodeLabels의 키입니다. 맵에 대응하는 빈 노드가 없으면
하나가 할당됩니다.
|
| ANON | 빈 노드 | 빈 노드가 생성됩니다. |
| blankNodePropertyList | 빈 노드 | 빈 노드가 생성됩니다. 다음 섹션의 blankNodePropertyList 규칙에 유의하십시오. |
| collection | 빈 노드 | 비어 있지 않은 목록의 경우 빈 노드가 생성됩니다. 다음 섹션의 collection
규칙에 유의하십시오. |
| IRI | 빈 목록의 경우 결과 IRI는 rdf:nil입니다. 다음 섹션의
collection 규칙에 유의하십시오.
|
|
| reifier | IRI | 빈 노드 |
curReifier는 term에서 가져오며, 이는 일치한
iri 생성식
또는 BlankNode 생성식이 있는 경우
그 생성식에서 가져옵니다.
그러한 생성식이 일치하지 않으면 term은
새로운 RDF 빈 노드에서 가져옵니다.
|
| tripleTerm | 트리플 용어 |
트리플 용어는
ttSubject,
predicate, 그리고
ttObject 생성식에서 구성된
용어들로 구성됩니다.
|
| reifiedTriple | IRI | 빈 노드 |
term은 일치한 reifier가 있으면 그곳에서 가져오고,
그렇지 않으면 새로운 RDF 빈 노드에서 가져옵니다.
|
| annotationBlock | IRI | 빈 노드 | term은 이전에 일치한 reifier가 있으면 그곳에서 가져오고, 그렇지 않으면 새로운 RDF 빈 노드에서 가져옵니다. |
입력에서 오류를 감지하는 처리기는 입력에 설명된 것보다 더 적은 트리플을 포함하는 그래프 (전혀 트리플이 없는 경우 포함)를 결과로 만들 수 있으므로, 소비자는 출력 트리플을 사용할 때 신호된 오류 정보를 고려해야 합니다. 출력 트리플은 불완전할 수 있으며 잘못 타입 지정된 또는 잘못 형성된 용어를 포함할 수 있습니다.
TriG 문서는 하나의 기본 그래프와 0개 이상의 명명된 그래프로 구성된 RDF 데이터셋을 정의합니다. 각 그래프는 RDF 트리플 집합으로 구성됩니다.
상태 curGraph는 처음에는 설정되지 않습니다. 이는 구문 분석 중 생성된 트리플의 그래프 레이블을 기록합니다. 정의되지 않은 경우 기본 그래프가 사용됩니다.
규칙
labelOrSubject는
curGraph와
curSubject를 모두 설정합니다
(이 중 하나만 사용됩니다).
다음 문법 생성식 절은 curGraph를 정의되지 않은 상태로 설정하여 기본 그래프를 나타냅니다.
문법 생성식
labelOrSubject predicateObjectList '.'는
predicateObjectList 생성식을
처리하기 전에 curGraph를 해제합니다.
이는 triplesOrGraph 규칙에서
이루어집니다.
생성된 각 RDF 트리플은 curGraph에 추가되거나, 구문 분석 과정의 그 시점에 curGraph가 설정되어 있지 않으면 기본 그래프에 추가됩니다.
subject
생성식은 curSubject를 설정합니다.
verb
생성식은 curPredicate를 설정합니다.
트리플은 구문 분석 과정의 다음 지점에서 생성되며, 생성된 각 RDF 트리플은 curGraph로 식별되는 그래프에 추가됩니다.
문서의 각 object N은 RDF 트리플을 생성합니다: curSubject curPredicate N.
reifier 생성식을 시작할 때,
curReifier는 reifier 용어
생성자에서 가져옵니다.
그런 다음 RDF 트리플 curReifier rdf:reifies
curTripleTerm을 산출합니다.
reifiedTriple 생성식을 시작하면
curTripleTerm를 기록합니다.
새로운 tripleTerm 인스턴스
curTripleTerm가
rtSubject,
verb, 그리고
rtObject 생성식을 사용하여 생성됩니다.
reifiedTriple 생성식을 마칠 때,
curReifier가 설정되어 있지 않으면 새로운 RDF 빈 노드가 할당됩니다.
이어서 RDF 트리플 curReifier rdf:reifies
curTripleTerm을 산출하고,
그다음 curTripleTerm의 기록된 값을 복원합니다.
reifiedTriple과 일치하여 생성되는 노드는
curReifier입니다.
annotation 생성식을 시작하면
curSubject와 curPredicate를 기록합니다.
새로운 tripleTerm 인스턴스
curTripleTerm가
curSubject curPredicate curObject를 사용하여 생성되고,
curReifier의 값은 지워집니다.
annotation 생성식을 마치면
curSubject와 curPredicate의 기록된 값을 복원합니다.
annotationBlock
생성식을 시작하면 curTripleTerm를 기록합니다.
curReifier가 설정되어 있지 않으면, 새로운 RDF 빈 노드가 할당되고,
생성식은 RDF 트리플 curReifier rdf:reifies
curTripleTerm을 산출합니다.
curSubject는 curReifier에서 가져옵니다.
annotationBlock
생성식을 마치면
curReifier의 값을 지우고
curTripleTerm를 복원합니다.
curReifier가 이미 설정되어 있었다면,
구체화 트리플 curReifier rdf:reifies curTripleTerm은
5.3.4 구체화자에서 내보내졌습니다.
blankNodePropertyList
생성식을 시작하면 curSubject와 curPredicate를 기록하고,
curSubject를 새로운 빈 노드 B로 설정합니다.
blankNodePropertyList
생성식을 마치면 curSubject와 curPredicate를 복원합니다.
blankNodePropertyList와 일치하여
생성되는 노드는
빈 노드 B입니다.
collection 생성식을 시작하면
curSubject와 curPredicate를 기록합니다.
collection 생성식 안의 각
object는
curSubject가 새로운 빈 노드 B로 설정되고
curPredicate가 rdf:first로 설정됩니다.
첫 번째 이후의 각 객체 objectn는 트리플을 생성합니다:objectn-1 rdf:rest
objectn .
collection 생성식을 마치면
추가 트리플 curSubject rdf:rest rdf:nil .을 생성하고
curSubject와 curPredicate를 복원합니다.
collection과 일치하여 생성되는 노드는
비어 있지 않은 목록의 경우 첫 번째 빈 노드 B이고, 빈 목록의 경우 rdf:nil입니다.
이 섹션은 비규범적입니다.
TriG 형식은 임의의 애플리케이션 데이터를 표현하는 데 사용되며, 여기에는 개인 식별 정보(PII)의 표현이나 민감한 것으로 간주될 수 있는 기타 정보가 포함될 수 있습니다. 이러한 정보를 게시하는 작성자는 그러한 정보를 게시할 필요와 사용을 신중하게 고려하고, 데이터가 소비되고 잠재적으로 공개될 것으로 예상되는 지역에 적용되는 규정(예: GDPR, CCPA, 기타)도 함께 고려해야 하며, 특히 데이터 접근에 승인 조치가 필요한지 여부를 고려해야 합니다.
이 섹션은 비규범적입니다.
STRING_LITERAL_SINGLE_QUOTE,
STRING_LITERAL_QUOTE,
STRING_LITERAL_LONG_SINGLE_QUOTE,
그리고
STRING_LITERAL_LONG_QUOTE
생성식은 이스케이프되지 않은 제어 문자의 사용을 허용합니다.
이 명세가 이 콘텐츠를 최종 사용자에게 직접 노출하지는 않지만,
사용자 에이전트를 통해 표시될 수 있으며, 이러한 문자의 표시로 인해
표시된 텍스트가 난독화될 수 있습니다.
TriG는 범용 단언 언어입니다. 애플리케이션은 더 많은 단언을 추론하거나 IRI를 역참조하기 위해 주어진 데이터를 평가할 수 있으며, 해당 IRI의 스킴에 대한 보안 고려사항이 적용됩니다. 특히 HTTP IRI에 대해서는 [RFC3023] 섹션 10의 개인정보 보호 문제에 유의하십시오. 부정확하거나 악의적인 데이터 소스에서 얻은 데이터는 부정확하거나 오해의 소지가 있는 결론으로 이어질 수 있으며, 의도하지 않은 IRI의 역참조로 이어질 수도 있습니다. 참조한 리소스에 대한 신뢰를 데이터의 의도된 사용 민감도와 맞추도록 주의해야 합니다. 잠재적인 의학적 치료에 대한 추론은 여행 계획을 위한 추론과는 다른 수준의 신뢰를 요구할 가능성이 큽니다.
TriG 언어는 임의의 애플리케이션 데이터를 표현하는 데 사용됩니다. 보안 고려사항은 사용 도메인에 따라 달라집니다. 텍스트에 적용 가능한 보안 도구 및 프로토콜 (예: PGP 암호화, 체크섬 검증, 암호로 보호되는 압축)도 TriG 문서에 사용할 수 있습니다. 포함된 정보의 민감도를 반영하는 보안/개인정보 보호 프로토콜이 적용되어야 합니다.
TriG는 RDF Schema 레이블과 같이 사용자에게 표시되는 데이터를 표현할 수 있습니다. 신뢰할 수 없는 TriG 문서에서 가져온 문자열을 렌더링하거나, 이스케이프되지 않은 문자를 사용하는 애플리케이션은 악성 문자열이 독자를 오도하는 데 사용될 가능성을 제한하기 위해 경고 및 기타 적절한 수단을 사용해야 SHOULD 합니다. XML의 미디어 타입 등록에 있는 보안 고려사항([RFC3023] 섹션 10)은 임의 데이터 및 마크업 표현과 관련한 추가 지침을 제공합니다.
TriG는 용어 식별자로 IRI를 사용합니다. TriG로 표현된 데이터를 해석하는 애플리케이션은 Internationalized Resource Identifiers (IRIs) [RFC3987] 섹션 8뿐만 아니라 Uniform Resource Identifier (URI): Generic Syntax [RFC3986] 섹션 7의 보안 문제를 다루어야 SHOULD 합니다.
여러 IRI가
같은 모양을 가질 수 있습니다.
서로 다른 문자 체계의 문자는 비슷해 보일 수 있습니다(예를 들어,
키릴 문자 "о"(코드 포인트 U+043E)는 라틴 문자 "o"(코드
포인트 U+006F)와 비슷해 보일 수 있습니다).
결합 문자가 뒤따르는 문자는 다른 문자와 동일한 시각적 표현을 가질 수 있습니다
(예를 들어, LATIN SMALL LETTER "E"(코드 포인트 U+0065) 뒤에
COMBINING ACUTE ACCENT(코드 포인트 U+0301)가 오는 경우
LATIN SMALL LETTER "E" WITH ACUTE
(U+00E9)와 동일한 시각적 표현을 갖습니다).
TriG로 데이터를 작성하거나 해석하는 모든 사람 또는 애플리케이션은
의도된 의미와 일치하는 IRI를 사용하고,
비슷해 보일 수 있는 IRI를 피하도록 주의해야 합니다.
시각적으로 유사한 문자를 일치시키는 것에 대한 자세한 정보는
Unicode Security Considerations
[UNICODE-SECURITY] 및
Internationalized
Resource Identifiers (IRIs) [RFC3987]
섹션 8에서 확인할 수 있습니다.
TriG의 인터넷 미디어 타입(이전에는 MIME 타입으로 알려짐)은 "application/trig"입니다.
TriG 파일은 모든 플랫폼에서 확장자 ".trig"(모두 소문자)를 갖는 것이 권장됩니다.
다음 정보는 IANA의 검토, 승인 및 등록을 위해 Internet Engineering Steering Group(IESG)에 제출되었습니다.
versionversion의 허용 가능한 값은
[RDF12-CONCEPTS]의
2.1 버전 레이블에 정의됩니다.
profile
profile 매개변수는 클라이언트가 콘텐츠 협상 과정에서 자신의 선호를 표현하고,
서버가 응답에 대한 추가 정보를 나타내는 데 사용할 수 있습니다.
클라이언트가 profile 매개변수를 제공한 경우, 서버는
서버가 인식하는 목록의 모든 프로필을 존중하는 문서를 반환해야 합니다.
서버는 profile 값만을 근거로 오류로 응답해서는 안 됩니다.
서버가 profile 매개변수를 제공한 경우, 클라이언트는 이를 무시하도록 선택할 수 있습니다.
profile URI는 역참조 가능하고 해당 URI에서 유용한 문서를 제공하는 것이 권장됩니다.
profile 매개변수가
미디어 타입 매개변수
[RFC4288]로서
HTTP Content-Type 헤더
또는
HTTP Accept 헤더
[RFC7231]에서
사용될 때, profile 매개변수의 값에 공백과 같은 특수 문자가 포함되어 있으면
(여러 profile URI를 구분하는 데 사용된 공백 포함)
ASCII "로 둘러싸야 합니다.
profile 매개변수의 값에는 하나 이상의 URI가 포함되며 IRI가 아니라는 점에
유의하는 것이 중요합니다. 따라서 [RFC3987]의
섹션 3 IRI와 URI의 관계에
지정된 대로 IRI와 URI 사이를 변환해야 할 수 있습니다.
이 섹션은 비규범적입니다.
이 섹션은 비규범적입니다.
편집자들은 원래 TriG 명세를 만든 Chris Bizer와 Richard Cyganiak의 작업에 깊이 감사드립니다. Gregg Kellogg, Eric Prud'hommeaux 및 Sandro Hawke가 이 버전에 귀중한 기여를 했습니다.
이 문서는 더 넓은 커뮤니티의 검토 과정을 통해 개선되었습니다.
이 섹션은 비규범적입니다.
편집자들 외에도 다음 사람들이 이 명세에 기여했습니다: Andy Seaborne, Denis Ah-Kang, Niklas Lindström, Peter F. Patel-Schneider, Pierre-Antoine Champin, Ted Thibodeau Jr, and Thomas Tanon
RDF & SPARQL Working Group Group의 구성원에는 다음이 포함되었습니다.
James Anderson, Dörthe Arndt, Jerven Bolleman, Erich Bremer, Pierre-Antoine Champin, Souripriya Das,
Enrico Franconi, Adrian Gschwend, Olaf Hartig, Gregg Kellogg†, Ora Lassila, Niklas Lindström, Thomas
Lörtsch, Peter Patel-Schneider, Dave Raggett, Felix Sasaki, Andy Seaborne, Ruben Taelman, Thomas
Pellissier Tanon, Ted Thibodeau Jr, Dominik Tomaszuk, Gregory Williams, William Van Woensel, and Antoine
Zimmermann
† Gregg Kellogg는 2025년 9월에 세상을 떠났습니다. RDF와 관련 표준의 더 넓은 생태계에 대한
그의 방대한 기여에 깊이 감사드립니다.
Task Force 구성원을 인정할까요? 기여자 목록을 찾기가 쉽지 않습니다.
이 섹션은 비규범적입니다.
이 섹션은 RDF 1.1 권고안과의 주요 차이점을 설명합니다.
이 명세는 RDF 1.1 TriG
[TRIG]에서
정의된
원래 TriG 구문을 확장하여, RDF 1.2 Concepts and Abstract Data Model
[RDF12-CONCEPTS]에서 도입된
새 기능을 지원합니다.
이 확장은 완전한 하위 호환성을 가집니다.
이전 버전을 준수하는 모든 문서는 새 버전도 준수하며 동일한 그래프로 구문 분석됩니다.
또한 새 버전을 준수하고 RDF 1.1 기능만 포함하는 모든 문서도
이전 버전과 호환됩니다
(VERSION 지시문은 예외입니다. 2.1 버전
선언 참조).
마지막으로, 새로운 구문 구성 중 어느 것도 이전 구문에서는 유효하지 않습니다.
이는 RDF 1.2 기능을 사용하는 모든 TriG 문서가
이 명세의 이전 버전을 준수하지 않으며, 그 버전에서 다른 그래프로
해석될 수 없음을 의미합니다.
보다 구체적으로, 다음과 같은 변경 사항이 적용되었습니다.
LANGTAG 터미널 생성식을
LANG_DIR로 변경하여
선택적인 초기 텍스트 방향을 포함하도록 했습니다.
NIL 터미널 생성식을 문법에서 제거했습니다.@version이
LANG_DIR와 일치하지 않도록 하는
규정도 포함한다는 점에 유의하십시오.
이전 버전의 문법은 이러한 일치를 허용했지만,
[BCP47]에 따른 잘못 형성된 언어 태그를 가진
리터럴이 되어 유효하지 않은 리터럴을 형성했을 것입니다.
profile 미디어 타입 매개변수를 추가했습니다.Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: