발행 이후 보고된 오류나 문제는 정오표를 확인하십시오.
다음도 참조하십시오: 번역본.
이 문서는 다음 비규범 형식으로도 제공됩니다: EPUB
Copyright © 2010-2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
JSON-LD 프레이밍은 개발자가 예제로 쿼리하고 JSON-LD 문서에 특정 트리 레이아웃을 강제할 수 있게 합니다.
이 명세는 JSON-LD 프레이밍 1.0 [JSON-LD10-FRAMING]에 정의된 기능의 상위 집합을 설명하며, 별도로 명시된 경우를 제외하고, 이 명세에서 설명하는 알고리즘은 이전 커뮤니티 표준을 사용해 만든 문서와 완전히 호환됩니다.
이 섹션은 발행 당시의 이 문서 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인에서 https://www.w3.org/TR/로 확인할 수 있습니다.
이 문서는 JSON-LD 워킹 그룹에서 개발했으며, JSON-LD 커뮤니티 그룹의 최종 보고서에서 파생되었습니다.
이 문서에 설명된 기능을 시연할 수 있는 라이브 JSON-LD 플레이그라운드가 있습니다.
이 문서는 JSON-LD 워킹 그룹에서 권고안으로 발행했습니다.
이 명세에 대한 논의에는 GitHub Issues 사용이 권장됩니다. 또는 메일링 리스트로 의견을 보낼 수도 있습니다. 다음 주소로 보내 주십시오. public-json-ld-wg@w3.org (아카이브).
워킹 그룹의 구현 보고서를 참조하십시오.
이 문서는 W3C 회원, 소프트웨어 개발자, 기타 W3C 그룹 및 관심 있는 당사자들의 검토를 받았으며, Director에 의해 W3C 권고안으로 승인되었습니다. 이 문서는 안정적인 문서이며 다른 문서에서 참고 자료로 사용하거나 인용할 수 있습니다. 권고안을 만드는 데 있어 W3C의 역할은 이 명세에 주의를 환기하고 폭넓은 배포를 촉진하는 것입니다. 이는 웹의 기능성과 상호운용성을 향상합니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 그룹의 산출물과 관련해 이루어진 모든 특허 공개의 공개 목록을 유지 관리하며, 해당 페이지에는 특허를 공개하기 위한 지침도 포함되어 있습니다. 개인이 필수 청구항을 포함한다고 판단하는 특허에 대해 실제 지식을 가지고 있는 경우, 해당 개인은 W3C 특허 정책의 섹션 6에 따라 정보를 공개해야 합니다.
이 문서는 2019년 3월 1일 W3C 프로세스 문서의 적용을 받습니다.
이 문서는 JSON-LD 워킹 그룹에서 작성한 세 개의 JSON-LD 1.1 권고안 중 하나입니다.
이 섹션은 비규범입니다.
JSON-LD는 JSON [RFC8259]에서 링크드 데이터 [LINKED-DATA]를 직렬화하기 위한 경량 구문입니다. 그 설계는 기존 JSON이 최소한의 변경만으로 링크드 데이터로 해석될 수 있게 합니다. 방향 그래프를 설명하는 링크드 데이터의 다른 표현과 마찬가지로, 하나의 방향 그래프는 여러 가지 서로 다른 직렬화를 가질 수 있으며, 각각은 정확히 같은 정보를 표현합니다. 개발자는 일반적으로 JSON 객체로 표현되는 트리를 다룹니다. 그래프를 트리에 매핑할 수는 있지만, 최종 결과의 레이아웃은 미리 지정해야 합니다. 개발자는 JSON-LD 문서에서 프레임을 사용해 그래프의 결정적 레이아웃을 지정할 수 있습니다.
데이터 덩어리 주위에 구분자를 사용하는 것은 "프레이밍"이라고 합니다.
JSON-LD는 { 및 } 같은 JSON 구분자를 사용해
특정 주어에 대한 문장을 분리합니다. JSON-LD는 또한 주어가
문자열로 표현된 식별자를 사용해 다른 주어를 참조할 수 있게 합니다.
그러나 JSON-LD가 하나 이상의 정보 그래프를 표현한다는 점을 고려하면, 여러 관련 주어에 대한 문장을 하나의 전체 문서로 프레이밍하는 방법은 둘 이상입니다. 사실 정보 그래프는 어떤 방식으로도 함께 묶이지 않은 독립적인 문장(일명 트리플)의 긴 목록으로 생각할 수 있습니다.
JSON-LD 프레이밍 API는
개발자가 데이터를 정확히 어떤 방식으로 프레이밍할지 지정할 수 있게 하며,
이를 통해 특정 주어에 대한 문장들이 함께 묶이고,
{ 및 }로 구분되며, 관련된 주어들이
애플리케이션이 기대하는 특정 트리 구조로 "중첩"되도록 합니다.
이 섹션은 비규범입니다.
이 문서는 JSON에서 링크드 데이터를 직렬화하는 방법에 대한 상세 명세입니다. 이 문서는 주로 다음 대상 독자를 위해 작성되었습니다:
동반 문서인 JSON-LD 1.1 명세 [JSON-LD11]는 JSON-LD 문서의 문법을 지정합니다.
이 명세의 기본 사항을 이해하려면 먼저 JSON에 익숙해야 하며, 이는 [RFC8259]에 자세히 설명되어 있습니다. 또한 이 문서의 모든 알고리즘에서 사용하는 기본 구문인 JSON-LD 1.1 구문 명세 [JSON-LD11]와 JSON-LD 1.1 API [JSON-LD11-API]도 이해해야 합니다. API와 그것이 프로그래밍 환경에서 어떻게 작동하도록 의도되었는지 이해하려면 JavaScript 프로그래밍 언어 [ECMASCRIPT]와 WebIDL [WEBIDL]에 대한 실무 지식이 있으면 유용합니다. JSON-LD가 RDF에 어떻게 매핑되는지 이해하려면 기본 RDF 개념 [RDF11-CONCEPTS]에 익숙한 것이 도움이 됩니다.
이 문서는 JSON-LD 1.0 버전 이후의 변경 사항을 강조 표시할 수 있습니다. 변경 사항을 선택하십시오.
이 섹션은 비규범입니다.
이 명세의 개발에 참여할 수 있는 방법은 여러 가지가 있습니다:
이 섹션은 비규범입니다.
이 명세에서는 다음 표기 규칙을 사용합니다:
markup마크업 정의 참조 마크업 외부 정의 참조참고는 연한 녹색 상자 안에 녹색 왼쪽 테두리와 함께 표시되며, 녹색의 "참고" 머리말을 가집니다. 참고는 항상 정보입니다.
예제는 연한 카키색 상자 안에 카키색 왼쪽 테두리와 함께 표시되며, 번호가 붙은 카키색 "예제" 머리말을 가집니다. 예제는 항상 정보입니다. 예제의 내용은 고정폭 글꼴로 표시되며 구문 색상이 적용될 수 있습니다. 예제에는 탭으로 된 탐색 버튼이 있을 수 있으며, 예제를 다른 표현으로 변환한 결과를 보여줄 수 있습니다.
이 문서는 외부 명세에서 정의된 다음 용어를 사용하며, JSON-LD에 특화된 용어를 정의합니다.
ECMAScript 언어 명세 [ECMASCRIPT], JavaScript Object Notation (JSON) 데이터 교환 형식 [RFC8259], Infra 표준 [INFRA], 및 Web IDL [WEBIDL]에서 가져온 용어
true 및 false 값.
내부 표현에서 JSON 객체는 키/값 쌍을 가진 맵 ( [INFRA] 참조)으로 설명되며, 엔트리로 구성됩니다.
애플리케이션 프로그래밍 인터페이스에서, 맵은 [WEBIDL] record를 사용해 설명됩니다.
@id가 null인
@context의 맵 엔트리는
용어와 IRI의 연결을 명시적으로 분리합니다.
값이 null인
맵 엔트리가
JSON-LD
문서 본문에 있으면,
그 맵 엔트리가 정의되지 않은
것과 같은 의미를 가집니다.
확장 형태에서 @value, @list, 또는 @set이 null로
설정되면,
전체 JSON 객체가
무시됩니다.
true, 또는 false 중 하나입니다.
국제화 리소스 식별자(IRI) [RFC3987]에서 가져온 용어
@type의 값,
그리고 어휘 상대로 정의된 용어의 값은
어휘
매핑에 상대적으로 해석되며,
기준 IRI에 상대적으로 해석되지 않는다는 점에
유의하십시오.
RDF 1.1 개념과 추상 구문 [RDF11-CONCEPTS], RDF Schema 1.1 [RDF-SCHEMA], 및 링크드 데이터 설계 이슈 [LINKED-DATA]에서 가져온 용어
_: 접두사로 시작하는 식별자가 할당됩니다.
_:로 시작합니다.
rdf:langString인 경우 선택적 언어 태그를 포함합니다.
@direction 키를 사용해 설정할 수 있으며,
그 값은 "ltr", "rtl", 또는
null 문자열 중 하나여야 합니다.
규범적 설명은 JSON-LD 1.1의 컨텍스트
정의 섹션을 참조하십시오.
@default 키를 가진
맵입니다.
true 또는 false,
타입이 지정된
값,
또는 언어 태그가 붙은
문자열입니다.
이는 RDF
리터럴을 표현합니다.
@value, @list, 또는
@set 키워드를 포함하지 않거나,
@graph와 @context 외의
다른 엔트리로
구성되어 있지 않은 경우입니다.
@id 키만 가진 노드를 참조하는 데 사용되는
노드
객체.
@version
엔트리를 사용해 다른 버전을
정의함으로써,
게시자는 JSON-LD 1.0
[JSON-LD10]에 적합한 프로세서가
JSON-LD 1.1 문서를 실수로 처리해 다른 출력을 만들지 않도록 할 수 있습니다.
API는 처리
모드를
json-ld-1.0으로 설정하는 옵션을 제공하며,
이는 JSON-LD 1.1 기능이 활성화되는 것을 방지하거나,
컨텍스트의
@version 엔트리가 명시적으로
1.1로 설정된 경우 오류를 발생시킵니다.
이 명세는 json-ld-1.1 처리 모드를 통해
JSON-LD
1.0을
확장합니다.
@context 엔트리를 사용하는
확장 용어
정의의 일부입니다. 이는 임베디드 컨텍스트와 같은 형식을 가집니다.
용어가 타입으로 사용될 때는 타입
범위
컨텍스트를 정의하고,
프로퍼티로 사용될 때는 프로퍼티 범위
컨텍스트를 정의합니다.
@value 엔트리를 가진
맵입니다.
규범적 설명은 JSON-LD 1.1의 값 객체
섹션을 참조하십시오.
@vocab 키를 사용해 설정되며,
그 값은 IRI, 축약
IRI, 용어, 또는
null이어야 합니다.
규범적 설명은 JSON-LD 1.1의 컨텍스트
정의 섹션을 참조하십시오.
다음 용어는 특정 알고리즘 안에서 사용됩니다.
true이고,
reverse 플래그의 기본값은 false입니다.
@graph 엔트리 안에 포함되는지,
또는 여러 노드
객체를 표현하는 데 필요한 경우에만
포함되는지를 결정하는 플래그.이 명세는 JSON-LD 1.1 구문 명세 [JSON-LD11]에 정의된 키워드에 여러 키워드(프레이밍 키워드)를 추가합니다:
@default@embed@embed의 유효한 값은
다음과 같습니다:
@always@once@embed와 객체 임베드 플래그가 모두
지정되지 않은 경우의 기본값입니다.
@never@embed의 다른 모든 값은 유효하지 않으며,
invalid @embed value
오류가 감지되었고 처리가 중단됨을 나타냅니다.
@explicit@nullnull 값이
반환되어야 할 때 사용되며, 그렇지 않으면
축약 시 제거됩니다.
@omitDefault@requireAll모든 JSON-LD 토큰과 키워드는 대소문자를 구분합니다.
이 섹션은 비규범입니다.
JSON-LD 1.1은
JSON-LD 1.0
[JSON-LD10]과 호환되는 새 기능을 도입하지만,
JSON-LD 1.0 프로세서로 처리할 경우 다른 결과를 생성할 수 있습니다.
프로세서는
processingMode API
옵션이 명시적으로 json-ld-1.0으로 설정되지 않는 한,
기본적으로 json-ld-1.1을 사용합니다.
게시자는 JSON-LD 1.0 프로세서가 JSON-LD 1.1 기능을 잘못 해석하지 않도록 하기 위해
맵 엔트리 @version을 컨텍스트 안에서
1.1로 설정해 사용하는 것이 권장됩니다.
이 섹션은 비규범입니다.
프레이밍은 JSON-LD 문서의 데이터를 형성하는 데 사용되며, 예시 프레임 문서를 사용합니다. 이 문서는 평탄화된 데이터와 매칭하는 데 사용되고, 결과 데이터가 어떤 형태여야 하는지에 대한 예시를 보여주는 데도 사용됩니다. 매칭은 프레임에 있는 프로퍼티를 사용해 공통 값을 공유하는 데이터 안의 객체를 찾는 방식으로 수행됩니다. 매칭은 프레임에 있는 모든 프로퍼티를 사용하거나, 프레임의 임의 프로퍼티를 사용해 수행할 수 있습니다. 매칭된 프로퍼티 값을 사용해 객체를 연결함으로써 객체를 서로의 내부에 임베드할 수 있습니다.
프레임은 또한 컨텍스트를 포함하며, 이는 결과로 나온 프레이밍된 출력을 축약하는 데 사용됩니다.
예를 들어, 다음 JSON-LD 프레임을 가정합니다:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@type": "Book",
"contains": {
"@type": "Chapter"
}
}
}
이 프레임 문서는 Library 타입의 객체를 최상위에 배치하고, contains 프로퍼티를 사용해 라이브러리 객체에 연결된 Book 타입의 객체를 프로퍼티 값으로 임베드하는 임베딩 구조를 설명합니다. 또한 Chapter 타입의 객체를 참조하는 Book 객체 안에 Book 객체의 임베드된 값으로 배치합니다.
프레임 구성 요소와 매칭되는 평탄화된 객체 집합을 사용할 때:
{
"@context": {
"@vocab": "http://example.org/",
"contains": {"@type": "@id"}
},
"@graph": [{
"@id": "http://example.org/library",
"@type": "Library",
"location": "Athens",
"contains": "http://example.org/library/the-republic"
}, {
"@id": "http://example.org/library/the-republic",
"@type": "Book",
"creator": "Plato",
"title": "The Republic",
"contains": "http://example.org/library/the-republic#introduction"
}, {
"@id": "http://example.org/library/the-republic#introduction",
"@type": "Chapter",
"description": "An introductory chapter on The Republic.",
"title": "The Introduction"
}]
}
프레임 알고리즘은 프레임의 구조를 따르는 새 문서를 만들 수 있습니다:
처리
모드가 json-ld-1.0이 아니거나, 그래프 생략 플래그가 true이면,
최상위 @graph 엔트리를
생략할 수 있습니다.
{
"@context": {"@vocab": "http://example.org/"},
"@id": "http://example.org/library",
"@type": "Library",
"location": "Athens",
"contains": {
"@id": "http://example.org/library/the-republic",
"@type": "Book",
"creator": "Plato",
"title": "The Republic",
"contains": {
"@id": "http://example.org/library/the-republic#introduction",
"@type": "Chapter",
"description": "An introductory chapter on The Republic.",
"title": "The Introduction"
}
}
}
프레이밍 알고리즘은
먼저 입력 프레임과 문서를 모두 확장함으로써 이를 수행합니다. 그런 다음
평탄화된
주어들의 맵을 만듭니다. 프레임 안의 가장 바깥쪽 노드 객체는
맵 안의 객체와 매칭하는 데 사용되며, 이 경우 @type이 Library이고,
해당 프로퍼티의 값을 매칭하는 데 사용되는 또 다른 프레임을 가진
contains 프로퍼티가 있는 노드 객체를 찾습니다.
입력 문서는 그러한 노드
객체를 정확히 하나 포함합니다. contains의 값도
노드 객체를 가지며,
이는 다시 Library 객체의 contains 값인
주어들의 집합과 매칭하는
프레임으로 취급되는 식입니다.
이 섹션은 비규범입니다.
타입 기준 매칭에 더해, 프레임은 하나 이상의 프로퍼티를 기준으로 매칭할 수 있습니다.
예를 들어, 다음 프레임은 @type이 아니라
프로퍼티 값을 기준으로 객체를 선택합니다.
{
"@context": {"@vocab": "http://example.org/"},
"location": "Athens",
"contains": {
"title": "The Republic",
"contains": {
"title": "The Introduction"
}
}
}
프로퍼티 값이 각 노드 객체에
고유하므로,
이는 @type을 기준으로 선택할 때와 같은 프레이밍 결과를 생성합니다.
매칭을 그러한 나열된 프로퍼티 중 전부가 아니라 모두 포함하는 노드 객체와 매칭하도록 어떻게 제한할 수 있는지는 § 2.3.5 모두 요구 플래그를 참조하십시오.
이 섹션은 비규범입니다.
빈 맵
({})은 와일드카드로 사용되며,
대상 노드 객체에 프로퍼티가
존재하면
특정 값과 관계없이 매칭합니다.
예를 들어, 다음 프레임은 @type이 아니라
프로퍼티 와일드카딩을 기준으로 객체를 선택합니다.
{
"@context": {"@vocab": "http://example.org/"},
"location": {},
"contains": {
"creator": {},
"contains": {
"description": {}
}
}
}
매칭된 프로퍼티가 각 노드
객체에 구별되므로,
이는 @type을 기준으로 선택할 때와 같은 프레이밍 결과를 생성합니다.
이 섹션은 비규범입니다.
빈 배열
([])은 match none에 사용되며,
대상 노드 객체에 프로퍼티가
존재하지 않는 경우에만
노드 객체와 매칭합니다.
예를 들어, 다음 프레임은 @type이 아니라
프로퍼티의 부재를 기준으로 객체를 선택합니다.
{
"@context": {"@vocab": "http://example.org/"},
"creator": [],
"title": [],
"contains": {
"location": [],
"description": [],
"contains": {
"location": []
}
}
}
제외된 프로퍼티가 각 노드
객체를 고유하게 식별하므로,
이는 @type을 기준으로 선택할 때와 같은 프레이밍 결과를 생성합니다.
명시적으로 제외된 프로퍼티에는 null 값을 가진 추가 프로퍼티가
추가된다는 점에 유의하십시오.
이 섹션은 비규범입니다.
프레임은 특정 프로퍼티 값의 존재를 기준으로 매칭될 수 있습니다.
이 값 자체는 와일드카드를 사용할
수 있으며, 이를 통해 특정 값이나 값 집합,
언어 태그, 타입,
또는 기준 방향을 기준으로 매칭할 수 있습니다.
예시로, 더 복잡한 값 표현을 가진 다국어 버전의 라이브러리 예제를 사용하겠습니다.
{
"@context": {
"@vocab": "http://example.org/",
"contains": {"@type": "@id"}
},
"@graph": [{
"@id": "http://example.org/library",
"@type": "Library",
"location": [
{"@value": "Athens", "@language": "en"},
{"@value": "Αθήνα", "@language": "grc"},
{"@value": "Athína", "@language": "el-Latn"}
],
"contains": "http://example.org/library/the-republic"
}, {
"@id": "http://example.org/library/the-republic",
"@type": "Book",
"creator": [
{"@value": "Plato", "@language": "en"},
{"@value": "Πλάτων", "@language": "grc"},
{"@value": "Plátōn", "@language": "el-Latn"}
],
"title": [
{"@value": "The Republic", "@language": "en"},
{"@value": "Πολιτεία", "@language": "grc"},
{"@value": "Res Publica", "@language": "el-Latn"}
],
"contains": "http://example.org/library/the-republic#introduction"
}, {
"@id": "http://example.org/library/the-republic#introduction",
"@type": "Chapter",
"description": "An introductory chapter on The Republic.",
"title": "The Introduction"
}]
}
값의 속성을 기준으로 매칭함으로써, 그 속성을 가진 프레임과 매칭하고
결과를 매칭되는 프로퍼티 값으로 제한할 수 있습니다.
이 경우, 라틴 문자로 표기된 그리스어(el-Latn) 값만 기준으로
Library와 Book 객체를 프레이밍합니다:
{
"@context": {"@vocab": "http://example.org/"},
"location": {"@value": {}, "@language": "el-Latn"},
"contains": {
"creator": {"@value": {}, "@language": "el-Latn"},
"title": {"@value": {}, "@language": "el-Latn"},
"contains": {
"title": "The Introduction"
}
}
}
이는 다음과 같은 프레이밍 결과를 생성합니다:
@id 기준 매칭이 섹션은 비규범입니다.
프레임은 특정 식별자(@id)와 매칭될 때
매칭될 수 있습니다. 이는 특정 @id 값에 대해 매칭하는 프레임을 사용해
원래의
평탄화된 라이브러리 객체
입력으로 설명할 수 있습니다:
{
"@context": {"@vocab": "http://example.org/"},
"@id": "http://example.org/library",
"contains": {
"@id": "http://example.org/library/the-republic",
"contains": {
"@id": "http://example.org/library/the-republic#introduction"
}
}
}
이는 다음과 같은 프레이밍 결과를 생성합니다:
프레임은 식별자 배열로부터도 매칭될 수 있습니다.
프레임 안에서 @id가 배열
값을 갖는 것은 허용되며,
이때 개별 값은 IRI로
취급됩니다.
{
"@context": {"@vocab": "http://example.org/"},
"@id": ["http://example.org/home", "http://example.org/library"],
"contains": {
"@id": ["http://example.org/library/the-republic"],
"contains": {
"@id": ["http://example.org/library/the-republic#introduction"]
}
}
}
이는 다음과 같은 프레이밍 결과를 생성합니다:
이 섹션은 비규범입니다.
빈 프레임은 모든 노드 객체와 매칭하며, 해당 객체가 다른 곳에 임베드되어 있더라도 최상위 수준에서 직렬화되도록 합니다.
{
"@context": {"@vocab": "http://example.org/"}
}
이는 다음과 같은 프레이밍 결과를 생성합니다:
이 섹션은 비규범입니다.
프레임은 입력 파일에 존재하지 않는 프로퍼티를 지정할 수 있습니다. 명시적 포함
플래그가 false이면, 프레이밍 알고리즘은
결과에 프로퍼티와 값을 추가합니다. 노드
객체 또는
값 객체 안의
@default 프로퍼티,
또는 @type의 값으로서의 @default는
결과 출력 문서에서 사용할 기본값을 제공합니다.
@default 값이 없으면, 해당 프로퍼티는 null 값으로 출력됩니다.
(이를 피하는 방법은 § 2.3.3
기본값 생략 플래그를 참조하십시오).
프레임 안의 프로퍼티 값은 그 외에는 출력 문서에서 사용되지 않습니다. 그 목적은 프레임 매칭과 기본값 찾기입니다. 다음 예제에서 Library의 description 값에 유의하십시오.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"description": "A great Library.",
"contains": {
"@type": "Book",
"description": {"@default": "A great book."},
"contains": {
"@type": "Chapter"
}
}
}
기본값은 다른 프로퍼티와 유사하게 @type에도 사용할 수 있습니다.
이 경우, @type이 없는 매칭된 노드 객체는
프레임의
기본
객체 값을 취합니다.
기본
객체는 단일 IRI인 값을 가집니다.
여러 IRI가
지정된 경우, 첫 번째 것만 기본 타입으로 사용됩니다.
프레임은 특정 프로퍼티 값을 가진 객체와 매칭하며,
매칭된 객체에 대한 @type 기본값을 제공합니다.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@type": {"@default": "Book"},
"creator": "Plato",
"contains": {
"@type": {"@default": "Chapter"},
"description": "An introductory chapter on The Republic."
}
}
}
@type에 대한 특정 값은 없지만
다른 프로퍼티 값을 기준으로 매칭되는 데이터입니다.
{
"@context": {
"@vocab": "http://example.org/",
"contains": {"@type": "@id"}
},
"@graph": [{
"@id": "http://example.org/library",
"@type": "Library",
"contains": "http://example.org/library/the-republic"
}, {
"@id": "http://example.org/library/the-republic",
"creator": "Plato",
"title": "The Republic",
"contains": "http://example.org/library/the-republic#introduction"
}, {
"@id": "http://example.org/library/the-republic#introduction",
"description": "An introductory chapter on The Republic.",
"title": "The Introduction"
}]
}
이 섹션은 비규범입니다.
프레이밍은 API 옵션을 사용하거나, § 1.5 구문 토큰 및 키워드에 설명된 대로 프레임 안에 프레이밍 키워드를 추가하여 제어할 수 있습니다.
키워드를 사용해 설정된 프레이밍 플래그는 그것이 나타나는 프레임과, 프레임 객체가 없는 객체에 대해 생성되는 암시적 프레임에만 영향을 줍니다.
이 섹션은 비규범입니다.
객체 임베드 플래그는
참조된 노드 객체가
참조하는 객체의 프로퍼티 값으로 임베드될지,
아니면 노드 참조로
유지될지를 결정합니다.
객체 임베드 플래그의 초기값은
옵션을 사용해 설정됩니다.
객체 임베드 플래그의 기본
embed@once 값을
기준으로 한 다음 프레임을 고려하십시오:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library"
}
객체 임베드 플래그의 기본값이
@once이고
(명시적 포함 플래그가
false인 것에 더해),
나열되지 않은 프로퍼티가 출력에 추가되고 기본 빈 프레임을 사용해
암시적으로 임베드됩니다. 그 결과, 플래그가 orderedtrue라고 가정하면,
위의 프레이밍된 라이브러리 객체에서 사용한 것과 같은
출력이 생성됩니다.
그러나 @embed 프로퍼티가 @never 값으로 명시적으로 추가되면,
Book과 Chapter의 값은 제외됩니다.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@type": "Book",
"@embed": "@never"
}
}
@once가 값을 확장하지 않는 경우를 설명하기 위해,
책이 이중으로 인덱싱된 대체 라이브러리 예제를 고려하십시오.
{
"@context": {
"@vocab": "http://example.org/",
"books": {"@type": "@id"},
"contains": {"@type": "@id"}
},
"@graph": [{
"@id": "http://example.org/library",
"@type": "Library",
"books": "http://example.org/library/the-republic",
"contains": "http://example.org/library/the-republic"
}, {
"@id": "http://example.org/library/the-republic",
"@type": "Book",
"creator": "Plato",
"title": "The Republic",
"contains": "http://example.org/library/the-republic#introduction"
}, {
"@id": "http://example.org/library/the-republic#introduction",
"@type": "Chapter",
"description": "An introductory chapter on The Republic.",
"title": "The Introduction"
}]
}
@embed의 기본값이 @once인 같은 프레임으로 프레이밍하면,
플래그가 orderedtrue인 경우
"books" 프로퍼티만 콘텐츠를 가지며,
"contains" 프로퍼티는 참조를 사용합니다.
"@embed": "@always"를 사용하는 프레임을 사용하면,
두 프로퍼티 모두 확장된 값을 포함합니다.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"@embed": "@always"
}
이 섹션은 비규범입니다.
명시적
포함 플래그는 출력 문서에 포함될 프로퍼티를 결정하는 데 사용됩니다.
기본값은 false이며, 이는 입력 노드 객체에 존재하지만
연결된 프레임에는 없는 프로퍼티가 출력 객체에 포함된다는 뜻입니다.
true이면, 입력 프레임에 있는 프로퍼티만 출력에 배치됩니다.
명시적 포함 플래그의 초기값은
옵션을 사용해 설정됩니다.
explicit
예를 들어, 입력의 일부 프로퍼티는 포함하지만 다른 프로퍼티는 생략하는 라이브러리 프레임의 확장 버전을 살펴보겠습니다.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"description": {},
"contains": {
"@type": "Book",
"@explicit": true,
"title": {},
"contains": {
"@type": "Chapter"
}
}
}
결과 출력은 프레임 객체에 명시적으로 나열되지 않은 Book의 프로퍼티를 제외합니다:
Library 객체는 "description": {}를 사용해
프레임에서 명시적으로 요구되었으므로, null인
description 프로퍼티를 포함합니다. creator 프로퍼티는
명시적이지 않기 때문에 출력에 존재하지 않습니다.
이 섹션은 비규범입니다.
기본값 생략 플래그는
프레임에 설명된 프로퍼티가 입력 문서에 없을 때
프레이밍이 출력을 생성하는 방식을 변경합니다.
기본값 생략 플래그의 초기값은
옵션을 사용해 설정됩니다.
자세한 논의는 § 2.2
기본 콘텐츠를 참조하십시오.
omitDefault
다음 입력 문서를 고려하십시오:
{
"@context": {
"@vocab": "http://example.org/",
"child": {"@type": "@id"}
},
"@graph": [{
"@id": "http://example.org#John",
"@type": "Person",
"name": "John",
"child": "http://example.org#Jane"
}, {
"@id": "http://example.org#Jane",
"@type": "Person",
"name": "Jane"
}]
}
기본값 생략 플래그가 유용한 곳을 설명하기
위해,
@omitDefault를 사용하지 않는 다음 프레임을 고려하십시오:
{
"@context": {
"@vocab": "http://example.org/",
"child": {"@type": "@id"}
},
"@type": "Person",
"child": {
"@embed": "@always"
}
}
결과 출력은 null 값을 가진 "child" 프로퍼티를 포함하며,
이는 항상 원하는 것은 아닐 수 있습니다:
프레임에서 child 프로퍼티 아래에 "@embed": "@always" 옵션이 지정되어 있기 때문에,
해당 프로퍼티가 없는 매칭에 대해 "child": null이 출력에 나타난다는 점에 유의하십시오.
이는 바람직하지 않을 수 있습니다.
이 기본 null 출력이 발생하지 않도록 하려면,
다음과 같이 @omitDefault를 true로 설정할 수 있습니다:
{
"@context": {
"@vocab": "http://example.org/",
"child": {"@type": "@id"}
},
"@type": "Person",
"child": {
"@embed": "@always",
"@omitDefault": true
}
}
이는 다음과 같은 (바람직한) 출력을 생성합니다:
이 섹션은 비규범입니다.
그래프 생략 플래그는
단일 노드 객체를
포함하는 프레이밍된 출력이 @graph 안에 포함될지 여부를 결정합니다.
그래프 생략 플래그의 초기값은
옵션을 사용하거나
처리
모드를 기반으로 설정됩니다. 처리 모드가
omitGraphjson-ld-1.0이면 출력은 항상 @graph 엔트리를 포함하며, 그렇지 않으면 @graph 엔트리는 축약과 일관되게
여러 노드 객체를 설명하는
데만 사용됩니다.
자세한 논의는 § 4.1
프레이밍 알고리즘을 참조하십시오.
결과는 원래의 평탄화된 라이브러리
객체 예제와 같지만,
최상위에 @graph가 있습니다.
예제 5는
그래프 생략 플래그가
true로 설정된 결과를 보여주며, 이는
처리
모드가 기본 json-ld-1.1로 설정되어 있을 때의 기본값입니다.
처리
모드를 json-ld-1.0으로 설정하거나,
그래프 생략
플래그를 false로 설정하여 최상위 객체를 @graph 안에 둘 수 있습니다.
이 섹션은 비규범입니다.
모두 요구 플래그는
프레임 매칭에서 입력 문서의 노드
객체가
프레임과 언제 매칭되는지 결정하는 데 사용됩니다.
매칭할 때 객체는 @type 및 다른 프로퍼티를 포함할 수 있으며,
모두
요구 플래그의 값이 false(기본값)인 경우,
객체 안의 어떤 프로퍼티 값이라도 프레임
객체 안의
노드 패턴과 매칭되면
매칭이 이루어집니다.
플래그 값이 true이면, 노드가 매칭되기 위해
프레임
객체 안의 모든 프로퍼티가 노드
객체에 존재해야 합니다.
다음 프레임은 프로퍼티의 부재를 포함하여 여러 프로퍼티를 기준으로 매칭합니다.
평탄화된 라이브러리 객체 예제를 사용하면,
title과 description 또는 title과 creator 프로퍼티를 모두 포함하는 객체를 기준으로 매칭할 수 있습니다.
@requireAll을 false로 설정하면,
모든 프로퍼티가 아니라 임의의 프로퍼티 존재를 기준으로 매칭할 수 있습니다.
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@requireAll": true,
"creator": {},
"title": {},
"contains": {
"@requireAll": true,
"description": {},
"title": {}
}
}
}
이는 다시 원하는 프레이밍 출력을 재현합니다:
이 섹션은 비규범입니다.
프레임은 출력 객체 안의 관계를 반전하기 위해 @reverse 또는
@reverse를 사용해 정의된 용어의 값을 포함할 수 있습니다. 예를 들어,
Library 예제는 다음 프레임을 사용해 반전할 수 있습니다:
{
"@context": {
"@vocab": "http://example.org/",
"within": {"@reverse": "contains"}
},
"@type": "Chapter",
"within": {
"@type": "Book",
"within": {
"@type": "Library"
}
}
}
위의 평탄화된 라이브러리 예제를 사용하면 다음과 같은 결과가 나옵니다:
일반 프로퍼티와 역방향 프로퍼티 사이에는 비대칭성이 있습니다. 일반적으로 노드 객체를 프레이밍할 때, 명시적 포함 플래그가 설정되어 있지 않으면 노드의 모든 프로퍼티가 출력에 포함되지만, 역방향 프로퍼티는 실제로 노드의 프로퍼티가 아니므로 포함되지 않습니다.
출력에 역방향 프로퍼티를 포함하려면, 프레임에 명시적으로 추가하십시오. 역방향 관계가 존재하지 않으면, 단순히 출력에서 빠진다는 점에 유의하십시오.
이 섹션은 비규범입니다.
프레임은 @graph를 포함할 수 있으며, 이를 통해
명명된 그래프의 정보가
JSON-LD 문서 안에
포함되어 있을 때
적절한 그래프 컨텍스트 안에서 드러날 수 있습니다. 기본적으로 프레이밍은 입력 안의
모든 그래프에 걸친 모든 노드 객체로
구성된 merged graph를 사용합니다. 프레임 안에서 @graph를 사용하면,
출력 문서는 입력 문서 안에 포함된 명명된
그래프의 정보를 구체적으로 포함할 수 있습니다.
다음 예제는 정보가 기본
그래프와
http://example.org/graphs/books라는 이름의 그래프 사이에
나뉘어 있는 라이브러리 테마의 변형을 사용합니다:
{
"@context": {"@vocab": "http://example.org/"},
"@type": "Library",
"contains": {
"@id": "http://example.org/graphs/books",
"@graph": {
"@type": "Book"
}
}
}
[{
"@context": {"@vocab": "http://example.org/"},
"@id": "http://example.org/graphs/books",
"@graph": [{
"@id": "http://example.org/library/the-republic",
"@type": "http://example.org/Book",
"http://example.org/contains": {
"@id": "http://example.org/library/the-republic#introduction"
},
"http://example.org/creator": "Plato",
"http://example.org/title": "The Republic"
}, {
"@id": "http://example.org/library/the-republic#introduction",
"@type": "http://example.org/Chapter",
"http://example.org/description": "An introductory chapter on The Republic.",
"http://example.org/title": "The Introduction"
}]
}, {
"@context": {"@vocab": "http://example.org/"},
"@id": "http://example.org/library",
"@type": "http://example.org/Library",
"http://example.org/contains": {"@id": "http://example.org/graphs/books"},
"http://example.org/name": "Library"
}]
비규범으로 표시된 섹션뿐만 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고는 비규범입니다. 이 명세의 그 밖의 모든 것은 규범입니다.
이 문서에서 핵심 단어 MAY, MUST, MUST NOT, SHOULD, 및 SHOULD NOT은 여기 보이는 것처럼 모두 대문자로 나타나는 경우에, 그리고 그 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석해야 합니다.
이 명세에 대한 적합성을 주장할 수 있는 제품 클래스는 하나입니다: JSON-LD 프로세서.
적합한 JSON-LD 프로세서는 이 명세에 정의된 알고리즘과 일관되는 방식으로 프레이밍 연산을 수행할 수 있는 시스템입니다.
JSON-LD 프로세서는 잘못된 형식의 IRI 또는 언어 태그를 수정하려고 시도해서는 MUST NOT 됩니다; 그러나 검증 경고를 발행할 수는 MAY 있습니다. IRI는 상대 및 절대 IRI 사이의 변환 외에는 수정되지 않습니다.
processingMode API
옵션을 사용해 지정하지 않는 한,
처리 모드는
로컬 컨텍스트 안의
@version 엔트리를 사용해
설정되며,
확장 및 축약을 포함한 알고리즘의 동작에
영향을 줍니다.
일단 설정되면 다른 처리 모드로 변경하려는 시도는 오류이며,
프로세서는 processing
mode conflict
오류를 생성하고 이후 처리를 중단해야 MUST 합니다.
이 명세의 알고리즘은 일반적으로 효율성보다 명확성을 더 중시하여 작성되었습니다. 따라서 JSON-LD 프로세서는 최종 결과가 명세의 알고리즘으로 얻을 수 있는 결과와 구별할 수 없는 한, 이 명세에 제시된 알고리즘을 원하는 어떤 방식으로든 구현할 수 MAY 있습니다.
키워드에 대한 연산을 설명하는 알고리즘 단계에서, 그러한 단계는 키워드 별칭에도 적용됩니다.
구현자는 JSON-LD 프레이밍 테스트 스위트의 테스트 케이스를 성공적으로 통과함으로써 이 명세에 대한 적합성 수준을 부분적으로 확인할 수 있습니다. 그러나 테스트 스위트의 모든 테스트를 통과한다는 것이 이 명세에 대한 완전한 적합성을 의미하지는 않는다는 점에 유의하십시오. 이는 구현이 테스트 스위트에서 테스트한 측면에 적합하다는 것만 의미합니다.
다음 섹션들은 JSON-LD 문서를 프레이밍하기 위한 알고리즘을 설명합니다. 프레이밍은 정보 그래프를 표현하는 JSON-LD 문서를 가져와 특정 그래프 레이아웃(프레임이라고 함)을 적용하는 과정입니다.
프레이밍은 노드 맵 생성 알고리즘을 사용하여 JSON-LD 문서에 정의된 각 객체를 평탄화된 주어들의 맵에 배치함으로써, 프레이밍 알고리즘이 그것들을 대상으로 동작할 수 있게 합니다.
이 섹션에 설명된 모든 알고리즘은 언어 네이티브 데이터 구조에서 동작하도록 의도되었습니다. 즉, 텍스트 기반 JSON 문서로의 직렬화는 이러한 알고리즘의 입력이나 출력으로 필요하지 않습니다.
JSON 데이터 구조에 대한 참조는 알고리즘 설명을 위해 그 내부 표현을 사용해 해석됩니다.
유효한 JSON-LD 프레임은 유효한 JSON-LD 문서의 상위 집합이며, 확장을 통해 보존되는 추가 콘텐츠를 허용합니다. JSON-LD 1.1 구문 명세 [JSON-LD11]에 정의된 문법은 다음과 같이 확장됩니다:
@default의 값은 엔트리 키가 IRI로
확장되는 값에 대한 문법에서 허용하는 다른 값에 더해,
@null 값이나 @null만 포함하는
배열을 포함할 수
MAY 있습니다.
프로세서는
확장할 때 이 값을 보존해야 MUST 합니다.
기본
객체의 다른 모든 엔트리는
무시되어야 MUST 합니다.
@id와 @type의 값은 빈 맵,
IRI 참조,
빈 맵 하나만
포함하는 배열,
또는 IRI 참조의 배열일 수도 있습니다.
@type의 값은 값이 IRI로 제한되는
@default 엔트리를 가진 맵일 수도
MAY 있습니다.
프로세서는
확장할 때 이 값을 보존해야 MUST 합니다.
@graph
엔트리를 포함하는지 여부에 따라,
입력 문서에 포함된 병합된 노드 정의 또는 기본 그래프에서
동작합니다.
프레임 객체가
@graph를 포함하고, 주어가 명명된
그래프이기도 한 노드는,
연결된 명명된
그래프의
노드
객체로 프레이밍을 확장합니다.
프레이밍 알고리즘은
다섯 개의 필수 입력 변수와 하나의 선택적 입력 변수를 받습니다.
필수 입력은
프레이밍 상태
(state),
프레이밍할 subjects의 리스트,
입력 프레임
(expanded frame),
부분 프레임 결과를 수집하는 데 사용되는 parent,
그리고 active property입니다.
선택적 입력 변수는 플래그입니다.
ordered
알고리즘은 parent가 배열이면
요소를 parent에
추가하거나, parent가 맵이면
parent 안에서 active property와 연결된 배열에 추가함으로써
parent에 요소를 추가합니다.
parent가 배열인 경우
active property는
null이어야 MUST 하며,
그것이 맵인 경우
null이어서는 MUST NOT 안 됩니다.
invalid frame
오류가 감지되었으며 처리가 중단됩니다.
@embed, @explicit, 및 @requireAll에
대한 프로퍼티 값으로 재정의합니다.
ordered 플래그가
true인 경우 id를 기준으로 사전식 순서로:
@id와 id를 가진 새 맵으로 output을
초기화합니다.
false이고,
state 안의 graph name 및 id와 연결된 기존 임베드된 노드가
parent에 있으면,
이 node에 대해 추가 처리를 수행하지 않습니다.
true이고
embed가 @never이거나 임베드로 인해
순환 참조가 만들어질 경우,
output을 parent에 추가하고
이 node에 대해 추가 처리를 수행하지 않습니다.
true이고,
embed가 @once이며,
state 안의 graph name 및 id와 연결된 기존 임베드된 노드가
parent에 있으면,
output을 parent에 추가하고
이 node에 대해 추가 처리를 수행하지 않습니다.
@included 엔트리가 있으면,
임베디드 플래그의 값을
false로 설정한 state의 복사본을 사용하여
알고리즘을 호출합니다.
이때 subjects, frame,
output을 parent로, 그리고 @included를
active property로 전달합니다.
ordered
플래그가 true인 경우 property를 기준으로
사전식 순서로:
true이면,
프로세서는
property에 대한 어떤 값도 output에 추가해서는
MUST NOT 안 되며,
다음 단계들은 건너뜁니다.
@list를 가진
맵이면,
리스트 안의 각 listitem을 순서대로 처리하여
출력 안의 새 리스트 맵에
추가합니다:
true로 설정한 state의 복사본을 사용하여
알고리즘을 호출합니다.
이때 listitem의 @id 값을
새 subjects 배열의
유일한 항목으로,
frame 안의 @list에서 첫 번째 값을
frame으로,
list를 parent로, 그리고 @list를
active property로 전달합니다.
frame이 존재하지 않으면, embed,
explicit 및 requireAll에서 가져온
@embed, @explicit,
@requireAll
프로퍼티를 가진 새 맵을
사용하여 새 frame을 만듭니다.
@list에 추가합니다.
true로 설정한 state의 복사본을 사용하여
알고리즘을 호출합니다.
이때 item의 @id 값을
새 subjects 배열의 유일한 항목으로,
frame 안의 property에서 첫 번째 값을
frame으로,
output을 parent로, 그리고 property를
active property로 전달합니다.
frame이 존재하지 않으면,
embed, explicit 및 requireAll에서
가져온 @embed, @explicit 및
@requireAll 프로퍼티를 가진
새 맵을 사용하여
새 frame을 만듭니다.
true의
@omitDefault를 포함하거나,
@omitDefault를 포함하지 않고
state 안의 기본값 생략 플래그 값이
true이면,
property와 property frame을 건너뜁니다.
@preserve 프로퍼티와 값을 가진
새 맵과 함께
property를 output에 추가합니다.
그 값은 존재하는 경우 frame 안의 @default 값의
복사본이고, 그렇지 않으면 문자열 @null입니다.
@reverse가 있으면,
frame 안의 @reverse 값인 각
reverse property 및 sub frame에 대해:
@reverse 프로퍼티를 output 안에 만듭니다.
@id를
가진 노드
참조를 포함하는 경우:
프레임 매칭 알고리즘은 프레이밍 알고리즘의 일부로 사용되어
특정 노드 객체가
프레임에 설정된 기준과
매칭되는지 결정합니다.
일반적으로 노드 객체는 @type, @id 기준 매칭을 충족하거나,
여러 서로 다른 프로퍼티 중 하나와 매칭되는 경우 프레임과 매칭됩니다.
모두 요구 플래그가
true이면, 프레임이 매칭되려면 모든 프로퍼티가 기본값을 가지거나
매칭되어야 합니다.
매칭은 확장된 노드 객체에서 수행되므로, 모든 값은 배열의 형태가 됩니다.
노드 매칭은 JSON 구성 요소의 조합을 사용하여 임의, 없음, 또는 일부 특정 값과 매칭합니다:
[] (match none)[프레임 객체]
(node pattern)[IRI+]
@type과 @id 기준 매칭에 사용되며,
나열된 IRI 중 임의의 것과 매칭할 수 있게 합니다.
[값 객체]
(value pattern)@value, @type, 및 @language의 값은
하나 이상의 문자열 값의
배열일 수도 있으며,
@language의 값은 대소문자를 구분하지 않고 비교됩니다.
{}
(wildcard)
프레임 매칭 알고리즘은 프레이밍 상태 (state), 평탄화된 주어들의 맵에서 매칭할 주어들의 리스트 (subjects), 매칭 대상인 프레임 (frame), 및 requireAll 플래그를 받고, subjects 안의 각 node를 다음과 같이 필터링하여 매칭된 주어들의 리스트를 반환합니다:
@id와 @type을 포함한 모든 프로퍼티가 매칭 시 고려되지만,
다른 키워드는 고려되지 않습니다.
@id이면:
@id 프로퍼티가
values 안의 임의의 IRI를 포함하면
property가 매칭됩니다.
@type 프로퍼티가
wildcard
또는
match none이면
property가 매칭됩니다.
@id 프로퍼티를 갖도록 보장합니다.
따라서 "@id": [] 패턴은 어떤 노드 객체와도
매칭되지 않습니다. "@id": [{}] 패턴은
모든 노드 객체와
매칭되며, frame 안에서 @id 프로퍼티를 전혀 지정하지 않는 것과
동등합니다.
@type이면:
@type 프로퍼티가
values 안의 임의의 IRI를 포함하면
property가 매칭됩니다.
@type 프로퍼티가
wildcard이면
property가 매칭됩니다.
@type 프로퍼티가
match none이면
property가 매칭됩니다.
@type 프로퍼티가
기본 객체이면
property가 매칭됩니다.
@id 또는 @type이고 매칭되지 않으면,
node는 매칭되지 않으며, 처리가 종료됩니다.
@default 엔트리만 포함하는
맵이며,
node 안의 다른 어떤 프로퍼티가 기본값이 아닌 매칭을 가지면
property가 매칭됩니다.
match none이면,
node는 매칭되지 않으며 추가 매칭은 중단됩니다.
wildcard이면
property가 매칭됩니다.
value pattern (value pattern)이면:
프로퍼티 매칭은 값 매칭 알고리즘을 사용해 결정됩니다.
값 패턴 매칭 알고리즘은 프레이밍 및
프레임 매칭 알고리즘의 일부로 사용됩니다. 값 객체는
@value, @type, 및 @language에 대한
및
match none
패턴을 사용하고, 각 값
객체 프로퍼티에 대해 배열 형식을 사용해
정의된 값 집합과 특정 값이
매칭될 수 있도록 허용함으로써 값 패턴과 매칭됩니다.
wildcard
알고리즘은 value pattern (pattern)과
값 객체
(value)를
매개변수로 받습니다.
Value는 다음 알고리즘을 사용해 pattern과 매칭됩니다:
@value,
@type, 및 @language 값으로 두거나, 존재하지 않으면
null로 둡니다.
이때 @language의 값은 소문자로 정규화됩니다.
@value,
@type, 및 @language 값으로 두거나, 존재하지 않으면
null로 둡니다.
이때 @language의 문자열 값은 소문자로 정규화됩니다.
wildcard이거나,
다음 조건을 만족할 때 Value는 pattern과 매칭됩니다:
wildcard이며,
그리고
wildcard,
또는 null이거나, 또는 t1이 null이고 t2가
null 또는
match none이며,
그리고
wildcard,
또는 null이거나, 또는 l1이 null이고 l2가
null 또는
match none입니다.
이 API는 개발자가 JSON-LD 데이터를 다양한 프로그래밍 언어에서 더 쉽게 다룰 수 있는 여러 출력 형식으로 변환할 수 있게 하는 깔끔한 메커니즘을 제공합니다. 프로그래밍 환경에서 JSON-LD API가 제공되는 경우, 다음 API 전체가 구현되어야 MUST 합니다.
JSON-LD API는 다양한 지연 연산의 결과를 표현하기 위해 Promises를 사용합니다. Promises는 [ECMASCRIPT]에 정의되어 있습니다. 명세 안에서의 일반적인 사용은 [promises-guide]에서 확인할 수 있습니다. 구현은 일반적으로 같은 메서드, 인수 및 옵션을 사용하고 같은 결과를 반환하는 한, 해당 네이티브 환경에 적합한 방식으로 구현하기로 선택할 수 MAY 있습니다.
인터페이스는 [Exposed=JsonLd]로 표시되며,
이는 전역 인터페이스를 만듭니다.
JSON-LD에서 WebIDL을 사용하는 것은 브라우저 내 사용에 적합하지만,
그러한 사용으로 제한되지는 않습니다.
JSON-LD 프로세서 인터페이스는 개발자가 JSON-LD 변환 메서드에 접근하는 데 사용하는 고수준 프로그래밍 구조입니다. 아래 정의는 JSON-LD 1.1 API [JSON-LD11-API]에 정의된 인터페이스의 실험적 확장입니다.
구현이 입력 매개변수를 수정하지 않는다는 점을 강조하는 것이 중요합니다.
오류가 감지되면, Promise는
적절한 를 가진
codeJsonLdFramingError로 거부되고
처리는 중단됩니다.
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>frame(JsonLdInputinput,JsonLdInputframe, optionalJsonLdOptionsoptions = {}); };
JsonLdProcessor 인터페이스의
frame()
메서드는
frame을
사용해 주어진 input을
프레이밍 알고리즘의 단계에 따라
프레이밍합니다:
Promise promise를
만들고 반환합니다. 그런 다음
다음 단계들이 비동기적으로 실행됩니다.ordered를 false로
설정합니다.
true로 설정해 사용하고,
그리고ordered를 false로
설정합니다.
@context 값으로 설정합니다. 존재하지 않으면
새 빈 컨텍스트로
설정합니다.documentUrl로
설정하고, 그렇지 않으면 options에서 온
base 옵션으로
설정합니다.
null로 설정됩니다.
@graph로 확장되는
최상위 프로퍼티가 있으면, options에 대해
frameDefault
옵션을 값 true로 설정합니다.
@once를 가진 embed로 설정합니다.
false로 설정합니다.
false를 가진 explicit로 설정합니다.
false를 가진 requireAll로 설정합니다.
false를 가진 omitDefault로 설정합니다.
frameDefault가
true이면 @default로,
그렇지 않으면 false로 설정합니다.
@merged이면,
graph map에 @merged에 대한 엔트리를 추가하고,
그 값을 graph map을 전달해
노드 맵 병합
알고리즘을 수행한 결과로 설정합니다.
null을 전달합니다.
json-ld-1.0이 아니면,
results 안의 각 노드 객체에서,
엔트리 값이
results 안의 어떤 프로퍼티 값에서도 한 번만 나타나는
빈 노드
식별자인
@id 엔트리를
제거합니다.
@preserve인 모든
엔트리를 재귀적으로
해당 엔트리의 첫 번째 값으로 교체합니다.
@preserve를 포함하는 맵을 사실상 그 값으로 교체합니다.
null,
element로 results,,
그리고 options에서 온
compactArrays
및 ordered
플래그를 사용해
compact
메서드를 사용한 결과로 compacted results를 설정합니다.
@null 값을 재귀적으로
null로 교체합니다.
교체 후 배열이 null 값만
포함하면
그 값을 제거하여
빈 배열로 남깁니다.
omitGraph가 false이고
compacted results가 최상위 @graph 엔트리를 가지지 않거나, 그 값이
배열이 아니면,
compacted results를 수정하여 compacted results의
@context가 아닌 엔트리를
@graph의 배열 값 안에
포함된
맵 안에 배치합니다.
omitGraph가 true이면,
최상위 @graph 엔트리는 여러
노드 객체를
포함하는 데만 사용됩니다.
input의 데이터를 재배열할 때 사용할 프레임;
맵 형식이거나
IRI일 수 있습니다.
JsonLdOptions 타입은 기본 옵션 값을
정의합니다.
WebIDLtypedef record<USVString, any> JsonLdRecord;
JsonLdRecord는
JSON 객체를 파싱한 결과인
임의의 맵
엔트리를 포함하는 데 사용되는
맵의 정의입니다.
WebIDLtypedef (JsonLdRecordor sequence<JsonLdRecord> or USVString or RemoteDocument)JsonLdInput;
JsonLdInput 인터페이스는
JsonLdRecord,
JsonLdRecords의
sequence,
유효한 JSON 문서를 가져오기 위해 역참조될 수 있는
IRI를 나타내는
문자열,
또는 이미 역참조된 RemoteDocument일 수 있는
입력 값을 가리키는 데 사용됩니다.
값이 JsonLdRecord 또는 JsonLdRecords의 시퀀스인 경우,
값들은 그에 대응하는 내부 표현 값으로 취급됩니다.
여기서 JsonLdRecord는
맵과 동등하며,
JsonLdRecords의 시퀀스는
맵들의
배열과 동등합니다.
맵 엔트리는
[INFRA]의 대응 항목으로 변환됩니다.
JsonLdFramingError 타입은
처리 오류를 보고하는 데 사용됩니다.
WebIDLdictionaryJsonLdFramingError{JsonLdFramingErrorCodecode; USVString?message= null; }; enumJsonLdFramingErrorCode{ "invalid frame", "invalid @embed value" };
JSON-LD 프레이밍은 JSON-LD 1.1 처리 알고리즘 및 API JSON-LD 1.1 API [JSON-LD11-API]에 정의된 오류 인터페이스와 코드를 확장합니다.
codemessageJsonLdFramingErrorCode는
유효한 JSON-LD 프레이밍 오류 코드들의 컬렉션을 나타냅니다.
invalid @embed value@embed의 값이 객체
임베드 플래그에 대해 인식되는 값이 아닙니다.
invalid frame이 섹션은 JSON-LD API 안에서 사용되는 데이터타입 정의를 설명합니다.
JsonLdContext 타입은 맵, IRI를 나타내는 문자열, 또는 맵과 문자열의 배열일 수 있는 값을 가리키는 데 사용됩니다.
JSON-LD 1.1 API [JSON-LD11-API]의 JsonLdContext 정의를 참조하십시오.
JsonLdOptions 타입은
JsonLdProcessor 메서드에
다양한 옵션을 전달하는 데 사용됩니다.
WebIDLdictionaryJsonLdOptions{ (JsonLdEmbedor boolean)embed= "@once"; booleanexplicit= false; booleanomitDefault= false; booleanomitGraph; booleanrequireAll= false; booleanframeDefault= false; booleanordered= false; }; enumJsonLdEmbed{ "@always", "@once", "@never" };
JSON-LD 1.1 API [JSON-LD11-API]에 정의된 옵션에 더해, 프레이밍은 다음 추가 옵션을 정의합니다:
embedtrue는 플래그를
@once로 설정하고, 값 false는 플래그를
@never로 설정합니다.
explicitframeDefaultomitDefaultomitGraphjson-ld-1.0인 경우 false로 설정되고, 그렇지 않으면
true로 설정됩니다.
orderedtrue로 설정되면, 표시된 특정 알고리즘 처리 단계가
사전식 순서로 정렬됩니다.
false이면 처리에서 순서가 고려되지 않습니다.
requireAllJsonLdEmbed는
옵션의 값을 열거합니다:
embed
@always@never@once
@embed와 객체 임베드 플래그
둘 다 지정되지 않은 경우의 기본값입니다.
JSON-LD 1.1 API [JSON-LD11-API]의 JsonLdOptions 정의를 참조하십시오.
§ A. IANA 고려 사항의 보안 고려 사항을 참조하십시오.
[JSON-LD11]의 개인정보 보호 고려 사항을 참조하십시오.
이 섹션은 단지 표준 커뮤니티 검토를 위해 포함되었으며, 이 명세가 W3C 권고안이 되면 Internet Engineering Steering Group에 제출될 예정입니다.
JSON-LD 프레임은 필수 profile 매개변수와 함께
[JSON-LD11]에 설명된 같은 MIME 미디어 타입을
사용합니다.
profile리소스를 JSON-LD 프레임으로 식별하는 단일 URI. 프로파일은 프로파일 지식 없이 처리될 때 리소스 표현의 의미를 변경하지 않으므로, 프로파일된 리소스를 알고 있는 클라이언트와 알지 못하는 클라이언트 모두가 같은 표현을 안전하게 사용할 수 있습니다.
http://www.w3.org/ns/json-ld#framedJSON-LD 프레임 문서를 제공하고 요청할 때는
http://www.w3.org/ns/json-ld#framed를 사용해야
SHOULD 합니다.
JSON-LD는 방향 그래프를 위한 순수 데이터 교환 형식이 되도록 의도되었으므로,
직렬화는 파싱을 위해 JavaScript의 eval() 함수 같은
코드 실행 메커니즘을 통과해서는
SHOULD NOT 안 됩니다.
(유효하지 않은) 문서는 실행될 경우 예기치 않은 부작용을 일으켜
시스템 보안을 손상시킬 수 있는 코드를 포함할 수 있습니다.
JSON-LD 문서를 처리할 때, 원격 컨텍스트에 대한 링크는 일반적으로 자동으로 따라가게 되며, 그 결과 각 파일에 대한 사용자의 명시적 요청 없이 파일이 전송됩니다. 원격 컨텍스트가 제3자에 의해 제공되는 경우, 이로 인해 사용 패턴이나 유사한 정보를 수집할 수 있어 개인정보 보호 우려로 이어질 수 있습니다. JSON-LD 1.1 처리 알고리즘 및 API 명세 [JSON-LD11-API]에 정의된 API 같은 특정 구현은 이 동작을 제어하기 위한 세분화된 메커니즘을 제공할 수 있습니다.
HTTP 같은 비보안 연결을 통해 웹에서 로드되는 JSON-LD 컨텍스트는 공격자에 의해 변경될 위험이 있으며, 그 결과 JSON-LD 활성 컨텍스트가 보안을 손상시킬 수 있는 방식으로 수정될 수 있습니다. 중요한 목적을 위해 원격 컨텍스트에 의존하는 모든 애플리케이션은 시스템이 이를 사용하도록 허용하기 전에 원격 컨텍스트를 검토하고 캐시하는 것이 권장됩니다.
JSON-LD는 긴 IRI를 짧은 용어로 대체할 수 있게 하므로, JSON-LD 문서는 처리될 때 상당히 확장될 수 있으며, 최악의 경우 결과 데이터가 수신자의 모든 리소스를 소비할 수도 있습니다. 애플리케이션은 모든 데이터를 적절히 의심스럽게 다뤄야 합니다.
JSON-LD는 사용할 수 있는 IRI 스킴에 제한을 두지 않고, 어휘 상대 IRI는 IRI 해석이 아니라 문자열 연결을 사용하므로, 역참조될 경우 악의적으로 사용될 수 있는 IRI를 구성하는 것이 가능합니다.
application/ld+json과 함께 사용되는 프래그먼트 식별자는 RDF 1.1 개념과 추상 구문 [RDF11-CONCEPTS]에 따라 RDF 구문에서와 같이 처리됩니다.
이 섹션은 비규범입니다.
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>frame(JsonLdInputinput,JsonLdInputframe, optionalJsonLdOptionsoptions = {}); }; typedef record<USVString, any>JsonLdRecord; typedef (JsonLdRecordor sequence<JsonLdRecord> or USVString or RemoteDocument)JsonLdInput; dictionaryJsonLdFramingError{JsonLdFramingErrorCodecode; USVString?message= null; }; enumJsonLdFramingErrorCode{ "invalid frame", "invalid @embed value" }; dictionaryJsonLdOptions{ (JsonLdEmbedor boolean)embed= "@once"; booleanexplicit= false; booleanomitDefault= false; booleanomitGraph; booleanrequireAll= false; booleanframeDefault= false; booleanordered= false; }; enumJsonLdEmbed{ "@always", "@once", "@never" };
이 섹션은 비규범입니다.
다음은 발행 당시 열려 있던 이슈 목록입니다.
클래스 범위 프레이밍을 허용합니다.
같은 프레임 문서 안의 여러 프레임?
관계 재프레이밍.
이 섹션은 비규범입니다.
@embed)는 객체 임베딩을 더 잘 제어하기 위해
서로 다른 값을 가질 수 있습니다.wildcard
및
match none은
타입과 프로퍼티 값에 사용할 수 있습니다.
@value, @type, 및 @language의 값은
wildcard
및
match none을
사용할 수 있고, 매칭할 특정 문자열 집합(예: 특정 언어 집합)도 사용할 수 있습니다.
@reverse를 지원합니다.@id에 대해
하나 이상의 값을 사용할 수 있습니다.json-ld-1.0이 아니면,
해당 @id에 대해서만 사용되는 빈 노드 식별자를 가진
@id 엔트리는
제거됩니다.
@link 및 인메모리 객체 연결에 대한 지원을 제거했습니다.omitDefault API 옵션 및/또는
현재 처리 모드를 통해
제어됩니다.
false인
ordered
옵션을 추가합니다. 이는 알고리즘에서
맵
엔트리 키의 반복을 제어하는 데 사용됩니다. 이전에는
알고리즘이 항상 그러한 순서를 요구했습니다. 테스트 결과를
평가하기 위한 지침도 이에 맞게 업데이트되었습니다.
@reverse를 사용하거나 @reverse로 정의된 용어를 사용해
역방향 프로퍼티를 포함할 수 있으며, 이는 프레임이 대상으로 하는 노드를 참조하는
노드에 역방향 참조가 생성되도록 할 수 있습니다.이 섹션은 비규범입니다.
false인
ordered
옵션을 추가합니다. 이는 알고리즘에서
맵
엔트리 키의 반복을 제어하는 데 사용됩니다. 이전에는
알고리즘이 항상 그러한 순서를 요구했습니다. 테스트 결과를
평가하기 위한 지침도 이에 맞게 업데이트되었습니다.
application/ld-frame+json에서
필수 profile 매개변수를 가진 application/ld+json으로 변경되었습니다.
@id 및 @type을 포함한 모든 프로퍼티가 존재해야 합니다.
@first 및 @last 값을 제거하고
@once로 대체했습니다.
json-ld-1.0으로 설정되지 않는 한
암시적으로 json-ld-1.1입니다.@type은 기본값을 가질 수 있으며, 이는
프레임 매칭 목적으로는 사용되지 않습니다.이 섹션은 비규범입니다.
JsonLdProcessor 처리 단계로 이동했습니다.
이 섹션은 비규범입니다.
[Exposed=(Window,Worker)]를 [Exposed=JsonLd]로 변경했습니다.
이는 검토 제안에 대응하여 브라우저가 아닌 사용을 위해
JsonLdProcessor 인터페이스를
노출하기 위해 전역 인터페이스로 선언됩니다.
이 섹션은 비규범입니다.
편집자들은 이 명세의 작성과 편집에 중요한 기여를 한 다음 개인들에게 특별히 감사를 표합니다:
또한, 발행 당시 다음 사람들이 워킹 그룹의 구성원이었습니다:
메일링 리스트와 주간 원격 회의를 통해 많은 기술적 이슈를 처리한 JSON-LD 커뮤니티 그룹 참가자들에게도 큰 감사를 표합니다: Chris Webber, David Wood, Drummond Reed, Eleanor Joslin, Fabien Gandon, Herm Fisher, Jamie Pitts, Kim Hamilton Duffy, Niklas Lindström, Paolo Ciccarese, Paul Frazze, Paul Warren, Reto Gmür, Rob Trainer, Ted Thibodeau Jr., and Victor Charpenay.