게시 이후 보고된 오류나 문제는 정오표를 확인하십시오.
다음도 참고하십시오: 번역.
이 문서는 다음 비규범 형식으로도 제공됩니다: EPUB
Copyright © 2010-2020 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
이 명세는 JSON-LD 문서의 프로그래밍 방식 변환을 위한 알고리즘 집합을 정의합니다. 정의된 변환에 따라 데이터를 재구성하면 그 사용이 극적으로 단순해지는 경우가 많습니다. 또한 이 문서는 지정된 알고리즘을 구현하는 개발자를 위한 애플리케이션 프로그래밍 인터페이스(API)를 제안합니다.
이 명세는 JSON-LD 1.0 처리 알고리즘 및 API [JSON-LD10-API]에 정의된 기능의 상위 집합을 설명하며, 별도로 명시된 경우를 제외하고, 이 명세에서 설명하는 알고리즘은 JSON-LD 1.0 [JSON-LD10]을 사용하여 작성된 문서와 완전히 호환됩니다.
이 절은 발행 당시 이 문서의 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 https://www.w3.org/TR/의 W3C 기술 보고서 색인에서 확인할 수 있습니다.
이 문서는 JSON-LD 워킹 그룹이 개발했으며, JSON-LD 커뮤니티 그룹의 최종 보고서에서 파생되었습니다.
이 문서에서 설명하는 기능을 시연할 수 있는 라이브 JSON-LD 플레이그라운드가 있습니다.
이 명세는 JSON-LD 1.0 처리 알고리즘 및 API [JSON-LD10-API] 명세를 대체하도록 의도되었습니다.
이 문서는 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]에 자세히 설명되어 있습니다. 또한 모든 알고리즘이 사용하는 기본 구문인 JSON-LD 1.1 구문 명세 [JSON-LD11]에 정의된 JSON-LD 구문도 이해해야 합니다. API와 그것이 프로그래밍 환경에서 어떻게 동작하도록 의도되었는지 이해하려면 JavaScript 프로그래밍 언어 [ECMASCRIPT]와 WebIDL [WEBIDL]에 대한 실무 지식이 있으면 유용합니다. JSON-LD가 RDF에 어떻게 매핑되는지 이해하려면 기본 RDF 개념 [RDF11-CONCEPTS]에 익숙하면 도움이 됩니다.
이 절은 비규범입니다.
이 문서는 JSON에서 Linked Data를 직렬화하는 방법에 대한 상세 명세입니다. 이 문서는 주로 다음 독자를 대상으로 합니다:
동반 문서인 JSON-LD 1.1 명세 [JSON-LD11]는 JSON-LD 문서의 문법을 명세합니다.
이 명세의 기본을 이해하려면 먼저 JSON에 익숙해야 하며, 이는 [RFC8259]에 자세히 설명되어 있습니다.
이 문서는 JSON-LD 1.0 버전 이후의 변경 사항을 강조 표시할 수 있습니다. 변경 사항을 보려면 를 선택하십시오.
이 절은 비규범입니다.
이 명세의 개발에 참여할 수 있는 방법은 여러 가지가 있습니다:
이 절은 비규범입니다.
이 명세에서는 다음 타이포그래피 규약을 사용합니다:
markup마크업 정의 참조 마크업 외부 정의 참조참고는 연한 초록색 상자에 초록색 왼쪽 테두리와 초록색의 "참고" 머리말로 표시됩니다. 참고는 항상 참고 정보입니다.
예제는 연한 카키색 상자에 카키색 왼쪽 테두리와 번호가 붙은 카키색 "예제" 머리말로 표시됩니다. 예제는 항상 참고 정보입니다. 예제의 내용은 고정폭 글꼴로 표시되며 구문 색상이 적용될 수 있습니다. 예제에는 탭 탐색 버튼이 있을 수 있으며 예제를 다른 표현으로 변환한 결과를 보여줄 수 있습니다.
이 문서는 외부 명세에 정의된 다음 용어를 사용하며, JSON-LD에 특화된 용어를 정의합니다.
ECMAScript 언어 명세 [ECMASCRIPT], JavaScript Object Notation (JSON) 데이터 교환 형식 [RFC8259], Infra Standard [INFRA], 및 Web IDL [WEBIDL]에서 가져온 용어
true 및 false 값.
내부 표현에서 JSON 객체는 키/값 쌍이 있는 엔트리로 구성된 맵 ( [INFRA] 참조)으로 설명됩니다.
애플리케이션 프로그래밍 인터페이스에서, 맵은 [WEBIDL] record를 사용하여 설명됩니다.
@context 안의 맵 엔트리에서 값,
또는 값의 @id가 null이면,
용어와 IRI의 연결을
명시적으로 분리합니다.
JSON-LD
문서 본문의 맵
엔트리 중
값이 null인 것은 그 맵 엔트리가 정의되지 않은 것과
같은 의미를 가집니다.
확장된 형식에서 @value, @list, 또는 @set이
null로 설정되면,
전체 JSON 객체가
무시됩니다.
true, 또는 false입니다.
국제화 자원 식별자(IRI) [RFC3987]에서 가져온 용어
@type의 값,
그리고 어휘 상대적으로 정의된
용어의 값은
기준 IRI가 아니라
어휘
매핑에
상대적으로 해석된다는 점에 유의하십시오.
RDF 1.1 개념과 추상 구문 [RDF11-CONCEPTS], RDF Schema 1.1 [RDF-SCHEMA], 및 Linked Data 설계 이슈 [LINKED-DATA]에서 가져온 용어
_:로 시작하는 식별자가 할당됩니다.
_:로 시작합니다.
rdf:langString인 경우 선택적인
언어
태그를 포함합니다.
@direction 키를 사용하여 설정할 수 있으며,
그 값은 문자열 "ltr", "rtl", 또는
null 중 하나여야 합니다.
규범적 설명은 JSON-LD 1.1의 컨텍스트
정의 절을 참조하십시오.
@language 키를 사용하여 설정할 수 있으며,
그 값은 [BCP47] 언어 코드를 나타내는
문자열 또는
null이어야 합니다.
규범적 설명은 JSON-LD 1.1의 컨텍스트
정의 절을 참조하십시오.
@default 키를 가진
맵입니다.
@graph
엔트리를 가져야 하며,
@id 및 @index
엔트리도 가질 수 있습니다.
단순 그래프
객체는 @id
엔트리를 갖지 않는
그래프
객체입니다.
노드 객체는
@graph
엔트리를 가질 수 있지만,
다른 엔트리를 포함하는 경우
그래프 객체로
간주되지 않음에 유의하십시오.
@graph로만 구성된 최상위 객체도
그래프 객체가
아닙니다.
노드 객체는
다른 프로퍼티를
포함하는 경우 명명된 그래프를 나타낼 수도 있음에 유의하십시오.
규범적 설명은 JSON-LD 1.1의
그래프 객체 절을 참조하십시오.
@container가 @id로 설정된
용어의
맵 값입니다.
id 맵의 값은
노드
객체여야 하며,
그 키는 관련 노드
객체의
@id를 나타내는 IRI로 해석됩니다.
id 맵 안의 값이
@id로 확장되는 키를 포함하는 경우,
그 값은 id 맵 안의
참조 키와
동등해야 합니다.
규범적 설명은 JSON-LD 1.1의 Id Maps
절을 참조하십시오.
@included 또는 @included의 별칭이고
값이 하나 이상의 노드
객체인 것입니다.
규범적 설명은 JSON-LD 1.1의
포함 블록
절을 참조하십시오.
@container가 @index로 설정된
용어의
맵 값이며,
그 값은 다음 타입 중 하나여야 합니다:
문자열,
숫자,
true,
false,
null,
노드
객체,
값
객체,
목록
객체,
집합
객체, 또는
위 가능성 중 0개 이상으로 이루어진
배열.
공식 설명은 JSON-LD 1.1의 Index Maps
절을 참조하십시오.
rdf:JSON인
리터럴입니다.
값 객체
표현에서
@type의 값은 @json입니다.
JSON 리터럴은 유효한 JSON [RFC8259]인
값을 나타냅니다.
규범적 설명은 JSON-LD 1.1의
rdf:JSON 데이터타입 절을 참조하십시오.
true 또는 false,
타입이 지정된
값,
또는 언어 태그가 붙은
문자열입니다.
이는 RDF
리터럴을 나타냅니다.
@container가 @language로 설정된
용어의
맵 값이며,
그 키는 [BCP47] 언어 코드를 나타내는
문자열이어야
하고
값은 다음 타입 중 하나여야 합니다:
null,
문자열,
또는
위 가능성 중 0개 이상으로 이루어진
배열.
규범적 설명은 JSON-LD 1.1의 Language
Maps
절을 참조하십시오.
@list 키를 가진
맵입니다.
@index 키도 가질 수 있지만, 다른
엔트리는 가질 수 없습니다.
규범적 설명은 JSON-LD 1.1의 목록과 집합
절을 참조하십시오.
@context 키워드를 통해 지정되는
맵으로 명시된
컨텍스트.
@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
엔트리를 사용하는
확장된 용어
정의의 일부입니다. 이는
임베디드
컨텍스트와
같은 형식을 가집니다.
용어가 타입으로 사용되면 타입 범위
컨텍스트를 정의하고,
프로퍼티로 사용되면 프로퍼티 범위
컨텍스트를 정의합니다.
@set
엔트리를 가진
맵입니다.
@index 키도 가질 수 있지만, 다른
엔트리는 가질 수 없습니다.
규범적 설명은 JSON-LD 1.1의 목록과 집합
절을 참조하십시오.
@container가 @type로 설정된
용어의
맵 값이며,
그 키는 관련 노드
객체의
@type을 나타내는
IRI로 해석됩니다.
값은 노드 객체
또는 노드 객체의
배열이어야 합니다.
값이 @type으로 확장되는
용어를 포함하는 경우,
확장할 때 그 값은 맵 값과 병합됩니다.
규범적 설명은 JSON-LD 1.1의 Type Maps
절을 참조하십시오.
@value
엔트리를 가진
맵입니다.
규범적 설명은 JSON-LD 1.1의 값 객체
절을 참조하십시오.
@vocab 키를 사용하여 설정되며,
그 값은 IRI,
축약
IRI,
용어, 또는
null이어야 합니다.
규범적 설명은 JSON-LD 1.1의 컨텍스트
정의 절을 참조하십시오.
다음 용어는 특정 알고리즘 안에서 사용됩니다.
false인 as array 플래그가 포함될 수 있습니다.
true이고,
reverse 플래그의 기본값은 false입니다.
false이고,
vocab 플래그의 기본값은 true입니다.
JSON-LD 1.1 구문 명세 [JSON-LD11]에 정의된 키워드 외에도, 이 명세는 JSON-LD 1.1 Framing [JSON-LD11-FRAMING]을 지원하기 위해 추가 키워드 하나를 추가합니다:
@preserve이 절은 비규범입니다.
이 문서에서 사용되는 예제의 출력은 필요상 JSON으로 직렬화된 형식으로 표시됩니다. 알고리즘은 JSON-LD 내부 표현에 대한 연산을 설명하지만, 예제로 표시될 때에는 JSON 직렬화가 사용됩니다. 특히, 내부 표현에서 사용하는 맵은 JSON 객체를 사용하여 표현됩니다.
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"knows": "http://xmlns.com/foaf/0.1/knows"
},
"@id": "http://me.markus-lanthaler.com/",
"name": "Markus Lanthaler",
"knows": [
{
"name": "Dave Longley"
}
]
}
내부
표현에서 위 예제는
@context, @id, name, 그리고 knows
엔트리를 포함하는
맵이며,
값은 맵,
문자열,
또는 맵이나 문자열 값의
배열입니다.
JSON 직렬화에서는 JSON 객체가 맵에
사용되며,
배열과 문자열은 많은 프로그래밍 언어에서 공통적으로 사용하는
규약을 사용해 직렬화됩니다.
이 절은 비규범입니다.
JSON-LD 1.1 구문 명세 [JSON-LD11]는 JSON으로 Linked Data를 표현하기 위한 구문을 정의합니다. 이 구문을 사용하여 Linked Data를 표현하는 방법은 둘 이상이므로, 특정 애플리케이션이 더 쉽게 소비할 수 있도록 JSON-LD 문서를 변환할 수 있는 것이 유용한 경우가 많습니다.
이러한 알고리즘을 JSON 이외의 구문에도 적용할 수 있도록, 알고리즘은 JSON-LD 내부 표현에서 동작합니다. 이는 JSON 문서가 나타내는 데이터를 설명하기 위해 배열, 맵, 문자열, 숫자, 불리언, 그리고 null이라는 일반 개념을 사용합니다. 알고리즘은 이 내부 표현을 대상으로 동작하며, API 진입점은 구체 표현과 내부 표현 사이의 변환을 담당합니다.
JSON-LD는 컨텍스트를 사용하여 Linked Data를 특정 개인이나 애플리케이션에 특별히 맞춰진 방식으로 표현할 수 있게 합니다. 컨텍스트를 제공함으로써, JSON 데이터는 특정 개인이나 애플리케이션에 자연스럽게 맞는 방식으로 표현되는 동시에, 해당 데이터가 전역적 규모에서 어떻게 이해되어야 하는지도 표시할 수 있습니다. 자신과 다른 컨텍스트를 사용해 생성된 데이터를 사람이나 애플리케이션이 공유하려면, JSON-LD 프로세서는 문서를 한 컨텍스트에서 다른 컨텍스트로 변환할 수 있어야 합니다. JSON-LD 프로세서가 상상 가능한 모든 컨텍스트 전환 시나리오마다 특정 코드를 작성하도록 요구하는 대신, 임의의 컨텍스트를 제거할 수 있는 단일 알고리즘을 명세하는 것이 훨씬 쉽습니다. 마찬가지로, 이후에 임의의 컨텍스트를 적용하는 다른 알고리즘도 명세할 수 있습니다. 이 두 알고리즘은 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로 설정하여 사용할 것을 권장합니다.
이 문서에서 논의하는 변환에는 네 가지 주요 유형이 있습니다: 확장, 축약, 평탄화, 그리고 RDF 직렬화/역직렬화입니다.
이 절은 비규범입니다.
컨텍스트를 제거하는 알고리즘은 확장이라고 합니다. JSON-LD 문서에 다른 변환을 수행하기 전에, 그 문서에서 임의의 컨텍스트를 제거하고 데이터 구조를 더 규칙적으로 만드는 것이 가장 쉽습니다.
컨텍스트와 데이터 구조화가 동일한 데이터에 어떻게 영향을 주는지 이해하기 위해, 다음은 용어만 사용하며 상당히 축약된 JSON-LD 예제입니다:
다음 입력 예제는 하나의 IRI를 사용하여 프로퍼티를 표현하고, 맵을 사용하여 값을 캡슐화하지만, 나머지 정보는 그대로 둡니다.
두 입력 모두 유효한 JSON-LD이며, 둘 다 동일한 정보를 나타낸다는 점에 유의하십시오. 차이는 컨텍스트 정보와 사용된 데이터 구조에 있습니다. JSON-LD 프로세서는 컨텍스트를 제거하고 확장을 사용하여 데이터를 더 규칙적으로 만들 수 있습니다.
확장에는 두 가지 중요한 목표가 있습니다:
문서에서 모든 컨텍스트 정보를 제거하는 것과, 모든 값을 규칙적인 형식으로
표현되게 하는 것입니다. 이러한 목표는 모든 엔트리
키를
IRI로 확장하고,
모든 값을 확장 형식의
배열로 표현함으로써
달성됩니다. 확장 형식은
JSON-LD에서 값을 표현하는 가장 장황하고 규칙적인 방식입니다. 문서의 모든 컨텍스트
정보는 대신 각 값에 로컬로 저장됩니다.
위 예제에 대해 확장 알고리즘
(expand())
작업을 실행하면 다음 출력이 생성됩니다:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
위 예제는 확장 알고리즘 출력의 JSON-LD 직렬화이며, 여기서 알고리즘이 사용하는 맵은 JSON 객체로 대체됩니다.
위 출력에서는 모든 컨텍스트 정의가 제거되었고, 모든 용어와 축약 IRI가 절대 IRI로 확장되었으며, 모든 JSON-LD 값이 확장 형식의 배열로 표현되어 있음에 유의하십시오. 출력은 더 장황하고 사람이 읽기 어렵지만, 매우 규칙적인 구조 덕분에 JSON-LD 처리를 더 쉽게 해 주는 기준선을 확립합니다.
이 절은 비규범입니다.
확장이 주어진 입력에서 컨텍스트를 제거하는 반면, 축약의 주요 기능은 반대 작업을 수행하는 것입니다. 즉, 주어진 입력을 특정 컨텍스트에 따라 표현하는 것입니다. 축약은 정보가 특정 개인이나 애플리케이션에 맞게 표현되는 방식을 특별히 조정하는 컨텍스트를 적용합니다. 이는 데이터를 애플리케이션별 용어로 표현함으로써 JSON 또는 JSON-LD를 소비하는 애플리케이션을 단순화하고, 사람이 데이터를 더 쉽게 읽을 수 있게 합니다.
축약은 개발자가 제공한 컨텍스트를 사용하여 IRI를 용어 또는 축약 IRI로 줄이고, 확장 형식으로 표현된 JSON-LD 값을 문자열이나 숫자 같은 단순한 값으로 만듭니다.
예를 들어, 다음과 같은 확장된 JSON-LD 입력 문서가 있다고 가정합니다:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
또한, 개발자가 제공한 다음 JSON-LD 컨텍스트가 있다고 가정합니다:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"homepage": {
"@id": "http://xmlns.com/foaf/0.1/homepage",
"@type": "@id"
}
}
}
위에 제공된 컨텍스트를 사용하여 위에 제공된 JSON-LD 입력 문서에 대해
축약 알고리즘
(compact())
작업을 실행하면 다음 출력이 생성됩니다:
위 예제는 축약 알고리즘 출력의 JSON-LD 직렬화이며, 여기서 알고리즘이 사용하는 맵은 JSON 객체로 대체됩니다.
모든 IRI가
컨텍스트에
지정된 대로 용어로 축약되었으며,
그 컨텍스트가 출력에 삽입되었음에 유의하십시오. 축약된 출력은
사람에게 유용할 뿐 아니라, 프로그래밍하기 쉬운 구조를 생성하는 데에도 사용됩니다.
축약은 개발자가 임의의 확장 문서를 애플리케이션별 축약 문서로 매핑할 수 있게 합니다.
위에 제공된 컨텍스트는 http://xmlns.com/foaf/0.1/name을 name으로
매핑했지만, 개발자가 제공하는 다른 임의의 용어로도 매핑할 수 있었습니다.
이 절은 비규범입니다.
확장은 문서가 균일한 구조를 갖도록 보장하지만, 평탄화는 한 단계 더 나아가 데이터의 형태가 결정적이 되도록 보장합니다. 확장된 문서에서는 단일 노드의 프로퍼티가 여러 다른 노드 객체에 걸쳐 흩어져 있을 수 있습니다. 문서를 평탄화하면, 노드의 모든 프로퍼티가 하나의 노드 객체에 수집되고, 모든 빈 노드에는 빈 노드 식별자가 붙습니다. 이는 특정 애플리케이션에서 JSON-LD 데이터를 처리하는 데 필요한 코드를 크게 단순화할 수 있습니다.
예를 들어, 다음 JSON-LD 입력 문서가 있다고 가정합니다:
{
"@context": {
"name": "http://xmlns.com/foaf/0.1/name",
"knows": "http://xmlns.com/foaf/0.1/knows"
},
"@id": "http://me.markus-lanthaler.com/",
"name": "Markus Lanthaler",
"knows": [
{"name": "Dave Longley"}
]
}
축약을 방지하기 위해 컨텍스트를
null로 설정하고
평탄화 알고리즘
(flatten())
작업을 실행하면 다음 문서가 반환됩니다:
위 예제는 평탄화 알고리즘 출력의 JSON-LD 직렬화이며, 여기서 알고리즘이 사용하는 맵은 JSON 객체로 대체됩니다.
위 출력에서 노드의 모든
프로퍼티가 하나의
노드
객체에 수집되고,
"Dave Longley"를 나타내는 빈 노드에
빈 노드
식별자
_:b0가 할당된 방식을 유의하십시오.
사람이 더 쉽게 읽거나 특정 애플리케이션이 더 쉽게 처리할 수 있도록, 평탄화된 문서는 컨텍스트를 전달하여 축약할 수 있습니다. 입력 문서와 동일한 컨텍스트를 사용하면, 평탄화되고 축약된 문서는 다음과 같습니다:
문서를 평탄화하고 축약한 결과는 항상
맵이며,
(직렬화될 때는 JSON 객체로 표현됨),
기본
그래프를 나타내는 @graph
엔트리를 포함한다는 점에
유의하십시오.
이 절은 비규범입니다.
JSON-LD는 [RDF11-CONCEPTS]에 설명된 대로 RDF 데이터를 직렬화하는 데 사용할 수 있습니다. 이는 데이터가 충실도의 손실 없이 임의의 RDF 구문으로 왕복 변환될 수 있음을 보장합니다.
예를 들어, Turtle [TURTLE]로 직렬화된 다음 RDF 입력이 있다고 가정합니다:
@prefix foaf: <http://xmlns.com/foaf/0.1/> . <http://me.markus-lanthaler.com/> foaf:name "Markus Lanthaler" ; foaf:homepage <http://www.markus-lanthaler.com/> .
RDF를 JSON-LD로 직렬화하는 알고리즘을 사용하면 개발자는 이 문서를 확장된 JSON-LD로 변환할 수 있습니다:
[
{
"@id": "http://me.markus-lanthaler.com/",
"http://xmlns.com/foaf/0.1/name": [
{ "@value": "Markus Lanthaler" }
],
"http://xmlns.com/foaf/0.1/homepage": [
{ "@id": "http://www.markus-lanthaler.com/" }
]
}
]
위 예제는 RDF를 JSON-LD로 직렬화하는 알고리즘 출력의 JSON-LD 직렬화이며, 여기서 알고리즘이 사용하는 맵은 JSON 객체로 대체됩니다.
위 출력은 이전 절에서 설명한 기법을 사용하여 쉽게 축약할 수 있음에 유의하십시오. JSON-LD 문서를 JSON-LD를 RDF로 역직렬화하는 알고리즘을 사용하여 다시 RDF로 역직렬화하는 것도 가능합니다.
비규범으로 표시된 절뿐만 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고는 비규범입니다. 이 명세의 그 밖의 모든 것은 규범입니다.
이 문서에서 핵심 단어 MAY, MUST, MUST NOT, 및 SHOULD는 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 합니다.
이 명세에 대한 적합성을 주장할 수 있는 제품에는 두 가지 클래스가 있습니다: JSON-LD 프로세서와 RDF 직렬화기/역직렬화기입니다.
적합한 JSON-LD 프로세서는 이 명세에 정의된 알고리즘과 일관된 방식으로 확장, 축약, 및 평탄화 작업을 수행할 수 있는 시스템입니다.
JSON-LD 프로세서는 MUST NOT 잘못된 형식의 IRI 또는 언어 태그를 수정하려고 시도해서는 안 됩니다. 그러나 유효성 검사 경고를 발생시키는 것은 SHOULD입니다. IRI는 상대 IRI와 절대 IRI 사이의 변환 외에는 수정되지 않습니다.
적합한 RDF 직렬화기/역직렬화기는 이 명세에 정의된 대로 JSON-LD를 RDF로 역직렬화하고 RDF를 JSON-LD로 직렬화할 수 있는 시스템입니다.
processingMode API 옵션을 사용하여 지정하지 않는 한,
처리 모드는
로컬 컨텍스트 안의
@version 엔트리를 사용하여
설정되며,
확장 및 축약을 포함한 알고리즘의 동작에 영향을 줍니다.
한 번 설정되면 다른 처리 모드로 변경하려는 시도는 오류이며,
프로세서는 MUST
processing mode conflict
오류를 생성하고 추가 처리를 중단해야 합니다.
이 명세의 알고리즘은 일반적으로 효율성보다 명확성에 더 중점을 두고 작성되었습니다. 따라서 JSON-LD 프로세서는 이 명세에 제시된 알고리즘을 원하는 방식으로 구현할 수 있습니다. 단, 최종 결과가 이 명세의 알고리즘으로 얻을 수 있는 결과와 구별될 수 없어야 합니다.
키워드에 대한 작업을 설명하는 알고리즘 단계에서, 해당 단계는 키워드 별칭에도 적용됩니다.
구현자는 JSON-LD 테스트 스위트의 테스트 케이스를 성공적으로 통과함으로써 이 명세에 대한 자신의 적합성 수준을 부분적으로 확인할 수 있습니다. 그러나 테스트 스위트의 모든 테스트를 통과한다고 해서 이 명세에 완전히 적합함을 의미하지는 않습니다. 이는 구현이 테스트 스위트에서 테스트한 측면에 적합함을 의미할 뿐입니다.
이 명세는 다음 네임스페이스 접두사를 사용합니다:
| 접두사 | IRI |
|---|---|
| rdf | http://www.w3.org/1999/02/22-rdf-syntax-ns# |
| xsd | http://www.w3.org/2001/XMLSchema# |
다음 절에서는 JSON-LD 컨텍스트를 처리하기 위한 알고리즘을 설명합니다.
JSON-LD 데이터 구조를 처리할 때, 각 처리 규칙은 활성 컨텍스트가 제공하는 정보를 사용하여 적용됩니다. 이 절에서는 활성 컨텍스트를 생성하는 방법을 설명합니다.
활성 컨텍스트는 다음으로 구성됩니다:
"ltr" 또는 "rtl"),각 용어 정의는 다음으로 구성됩니다:
"ltr" 또는 "rtl"),용어 정의는 용어를 IRI에 매핑하는 데만 사용할 수 있는 것이 아니라, 용어를 키워드에 매핑하는 데도 사용할 수 있으며, 이 경우 이를 키워드 별칭이라고 합니다.
처리할 때, active context는
null 역 컨텍스트를 사용하여 초기화되며,
용어
정의,
어휘
매핑, 기본 기준 방향, 또는 기본
언어 없이 초기화됩니다.
처리 중 로컬 컨텍스트를
만나면, 기존
active context를 복제하여 새로운
active context가 생성됩니다. 그런 다음
로컬 컨텍스트의 정보가
새로운 active context에 병합됩니다.
로컬
컨텍스트는
원격 컨텍스트에 대한 참조를 포함할 수 있으므로, 여기에는 그 검색도 포함됩니다.
이 절은 비규범입니다.
먼저 현재 활성 컨텍스트를 복제하여 새로운 활성 컨텍스트 result를 준비합니다. 그런 다음 원래 로컬 컨텍스트의 형식을 배열로 정규화합니다. 로컬 컨텍스트는 맵, 문자열, 또는 이 둘의 조합을 포함하는 배열 형태일 수 있습니다. 마지막으로 로컬 컨텍스트 배열에 포함된 각 컨텍스트를 다음과 같이 처리합니다.
컨텍스트가 문자열인 경우,
이는 원격 컨텍스트에 대한 참조를 나타냅니다.
원격 컨텍스트를 역참조하고, 가져온 JSON-LD 문서의 최상위 객체에 있는
@context 엔트리의 값으로
컨텍스트를 대체합니다.
그러한 엔트리가 없으면,
invalid remote context가
감지된 것입니다. 그렇지 않으면 순환 참조가 없도록 보장하면서
이 알고리즘을 재귀적으로 사용하여 컨텍스트를 처리합니다.
컨텍스트가 맵인
경우,
이는 컨텍스트 정의입니다.
먼저 여섯 가지 특정 키워드
@base,
@direction,
@language,
@propagate,
@version,
및 @vocab을 처리하여
기준 IRI,
기본 기준
방향,
기본
언어,
컨텍스트 전파,
처리 모드,
그리고 어휘
매핑을
갱신합니다.
이들은 로컬 컨텍스트 안의
다른
엔트리가 처리되는 방식에
영향을 주므로, 다른 모든 엔트리보다 먼저
처리됩니다.
컨텍스트가
@import를 포함하는 경우, 이를 가져와 포함하는 컨텍스트에
역병합하여 JSON-LD 1.0 컨텍스트를 JSON-LD 1.1로 업그레이드할 수 있게 합니다.
원격 컨텍스트를 처리할 때는 @base가 무시된다는 점에 유의하십시오.
컨텍스트가 전파되지 않아야 하는 경우, 새로운 노드 객체에 들어갈 때 롤백할 수 있도록 이전 컨텍스트에 대한 참조가 유지됩니다. 기본적으로 타입 범위 컨텍스트를 제외한 모든 컨텍스트는 전파됩니다.
활성
컨텍스트가 초기화될 때,
원래 기준
URL의 값은
사용 가능한 경우 초기 컨텍스트를
포함하는 문서의 원래
에서 초기화되고,
그렇지 않으면
documentUrl API 옵션에서 초기화됩니다.
이는 활성 컨텍스트를
basenull로 설정하여 재설정할 때
원래의 기본 기준 IRI를 유지하는
데 필요합니다.
초기화될 때, 또는
활성
컨텍스트의 엔트리가 변경될 때,
또는 관련 용어 정의가
추가,
변경 또는 제거될 때,
활성
컨텍스트 안의
역
컨텍스트 필드는
null로 설정됩니다.
그런 다음 로컬 컨텍스트 안의 다른 모든 엔트리에 대해, result 안의 용어 정의를 갱신합니다. 로컬 컨텍스트 안의 용어 정의 자체가 용어 또는 축약 IRI를 포함할 수 있으므로, 재귀가 필요할 수 있습니다. 그렇게 할 때 순환 의존성이 없음을 보장해야 하며, 이는 오류입니다. 용어 정의 의존성을 처리한 후, 현재 용어 정의를 갱신하며, 이는 키워드 별칭일 수 있습니다.
마지막으로, result를 새로운 활성 컨텍스트로 반환합니다.
이 알고리즘은 새로운 활성
컨텍스트가
로컬
컨텍스트로 어떻게 갱신되는지를 지정합니다. 알고리즘은 세 개의 필수
및 네 개의 선택적
입력 변수를 받습니다.
필수 입력은
active context,
local context,
그리고 상대 컨텍스트 URL을 해석할 때 사용되는 base URL입니다.
선택적 입력은
배열 remote
contexts로,
기본값은 새 빈 배열이며, 순환 컨텍스트 포함을
감지하는 데 사용됩니다.
override protected는 기본값이 false이고,
보호된 용어의 변경을 허용하는 데 사용되며,
propagate는 기본값이 true이고,
전파되지 않는 컨텍스트와
관련된 용어
정의를 표시하는 데 사용되며,
validate scoped context는 기본값이 true이고,
재귀적일 수 있는 범위
지정 컨텍스트를
검증할 때 재귀를 제한하는 데 사용됩니다.
null로 설정합니다.
@propagate 멤버를 포함하는 객체인 경우,
그 값은 불리언
true 또는
false여야 MUST 하며,
propagate를 그 값으로 설정합니다.
false이고 result에
이전 컨텍스트가 없는 경우,
result 안의
이전 컨텍스트를
active context로 설정합니다.
null인 경우:
loading document failed 오류가
감지되어 처리가 중단됩니다.
false이고,
remote contexts가 이미 context를 포함하는 경우,
context를 더 이상 처리하지 않고 local context 안의 다음
context로 계속합니다.
context overflow
오류가 감지되어 처리가 중단됩니다.
그렇지 않으면 context를 remote contexts에 추가합니다.
@context 엔트리의 값으로 설정합니다.
@context 엔트리만
유지하면 됩니다.LoadDocumentCallback을 사용해
context를 역참조하여 얻은
RemoteDocument로 설정합니다.
이때 url에는
context를 전달하고,
profile 및
requestProfile에는
http://www.w3.org/ns/json-ld#context를 전달합니다.
document를
내부 표현으로 변환할 수 없는 경우
,
loading remote context failed
오류가 감지되어 처리가 중단됩니다.
document에
@context 엔트리가 있는
최상위 맵이 없는 경우,
invalid remote context가
감지되었으며 처리가 중단됩니다.
documentUrl을,
remote contexts의 복사본을,
그리고 validate scoped context를
전달합니다.
invalid local context
오류가 감지되어 처리가 중단됩니다.
@version 엔트리를
가진 경우:
1.1이 아닌 경우,
invalid @version value가
감지되었으며 처리가 중단됩니다.
@version의 값으로
1.1을 사용하는 것은
JSON-LD 1.0 프로세서가 처리를 중단하게 하려는 의도입니다.
이것이 JSON-LD 1.1과 관련되어 있음은 분명하지만,
그 밖에는 Semantic Versioning의 요구 사항을
준수하지 않습니다.
소수부가 0이 아닌
특별한
고려가
숫자의
값을 비교할 때 구현에 필요할 수 있습니다.
json-ld-1.0으로 설정된 경우,
processing mode conflict
오류가 감지되어 처리가 중단됩니다.
@import 엔트리를
가진 경우:
json-ld-1.0인 경우,
invalid context entry
오류가 감지되어 처리가 중단됩니다.
@import의 값이 문자열이 아닌 경우,
invalid @import value
오류가 감지되어 처리가 중단됩니다.
@import의 값을
base URL에 대해 해석한 결과로 import를 초기화합니다.
LoadDocumentCallback을 사용하여
import를 역참조합니다. 이때
url에는
import를 전달하고,
profile 및
requestProfile에는
http://www.w3.org/ns/json-ld#context를 전달합니다.
loading remote context failed
오류가 감지되어 처리가 중단됩니다.
@context 엔트리가 있는
최상위 맵이 없거나,
@context의 값이
컨텍스트
정의가 아닌 경우
(즉, 맵이 아닌 경우),
invalid remote context가
감지되어 처리가 중단됩니다. 그렇지 않으면,
import context를 그 엔트리의 값으로 설정합니다.
@import 엔트리를 가진 경우,
invalid context entry
오류가 감지되어 처리가 중단됩니다.
@base 엔트리를 가지고 있고
remote contexts가 비어 있는 경우, 즉 현재
처리 중인 컨텍스트가 원격 컨텍스트가 아닌 경우:
@vocab 엔트리를 가진 경우:
@vocab 엔트리와 관련된 값으로
초기화합니다.
true를 사용하여
value에 대해
IRI
확장을 수행한 결과로
설정합니다.
그것이 IRI 또는 빈
노드 식별자가 아닌 경우,
invalid vocab mapping
오류가 감지되어 처리가 중단됩니다.
@vocab의 값으로 빈
노드 식별자를 사용하는 것은 더 이상 권장되지 않으며,
향후 JSON-LD 버전에서 제거될 수 있습니다.@language 엔트리를 가진 경우:
@language 엔트리와 관련된 값으로
초기화합니다.
null인 경우,
result에서 모든 기본
언어를 제거합니다.
invalid default language
오류가 감지되어 처리가 중단됩니다.
value가
[BCP47]의
2.2.9절에 따라
올바른
형식이 아닌 경우,
프로세서는 경고를 발생시키는 것이
SHOULD입니다.
@direction 엔트리를 가진 경우:
json-ld-1.0인 경우,
invalid context entry
오류가 감지되어 처리가 중단됩니다.
@direction 엔트리와 관련된 값으로
초기화합니다.
null인 경우,
result에서 모든 기준
방향을 제거합니다.
null, "ltr", 또는
"rtl"이 아닌 경우,
invalid base direction
오류가 감지되어 처리가 중단됩니다.
@propagate 엔트리를 가진 경우:
json-ld-1.0인 경우,
invalid context entry
오류가 감지되어 처리가 중단됩니다.
@propagate의 값이 불리언 true
또는 false가 아닌 경우,
invalid @propagate value
오류가 감지되어 처리가 중단됩니다.
@base,
@direction,
@import,
@language,
@propagate,
@protected,
@version, 또는
@vocab이 아닌 것마다,
용어 정의 생성 알고리즘을 호출합니다.
이때 active context에는 result를,
local context에는 context를, 그리고 key,
defined,
base URL,
있는 경우 context의 @protected
엔트리 값을 protected에,
override protected,
그리고 remote contexts의 복사본을
전달합니다.
이 알고리즘은 컨텍스트 처리 알고리즘에서 호출되며, 로컬 컨텍스트에서 처리 중인 용어에 대해 활성 컨텍스트 안에 용어 정의를 생성합니다.
이 절은 비규범입니다.
용어 정의는 주어진 용어에 대해 주어진 로컬 컨텍스트의 정보를 파싱하여 생성됩니다. 주어진 용어가 축약 IRI인 경우, 자체 용어 정의를 가진 접두사에 의존하여 IRI 매핑을 생략할 수 있습니다. 접두사가 로컬 컨텍스트 안의 엔트리인 경우, 계속하기 전에 재귀를 통해 그 용어 정의가 먼저 생성되어야 합니다. 용어 정의는 다른 용어 정의에 의존할 수 있으므로, 순환 의존성을 감지하기 위한 메커니즘을 사용해야 합니다. 여기서 사용하는 해법은 용어가 이미 정의되었는지 또는 현재 정의되는 과정에 있는지를 추적하는 맵 defined를 사용하는 것입니다. 이 맵은 재귀를 시도하기 전에 확인됩니다.
용어에 대한 모든 의존성이 정의된 후, 주어진 용어에 대한 로컬 컨텍스트 안의 나머지 정보를 고려하여, 해당 IRI 매핑, 컨테이너 매핑, 그리고 타입 매핑, 언어 매핑, 또는 방향 매핑을 그 용어에 대해 생성합니다.
이 알고리즘에는 네 개의 필수 및 다섯 개의 선택적 입력이 있습니다.
필수 입력은
active context,
local context,
term,
그리고 맵 defined입니다.
선택적 입력은
기본값이 null인 base URL,
기본값이 false인 protected,
보호된 용어의 변경을 허용하는 데 사용되며 기본값이 false인
override protected,
순환 컨텍스트 포함을 감지하는 데 사용되며 기본값이 새 빈
배열인
배열 remote
contexts,
그리고 재귀적일 수 있는 범위 지정 컨텍스트를
검증할 때 재귀를 제한하는 데 사용되며 기본값이 true인
validate scoped context입니다.
true인 경우(이는
용어
정의가 이미 생성되었음을 나타냄), 반환합니다. 그렇지 않고
그 값이 false인 경우,
cyclic IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
"")인 경우,
invalid term definition
오류가 감지되었으며 처리가 중단됩니다.
그렇지 않으면, defined의 term 엔트리와 관련된 값을
false로 설정합니다. 이는 용어 정의가
이제 생성 중이지만 아직 완료되지 않았음을 나타냅니다.
@type이고
처리 모드가
json-ld-1.0인 경우,
keyword redefinition 오류가
감지되었으며 처리가 중단됩니다.
이 시점에서
value는 다음 엔트리
중 하나 또는 둘 모두만을 가진 맵이어야
MUST 합니다:
@set인 @container 엔트리.@protected 엔트리.keyword redefinition 오류가
감지되었으며 처리가 중단됨을 의미합니다.
keyword redefinition
오류가 감지되었으며 처리가 중단됩니다.
term이 키워드의 형식을 가지는 경우
(즉, [RFC5234]의
ABNF 규칙 "@"1*ALPHA와 일치하는 경우),
반환합니다. 프로세서는 경고를 생성하는 것이
SHOULD입니다.
null인 경우,
이를 키가 @id이고 값이 null인 단일
엔트리로 구성된
맵으로 변환합니다.
@id이고 값이 value인 단일
엔트리로 구성된
맵으로 변환합니다.
simple term을 true로 설정합니다.
invalid term definition
오류가 감지되었으며 처리가 중단됩니다.
simple term을 false로 설정합니다.
false로,
보호됨을
protected로,
그리고 역방향
프로퍼티를 false로 초기화합니다.
@protected 엔트리를
가진 경우,
definition 안의 보호됨 플래그를
이 엔트리의 값으로 설정합니다.
@protected의 값이 불리언이 아닌 경우,
invalid @protected value 오류가 감지되었으며
처리가 중단됩니다.
처리 모드가
json-ld-1.0인 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@type 엔트리를 포함하는 경우:
@type 엔트리와 관련된 값으로
type을 초기화합니다. 이 값은 문자열이어야
MUST 합니다. 그렇지 않으면
invalid type mapping
오류가 감지되었으며 처리가 중단됩니다.
@json 또는 @none이고, 처리 모드가
json-ld-1.0인 경우,
invalid type mapping
오류가 감지되었으며 처리가 중단됩니다.
@id, @json,
@none,
@vocab,
또는 IRI 중 어느 것도 아닌 경우,
invalid type mapping
오류가 감지되었으며 처리가 중단됩니다.
@reverse 엔트리를 포함하는 경우:
@id 또는 @nest 엔트리를 포함하는 경우,
invalid reverse property
오류가 감지되었으며 처리가 중단됩니다.
@reverse 엔트리와 관련된 값이
문자열이
아닌 경우,
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
@reverse 엔트리와 관련된 값이
키워드의 형식을 가지는 문자열인 경우
(즉, [RFC5234]의
ABNF 규칙 "@"1*ALPHA와 일치하는 경우),
반환합니다. 프로세서는 경고를 생성하는 것이
SHOULD입니다.
@reverse 엔트리와 관련된 값에
IRI
확장을 수행한 결과로
definition의 IRI
매핑을 설정합니다.
그 결과가 형식상 IRI 또는 빈 노드
식별자가 아닌 경우,
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
@container 엔트리를 포함하는 경우,
definition의 컨테이너 매핑을 그 값을 포함하는
배열로 설정합니다.
그 값이 @set, @index, 또는 null 중 어느 것도 아닌 경우,
invalid reverse property
오류가 감지되었으며(역방향 프로퍼티는 set 및 index 컨테이너만 지원함)
처리가 중단됩니다.
true로 설정합니다.true로 설정한 뒤 반환합니다.
@id 엔트리를 포함하고 그 값이
term과 같지 않은 경우:
@id 엔트리가
null인 경우, 이 용어는 IRI 확장에 사용되지 않지만,
향후 이 용어의 재정의를 감지할 수 있도록 유지됩니다.
@id 엔트리와 관련된 값이
문자열이 아닌 경우,
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
@id 엔트리와 관련된 값이
키워드가 아니지만,
키워드의 형식을
가지는 경우
(즉, [RFC5234]의
ABNF 규칙 "@"1*ALPHA와 일치하는 경우),
반환합니다. 프로세서는 경고를 생성하는 것이
SHOULD입니다.
@id 엔트리와 관련된 값에
IRI
확장을 수행한 결과로
definition의 IRI 매핑을
설정합니다.
결과로 나온 IRI 매핑이
키워드, IRI, 또는 빈
노드 식별자 중 어느 것도 아닌 경우,
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다. 그것이
@context와 같으면,
invalid keyword alias
오류가 감지되었으며 처리가 중단됩니다.
:)을
첫 번째 또는 마지막 문자가 아닌 위치에 포함하거나,
슬래시(/)를 어디든 포함하는 경우:
true로 설정합니다.
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
:)도 슬래시(/)도
포함하지 않고,
simple term이 true이며,
definition의 IRI 매핑이
gen-delim
문자로 끝나는 IRI이거나,
빈
노드 식별자인 경우,
definition 안의 접두사 플래그를
true로 설정합니다.
:)을 포함하는 경우:
/)를 포함하는 경우:
@type인 경우, definition의
IRI 매핑을
@type으로 설정합니다.
invalid IRI mapping
오류가 감지되었으며 처리가 중단됩니다.
@container 엔트리를 포함하는 경우:
@container 엔트리와 관련된 값으로
container를 초기화합니다. 이 값은
@graph,
@id,
@index,
@language,
@list,
@set,
@type,
또는 정확히 이 키워드 중 하나를 포함하는
배열,
@graph와
@id 또는 @index 중 하나를 포함하고 선택적으로
@set을 포함하는 배열,
또는 임의의 순서로 @set과
@index, @graph,
@id, @type,
@language 중 임의의 조합을 포함하는
배열
이어야
MUST 합니다.
그렇지 않으면
invalid container mapping이
감지되었으며 처리가 중단됩니다.
@graph, @id, 또는 @type이거나, 그 밖에
문자열이
아닌 경우,
처리
모드가
json-ld-1.0이면
invalid container mapping
오류를 생성하고 처리를 중단합니다.
@type을 포함하는 경우:
@id로 설정합니다.
@id도
@vocab도 아닌 경우,
invalid type mapping
오류가 감지되었으며 처리가 중단됩니다.
@index 엔트리를 포함하는 경우:
json-ld-1.0이거나
컨테이너
매핑이 @index를 포함하지 않는 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@index 엔트리와 관련된 값으로
index를 초기화합니다.
그 값에 IRI
확장을 수행한 결과가 IRI가 아닌 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@context 엔트리를 포함하는 경우:
json-ld-1.0인 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@context 엔트리와 관련된 값으로
context를 초기화합니다. 이는 로컬
컨텍스트로 취급됩니다.
true,
remote contexts의 복사본,
그리고 validate scoped context에는 false를 사용하여
컨텍스트 처리 알고리즘을 호출합니다.
오류가 감지되면,
invalid scoped context 오류가
감지되었으며 처리가 중단됩니다.
컨텍스트 처리 알고리즘의 결과는 폐기됩니다. 이는 정의 시점의 오류를 감지하기 위해 호출됩니다. 사용되는 경우, 그 컨텍스트는 활성 컨텍스트에 대해 확장 또는 축약의 일부로 다시 처리되어 적용됩니다.
@language 엔트리를 포함하고
@type 엔트리를 포함하지 않는 경우:
@direction 엔트리를 포함하고
@type 엔트리를 포함하지 않는 경우:
@direction 엔트리와 관련된 값으로
direction을 초기화합니다. 이는 null,
"ltr", 또는 "rtl"이어야
MUST 합니다. 그렇지 않으면
invalid base direction
오류가 감지되었으며 처리가 중단됩니다.
@nest 엔트리를 포함하는 경우:
json-ld-1.0인 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@nest 엔트리와 관련된 값으로
초기화합니다. 이는 문자열이어야
MUST 하며,
@nest가 아닌 키워드여서는
MUST NOT 안 됩니다. 그렇지 않으면
invalid @nest value
오류가 감지되었으며 처리가 중단됩니다.
@prefix 엔트리를 포함하는 경우:
json-ld-1.0이거나,
term이 콜론(:) 또는 슬래시(/)를 포함하는 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@prefix 엔트리와 관련된 값으로 설정합니다.
이는 불리언이어야
MUST 합니다. 그렇지 않으면
invalid @prefix value
오류가 감지되었으며 처리가 중단됩니다.
true로 설정되어 있고,
그 IRI 매핑이
키워드인 경우,
invalid term definition이
감지되었으며 처리가 중단됩니다.
@id,
@reverse, @container,
@context,
@direction,
@index,
@language,
@nest,
@prefix,
@protected,
또는 @type 이외의 엔트리를 포함하는 경우,
invalid term definition 오류가
감지되었으며 처리가 중단됩니다.
false이고
previous definition이 존재하며 보호되어 있는 경우;
protected term redefinition 오류가
감지되었으며,
처리가 중단됩니다.
true로 설정합니다.
용어가 둘 이상 있어서 IRI를 축약하는 데 선택될 수 있는 경우, 용어 선택이 결정적이면서도 알고리즘 복잡도를 고려한 가장 컨텍스트에 적합한 선택을 나타내도록 보장해야 합니다.
용어 선택을 수행하기 위해, 역 컨텍스트의 개념이 도입됩니다. 역 컨텍스트는 본질적으로 주어진 활성 컨텍스트에 대해 컨테이너 매핑, 타입 매핑, 그리고 언어 매핑을 단순한 용어에 매핑하는 역방향 조회 테이블입니다. 역 컨텍스트는 축약에 사용되는 경우에만 활성 컨텍스트에 대해 생성될 필요가 있습니다.
역 컨텍스트를 사용하기 위해, 특정 IRI와 관련된 값에 대해 선호되는 컨테이너 매핑 목록과 타입 매핑 또는 언어 매핑이 수집됩니다. 그런 다음 이러한 매개변수가 용어 선택 알고리즘에 전달되며, 이 알고리즘은 값의 매핑과 가장 적절하게 일치하는 용어를 찾습니다.
이 절은 비규범입니다.
주어진
활성
컨텍스트에 대한
역
컨텍스트를 생성하려면,
활성
컨텍스트 안의 각
용어를 길이순으로, 가장 짧은 것부터
방문합니다(동률은 사전순으로 가장 작은
용어를 선택하여
해결합니다). 각 용어에 대해,
그 역 컨텍스트에
합법적으로 해당 용어와 일치할 수 있는
컨테이너 매핑과
타입 매핑
또는 언어 매핑의
가능한 각 조합에 대한 엔트리가 추가됩니다. 불법적인 일치에는
값의 타입 매핑 또는
언어 매핑과
그 용어의 매핑 사이의
차이가 포함됩니다. 용어에
컨테이너 매핑,
타입 매핑, 또는
언어 매핑이 없거나
(또는 이들의 일부 조합이 없는 경우), 그 용어는 특수 키
@none을 사용하여
역 컨텍스트 안에 엔트리를 갖습니다. 이를
통해
용어 선택 알고리즘은 특정
IRI와 값 조합에 대해
더 구체적으로 일치하는
용어를 사용할 수 없을 때,
더 일반적인 용어를 선택하도록
대체할 수 있습니다.
언어 태그를 정규화하는 것은 선택 사항이지만, 역 컨텍스트는 정규화된 언어 태그를 기반으로 엔트리를 생성하므로, 표현 방식과 관계없이 적절한 용어를 선택할 수 있습니다.
이 알고리즘은 하나의 필수 입력을 받습니다: 해당 역 컨텍스트가 생성되는 대상인 active context입니다.
@none으로 초기화합니다.
active context에 기본 언어가 있으면,
default language를
활성
컨텍스트의
기본 언어로
설정하되
소문자로 정규화합니다.
null이면,
용어는
축약 중에 선택될 수 없으므로,
다음 용어로
계속합니다.
@none으로 초기화합니다.
컨테이너
매핑이 비어 있지 않으면,
container를
컨테이너
매핑의 모든 값을
사전순으로 연결한 값으로 설정합니다
.
@language이고
그 값은 새 빈
맵이며, 두 번째
엔트리는
@type이고
그 값은 새 빈 맵입니다.
그리고 세 번째 엔트리는 @any이고
그 값은 처리 중인
용어로 설정된
@none 엔트리를
가진 새 맵입니다.
@type
엔트리와
관련된 값을
type map 변수로 참조합니다.
@language
엔트리와
관련된 값을
language map 변수로 참조합니다.
@none인
타입 매핑을
가진 경우:
null이 아닌 경우,
lang dir를 언어 매핑과
방향
매핑을
밑줄("_")로 구분하여 연결한 값으로 설정하고
소문자로 정규화합니다.
null이 아닌 경우,
lang dir를
소문자로 정규화한 언어 매핑으로 설정합니다.
null이 아닌 경우,
lang dir를 밑줄("_")이 앞에 붙은
방향
매핑으로 설정합니다.
@null로 설정합니다.null일 수 있음):
null일 수 있음):
이 알고리즘은 IRI 축약 알고리즘을 통해 호출되며, 활성 컨텍스트의 역 컨텍스트를 사용하여 용어 중 IRI를 축약하는 데 가장 적합하게 사용되는 것을 찾습니다. IRI와 관련된 값에 대한 다른 정보도 제공되며, 여기에는 그 값을 표현하는 데 가장 잘 사용될 컨테이너 매핑과 타입 매핑 또는 언어 매핑이 포함됩니다.
이 절은 비규범입니다.
역 컨텍스트의 IRI에 대한 엔트리는 먼저 선호되는 컨테이너 매핑에 따라, 주어진 순서대로 검색됩니다. 일치하는 컨테이너 매핑을 가진 용어 중에서는, 일치하는 타입 매핑 또는 언어 매핑을 가진 것들이, 타입 매핑 또는 언어 매핑이 없는 것보다 선호됩니다. 일치하는 컨테이너 매핑을 가진 용어가 없으면, 주어진 타입 매핑 또는 언어 매핑과 일치하는, 컨테이너 매핑이 없는 용어가 선택됩니다. 그래도 선택된 용어가 없으면, 가능한 경우 타입 매핑 또는 언어 매핑이 없는 용어가 선택됩니다. 충돌하는 타입 매핑 또는 언어 매핑을 가진 용어는 선택되지 않습니다. 동일한 매핑을 가진 용어 간의 동률은 먼저 가장 짧은 용어를 선택하고, 그다음 사전순으로 가장 작은 용어를 선택하여 해결됩니다. 이러한 동률은 역 컨텍스트 생성 알고리즘이 역 컨텍스트를 만들 때 이미 해결되었기 때문에 자동으로 해결된다는 점에 유의하십시오.
이 알고리즘에는 다섯 개의 필수 입력이 있습니다. 그것들은: active context, 키워드 또는 IRI var, 선호되는 컨테이너 매핑의 순서 있는 목록을 나타내는 배열 containers, 일치하는 타입 매핑 또는 언어 매핑을 가진 용어를 찾을지 여부를 나타내는 문자열 type/language, 그리고 찾을 타입 매핑 또는 언어 매핑에 대한 preferred values의 순서 있는 목록을 나타내는 배열입니다.
null
역 컨텍스트를 가진 경우,
active context 안의
역 컨텍스트를
active context를 사용하여
역 컨텍스트 생성 알고리즘을 호출한 결과로 설정합니다.
null을 반환합니다.이 절은 비규범입니다.
다음 예제는 다양한 용어 정의와 값에 대해 용어 선택 알고리즘이 어떻게 동작하는지 설명하기 위한 것입니다. 포괄적이지는 않지만, 알고리즘의 여러 부분을 설명하기 위한 것입니다.
용어 정의가 "@container": "@language"를 가지는 경우,
이는 @type이 없는
값
객체에만 일치합니다.
용어 정의가 데이터타입을 가지는 경우, 이는 일치하는 데이터타입을 가진 값 객체에만 일치합니다.
다음 절에서는 JSON-LD 문서, IRI 및 값을 확장하기 위한 알고리즘을 설명합니다.
이 알고리즘은 JSON-LD 문서를 확장하여, 모든 컨텍스트 정의가 제거되고, 모든 용어와 축약 IRI가 IRI, 빈 노드 식별자, 또는 키워드로 확장되며, 모든 JSON-LD 값이 배열 안의 확장 형식으로 표현되게 합니다.
이 절은 비규범입니다.
루트 element에서 시작하여, 완전히 확장된 result가 생길 때까지 JSON-LD 문서를 재귀적으로 처리할 수 있습니다. element를 확장할 때에는, 문제를 나누기 위해 그 타입에 따라 각각 다르게 처리할 수 있습니다:
null이면, 확장할 것이 없습니다.마지막으로, result가 배열 안에 있음을 보장한 후, result를 반환합니다.
[RDF11-CONCEPTS]에 기반한 데이터 모델은 순서 없는 여러 프로퍼티 값을 지원하지 않지만, 이 알고리즘은 순서 없는 배열 안에서 확장 중 발견될 수 있는 중복을 제거하지 않습니다. § 6.1 축약 알고리즘 및 § 7.1 평탄화 알고리즘 같은 다른 알고리즘은 순서 없는 배열에서 중복 값을 제거합니다. 이 명세의 향후 버전은 배열 값이 집합을 형성할 때 중복 배열 값을 제거하도록 갱신될 수 있습니다.
이 알고리즘은 네 개의 필수 및 세 개의 선택적 입력 변수를 받습니다.
필수 입력은 active context,
active property, 확장할 element,
그리고 확장할 원본 문서의
와 관련된
base URL입니다.
선택적 입력은
documentUrl
플래그로, 프레임 확장에 사용되는
특수한 입력 형식을 허용하며,
frameExpansion 플래그로, 명시된 곳에서
맵 엔트리 키를
사전순으로 정렬하는 데 사용되고,
from map 플래그로, 전파되지 않는
컨텍스트와 관련된
활성 컨텍스트
안의
이전 용어
정의를
되돌리는 것을 제어하는 데 사용됩니다.
전달되지 않으면, 선택적 플래그는 orderedfalse로 설정됩니다.
이 알고리즘은
JSON-LD
프레임을 확장하기 위한 처리 단계도 수행합니다.
프레임에서는
@id 및
@type 엔트리가
IRI의 배열이나
빈 맵을 허용할 수 있습니다.
값 객체의
엔트리도
문자열의
배열이나 빈
맵을 허용할 수 있습니다.
프레이밍은 확장 중 보존되는 추가 키워드
엔트리도 사용합니다:
(@explicit, @default,
@embed, @explicit, @omitDefault, 또는
@requireAll).
JSON-LD 프레임을
위한
특수 처리는
플래그가
frameExpansiontrue로 설정될 때 호출됩니다.
용어 [JSON-LD11]에서 언급했듯이,
향후 호환성 문제를 피하기 위해
용어는
@ 문자로 시작하지 않는 것이 좋습니다. JSON-LD의 향후 버전이
추가 키워드를 도입할 수 있기
때문입니다.
이 알고리즘은 그러한 용어를 다른 용어와 동일하게 처리합니다. 즉,
IRI에 매핑되지 않는 한
무시됩니다.
이 알고리즘의 구현은 이러한 용어가 발견될 때 경고를 표시하기 위한
런타임 플래그 제공을 고려할 수 있습니다.
빈 용어("")의 사용은
허용되지 않습니다. 모든 프로그래밍 언어가 빈 JSON 키를 처리할 수 있는 것은 아니기 때문입니다.
이 알고리즘의 구현은 이러한 용어가 발견될 때 경고를 표시하기 위한
런타임 플래그 제공을 고려할 수 있습니다.
프로퍼티에 레이블을 붙이기 위해 빈 노드 식별자를 사용하는 것은 더 이상 사용되지 않으며, JSON-LD의 향후 버전에서 제거될 수 있습니다. 이 알고리즘의 구현은 이러한 용어가 발견될 때 경고를 표시하기 위한 런타임 플래그 제공을 고려할 수 있습니다.
null이면, null을 반환합니다.@default이면,
frameExpansion 플래그를
false로 초기화합니다.
null 또는 @graph이면,
자유롭게 떠 있는 스칼라를
null을 반환하여 버립니다.
frameExpansion
및 ordered,
그리고 from map 플래그를 전달합니다.
@list를 포함하고,
expanded item이
배열이면,
expanded item을
원래 expanded item을 값으로 하는
@list 엔트리를 포함하는
새 맵으로 설정합니다.
false이고,
element가 @value로 확장되는
엔트리를 포함하지 않으며,
element가 @id로 확장되는 단일
엔트리로만 구성되지 않는 경우
(엔트리는
IRI
확장됨),
새 노드 객체를 처리할
때는
용어 범위 컨텍스트의 범위가
적용되지 않으므로,
active context를 active context의
이전 컨텍스트로 설정합니다.
true를 전달합니다.
@context
엔트리를 포함하는 경우,
active context를
컨텍스트 처리 알고리즘의 결과로 설정하며,
active context, @context
엔트리의 값을
local context로
그리고 base URL을 전달합니다.
@type으로
IRI
확장되는 것들을
key 기준 사전순으로 처리합니다:
@type으로 확장되는 첫 번째
엔트리의
마지막 값을 확장한 결과로 초기화합니다(있는 경우). 이때
엔트리는 키 기준 사전순으로
정렬합니다.
일치한 엔트리의 키와 값은 모두
IRI
확장됩니다.
ordered가 true이면
key 기준 사전순으로 처리합니다:
@context이면,
다음 key로 계속합니다.null이거나, 콜론(:)을
포함하지도 않고 키워드도 아닌 경우,
다음 key로 계속하여 key를 버립니다.@reverse와 같으면,
invalid reverse property map
오류가 감지되었으며 처리가 중단됩니다.
@included 또는 @type 이외
(처리
모드가 json-ld-1.0인 경우는 제외),
colliding keywords
오류가 감지되었으며 처리가 중단됩니다.
@id인 경우:
invalid @id value
오류가 감지되었으며 처리가 중단됩니다.
frameExpansion
플래그가 설정된 경우, value는 빈
맵이거나,
하나 이상의
문자열로
이루어진 배열일
MAY 있습니다.
true를 document relative로,
false를 vocab로 사용하여
value를
IRI
확장한 결과로
expanded value를 설정합니다.
frameExpansion
플래그가 설정된 경우, expanded value는 하나 이상의 값으로 이루어진
배열이며,
문자열
값은 위와 같이 IRI
확장 알고리즘을 사용하여 확장됩니다.
@type인 경우:
invalid type value
오류가 감지되었으며 처리가 중단됩니다.
frameExpansion
플래그가 설정된 경우, value는 빈
맵 또는
@default 값이
IRI로
제한된
기본
객체일
MAY 있습니다.
그 밖의 모든 값은 invalid type value
오류가 감지되었고 처리가 중단됨을 의미합니다.
@default의 값이
active context에
type-scoped context를 사용하고,
document relative에 true를 사용하여
value를
IRI
확장한 결과로 설정된
새 기본
객체로 설정합니다.
true를 사용하여
IRI
확장한 결과로
expanded value를 설정합니다.
@type 엔트리가 있으면,
result 안의 @type 값을
expanded value 앞에 추가하고,
필요한 경우 이를 배열로
변환합니다.
@graph이면,
이 알고리즘을 재귀적으로 사용한 결과로
expanded value를 설정합니다. 이때
active context, active property에 @graph,
element에 value,
base URL,
그리고 frameExpansion
및 ordered 플래그를
전달하고,
expanded value가 하나 이상의
맵으로 이루어진
배열임을
보장합니다.
@included인 경우:
json-ld-1.0이면,
element의 다음 key로 계속합니다.
null,
element에 value,
base URL,
그리고 frameExpansion
및 ordered 플래그를
전달하며,
결과가 배열임을 보장합니다.
invalid @included value
오류가 감지되었으며 처리가 중단됩니다.
@included 엔트리가 있으면,
result 안의 @included 값을
expanded value 앞에 추가합니다.
@value인 경우:
@json이면,
expanded value를 value로 설정합니다.
처리
모드가 json-ld-1.0이면,
invalid value object value
오류가 감지되었으며 처리가 중단됩니다.
null이 아니면,
invalid value object value
오류가 감지되었으며 처리가 중단됩니다.
frameExpansion
플래그가 설정된 경우, value는 빈
맵 또는
스칼라
값의 배열일
MAY 있습니다.
frameExpansion
플래그가 설정된 경우,
expanded value는 하나 이상의
문자열
값으로 이루어진
배열이거나,
빈 맵을 포함하는
배열입니다.
null이면, result의 @value
엔트리를
null로 설정하고 element의 다음
key로 계속합니다. 이 경우 null 값은 보존되어야 합니다.
@type 엔트리의 의미가
@value 엔트리의 존재에
의존하기 때문입니다.
@language인 경우:
invalid language-tagged string
오류가 감지되었으며 처리가 중단됩니다.
frameExpansion
플래그가 설정된 경우, value는 빈
맵 또는
0개 이상의
문자열로
이루어진 배열일
MAY 있습니다.
frameExpansion
플래그가 설정된 경우,
expanded value는 하나 이상의
문자열
값으로 이루어진
배열이거나,
빈 맵을 포함하는
배열입니다.
@direction인 경우:
json-ld-1.0이면,
element의 다음 key로 계속합니다.
"ltr"도 아니고
"rtl"도 아니면,
invalid base direction
오류가 감지되었으며 처리가 중단됩니다.
frameExpansion
플래그가 설정된 경우, value는 빈
맵 또는
0개 이상의
문자열로
이루어진 배열일
MAY 있습니다.
frameExpansion
플래그가 설정된 경우,
expanded value는 하나 이상의
문자열
값으로 이루어진
배열이거나,
빈 맵을 포함하는
배열입니다.
@index인 경우:
invalid @index value
오류가 감지되었으며 처리가 중단됩니다.
@list인 경우:
null 또는
@graph이면, 자유롭게 떠 있는 목록을 제거하기 위해
element의 다음 key로 계속합니다.
frameExpansion
및 ordered
플래그를 전달하며,
결과가 배열임을
보장합니다..
@set이면,
이 알고리즘을 재귀적으로 사용한 결과로
expanded value를 설정합니다. 이때
active context,
active property, element로서의 value,
base URL,
그리고 frameExpansion
및 ordered 플래그를
전달합니다.
@reverse인 경우:
invalid @reverse value
오류가 감지되었으며 처리가 중단됩니다.
@reverse,
element로 value,
base URL,
그리고 frameExpansion
및 ordered
플래그를 전달합니다.
@reverse
엔트리를 포함하면,
즉 두 번 역전된
프로퍼티인
경우,
그 안의 각 property와 item에 대해 다음 단계를
실행합니다:
@reverse 이외의
엔트리를 포함하면:
@nest이면,
key를 nests에 추가하며, 필요한 경우 빈
배열로
초기화합니다.
element의 다음 key로 계속합니다.
frameExpansion 플래그가
설정되어 있고,
expanded property가 다른 프레이밍 키워드
(@default,
@embed, @explicit, @omitDefault, 또는
@requireAll)인 경우,
확장 알고리즘을 재귀적으로 수행한 결과로
expanded value를 설정합니다. 이때
active context,
active property, element로서의 value,
base URL,
그리고 frameExpansion
및 ordered 플래그를
전달합니다.
null이 아니고,
expanded property가 @value이며,
input type이 @json이 아닌 경우를 제외하고,
result의
expanded property 엔트리를
expanded value로 설정합니다.
@json의 타입
매핑을 가지는 경우,
expanded value를 새 맵으로 설정하고,
@value 엔트리를
value로 설정하며, @type 엔트리를
@json으로 설정합니다.
@language를 포함하고
value가 맵이면, value는
다음과 같이 언어 맵에서 확장됩니다:
ordered가
true이면
language 기준 사전순으로 처리합니다:
null이면,
language value 안의 다음 엔트리로 계속합니다.
invalid language map value
오류가 감지되었으며 처리가 중단됩니다.
@value-item)
및 (@language-language)로 구성된
새 맵
v를 초기화합니다.
item이 @none도
아니고 [BCP47]의
2.2.9절에
따라 올바른 형식도
아니면,
프로세서는 경고를 발생시키는 것이
SHOULD입니다.
@none이거나,
@none으로 확장되면, v에서
@language를 제거합니다.
null이 아니면,
@direction에 대한
엔트리를
v에 추가하고 값을 direction으로 설정합니다.
@index,
@type 또는 @id를
포함하고,
value가 맵이면, value는
맵에서 다음과 같이 확장됩니다:
@index로 초기화합니다.
ordered가
true이면
index 기준 사전순으로 처리합니다:
@id 또는 @type을 포함하면,
존재하는 경우 active context의
이전 컨텍스트로
map context를 초기화하고,
그렇지 않으면 map context를 active context로
설정합니다.
@type을 포함하고,
map context 안의 index의
용어
정의가
로컬
컨텍스트를 가지면,
map context를
컨텍스트 처리
알고리즘의 결과로 갱신합니다. 이때
map context를 active context로,
index의
로컬
컨텍스트 값을
local context로,
그리고 map context 안의 index에 대한
용어
정의에서 온 base URL을 전달합니다.
true,
그리고 frameExpansion
및 ordered
플래그를 전달합니다.
@graph를 포함하고,
item이
그래프
객체가 아니면,
@graph-item 키-값 쌍을 포함하는 새
맵으로
item을 설정하되,
값이 배열을 사용해
표현되도록 보장합니다.
@index를 포함하고,
index key가 @index가 아니며,
expanded index가 @none이 아닌 경우:
invalid value object
오류가 감지되었으며 처리가 중단됩니다.
@index를 포함하고,
item이 @index
엔트리를
가지지 않으며,
expanded index가 @none이 아니면,
키-값 쌍(@index-index)을
item에 추가합니다.
@id를 포함하고
item이 @id
엔트리를
가지지 않으며,
expanded index가 @none이 아니면,
키-값 쌍(@id-expanded
index)을 item에 추가합니다.
여기서 expanded index는 document relative에
true를 사용하고 vocab에
false를 사용하여
index를
IRI
확장한 결과로 설정됩니다.
@type을 포함하고
expanded index가 @none이 아니면,
expanded index에 이어 item 안의
@type 기존 값들이 있으면 그 값들로 구성된
새 배열로
types를 초기화합니다.
키-값 쌍(@type-types)을
item에 추가합니다.
frameExpansion
및 ordered 플래그를
전달합니다.
null이면, element의
다음 key로 계속하여 key를 무시합니다.@list를
포함하고
expanded value가 이미
목록
객체가 아니면,
expanded value를
목록
객체로
변환합니다. 먼저 이미
배열이 아니면
expanded value만 포함하는
배열로 설정한 다음,
@list-expanded value 키-값 쌍을 포함하는
맵으로 설정합니다.
@graph를 포함하고,
@id도 @index도 포함하지 않는 경우,
필요하면 expanded value를
배열로 변환한 다음,
expanded value 안의 각 값 ev를
그래프
객체로 변환합니다:
true를 사용합니다.
ordered가 true이면
사전순으로 처리합니다:
@value로 확장되면,
invalid @nest value 오류가
감지되었으며 처리가 중단됩니다.
@value
엔트리를 포함하는 경우:
@direction,
@index,
@language,
@type,
및 @value 이외의
엔트리를 포함해서는 안
됩니다.
또한 @language 또는 @direction
엔트리를 포함하는 경우
@type 엔트리를 포함해서는 안 됩니다.
그렇지 않으면, invalid value object
오류가 감지되었으며 처리가 중단됩니다.
@type
엔트리가
@json이면, @value
엔트리는 어떤 값이든
포함할 수 있으며, JSON 리터럴로
취급됩니다.
@value 엔트리 값이
null이거나 빈 배열이면, null을
반환합니다.
@value 엔트리
값이 문자열이 아니며
result가 @language
엔트리를 포함하는
경우,
invalid language-tagged value
오류가 감지되었으며(언어 태그는
문자열에만 붙일 수 있음)
처리가 중단됩니다.
@type
엔트리를 가지며
그 값이 IRI가 아닌 경우,
invalid typed value
오류가 감지되었으며 처리가 중단됩니다.
@type
엔트리를 포함하고
그 관련 값이 배열이 아니면,
관련 값만 포함하는
배열로 설정합니다.
@set
또는 @list 엔트리를 포함하는 경우:
@index여야 합니다. 그렇지 않으면,
invalid set or list object
오류가 감지되었으며 처리가 중단됩니다.
@set
엔트리를 포함하면,
result를 그 엔트리의 관련 값으로 설정합니다.
@language
엔트리만 포함하는
맵이면, 반환합니다
null.
null 또는 @graph이면,
자유롭게 떠 있는 값을 다음과 같이 버립니다:
JSON-LD 문서에서 일부 키와 값은 IRI를 나타낼 수 있습니다. 이 절은 문자열이 나타내는 IRI를 절대 IRI 또는 빈 노드 식별자로 변환하는 알고리즘을 정의합니다. 또한 키워드 별칭을 키워드로 변환하는 것도 다룹니다.
IRI 확장은 컨텍스트 처리 중 또는 다른 JSON-LD 알고리즘 중에 발생할 수 있습니다. IRI 확장이 컨텍스트 처리 중에 발생하면, 로컬 컨텍스트와 컨텍스트 처리 알고리즘의 관련 defined 맵이 이 알고리즘에 전달됩니다. 이를 통해 용어 정의 의존성을 용어 정의 생성 알고리즘을 통해 처리할 수 있습니다.
이 절은 비규범입니다.
value를 IRI로 확장하려면,
먼저 그것이 null인지, 용어인지,
키워드 별칭인지, 또는 어떤
형태의 IRI인지 판단해야 합니다. 발견한 것에 따라
특정 종류의 확장을 처리합니다. 예를 들어,
키워드 별칭을
키워드로 확장하고,
용어를
활성
컨텍스트 안의
IRI 매핑에 따라
IRI로 확장합니다.
value를 검사하는 동안, 컨텍스트 처리 중 이 알고리즘을 실행하고 있기 때문에
용어 정의
의존성을 생성해야 함을 발견할 수도 있습니다.
컨텍스트 처리 중 실행 중인지 여부는
로컬
컨텍스트를 null과 비교하여 알 수 있습니다.
value가 로컬 컨텍스트
안의 엔트리이고
defined 맵이 관련 값이
true인 value에 대한
엔트리를
가지고 있지 않으면,
활성
컨텍스트 안에
용어 정의를
생성해야 함을 알 수 있습니다.
defined 맵은
컨텍스트 처리 중에 어떤
용어가
이미 정의되었거나 정의 중인지 추적하는 데 사용됩니다.
우리는
용어 정의 생성 알고리즘을 사용하여
용어
정의를 생성합니다.
키워드의 형식을 가지지만 키워드는 아닌 값
(즉, "@"로 시작하는 값)은
향후 사용을 위해 예약되어 있으므로 어떤 값에도 매핑되지 않습니다.
알고리즘은 null을 반환하므로, 이러한 값은 발견될 때 무시됩니다.
이 알고리즘은 두 개의 필수 입력 변수와 네 개의 선택적 입력 변수를 받습니다.
필수 입력은 active context와 확장할 value입니다.
선택적 입력은 두 개의 플래그,
document relative와 vocab로,
value가 문서의 기준
IRI 또는
활성 컨텍스트의
어휘
매핑에 대해 각각
상대 IRI 참조로 해석될 수 있는지
지정합니다. 또한 이 알고리즘이
컨텍스트 처리 중에 사용될 때 사용할
local context와 맵 defined가 있습니다.
전달되지 않으면, 두 플래그는 false로 설정되고
local context와 defined는 null로 초기화됩니다.
null이면,
value를 그대로 반환합니다.
"@"1*ALPHA와 일치하는 경우),
프로세서는 경고를 생성하는 것이
SHOULD이며,
null을 반환합니다.
null이 아니고,
value와 같은 키를 가진
엔트리를 포함하며,
defined 안의 value에 대한
엔트리 값이
true가 아니면,
용어 정의 생성 알고리즘을 호출합니다.
이때 active context, local context,
term으로서의 value, 그리고 defined를 전달합니다.
이는 컨텍스트 처리 중
active context 안에 value에 대한
용어
정의가 생성되도록 보장합니다.
true이고
active context가 value에 대한
용어 정의를
가지고 있으면,
관련 IRI
매핑을 반환합니다.
:)을 포함하는 경우,
이는
IRI,
축약 IRI, 또는
빈
노드
식별자입니다:
:)이 처음 나타나는 위치에서
prefix와 suffix로 나눕니다.
_)이거나
suffix가 이중 슬래시
(//)로 시작하면, value는 이미
IRI 또는
빈 노드
식별자이므로 그대로 반환합니다.
null이 아니고,
prefix 엔트리를 포함하며,
defined 안의 prefix
엔트리 값이
true가 아니면,
용어 정의 생성 알고리즘을 호출합니다.
이때 active context,
local context, term으로서의 prefix,
그리고 defined를 전달합니다. 이는
컨텍스트 처리 중에
active context 안에 prefix에 대한
용어
정의가 생성되도록 보장합니다.
null이 아닌
IRI 매핑을 가지며,
그 용어 정의의
접두사
플래그가 true이면,
prefix와 관련된
IRI
매핑과 suffix를 연결한 결과를 반환합니다.
true이고
active context가
어휘
매핑을 가지고 있으면,
어휘
매핑과
value를 연결한 결과를 반환합니다.
true이면,
value를 active context의
기준 IRI에
대해 해석한 결과로 설정합니다.
[RFC3986]의
5.2절에 있는 기본 알고리즘만
사용됩니다.
구문 기반 정규화도
스킴 기반 정규화도
수행되지 않습니다. IRI 참조에서 추가로 허용되는 문자는
[RFC3987]의
6.5절에 따라
URI 참조의 비예약 문자와 같은 방식으로 처리됩니다.
JSON-LD의 일부 값은 축약 형식으로 표현될 수 있습니다. 이러한 값은 JSON-LD 문서를 처리할 때 확장되어야 하는 경우가 있습니다. 이 알고리즘을 적용한 후 값은 확장 형식이라고 합니다.
이 절은 비규범입니다.
active property가
활성
컨텍스트 안에서 @id 또는 @vocab으로 설정된
타입 매핑을 가지고,
값이 문자열이면,
IRI 확장
알고리즘을 value에 사용한 결과를 값으로 갖는
단일 @id
엔트리를 가진
맵이
반환됩니다.
그렇지 않으면, 결과는 전달된
value가 값으로 설정된
@value 엔트리를
포함하는
맵이
됩니다.
또한 active property와
관련된 타입 매핑이 있으면
@type 엔트리가
포함되고,
value가
문자열이며
active
property와 관련된
언어 매핑이 있으면
@language 엔트리가 포함됩니다.
IRI로 해석되는 값은
두 범주에 속한다는 점에 유의하십시오:
document relative인 값과
어휘 상대적인 값입니다. 프로퍼티와
@type의 값,
그리고 "@type": "@vocab"로 표시된 용어는
어휘 상대적입니다. 이는 이러한 값이
정의된 용어,
접두사가
용어인
축약 IRI,
또는 어휘 매핑을
사용하여
IRI로 바뀌는 문자열이어야 함을
의미합니다.
이 알고리즘은 세 개의 필수 입력을 받습니다: active context, active property, 그리고 확장할 value입니다.
@id인 타입
매핑을 가지고,
value가 문자열이면,
키가 @id이고 값이
document relative에 true,
vocab에 false를 사용하여
value를
IRI
확장한 결과인
단일 엔트리를 포함하는
새
맵을
반환합니다.
@vocab인
타입 매핑을 가지고,
value가 문자열이면,
키가 @id이고 값이
document relative에 true를 사용하여
value를
IRI
확장한 결과인
단일 엔트리를 포함하는
새
맵을
반환합니다.
@value 엔트리를 가진
맵으로 초기화합니다.
@id, @vocab, 또는
@none 이외의
타입 매핑을 가지고 있으면,
@type을 result에 추가하고
그 값을
타입 매핑과
관련된 값으로 설정합니다.
null이 아니면,
result에 값이 language인 @language를 추가합니다.
null이 아니면,
result에 값이 direction인 @direction을 추가합니다.
다음 절에서는 JSON-LD 문서, IRI 및 값을 축약하기 위한 알고리즘을 설명합니다.
이 알고리즘은 주어진 컨텍스트가 적용되도록 JSON-LD 문서를 축약합니다. 그 결과 적용 가능한 모든 IRI는 용어 또는 축약 IRI로 단축되어야 하며, 적용 가능한 모든 키워드는 키워드 별칭으로, 그리고 확장 형식으로 표현된 적용 가능한 모든 JSON-LD 값은 문자열 또는 숫자 같은 단순 값으로 축약되어야 합니다.
이 절은 비규범입니다.
루트 element에서 시작하여, 완전히 축약된 result가 생길 때까지 JSON-LD 문서를 재귀적으로 처리할 수 있습니다. element를 축약할 때에는, 문제를 나누기 위해 그 타입에 따라 각각 다르게 처리할 수 있습니다:
@index 또는 @language 맵 같은
컨테이너 매핑을 기반으로
재구성됩니다.
이 알고리즘은 세 개의 필수 및 두 개의 선택적 입력 변수를 받습니다.
필수 입력은 active context,
active property,
그리고 축약할 element입니다.
선택적 입력은
플래그와
compactArrays 플래그이며, 명시된 곳에서
맵 엔트리 키를
사전순으로 정렬하는 데 사용됩니다.
전달되지 않으면, 두 플래그는 모두 orderedfalse로 설정됩니다.
compactArrays
및 ordered 플래그를
전달합니다.
null이 아니면,
이를 result에 추가합니다.compactArrays가
false이거나,
active property가 @graph 또는
@set 중 하나이거나,
active context 안의 active property에 대한
컨테이너
매핑이 @list 또는
@set 중 하나를 포함하는 경우,
result를 반환합니다.
@value 엔트리를 포함하지 않고,
element가 단일 @id 엔트리로만 구성되지 않는 경우,
새 노드 객체를 처리할
때는
용어 범위 컨텍스트의 범위가
적용되지 않으므로,
active context를 active context의
이전 컨텍스트로 설정합니다.
true를 전달합니다.
@value 또는 @id
엔트리를 가지고,
active context,
active property, 그리고 value로서의 element를 전달하여
값 축약 알고리즘을 사용한 결과가
스칼라이거나,
active property에 대한
용어
정의가
@json의 타입
매핑을
가지는 경우,
그 결과를 반환합니다.
@list를
포함하는 경우,
이 알고리즘을 재귀적으로 사용한 결과를 반환합니다. 이때
active context,
active property, element로서의 element 안의
@list 값,
그리고 compactArrays
및 ordered 플래그를 전달합니다.
@reverse와 같으면
inside reverse를 true로 초기화하고,
그렇지 않으면 false로 초기화합니다.
@type 엔트리를 가지면,
그 엔트리의 각
expanded type을
expanded type을 IRI
축약하여
그 축약 형식으로 변환해 초기화한 새 배열 compacted types를 생성합니다.
그런 다음 사전순으로 정렬된 compacted types 안의 각 term에 대해:
false를 전달합니다.
ordered가 true이면
expanded property 기준 사전순으로 처리합니다:
@id인 경우:
@type인 경우:
@type 배열이어야 합니다:
json-ld-1.1이고
active context 안의 alias에 대한
컨테이너
매핑이 @set을 포함하면
as array를 true로 초기화하고,
그렇지 않으면 compactArrays의
부정으로 초기화합니다.
@reverse인 경우:
@reverse,
element에 expanded value,
그리고 compactArrays
및 ordered 플래그를
전달합니다.
@preserve이면:
compactArrays
및 ordered 플래그를
전달합니다.
@preserve 값으로 추가합니다.
@index이고
active context 안의 active property가
@index를 포함하는
컨테이너 매핑을
가지면,
축약된 결과는 @index 컨테이너 안에 있게 되므로,
다음 expanded property로 계속하여 @index
엔트리를 버립니다.
@direction,
@index,
@language,
또는 @value인 경우:
@nest가 아니거나,
active context 안에서 @nest로 확장되는
용어가 아니면,
invalid @nest value
오류가 감지되었으며, 처리가 중단됩니다.
true를 사용합니다.
@nest가 아니거나,
active context 안에서 @nest로 확장되는
용어가 아니면,
invalid @nest value
오류가 감지되었으며, 처리가 중단됩니다.
@set을 포함하거나,
item active property가 @graph 또는
@list이면 as array를 true로 초기화하고,
그렇지 않으면 compactArrays의
부정으로 초기화합니다.
compactArrays
및 ordered 플래그를
전달합니다.
expanded item이
목록 객체 또는
그래프 객체이면,
expanded item 대신 각각 @list
또는 @graph 엔트리의 값을
element로 사용합니다.
@graph와
@id를 포함하는 경우:
@graph와
@index를 포함하고
expanded item이 단순
그래프 객체인 경우:
@graph를 포함하고
expanded item이 단순
그래프 객체이면,
값은 맵 객체로 표현될 수 없습니다.
@graph를 포함하지 않거나
앞선 경우 중 어느 것에도 일치하지 않습니다.
@graph를
IRI
축약한 결과
를 키로 하고, 원래 compacted item을 값으로 사용합니다.
@id 엔트리를
포함하면,
@id를
IRI
축약한 결과
를 키로 사용하고,
expanded item 안의 @id 값을
vocab에 false를 사용하여
IRI
축약한 값을 값으로 사용하여
compacted item에 엔트리를 추가합니다.
@index 엔트리를
포함하면,
@index를
IRI
축약한 결과
를 키로 사용하고, expanded
item 안의 @index 값을 값으로 하여
compacted item에 엔트리를 추가합니다.
@language,
@index, @id,
또는 @type을
포함하며 container가
@graph를 포함하지 않는 경우:
@language, @index, @id, 또는
@type 중 하나를
IRI
축약하여
container key를 초기화합니다.
@index로 초기화합니다.
@language를 포함하고
expanded item이
@value 엔트리를
포함하면, compacted item을 그 @value
엔트리와 관련된
값으로 설정합니다.
expanded item 안의 @language 값이 있으면
map key를 그 값으로 설정합니다.
@index를 포함하고
index key가 @index이면,
expanded item 안의 @index 값이 있으면
map key를 그 값으로 설정합니다.
@index를 포함하고
index key가 @index가 아닌 경우:
@id를 포함하면,
map key를 compacted item 안의
container key 값으로 설정하고,
compacted item에서 container key를 제거합니다.
@type을 포함하는 경우:
@id로 확장되는 키를 가진
단일 엔트리를
포함하면, 이 알고리즘을 재귀적으로 사용한 결과로
compacted item을 설정합니다. 이때
active context,
active property로서의 item active property,
그리고 element로서
expanded item에서 온 @id에 대한
단일 엔트리로
구성된 맵을
전달합니다.
null이면,
@none을
IRI
축약한 결과로
설정합니다.
이 알고리즘은 IRI를 용어 또는 축약 IRI로, 또는 키워드를 키워드 별칭으로 축약합니다. IRI와 관련된 값은 가장 컨텍스트에 적합한 용어를 선택하는 데 도움을 주기 위해 전달될 수 있습니다.
이 절은 비규범입니다.
전달된 IRI가 null이면,
단순히 null을 반환합니다.
그렇지 않으면, 먼저 그
IRI 또는
키워드가
활성 컨텍스트의
어휘
매핑에 상대적인 경우 축약될 수 있는
용어를 찾으려고 합니다.
가장 적절한 용어를 선택하기 위해,
전달된 value에 대한 정보를 수집해야 할 수 있습니다.
이 정보에는 value를 표현하기 위한 선호
컨테이너 매핑,
타입 매핑 또는
언어 매핑을
결정하는 것이 포함됩니다.
JSON-LD 목록의 경우,
타입 매핑
또는 언어 매핑은
목록의 모든 항목에 대해 작동하는 가장 구체적인 값을 기반으로 선택됩니다.
이 정보가 수집되면,
용어 선택 알고리즘에 전달되며,
이 알고리즘은 가장 적절한
용어를 반환합니다.
용어 중
해당 IRI를 축약하는 데 사용할 수 있는
것이 발견되지 않으면,
활성 컨텍스트의
어휘
매핑이 있는 경우 이를 사용하여
IRI를 축약하려고 시도합니다.
IRI를 축약할 수 없으면,
축약 IRI를 찾으려고 시도합니다.
용어는
용어 정의가
값이 true인
접두사 플래그를
포함하는 경우에만
축약 IRI를
생성하는 데 사용됩니다.
적절한 축약 IRI가 없고,
compactToRelative 옵션이 true이면,
IRI는 문서의
기준 IRI를 사용하여
상대 IRI 참조로 변환됩니다.
마지막으로, IRI 또는
키워드가 여전히 축약될 수 없으면,
그대로 반환됩니다.
언어 매핑을 고려할 때, 방향 매핑도 언어 매핑과 함께 또는 없이 고려되며, 언어 매핑은 소문자로 정규화됩니다.
이 알고리즘이 입력 IRI를 그대로 반환하려는 경우에, 그 IRI가 활성 컨텍스트 안에서 축약 IRI로 오인될 수 있으면, 이 알고리즘은 오류를 발생시킵니다. 원래 IRI를 모호하지 않게 표현하여 반환할 방법이 없기 때문입니다.
이 알고리즘은 두 개의 필수 입력과 세 개의 선택적 입력을 받습니다.
필수 입력은 active context와
축약할 var입니다.
선택적 입력은 var와 관련된 value,
전달된 var를
활성 컨텍스트의
어휘
매핑을 사용하여 축약해야 하는지 지정하는 vocab 플래그,
그리고 역방향 프로퍼티가 축약 중인지
지정하는
reverse 플래그입니다.
전달되지 않으면, value는 null로 설정되고
vocab와 reverse는 모두 false로 설정됩니다.
null이면, null을 반환합니다.null
역 컨텍스트를 가지면,
active context 안의
역 컨텍스트를
active context를 사용하여
역 컨텍스트 생성 알고리즘을 호출한 결과로 설정합니다.
true이고 var가
inverse context의
엔트리인 경우:
@preserve
엔트리를 포함하는
맵이면,
@preserve 값의 첫 번째 요소를 value로 사용합니다.
@language로,
type/language value를 @null로 초기화합니다. 이 두
변수는 value와 호환되는 것을 기반으로
용어에
대한 선호
타입 매핑 또는
언어
매핑을 추적합니다.
@index 엔트리를 포함하는
맵이고,
value가 그래프 객체가
아니면, 값 @index와 @index@set을
containers에 추가합니다.
true이면, type/language를
@type으로, type/language value를
@reverse로 설정하고, @set을 containers에
추가합니다.
@index가 value 안의
엔트리가
아니면,
@list를 containers에 추가합니다.
@list
엔트리와
관련된
배열로
초기화합니다.
null로 초기화합니다.
list가 비어 있으면, common language를
default language로 설정합니다.
@none으로,
item type을 @none으로 초기화합니다.
@value 엔트리를
포함하는 경우:
@id로 설정합니다.null이면,
common language를 item language로 설정합니다.
@value 엔트리를
포함하면, 목록 항목의 언어가 충돌하므로
common language를 @none으로 설정합니다.
null이면,
common type을 item type으로 설정합니다.
@none으로 설정합니다.
@none이고
common type이 @none이면,
목록의 항목 사이에 공통 언어 또는 타입이 없다는 것이 감지되었으므로
목록의 항목 처리를 중지합니다.
null이면,
common language를 @none으로 설정합니다.
null이면,
common type을 @none으로 설정합니다.
@none이 아니면,
type/language를 @type으로 설정하고
type/language value를 common type으로 설정합니다.
@index 엔트리를 포함하면,
값 @graph@index와 @graph@index@set을
containers에 추가합니다.
@id 엔트리를 포함하면,
값 @graph@id와 @graph@id@set을
containers에 추가합니다.
@graph, @graph@set,
그리고 @set을
containers에 추가합니다.
@index 엔트리를 포함하지 않으면,
값 @graph@index와 @graph@index@set을
containers에 추가합니다.
@id 엔트리를 포함하지 않으면,
값 @graph@id와 @graph@id@set을
containers에 추가합니다.
@index와 @index@set을
containers에 추가합니다.
@type으로 설정하고,
type/language value를 @id로 설정합니다.
@direction
엔트리를
포함하고 @index 엔트리를
포함하지 않으면,
type/language value를
value의 @language
엔트리(있는 경우)와
value의 @direction 엔트리를
밑줄("_")로 구분하여 연결하고
소문자로 정규화한 값으로 설정합니다.
@language와 @language@set을
containers에 추가합니다.
@language 엔트리를
포함하고 @index 엔트리를
포함하지 않으면,
type/language value를
@language 값을 소문자로 정규화한 값으로 설정하고,
@language,
그리고 @language@set을
containers에 추가합니다.
@type 엔트리를 포함하면,
type/language value를
그 관련 값으로 설정하고 type/language를
@type으로 설정합니다.
@type으로 설정하고
type/language value를 @id로 설정하며,
@id, @id@set,
@type, 그리고 @set@type을
containers에 추가합니다.
@set을 containers에 추가합니다.@none을 containers에 추가합니다. 이는
컨테이너 매핑이
존재하지 않음을 나타내며,
가장 일반적이므로 마지막으로 확인될
컨테이너 매핑
값입니다.
json-ld-1.0이 아니고 value가
맵이 아니거나
@index 엔트리를 포함하지 않으면,
@index와 @index@set을 containers에 추가합니다.
json-ld-1.0이 아니고
value가 @value
엔트리만 포함하는
맵이면,
@language와 @language@set을 containers에 추가합니다.
null이면,
type/language value를 @null로 설정합니다.
이는 null 값이 inverse context
entry에 저장되는 키입니다.
@reverse이면,
@reverse를 preferred values에 추가합니다.
@id 또는 @reverse이고
value가 @id 엔트리를 포함하는
맵인 경우:
@none을
이 순서로 preferred values에 추가합니다.
value가 @list의 값으로 빈
array를 가진
목록
객체이면,
type/language를 @any로 설정합니다.
@any를 preferred values에 추가합니다."_")을 가진 엔트리를 포함하는 경우,
해당 엔트리에서 밑줄부터 문자열 끝까지의 부분 문자열을
preferred values에 추가합니다.
null이 아니면, term을 반환합니다.true이고
active context가
어휘
매핑을 가지는 경우:
null로 초기화하여
축약 IRI 생성을 시도합니다.
이 변수는 생성된
축약 IRI가 있는 경우
이를 저장하는 데 사용됩니다.
null이거나,
그 IRI 매핑이
var와 같거나,
그 IRI 매핑이
var의 시작 부분 부분 문자열이 아니거나,
또는 definition이
true인 접두사 플래그를 가지지 않으면,
definition의 키는 접두사로 사용될 수 없습니다.
다음 definition으로 계속합니다.
:), 그리고
definition의
IRI
매핑 값 뒤에 오는
var의 부분 문자열을 연결하여 candidate를 초기화합니다.
null이거나, candidate가 더 짧거나 같은 길이이지만
compact IRI보다
사전순으로 작고 candidate가 active context 안에
용어
정의를 가지지 않는 경우, 또는 그러한
용어
정의가 var와 같은
IRI
매핑을 가지고 value가 null인 경우,
compact IRI를
candidate로 설정합니다.
null이 아니면, compact IRI를 반환합니다.
true로 설정된
활성 컨텍스트
안의
어떤 용어와 일치하고,
var에 이중 슬래시(//)가 앞에 오는
IRI authority가 없으면,
IRI confused with prefix
오류가 감지되었으며,
처리가 중단됩니다.
false이면,
active context에 기준 IRI가 있는 경우 이를
사용하여 var를 상대 IRI 참조로 변환합니다.
확장은 JSON-LD의 모든 값을 확장 형식으로 변환합니다. 이 알고리즘은 반대 작업을 수행하여, 값을 축약 형식으로 변환합니다. 이 알고리즘은 주어진 활성 컨텍스트에서 값의 관련 active property와 연결된 용어 정의에 따라 값을 축약합니다.
이 절은 비규범입니다.
축약할 value는 @id 또는
@value 엔트리를
가집니다.
전자에 해당하는 경우,
active property의
타입
매핑이 @id 또는 @vocab으로 설정되어 있고,
value가 @id 엔트리만으로 구성되며, 만약
active property의
컨테이너 매핑이
@index를 포함한다면,
@index 엔트리도
포함하는 경우,
value는 @id 엔트리와 관련된 값을 축약하기 위해
IRI
축약 알고리즘을 사용한 결과를 반환함으로써
문자열로 축약될 수 있습니다.
그렇지 않으면, value는 축약될 수 없으며 그대로 반환됩니다.
후자에 해당하는 경우, value를
@value 엔트리와
관련된 값만으로
축약할 수 있을 수도 있습니다.
이는 active property가 일치하는
타입 매핑 또는
언어 매핑을 가지고,
@index 엔트리가
없거나
active property의
컨테이너 매핑이
@index를 포함하는 경우 수행될 수 있습니다.
또한 @value가 value 안의 유일한
엔트리인 경우
(active property의
컨테이너 매핑이
@index를 포함하는 경우에는
@index 엔트리를
제외하고)이며,
그 관련 값이 문자열이
아니거나,
기본
언어가 없거나,
active property에 대해
명시적 null
언어
매핑이 있는 경우에도 수행될 수 있습니다.
이 알고리즘은 세 개의 필수 입력을 가집니다: active context, active property, 그리고 축약할 value입니다.
null
역 컨텍스트를 가지면,
active context 안의
역 컨텍스트를
active context를 사용하여
역 컨텍스트 생성 알고리즘을 호출한 결과로 설정합니다.
@id 엔트리를 가지고
@index 이외의 다른
엔트리를 가지지 않는 경우:
@type 엔트리를 가지면,
result를 value의 @value 엔트리와
관련된 값으로 설정합니다.
@none이거나,
value가 @type 엔트리를 가지고,
value 안의 @type 값이
active property의
타입 매핑과
일치하지 않는 경우,
값 축약은 비활성화되므로 value를 그대로 둡니다.
@value 엔트리의 값이
문자열이 아닌 경우:
@language 엔트리를 가지고
그 값이 language와 정확히 일치하며,
language가 null이 아닌 경우에는
대소문자를 구분하지 않는 비교를 사용하고,
language가 null인 경우에는 존재하지 않으며,
그리고 value가 @direction 엔트리를 가지고
그 값이 direction과 정확히 일치하되,
direction이 null이 아닌 경우이고, 또는
direction이 null인 경우에는 존재하지 않으면:
다음 절에서는 JSON-LD 문서를 평탄화하고, 노드 맵을 생성하며, 빈 노드를 생성하기 위한 알고리즘을 설명합니다.
이 알고리즘은 확장된 JSON-LD 문서를 평탄화합니다. 즉 노드의 모든 프로퍼티를 단일 맵에 수집하고, 모든 빈 노드에 빈 노드 식별자로 레이블을 붙입니다. 문서의 이렇게 만들어진 균일한 형태는 특정 애플리케이션에서 JSON-LD 데이터를 처리하는 데 필요한 코드를 크게 단순화할 수 있습니다.
이 절은 비규범입니다.
먼저, 노드 맵 생성 알고리즘을 사용하여 node map을 생성합니다. 이 알고리즘은 노드의 모든 프로퍼티를 단일 맵에 수집합니다. 다음 단계에서 node map은 평탄화된 문서 형식의 JSON-LD 문서로 변환됩니다.
이 알고리즘은 하나의 필수 및 하나의 선택적 입력 변수를 받습니다.
필수 입력은 평탄화할 element입니다.
선택적 입력은
플래그로, 명시된 곳에서
맵 엔트리 키를
사전순으로 정렬하는 데 사용됩니다.
전달되지 않으면, ordered 플래그는
orderedfalse로 설정됩니다.
이 알고리즘은 빈 노드 식별자 생성 알고리즘을 사용하여 새 빈 노드 식별자를 생성하고, 기존 빈 노드 식별자에 다시 레이블을 붙입니다. 빈 노드 식별자 생성 알고리즘은 identifier map을 유지하여 소스 문서의 빈 노드 식별자가 충돌을 피하면서 새 빈 노드 식별자로 일관되게 다시 매핑되도록 보장합니다. 따라서 이 알고리즘이 실행되기 전에 identifier map은 재설정됩니다.
@default이고 값이 빈
맵인
단일
엔트리로
구성됩니다.
@default
엔트리 값으로
초기화합니다. 이는
기본
그래프를 나타내는
맵입니다.
@default가 아니며,
ordered가 true이면
graph name 기준 사전순으로 정렬하여,
다음 단계를 수행합니다:
@id 엔트리로 구성된
맵으로 초기화합니다.
@graph 엔트리를 추가하고
이를 빈 배열로
설정합니다.ordered가
true이면
id 기준 사전순으로 정렬하여,
node의 유일한 엔트리가
@id인 경우를 제외하고
node를 entry의 @graph
엔트리에 추가합니다.
ordered가 true이면
id 기준 사전순으로 정렬하여,
node의 유일한
엔트리가
@id인 경우를 제외하고
node를 flattened에 추가합니다.
이 알고리즘은 전달된 확장 문서 안에 표현된
그래프와
노드의 인덱스화된 표현을 담는
맵
node map을 생성합니다.
IRI로 고유하게 식별되지 않는 모든
노드에는
(새) 빈 노드
식별자가
할당됩니다.
결과 node map은 문서 안의 모든 그래프에 대해
맵 엔트리를 가지며,
그 값은 문서 안에 표현된 각
노드에 대한
엔트리를 가진 또 다른 객체입니다.
기본 그래프는 @default
엔트리 아래에 저장되고, 다른 모든 그래프는
그 그래프 이름 아래에
저장됩니다.
이 절은 비규범입니다.
이 알고리즘은 확장된 JSON-LD 문서를 재귀적으로 순회하여
노드의 모든
엔트리를 단일
맵에
수집합니다. 이 알고리즘은
문서에서 사용되는
그래프 이름을
나타내는 키를 가진
맵
node map을 갱신합니다
(기본
그래프는 @default
엔트리 아래에 저장됩니다).
그 관련 값들은
맵이며,
그래프 안의
노드를 인덱스화합니다. 어떤
엔트리의
값이 노드
객체이면,
이는 @id
엔트리만으로 구성된
노드 객체로 대체됩니다.
노드 객체가
@id
엔트리를 가지지 않거나
빈 노드
식별자로 식별되는 경우,
새 빈
노드 식별자가
생성됩니다. 이러한
빈 노드
식별자의 재레이블링은
프로퍼티와
@type의 값에 대해서도 수행됩니다.
이 알고리즘은 확장된 JSON-LD 문서 element와
맵
node map에 대한 참조를 입력으로 받습니다. 또한 선택적 매개변수로
active graph(기본값은 @default), active subject,
active property, 그리고
맵
list에 대한 참조를
가집니다. 전달되지 않으면 active subject, active property, 그리고
list는 null로 설정됩니다.
null이면 node를
null로 설정하고, 그렇지 않으면
graph의 active subject
엔트리를
subject node 변수로 참조합니다.
@type
엔트리 안의
각 item에 대해(있는 경우), 또는 @type 값이 존재하고
배열이 아닌 경우
@type의 값에 대해:
@value 엔트리를 가지면, 다음 단계를
수행합니다:
@list 엔트리를 가지면,
다음 단계를 수행합니다:
@id 엔트리를 가지면,
id를 그 값으로 설정하고, 그
엔트리를
element에서
제거합니다.
id가
빈 노드
식별자이면,
identifier로 id를 전달하여
새로 생성된 빈 노드 식별자로
이를 대체합니다.
null을 전달하여
빈 노드 식별자 생성 알고리즘의 결과로
id를 설정합니다.
@id
엔트리 하나로
구성된 맵으로 초기화하며, 그 값은
id입니다.
null이 아니면, 다음 단계를
수행합니다:
@type 엔트리를 가지면,
그 관련 배열의 각 항목을
이미 해당 배열에 있는 경우를
제외하고,
node의 @type 엔트리와 관련된
배열에 추가합니다. 마지막으로
@type 엔트리를 element에서
제거합니다.
@index 엔트리를 가지면,
node의 @index
엔트리를
그 값으로 설정합니다.
node가
이미 다른 값을
가진 @index
엔트리를 가지면,
conflicting indexes
오류가 감지되었으며 처리가 중단됩니다. 그렇지 않으면
@index 엔트리를 element에서
제거하여 계속합니다.
@reverse 엔트리를 가지면:
@id
엔트리
하나를 가진
맵
referenced
node를 생성합니다.
@reverse 엔트리 값으로
초기화합니다.
@reverse 엔트리를
element에서 제거합니다.
@graph 엔트리를 가지면,
@graph 엔트리의 값을
element로,
node map, 그리고 id를 active graph로 전달하여
이 알고리즘을 재귀적으로 호출한 뒤,
@graph 엔트리를 element에서
제거합니다.
@included 엔트리를
가지면,
@included 엔트리의
값을 element로,
node map, 그리고 active graph를 전달하여
이 알고리즘을 재귀적으로 호출한 뒤,
@included 엔트리를 element에서
제거합니다.
이 알고리즘은 노드 맵 생성 알고리즘을 사용하여 생성된 graph map 안에 포함된 모든 그래프를 사용해, 주어에서 노드로 가는 새 맵을 생성합니다. 이를 통해 node map에 포함된 각 그래프 안에서 주어진 주어에 대해 정의된 정보를 담는 병합된 노드 객체를 생성합니다.
이 알고리즘은 새 빈 노드 식별자를 생성하거나, 새 식별자의 도입으로 인한 충돌을 피하기 위해 기존 빈 노드 식별자에 다시 레이블을 붙이는 데 사용됩니다.
이 절은 비규범입니다.
가장 단순한 경우는 전달된 identifier에 대해
identifier map 안에 이미
빈 노드
식별자가
존재하는 경우이며, 이 경우 그것이 그대로 반환됩니다. 그렇지 않으면 새
빈 노드
식별자가
생성됩니다. 전달된 identifier가 null이 아니면,
identifier를
빈 노드
식별자와 연결하는 엔트리가 identifier map 안에 생성됩니다.
이 알고리즘은 null일 수 있는 단일 입력 변수
identifier를 받습니다. 이 알고리즘은 기존
빈
노드 식별자를 새
빈 노드
식별자로 다시 레이블링하기 위해
identifier map을 유지하며,
이는 호출하는 알고리즘이 초기화될 때 재설정됩니다.
null이 아니고
identifier map 안에 엔트리를 가지면, 매핑된 식별자를 반환합니다.
null이 아니면,
identifier에 대한 새 엔트리를 identifier map 안에 생성하고
그 값을 새
빈
노드
식별자로 설정합니다.
새 빈 노드
식별자를 생성하는 한 가지 방법은 카운터를 유지하고,
새 식별자를 생성할 때 이를 증가시킨 뒤
_:b 같은 문자열에 추가하는 것입니다.
이 절에서는 JSON-LD 문서를 RDF 데이터셋으로 역직렬화하고 그 반대로 수행하는 알고리즘을 설명합니다. 이 알고리즘들은 맵 요소에 무작위 접근이 가능한 메모리 내 구현을 위해 설계되었습니다.
이 알고리즘은 JSON-LD 문서를 RDF 데이터셋으로 역직렬화합니다. RDF는 빈 노드가 프로퍼티로 사용되는 것을 허용하지 않지만, JSON-LD는 허용한다는 점에 유의하십시오. 따라서 기본적으로 빈 노드를 프로퍼티로 포함했을 트리플은 JSON-LD를 RDF로 해석할 때 버려집니다.
빈 노드 식별자를 사용하여 프로퍼티에 레이블을 붙이는 것은 더 이상 사용되지 않으며, JSON-LD의 향후 버전에서 제거될 수 있습니다.
옵션이 rdfDirectionnull이
아니면,
i18n-datatype 또는 compound-literal 형식에서 변환하기 위해
특수 처리가 사용됩니다.
구현은 올바른 형식의 트리플과 그래프 이름만 생성해야 MUST 합니다:
이 절은 비규범입니다.
JSON-LD 문서는 확장되고
노드 맵 생성 알고리즘을 사용하여 node map으로
변환됩니다.
이를 통해 문서 안에 표현된 각 그래프를 추출하고 평탄화할 수 있으므로, 각
노드 객체를
처리하기가 더 쉬워집니다.
node map의 각 그래프는
트리플을 추출하기 위해
처리되며,
여기에 모든 (기본이 아닌) 그래프 이름이 적용되어
RDF 데이터셋이
생성됩니다.
node map 안의 각
노드 객체는
주어에 해당하는
@id 엔트리를
가지며,
다른 엔트리들은
술어를 나타냅니다.
각 엔트리 값은
IRI 또는
빈 노드
식별자이거나,
RDF 리터럴로 변환되어
트리플을 생성할 수
있습니다.
목록은
목록을 RDF로 변환하는 알고리즘을 사용하여
RDF 컬렉션으로
변환됩니다.
이 알고리즘은
노드 맵 생성 알고리즘의 결과인
맵 node
map과,
새 그래프 및
트리플이
추가되는 RDF
데이터셋 dataset을 받습니다.
또한 두 개의 선택적 입력 변수
와
produceGeneralizedRdf도 받습니다.
rdfDirection 옵션이
produceGeneralizedRdftrue로 설정되어 있지 않으면,
빈 노드
술어를
포함하는 트리플은
출력에서
제외됩니다.
빈 노드
식별자를 사용하여 프로퍼티에 레이블을 붙이는 것은 더 이상 사용되지 않으며,
JSON-LD의 향후 버전에서 제거될 수 있습니다.
일반화된 RDF
데이터셋 지원도 마찬가지이므로,
옵션도 제거될 수
있습니다.
produceGeneralizedRdf
@default이면,
triples를 dataset의
defaultGraph
속성 값으로 초기화합니다.
그렇지 않으면 triples를 빈
RdfGraph로 초기화하고,
graphName에 대해
graph
name과 함께 dataset의
add 메서드를 사용하여
dataset에 추가합니다.
@type이면, values 안의
각 type에 대해,
subject, predicate에
대한
rdf:type, 그리고
object에
대한 type으로 구성된 새
RdfTriple을 생성하고,
type이
올바른 형식이 아닌
경우를 제외하고, triples의
add 메서드를
사용하여 triples에 추가합니다.
produceGeneralizedRdf
옵션이 true가 아니면,
다음 property-values 쌍으로 계속합니다.
produceGeneralizedRdf
옵션도 제거될 수 있습니다.
이 알고리즘은 노드 객체, 목록
객체, 또는
값 객체를 받아,
이를 트리플의
객체로 사용될
리소스로 변환합니다.
상대
IRI 참조를 포함하는
노드 객체가
알고리즘에 전달되면 null이 반환되며, 그러면 결과
트리플이
무시됩니다.
입력이 목록 객체인 경우, 그 입력에서
생성된 트리플도 반환합니다.
이 절은 비규범입니다.
값 객체는
§ 8.6 데이터
왕복 변환에 설명된 대로
RDF 리터럴로
변환되는 반면, 노드
객체는
IRI,
빈
노드 식별자,
또는 null로 변환됩니다.
이 알고리즘은 두 개의 인수를 받습니다. item은 값 객체, 목록 객체, 또는 노드 객체 중 하나여야 MUST 하며, list triples는 빈 배열입니다.
@id 엔트리의 값이
올바른
형식이 아니면,
null을 반환합니다.
@id 엔트리와 관련된
IRI 또는
빈
노드
식별자를 반환합니다.
@list 엔트리와 관련된 값과
list triples를 전달하여
목록 변환 알고리즘의 결과를 반환합니다.
@value
엔트리와 관련된
값으로 초기화합니다.
@type 엔트리와 관련된 값으로 초기화하거나,
item에 그러한 엔트리가 없으면
null로 초기화합니다.
null이 아니고
올바른 형식의 IRI도 아니며
@json도 아니면,
null을 반환합니다.
@language
엔트리를 가지며
그것이 올바른 형식이
아니면, null을 반환합니다.
@json이면,
value의 내부 표현을 JSON으로 변환한 결과를 사용하여
value를 정규 어휘 형식으로 변환하고,
datatype를 rdf:JSON으로 설정합니다.
true 또는
false이면, value를
§ 8.6
데이터 왕복 변환에 설명된
정규 어휘
형식인
문자열
true 또는 false로 설정합니다.
datatype가 null이면,
datatype를 xsd:boolean으로 설정합니다.
xsd:double이면, value를
[XMLSCHEMA11-2]에
정의되고
§ 8.6
데이터 왕복 변환에 설명된
xsd:double의
정규
어휘 형식의
문자열로
변환합니다.
datatype가 null이면,
datatype를 xsd:double으로 설정합니다.
xsd:integer의
정규
어휘 형식의
문자열로 변환합니다.
datatype가 null이면,
datatype를 xsd:integer로 설정합니다.
null이면,
item이 @language 엔트리를 가지는지에 따라
datatype를 xsd:string 또는 rdf:langString으로
설정합니다.
@direction 엔트리를 포함하고
rdfDirection이 null이
아니면,
item은 특수 규칙을 사용하여 직렬화되는
값 객체입니다.
@language 값으로 초기화하되
소문자로 정규화하거나,
그러한 엔트리가 없으면 빈 문자열("")로 초기화합니다.
i18n-datatype 또는 compound-literal 값을 만들 때에는
상호운용성 향상을 위해 값이 소문자로 정규화됩니다.
rdfDirection이
i18n-datatype이면,
language와 item 안의 @direction 값을
밑줄("_")로 구분하여 https://www.w3.org/ns/i18n#에
추가한 결과로 datatype를 설정합니다.
value와 datatype를 사용하여
literal을
RDF
리터럴로
초기화합니다.
@direction은 @language 없이 사용될 수 있으므로,
http://w3.org/ns/i18n#_ltr처럼 언어 태그를 인코딩하지 않는
데이터타입 IRI를 생성하는 것도
가능하고 유효합니다.
rdfDirection이
compound-literal이면:
rdf:value를 술어로, item 안의
@value 값을 객체로 사용하여 새 트리플을 생성하고,
이를 list triples에 추가합니다.
@language에 대한 엔트리를 가지면,
literal을 주어로,
rdf:language를 술어로, language를
객체로 사용하여 새 트리플을 생성하고, 이를 list triples에 추가합니다.
rdf:direction을 술어로, item 안의
@direction 값을 객체로 사용하여 새 트리플을 생성하고,
이를 list triples에 추가합니다.
@language 엔트리를 가지면, 그
@language 엔트리와 관련된 값을
literal의
언어 태그로
추가합니다.
목록 변환은 목록 객체를 받아, RDF Semantics [RDF11-MT]에 정의된 RDF 컬렉션으로 변환하는 과정입니다.
이 절은 비규범입니다.
목록의 각 요소에 대해
새
빈 노드
식별자가
할당되며, 이는 rdf:first와
rdf:rest를 생성하는 데 사용됩니다. 이 알고리즘은 목록의 머리를 반환하며,
이는 처음 할당된
빈
노드 식별자이거나,
목록이
비어 있으면 rdf:nil입니다. 목록 요소가
IRI를 나타내는 경우,
해당하는 rdf:first 트리플은 생략됩니다.
이 알고리즘은 두 개의 입력을 받습니다: 배열 list와, 생성된 트리플을 반환하는 데 사용되는 빈 배열 list triples입니다.
rdf:nil을 반환합니다.null인 경우를 제외하고,
subject, rdf:first, 그리고 object로 구성된
트리플을
list triples에 추가합니다.
rdf:nil로 초기화합니다.
subject,
rdf:rest, 그리고 rest로 구성된
트리플을
list triples에 추가합니다.
rdf:nil을 반환합니다.
이 알고리즘은 기본 그래프와 0개 이상의 명명된 그래프로 구성된 RDF 데이터셋을 JSON-LD 문서로 직렬화합니다.
RDF 추상 구문에서 RDF 리터럴은 [RDF11-CONCEPTS]에 정의된 것처럼 어휘 형식을 가집니다. 이러한 리터럴의 형식은 이 리터럴을 기반으로 JSON-LD 값을 만들 때 사용됩니다.
이 절은 비규범입니다.
데이터셋 안의 각 그래프를 반복하여, 각
RDF
컬렉션을 목록으로 변환하고,
모든 RDF
리터럴,
IRI
및 빈
노드
식별자에 대해 확장 형식의 JSON-LD 문서를 생성합니다.
useNativeTypes 플래그가 true로 설정되어 있으면,
xsd:integer 또는 xsd:double과 같은
데이터타입 IRI를 가진
RDF 리터럴은
JSON
숫자로
변환되고,
xsd:boolean과 같은
데이터타입 IRI를 가진
RDF 리터럴은
§ 8.6 데이터
왕복 변환에 설명된 것처럼 그
어휘 형식을 기반으로
true 또는 false로 변환됩니다.
useRdfType 플래그가 true로 설정되어 있지 않으면,
연관된 객체가
IRI 또는
빈 노드
식별자인 한,
rdf:type 술어는 @type으로 직렬화됩니다.
옵션이 rdfDirectionnull이
아니면,
i18n-datatype 또는 compound-literal 형식에서 변환하기 위해
특수 처리가 사용됩니다.
이 알고리즘은 하나의 필수 입력과 네 개의 선택적 입력을 받습니다:
RDF
데이터셋 dataset이며,
네 개의 선택적 인수는
플래그입니다. 기본값은
orderedfalse이고, 명시된 곳에서
맵 엔트리 키를
사전순으로 정렬하는 데 사용됩니다,
는 기본값이
rdfDirectionnull,
useNativeTypes 플래그는 기본값이 false,
그리고 useRdfType 플래그는 기본값이 false입니다.
dataset은 iterable이며,
RdfDataset 안에
포함된
그래프와
그래프 이름을 반복할
수 있습니다.
각 그래프 역시
iterable로,
RdfGraph 안에 포함된
트리플을 반복할 수
있습니다.
@default 엔트리 하나로 구성됩니다.
@default로 초기화하고, 그렇지 않으면
graph와 관련된
그래프
이름으로
초기화합니다.
@id
엔트리
하나를 가진 새
맵으로 초기화합니다.
@id 엔트리 하나로 구성된
새 맵으로 초기화합니다.
rdfDirection 옵션이
compound-literal이고 predicate가
rdf:direction이면,
compound map 안에 subject에 대한 엔트리를 추가하고 그 값을
true로 설정합니다.
@id 엔트리 하나로 구성된
새 맵으로 초기화합니다.
rdf:type과 같고,
useRdfType 플래그가
true가 아니며, object가
IRI 또는
빈
노드 식별자이면,
object를
node의 @type
엔트리
값에 추가합니다.
단, 그러한 항목이 이미 존재하는 경우는 제외합니다.
그러한 엔트리가 없으면 이를 생성하고
유일한 항목이 object인
배열로
초기화합니다. 마지막으로 다음
트리플로 계속합니다.
rdfDirection,
그리고 useNativeTypes를 전달하여
RDF를 객체로 변환하는 알고리즘을
사용한 결과로 value를 초기화합니다.
rdf:nil이면,
이는 RDF
컬렉션의 종료를 나타냅니다:
false로 설정합니다.
node 값으로 초기화합니다.property 값으로 초기화합니다.value 값으로 초기화합니다.@id 값이 cl인 것에 대해:
@id 엔트리를 삭제합니다.@value에 대한
엔트리를 추가하고,
그 값은 cl node 안의 rdf:value 엔트리에서
가져옵니다.
@language에 대한
엔트리를 추가하고,
있다면 그 값은 cl node 안의 rdf:language
엔트리에서 가져옵니다.
그 값이 [BCP47]의
2.2.9절에
따라 올바른 형식이 아니면,
invalid language-tagged string
오류가 감지되었으며 처리가 중단됩니다.
@direction에 대한
엔트리를 추가하고,
있다면 그 값은 cl node 안의 rdf:direction
엔트리에서 가져옵니다.
그 값이 "ltr"도 아니고 "rtl"도 아니면,
invalid base direction
오류가 감지되었으며 처리가 중단됩니다.
rdf:nil 엔트리가 없으면,
해당 그래프에는 변환할 필요가 있는 목록이 없으므로 다음
name-graph object 쌍으로 계속합니다.
rdf:nil
엔트리
값으로 초기화합니다.
usages 엔트리 안의 각 항목
usage에 대해, 다음 단계를 수행합니다:
node
엔트리
값의 값으로,
property를
usage의 property 엔트리 값으로,
그리고 head를
usage의 value 엔트리
값으로 초기화합니다.
rdf:rest와 같고,
node의 @id 엔트리 값이
빈
노드 식별자이며,
referenced
once의 node의 @id
엔트리와
관련된
엔트리
값이
맵이고,
node가 rdf:first 및 rdf:rest
엔트리를
가지며,
둘 다 값으로 단일 요소로 구성된
배열을 가지고,
node가 선택적 @type
엔트리
이외의 다른
엔트리를
가지지 않으며,
그 값이
rdf:List와 같은 단일 항목을 가진 배열인 동안,
node는 올바른 형식의 목록 노드를 나타냅니다.
목록을 그 머리 방향으로 역방향 순회하기 위해 다음 단계를 수행합니다:
rdf:first
엔트리의 유일한
항목을 list 배열에 추가합니다.
@id
엔트리 값을
list nodes 배열에 추가합니다.
node의 @id
엔트리와 관련된
referenced once의
엔트리 값으로
초기화합니다.
node
엔트리 값으로,
property를 node usage의
property 엔트리 값으로,
그리고 head를
node usage의 value 엔트리
값으로 설정합니다.
@id
엔트리가
빈
노드 식별자가 아니라
IRI이면,
while 루프를 종료합니다.
@id 엔트리를 제거합니다.
@list 엔트리를 추가하고
그 값을 list 배열로 초기화합니다.ordered가 true이면:
이 알고리즘은 RDF 리터럴을 JSON-LD 값 객체로 변환하고, RDF 빈 노드 또는 IRI를 JSON-LD 노드 객체로 변환합니다.
이 절은 비규범입니다.
RDF 리터럴은 값 객체로 변환되는 반면, IRI와 빈 노드 식별자는 노드 객체로 변환됩니다.
rdf:JSON 데이터타입을 가진 리터럴은
[JSON-LD11]의
JSON
datatype에 정의된 어휘-값 매핑을 기반으로 하는 내부 표현과
@json의 @type을 사용하여
값 객체로 변환됩니다.
옵션이
rdfDirectioni18n-datatype으로 설정된 경우,
https://www.w3.org/ns/i18n#로 시작하는 데이터타입을 가진 리터럴은
데이터타입에서
언어
태그와 기본
방향을 디코딩하여
값 객체로 변환됩니다.
옵션이
rdfDirectioncompound-literal로 설정된 경우,
rdf:direction을 사용하는 빈 노드 객체는
rdf:value, rdf:language, 그리고 rdf:direction 프로퍼티를
디코딩하여
값 객체로 변환됩니다.
useNativeTypes 플래그가 true로 설정되어 있으면,
xsd:integer 또는 xsd:double과 같은
데이터타입 IRI를 가진
RDF 리터럴은
JSON
숫자로
변환되고,
xsd:boolean과 같은
데이터타입 IRI를 가진
RDF 리터럴은
§ 8.6 데이터
왕복 변환에 설명된 것처럼 그
어휘 형식을 기반으로
true 또는 false로 변환됩니다.
이 알고리즘은 세 개의 필수 입력을 받습니다:
맵으로
변환될 value,
,
그리고 rdfDirectionuseNativeTypes 플래그입니다.
@id 엔트리
하나로 구성된
새 맵을 반환합니다.
null로 초기화합니다useNativeTypes가 true이면
xsd:string과 같으면,
converted value를 value의
어휘
형식으로 설정합니다.
xsd:boolean과 같으면,
value의
어휘
형식이 true와 일치하면
converted value를 true로 설정하고,
false와 일치하면 false로 설정합니다. 둘 중 어느 것과도
일치하지 않으면
type을 xsd:boolean으로 설정합니다.
xsd:integer 또는
xsd:double과 같고 그
어휘
형식이
[XMLSCHEMA11-2]에
따라 유효한 xsd:integer 또는 xsd:double이면,
converted value를
어휘
형식을 JSON
숫자로
변환한 결과로 설정합니다.
json-ld-1.0이 아니며,
value가 JSON 리터럴이면,
converted value를
value의 어휘 값을
JSON-LD
내부 표현으로 바꾼 결과로 설정하고,
type을 @json으로 설정합니다.
value의 어휘 값이 [RFC8259]의
JSON 문법에 따라 유효한 JSON이 아니면,
invalid JSON literal
오류가 감지되었으며 처리가 중단됩니다.
https://www.w3.org/ns/i18n#로 시작하고,
rdfDirection이
i18n-datatype이면:
"_")까지의 문자열 접두사가 비어 있지 않으면,
result에
@language
엔트리를
추가하고
그 값을 해당 접두사로 설정합니다.
@direction은
@language 없이 사용될 수 있으므로,
http://w3.org/ns/i18n#_ltr처럼 언어 태그를 인코딩하지 않는
데이터타입 IRI를
생성하는 것도
가능하고 유효합니다.
@direction
엔트리를
추가하고
그 값을 밑줄("_") 뒤에 오는
프래그먼트
식별자의 부분 문자열로 설정합니다.
@language
엔트리를 추가하고
그 값을 value의
언어
태그로
설정합니다.
xsd:string과 같으면 무시합니다.
@value 엔트리를
추가합니다.
null이 아니면, result에
값이 type으로 설정된
@type
엔트리를 추가합니다.
JSON-LD를 RDF로 역직렬화할 때,
JSON 네이티브
숫자는
0이 아닌 소수부가 있는지 여부(모듈로 1 연산의 결과)에 따라
xsd:integer 또는 xsd:double로 자동 타입 강제 변환되고,
불리언 값 true와 false는 xsd:boolean으로 강제 변환되며,
문자열은
xsd:string으로 강제 변환됩니다.
JSON, 숫자, 또는 불리언 값 자체는
정규 어휘 형식, 즉
[XMLSCHEMA11-2]에
정의된 결정적 문자열 표현으로 변환됩니다.
정수의 정규 어휘
형식, 즉 0이 아닌 소수부가 없는
숫자
이고 절댓값이 1021보다 작은 경우,
또는 xsd:integer로 강제 변환된
숫자는
선택적 선행 마이너스 부호가 붙은 유한 길이의 십진 숫자(0-9) 시퀀스입니다. 선행
0은 금지됩니다. JavaScript에서 구현자는 정수를
정규 어휘
형식으로 변환하기 위해 다음 코드 조각을 사용할 수 있습니다:
(value).toFixed(0).toString()
double의 정규 어휘
형식, 즉
0이 아닌 소수부를 가지거나 절댓값이 1021 이상인
숫자,
또는 xsd:double로 강제 변환된
숫자는
가수 뒤에 문자 E가 오고, 그 뒤에 지수가 오는 형식으로 구성됩니다. 가수는
십진수이고 지수는 정수입니다. 지수에서 선행 0과 선행 플러스 부호(+)는
금지됩니다.
지수가 0이면 E0으로 표시됩니다. 가수에서는 앞의 선택적 플러스 부호가 금지되고
소수점이 필요합니다. 선행 및 후행 0은 다음 조건에 따라 금지됩니다:
숫자 표현은 소수점 왼쪽에 0이 아닌 단일 숫자가 있고, 표현되는 값이 0이 아닌 한 소수점
오른쪽에 적어도 하나의 숫자가 있도록 정규화되어야 합니다. 0의 정규 표현은
0.0E0입니다.
xsd:double의 값 공간은 IEEE
double-precision 64-bit floating point type [IEEE-754-2008]에 의해
정의되는 반면, JSON
숫자의 값
공간은
지정되어 있지 않습니다. JSON-LD를 RDF로 역직렬화할 때 가수는 소수점 뒤
15 자리로 반올림됩니다. JavaScript에서 구현자는 double을
정규 어휘
형식으로 변환하기 위해 다음 코드 조각을 사용할 수 있습니다:
(value).toExponential(15).replace(/(\d)0*e\+?/,'$1E')
불리언 값 true와 false의
정규 어휘
형식은 문자열
true와 false입니다.
JSON
리터럴의
정규 어휘 형식은
[RFC8259]의
JSON 형식으로 내부 표현을
직렬화한 결과이며,
[JSON-LD11]의
The rdf:JSON Datatype
안의 값 공간 설명 제약을 준수합니다.
JSON 네이티브 숫자가 RDF로 역직렬화될 때,
반올림 오류가 발생할 수 있으므로 손실 없는 데이터 왕복 변환은 보장될 수 없습니다.
RDF를 JSON-LD로 직렬화할 때도
유사한 반올림 오류가 발생할 수 있습니다. 또한 데이터타입이나 어휘 표현이 손실될 수 있습니다.
예를 들어 값이 2.0인 xsd:double은 RDF에서 JSON-LD로 변환된 뒤 다시
RDF로 변환될 때, 정규 어휘 형식의
값 2를 가진
xsd:integer가 됩니다. 실제로는 xsd:integer의 값 공간이 제한되어
있지 않기 때문에 이를
숫자로
손실 없이
변환하는 것이 불가능할 수 있다는 점을 강조하는 것이 중요합니다. JSON 명세 [RFC8259]도
숫자의 값
공간을
제한하지 않지만, 구체적인 구현은 일반적으로 제한된 값 공간을 가집니다.
손실 없는 왕복 변환을 보장하기 위해
RDF를 JSON-LD로 직렬화하는 알고리즘은
xsd:integer, xsd:double, 또는
xsd:boolean과 같은
데이터타입
IRI를 가진
RDF 리터럴이
해당 JSON 네이티브 값으로 변환되는지 여부를 제어하는
useNativeTypes 플래그를 지정합니다.
useNativeTypes 플래그가 false로 설정되어 있으면,
모든 리터럴은 원래 문자열 표현으로 유지됩니다.
일부 버전의 PHP 네이티브 구현 같은 일부 JSON 직렬화기는 슬래시 문자를 백슬래시로
이스케이프합니다. 예를 들어 값
http://example.com/은 http:\/\/example.com\/로 직렬화될 수 있습니다.
이는 다른 JSON 파서가 이러한 이스케이프 문자를 이해하지 못할 수 있으므로 문제가 됩니다.
JSON-LD에서 슬래시를 백슬래시로 이스케이프할 필요는 없습니다. JSON-LD 프로세서 간의
상호운용성을 돕기 위해 슬래시는 백슬래시로 이스케이프되어서는
MUST
NOT 안 됩니다.
이 API는 개발자가 JSON-LD 데이터를 작업하기 더 쉬운 다양한 출력 형식으로 변환할 수 있게 해 주는 깔끔한 메커니즘을 제공합니다.
JSON-LD API는 여러 지연 작업의 결과를 나타내기 위해 Promises를 사용합니다. Promises는 [ECMASCRIPT]에 정의되어 있습니다. 명세 내 일반적인 사용은 [promises-guide]에서 확인할 수 있습니다. 구현은 일반적으로 동일한 메서드, 인수, 옵션을 사용하고 동일한 결과를 반환하는 한, 각자의 네이티브 환경에 적합한 방식으로 구현할 MAY 수 있습니다.
인터페이스는 [Exposed=JsonLd]로 표시되며,
이는 전역 인터페이스를 생성합니다.
JSON-LD에서 WebIDL을 사용하는 것은 브라우저 내 사용에 적합하지만,
그러한 사용으로 제한되지는 않습니다.
JsonLdProcessor 인터페이스JsonLdProcessor
인터페이스는 개발자가 JSON-LD 변환 메서드에
접근하는 데 사용하는 고수준 프로그래밍 구조입니다.
구현이 입력 매개변수를 수정하지 않는다는 점을 강조하는 것이 중요합니다.
오류가 감지되면, Promise는
적절한 를 가진
codeJsonLdError로 거부되고
처리가 중지됩니다.
documentLoader
옵션이 지정되면, 원격 문서와 컨텍스트를 역참조하는 데 사용됩니다.
반환된 RemoteDocument 안의
은
base IRI로 사용되고,
documentUrl은
HTTP Link Header를 직접 확인하는 대신 사용됩니다. 단순화를 위해, 이 문서의 알고리즘에서는
이를 직접 언급하지 않습니다.
contextUrl
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>compact(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>expand(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); static Promise<JsonLdRecord>flatten(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>fromRdf(RdfDatasetinput, optionalJsonLdOptionsoptions = {}); static Promise<RdfDataset>toRdf(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); };
compact()
축약은 축약 알고리즘의 단계에 따라, 주어진 input을 context를 사용하여 처리합니다:
최종 출력은 compacted output에서 파생된
맵입니다.
compacted output이 배열이면, 이는
compacted output 값을 가진 (별칭이 지정되었을 수 있는) @graph
엔트리에 포함됩니다.
그렇지 않으면 compacted output이
맵 결과로 사용됩니다.
context가 null이 아니면,
@context 엔트리가
맵 결과에 추가됩니다.
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
RemoteDocument이면,
remote document를 input으로 초기화합니다.
extractAllScripts 옵션을
extractAllScripts로 전달하여,
LoadDocumentCallback을 사용해 이를
remote document로 기다리고 역참조합니다.
expand() 메서드를 사용한 결과로 설정합니다.
이때 remote document를 사용하거나,
remote document가 없으면
input에 대해
input을 사용하고,
options를 사용하며,
ordered를
false로 설정하고,
extractAllScripts의 기본값은
false입니다.
documentUrl로,
그렇지 않으면
options의
base 옵션으로 설정합니다.
@context
엔트리를 가진
맵이면,
context를 그
엔트리의 값으로 설정하고,
그렇지 않으면 context로 설정합니다.
base 옵션으로 설정합니다.
그렇지 않고 compactToRelative 옵션이 true이면,
사용 가능한 경우 현재 처리 중인 문서의
IRI로 설정합니다.
그렇지 않으면 null로 설정합니다.
null,
element로 expanded input,
그리고 options의
compactArrays
및 ordered
플래그를 사용합니다.
JsonLdOptions 타입은
기본 옵션 값을 정의합니다.
expand()
확장은 확장 알고리즘의 단계에 따라, 주어진 input을 처리합니다:
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
RemoteDocument이면,
remote document를 input으로 초기화합니다.
extractAllScripts 옵션을
extractAllScripts로 전달하여,
LoadDocumentCallback을 사용해 이를
remote document로 기다리고 역참조합니다.
document가
문자열이면,
이를 내부
표현으로 변환합니다.
document를
내부
표현으로 변환할 수 없으면,
loading document failed 오류를
전달하여 promise를 거부합니다.
documentUrl로 설정됩니다.
그렇지 않으면
options의
base 옵션으로 설정됩니다.
설정되어 있으면,
options의
base 옵션이
base IRI를 재정의합니다.
expandContext 옵션이 설정되어 있으면,
expandContext를
local
context로,
active context의
original
base URL을 base URL로 전달하여
컨텍스트 처리 알고리즘을 사용해
active context를 갱신합니다.
expandContext가
@context 엔트리를 가진
맵이면,
그 엔트리의 값을
local
context로 대신 전달합니다.
contextUrl을
가지면,
contextUrl을
local
context로,
contextUrl을
base URL로 전달하여
컨텍스트 처리 알고리즘을 사용해
active context를 갱신합니다.
document 또는
remote document가 없으면 element로
input,
active property로 null,
사용할 수 있으면 base URL로
documentUrl,
그렇지 않으면
options의
base 옵션,
그리고 options의
frameExpansion
및 ordered
플래그를 전달합니다.
JsonLdOptions 타입은
기본 옵션 값을 정의합니다.
flatten()
평탄화는 주어진 input을 평탄화하고, 제공된 context를 사용하여 선택적으로 축약하며, 평탄화 알고리즘의 단계에 따릅니다:
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
RemoteDocument이면,
remote document를 input으로 초기화합니다.
extractAllScripts 옵션을
extractAllScripts로 전달하여
LoadDocumentCallback을 사용해 이를
remote document로 기다리고 역참조합니다.
expand() 메서드를 사용한 결과로 설정합니다.
이때 remote document를 사용하거나,
remote document가 없으면
input에 대해
input을 사용하고,
options를 사용하며
ordered를
false로 설정합니다.
ordered 플래그를 전달합니다.
null이면, 결과는 축약되지 않고 확장된 형식으로 유지됩니다.
JsonLdOptions 타입은
기본 옵션 값을 정의합니다.
fromRdf()
RDF를 JSON-LD로 직렬화하는 알고리즘의 단계에 따라, 주어진 input을 확장된 형식의 JSON-LD 문서로 변환합니다:
이 인터페이스는
toRdf() 메서드 이외에,
임의의 입력에서
RdfDataset을 생성하는
수단을 정의하지 않습니다.
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
JsonLdOptions 타입은
기본 옵션 값을 정의합니다.
toRdf()
JSON-LD를 RDF로 역직렬화하는 알고리즘의
단계에 따라,
주어진 input을
RdfDataset으로
변환합니다:
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
expand() 메서드를 사용한 결과로 설정하고,
ordered를
false로 설정합니다.
RdfDataset dataset을 생성합니다.produceGeneralizedRdf 플래그를
전달하여
JSON-LD를 RDF로 역직렬화하는
알고리즘을 호출합니다.
produceGeneralizedRdf 옵션도
제거될 수 있습니다.
JsonLdOptions 타입은
기본 옵션 값을 정의합니다.
WebIDLtypedef record<USVString, any> JsonLdRecord;
JsonLdRecord는
맵의 정의이며,
JSON Object를 파싱한 결과인
임의의 맵
엔트리를 담는 데 사용됩니다.
WebIDLtypedef (JsonLdRecordor sequence<JsonLdRecord> or USVString orRemoteDocument)JsonLdInput;
JsonLdInput 인터페이스는
JsonLdRecord,
JsonLdRecords의
sequence,
역참조하여 유효한 JSON 문서를 가져올 수 있는
IRI를 나타내는
문자열,
또는 이미 역참조된
RemoteDocument일 수 있는 입력 값을
가리키는 데 사용됩니다.
값이 JsonLdRecord 또는 JsonLdRecords의 sequence인 경우,
그 값들은 동등한 내부 표현 값으로 취급됩니다.
여기서 JsonLdRecord는
맵과 동등하며,
JsonLdRecords의 sequence는
맵의
배열과 동등합니다.
맵 엔트리는
[INFRA]에서의 동등한 값으로 변환됩니다.
WebIDLtypedef (JsonLdRecordor sequence<(JsonLdRecordor USVString)> or USVString)JsonLdContext;
JsonLdContext 인터페이스는
JsonLdRecord,
JsonLdRecords의
sequence,
또는 역참조하여 유효한 JSON 문서를 가져올 수 있는
IRI를 나타내는
문자열일 수 있는
값을 가리키는 데 사용됩니다.
값이 JsonLdRecord 또는 JsonLdRecords의 sequence인 경우,
그 값들은 동등한 내부 표현 값으로 취급됩니다.
여기서 JsonLdRecord는
맵과 동등하며,
JsonLdRecords의 sequence는
맵의
배열과 동등합니다.
맵 엔트리는
[INFRA]에서의 동등한 값으로 변환됩니다.
RdfDataset 인터페이스는
RDF
데이터셋에 대한 작업을 설명하며,
JsonLdProcessor
인터페이스의
fromRdf()
및 toRdf()
메서드에서 사용됩니다.
이 인터페이스는 새 RDF
데이터셋을 구성하는 데
사용될 수 있으며,
이는 defaultGraph 속성을 통해 접근할 수 있는
기본 그래프를 가집니다.
WebIDL[Exposed=JsonLd] interfaceRdfDataset{constructor(); readonly attributeRdfGraphdefaultGraph; voidadd(USVString graphName,RdfGraphgraph); iterable<USVString?,RdfGraph>; };
add()RdfDataset에
RdfGraph와 그에
연결된
그래프 이름을
추가합니다.
JSON-LD를 RDF로 역직렬화하는
알고리즘에서 사용됩니다.
graphName은
올바른 형식의
IRI 또는
빈 노드
식별자여야 MUST 합니다.
RdfDataset에 추가할
RdfGraph입니다.
defaultGraphiterable
null,
IRI,
또는 빈
노드 식별자이고,
graph는 RdfGraph
인스턴스입니다.
RdfGraph 인터페이스는
JsonLdProcessor
인터페이스의
fromRdf()
및 toRdf()
메서드에서 사용되는
RDF 그래프에 대한
작업을 설명합니다.
이 인터페이스는 새 RDF
그래프를 구성하는 데
사용될 수 있으며,
이는 0개 이상의 RdfTriple
인스턴스로 구성됩니다.
WebIDL[Exposed=JsonLd] interfaceRdfGraph{constructor(); voidadd(RdfTripletriple); iterable<RdfTriple>; };
add()RdfGraph에
RdfTriple을
추가합니다.
JSON-LD를 RDF로 역직렬화하는
알고리즘에서 사용됩니다.
RdfGraph에
추가할
RdfTriple입니다.
iterable
RdfTriple 인스턴스에
대한
값 반복자입니다.
주어진 RdfTriple
인스턴스는 특정
RdfDataset 인스턴스
안에서 둘 이상의 그래프에
나타날 수 있음에 유의하십시오.
RdfTriple 인터페이스는
트리플을
설명합니다.
WebIDL[Exposed=JsonLd] interfaceRdfTriple{constructor(); readonly attribute USVStringsubject; readonly attribute USVStringpredicate; readonly attribute (USVString orRdfLiteral)_object; };
subjectpredicateobjectRdfLiteral 인터페이스는
RDF 리터럴을
설명합니다.
WebIDL[Exposed=JsonLd] interfaceRdfLiteral{constructor(); readonly attribute USVStringvalue; readonly attribute USVStringdatatype; readonly attribute USVString?language; };
valuedatatyperdf:langString이면,
language가 지정되어야 MUST
합니다.
languagedatatype은 rdf:langString이어야
MUST 합니다.
JsonLdOptions
타입은 다양한 옵션을
JsonLdProcessor
메서드에 전달하는 데 사용됩니다.
WebIDLdictionaryJsonLdOptions{ USVString?base= null; booleancompactArrays= true; booleancompactToRelative= true;LoadDocumentCallback?documentLoader= null; (JsonLdRecord? or USVString)expandContext= null; booleanextractAllScripts= false; booleanframeExpansion= false; booleanordered= false; USVStringprocessingMode= "json-ld-1.1"; booleanproduceGeneralizedRdf= true; USVString?rdfDirection= null; booleanuseNativeTypes= false; booleanuseRdfType= false; };
basecompactArraystrue로 설정되면, JSON-LD 프로세서는
축약 중에 요소가 하나뿐인 배열을 해당 요소로 대체합니다.
false로 설정되면,
모든 배열은 요소가 하나뿐이어도 배열로 유지됩니다.
compactToRelativebase 옵션 또는 문서 위치에
상대적으로 축약되는지 여부를 결정합니다.
documentLoaderLoadDocumentCallback을 구현합니다.
지정되면 원격 문서와 컨텍스트를 가져오는 데 사용됩니다.
지정되지 않으면 프로세서의 내장 로더가 사용됩니다.
expandContextextractAllScriptstrue로 설정되면,
HTML에서 JSON-LD script
요소를 추출할 때,
특정 프래그먼트 식별자가
대상이 아닌 한,
발견된 모든 JSON-LD script
요소를 필요한 경우
배열 형식으로
추출합니다.
frameExpansionorderedtrue로 설정되면,
표시된 특정 알고리즘 처리 단계가 사전순으로 정렬됩니다.
false이면 처리에서 순서가 고려되지 않습니다.
processingModejson-ld-1.0 또는 json-ld-1.1로 설정된 경우,
구현은 이 명세에 정의된 알고리즘과 정확히 동일한 결과를 생성해야 합니다.
다른 값으로 설정된 경우,
JSON-LD 프로세서는 애플리케이션별 최적화를 가능하게 하기 위해 이 명세에 정의된 알고리즘을
확장하거나 수정할 수 있습니다.
그러한 최적화의 정의는 이 명세의 범위를 벗어나며 따라서 정의되지 않습니다.
결과적으로 서로 다른 구현은 서로 다른 최적화를 구현할 수 있습니다.
개발자는 json-ld로 시작하는 모드를 정의해서는 안 됩니다.
이는 이 명세의 향후 버전을 위해 예약되어 있기 때문입니다.
produceGeneralizedRdftrue로 설정되면, JSON-LD 프로세서는
트리플
술어에 대해
빈 노드를
내보낼 수 있으며, 그렇지 않으면 생략됩니다.
일반화된 RDF
데이터셋은 [RDF11-CONCEPTS]에 정의되어 있습니다.
produceGeneralizedRdf 옵션도
제거될 수 있습니다.
rdfDirectioni18n-datatype으로 설정되면,
언어
태그(있는 경우)와
기본 방향을 모두
인코딩한 https://www.w3.org/ns/i18n# 기반의 데이터타입
IRI를 사용하여
RDF
리터럴이 생성됩니다.
RDF에서 변환할 때 이 데이터타입은 디코딩되어
@language(있는 경우) 및 @direction을 포함하는
값 객체를
만듭니다.
compound-literal로 설정되면,
리터럴 대신
빈
노드가 내보내지며,
여기서 빈 노드는 rdf:value, rdf:direction,
그리고 rdf:language(있는 경우) 프로퍼티의 주어입니다.
RDF에서 변환할 때 이 객체는 디코딩되어
@language(있는 경우) 및 @direction을 포함하는
값 객체를
만듭니다.
useNativeTypes@type의 필요성을 피합니다.
useRdfTyperdf:type 프로퍼티가 @type을 사용하는 대신 출력에서
IRI로 유지되게 합니다.
API 구현의 사용자는 원격 문서와 컨텍스트가 검색되는 방식을 제어하기 위해 콜백을 활용할 수 있습니다. 이 절에서는 해당 콜백의 매개변수와 검색된 컨텍스트를 반환하는 데 사용되는 데이터 구조를 자세히 설명합니다.
LoadDocumentCallback은
원격 문서와 컨텍스트를 검색하는 데 사용되기 위해 사용자 지정 문서 로더가 구현해야 하는 콜백을
정의합니다.
이 콜백은 RemoteDocument로 해결되는
Promise를 반환합니다.
실패 시, Promise는 적절한 오류
code를 가진
JsonLdError로
거부됩니다.
WebIDLcallbackLoadDocumentCallback= Promise<RemoteDocument> ( USVString url, optionalLoadDocumentOptions? options );
다음 알고리즘은 기본 콜백을 설명하고 콜백 구현에 요구 사항을 부여합니다.
Promise
promise를 생성하고 이를 반환합니다.
다음 단계는 지연됩니다.
application/ld+json을 우선하고,
그 다음 application/json을 선호해야 MUST 합니다.
requestProfile이 설정되어 있으면,
이는 application/ld+json의 profile로 추가되어야
MUST 합니다.
프로세서는 [RFC6839]에 정의된
+json 접미사를 사용하는 다른 미디어 타입을 포함할
MAY 수 있습니다.
303 "See Other" 리디렉션은 제외).
application/json도 아니고,
[RFC6839]에 정의된
+json 접미사를 가진 어떤 미디어 타입도 아니며,
응답에 application/ld+json 타입과 함께
alternate 링크 관계를 사용하는 HTTP Link Header
[RFC8288]가 있으면,
이전 url에 상대적인 관련 href로 url을 설정하고
2단계부터 알고리즘을 다시 시작합니다.
application/ld+json을 제외한
application/json이거나
[RFC6839]에 정의된
+json 접미사를 가진 미디어 타입이고,
응답에 http://www.w3.org/ns/json-ld#context 링크 관계를 사용하는
HTTP Link Header [RFC8288]가 있으면,
관련 href로 contextUrl을 설정합니다.
http://www.w3.org/ns/json-ld#context 링크 관계를 사용하는 여러
HTTP Link Header가 발견되면,
promise는 가
codemultiple context link headers로 설정된
JsonLdError로 거부되고,
처리가 종료됩니다.
프로세서는 document를 내부 표현으로 변환할 MAY 수 있습니다.
HTTP Link Header는
application/ld+json,
text/html, 또는 application/xhtml+xml로 제공되는 문서에 대해
무시됩니다.
application/json,
application/ld+json,
또는 [RFC6839]에 정의된
+json 접미사를 사용하는 다른 미디어 타입 중 어느 것도 아닙니다.
loading document failed 오류를
전달하여 promise를 거부합니다.
documentUrl로,
document를 document로,
반환된 Content-Type(매개변수 제외)을
contentType으로,
반환된 profile 매개변수가 있으면 그것을, 없으면 null을
profile로,
그리고 contextUrl 또는 null을
contextUrl로 사용하여
새 RemoteDocument remote document를
생성합니다.
documentLoader 옵션을 통해 설정된 사용자 지정
LoadDocumentCallback은 잘 알려진 컨텍스트 문서의
로컬 캐시를 유지하거나 애플리케이션별 URL 프로토콜을 구현하는 데 사용될 수 있습니다.
LoadDocumentOptions 타입은
다양한 옵션을
LoadDocumentCallback에 전달하는 데 사용됩니다.
WebIDLdictionaryLoadDocumentOptions{ booleanextractAllScripts= false; USVStringprofile= null; (USVString or sequence<USVString>)requestProfile= null; };
extractAllScriptstrue로 설정되면,
HTML에서 JSON-LD
script 요소를 추출할 때,
특정 프래그먼트
식별자가 대상이 아닌 한,
발견된 모든 JSON-LD
script 요소를 필요한 경우
배열 형식으로
추출합니다.
profilecontentType이 text/html
또는 application/xhtml+xml이면,
이 옵션은 JSON-LD
script 요소를 선택하는 데 사용할
profile을 결정합니다.requestProfileprofile 매개변수로 사용할 하나 이상의 IRI입니다.
([JSON-LD11]의
IANA 고려사항을
참조하십시오.)
RemoteDocument 타입은
LoadDocumentCallback이 원격 문서 또는 컨텍스트에 대한
정보를 반환하는 데 사용됩니다.
WebIDL[Exposed=JsonLd] interfaceRemoteDocument{constructor(); readonly attribute USVStringcontentType; readonly attribute USVStringcontextUrl; attribute anydocument; readonly attribute USVStringdocumentUrl; readonly attribute USVStringprofile; };
contentTypecontextUrlhttp://www.w3.org/ns/json-ld#context 링크 관계를 사용하는
HTTP Link Header [RFC8288]의 값입니다.
응답의 Content-Type이
application/ld+json이면,
HTTP Link Header는 무시됩니다.
http://www.w3.org/ns/json-ld#context 링크 관계를 사용하는 여러
HTTP Link Header가 발견되면,
LoadDocumentCallback의
Promise는
code가
multiple context link headers로 설정된
JsonLdError로 거부됩니다.
documentdocumentUrlprofilecontentType의 일부로 검색된
모든 profile 매개변수의 값입니다.이 절은 HTML script 추출을 지원하는
documentLoader에서 사용할 수 있는 선택적 기능을
설명합니다.
documentLoader의 구현은 HTML
[HTML]
문서 안에 포함된
script 요소에서
JSON-LD 추출을 지원할 MAY 수 있습니다.
이 절은 그러한 프로세서의 규범적 동작을 설명합니다.
그러한 프로세서는 HTML script
추출을 지원합니다.
이 절은 HTML에서 JSON-LD 추출을 지원하기 위해
LoadDocumentCallback에 지정된 알고리즘의 확장을
설명합니다.
2단계는 다음을 추가하도록 갱신됩니다:
HTML
script 추출을 지원하는 프로세서는
requestProfile이
http://www.w3.org/ns/json-ld#context인 경우를 제외하고,
어떤 선호 수준에서든 text/html을 포함해야
MUST 하며,
어떤 선호 수준에서든 application/xhtml+xml을 포함할
MAY 수 있습니다.
5단계 뒤에 다음 처리 단계를 추가합니다:
그렇지 않고, 검색된 리소스의
Content-Type이
text/html
또는 application/xhtml+xml 중 하나이면:
그러한 요소를 찾을 수 없거나,
찾은 요소가 JSON-LD script 요소가 아니면,
promise는 가
codeloading document failed로 설정된
JsonLdError로 거부되고,
처리가 종료됩니다.
profile
옵션이 지정되어 있으면,
발견되는 경우 application/ld+json의
type
속성과
profile 옵션의 값을 함께 가진
document 안의 첫 번째
script
요소의
textContent를 변환한 결과로
source를 설정합니다.
extractAllScripts 옵션이 존재하지 않거나
false이면,
document 안의 첫 번째
JSON-LD script
요소의
textContent로
source를 설정합니다.
그러한 요소를 찾을 수 없거나,
찾은 요소가 JSON-LD script 요소가 아니면,
promise는 가
codeloading document failed로 설정된
JsonLdError로 거부되고,
처리가 종료됩니다.
JsonLdError로 promise를 거부하고
처리를 종료합니다.
extractAllScripts 옵션이 존재하지 않거나
false이면,
promise는 code가
loading document failed로 설정된
JsonLdError로 거부되고,
처리가 종료됩니다.
extractAllScripts 옵션은 true입니다.
document를 새 빈
배열로
설정합니다.
input 안의 각
JSON-LD
script 요소에 대해:
JsonLdError로 promise를
거부하고 처리를 종료합니다.
이 알고리즘은
JSON-LD script
요소의 텍스트 콘텐츠를
맵 또는
맵의
배열로 추출합니다.
JSON-LD script 요소는 HTML
[HTML] 문서 안의
script
요소로,
type 속성이
application/ld+json으로 설정된 것입니다.
이 알고리즘은 단일 필수 입력 변수 source를 받습니다. 이는 HTML script 요소의 textContent입니다.
invalid script element가 감지되었으며,
처리가 중단됩니다.
이 절은 오류 처리를 위해 JSON-LD API 안에서 사용되는 데이터타입 정의를 설명합니다.
JsonLdError 타입은 처리 오류를
보고하는 데 사용됩니다.
WebIDLdictionaryJsonLdError{JsonLdErrorCodecode; USVString?message= null; };
codemessageJsonLdErrorCode는 유효한
JSON-LD 오류 코드의 모음을 나타냅니다.
WebIDLenumJsonLdErrorCode{ "colliding keywords", "conflicting indexes", "context overflow", "cyclic IRI mapping", "invalid @id value", "invalid @import value", "invalid @included value", "invalid @index value", "invalid @nest value", "invalid @prefix value", "invalid @propagate value", "invalid @protected value", "invalid @reverse value", "invalid @version value", "invalid base direction", "invalid base IRI", "invalid container mapping", "invalid context entry", "invalid context nullification", "invalid default language", "invalid IRI mapping", "invalid JSON literal", "invalid keyword alias", "invalid language map value", "invalid language mapping", "invalid language-tagged string", "invalid language-tagged value", "invalid local context", "invalid remote context", "invalid reverse property map", "invalid reverse property value", "invalid reverse property", "invalid scoped context", "invalid script element", "invalid set or list object", "invalid term definition", "invalid type mapping", "invalid type value", "invalid typed value", "invalid value object value", "invalid value object", "invalid vocab mapping", "IRI confused with prefix", "keyword redefinition", "loading document failed", "loading remote context failed", "multiple context link headers", "processing mode conflict", "protected term redefinition" };
colliding keywordsconflicting indexescontext overflow@context URL의 최대 개수를 초과했습니다.순환 IRI 매핑
invalid @id value@id 엔트리가 발견되었습니다.
invalid @import value@import에 대한 잘못된 값이 발견되었습니다.invalid @included valueinvalid @index value@index 엔트리가 발견되었습니다.
invalid @nest value@nest에 대한 잘못된 값이 발견되었습니다.invalid @prefix value@prefix에 대한 잘못된 값이 발견되었습니다.invalid @propagate value@propagate에 대한 잘못된 값이 발견되었습니다.invalid @protected value@protected에 대한 잘못된 값이 발견되었습니다.invalid @reverse value@reverse 엔트리에 대한 잘못된 값이 감지되었습니다.
즉, 값이 맵이 아니었습니다.invalid @version value@version 엔트리가 범위를 벗어난 값과 함께
사용되었습니다.
invalid base direction@direction의 값이 "ltr",
"rtl",
또는 null이 아니므로 잘못되었습니다.
invalid base IRI
null도 아닙니다.
invalid container mapping@container 엔트리가 발견되었습니다:
@list,
@set,
@language,
@index,
@id,
@graph, 또는
@type.
invalid context entryinvalid context nullificationinvalid default languagenull이 아니므로 잘못되었습니다.
invalid IRI mapping
invalid JSON literalinvalid keyword aliasinvalid language map valueinvalid language mapping@language 엔트리가 발견되었는데, 그 값이
문자열도 아니고
null도 아니므로 잘못되었습니다.
invalid language-tagged stringinvalid language-tagged valuetrue, 또는 false가 감지되었습니다.
invalid local contextinvalid remote contextinvalid reverse propertyinvalid reverse property map@context를 제외한
키워드가
허용되지 않습니다.
invalid reverse property valueinvalid scoped contextinvalid script elementinvalid set or list objectinvalid term definitioninvalid type mapping@type 엔트리가 발견되었는데, 그 값이
IRI로 확장될 수
없었습니다.
invalid type value@type 엔트리에 대한 잘못된 값이
감지되었습니다. 즉, 값이 문자열도 아니고
문자열의
배열도 아니었습니다.
invalid typed valueinvalid value objectinvalid value object value@value 엔트리에 대한 잘못된 값이
감지되었습니다.
즉, 스칼라도
아니고
null도 아닙니다.
invalid vocab mappingnull도 아닙니다.
IRI confused with prefix
keyword redefinitionloading document failedloading remote context failedmultiple context link headershttp://www.w3.org/ns/json-ld#context 링크 관계를 사용하는 여러
HTTP Link Header [RFC8288]가 감지되었습니다.processing mode conflictprotected term redefinition이 절은 비규범입니다.
WebIDL/* * The JsonLd interface is created to expose the JsonLdProcessor interface. */ [Global=JsonLd, Exposed=JsonLd] interfaceJsonLd{}; [Exposed=JsonLd] interfaceJsonLdProcessor{constructor(); static Promise<JsonLdRecord>compact(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>expand(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); static Promise<JsonLdRecord>flatten(JsonLdInputinput, optionalJsonLdContextcontext = null, optionalJsonLdOptionsoptions = {}); static Promise<sequence<JsonLdRecord>>fromRdf(RdfDatasetinput, optionalJsonLdOptionsoptions = {}); static Promise<RdfDataset>toRdf(JsonLdInputinput, optionalJsonLdOptionsoptions = {}); }; typedef record<USVString, any>JsonLdRecord; typedef (JsonLdRecordor sequence<JsonLdRecord> or USVString orRemoteDocument)JsonLdInput; typedef (JsonLdRecordor sequence<(JsonLdRecordor USVString)> or USVString)JsonLdContext; [Exposed=JsonLd] interfaceRdfDataset{constructor(); readonly attributeRdfGraphdefaultGraph; voidadd(USVString graphName,RdfGraphgraph); iterable<USVString?,RdfGraph>; }; [Exposed=JsonLd] interfaceRdfGraph{constructor(); voidadd(RdfTripletriple); iterable<RdfTriple>; }; [Exposed=JsonLd] interfaceRdfTriple{constructor(); readonly attribute USVStringsubject; readonly attribute USVStringpredicate; readonly attribute (USVString orRdfLiteral)_object; }; [Exposed=JsonLd] interfaceRdfLiteral{constructor(); readonly attribute USVStringvalue; readonly attribute USVStringdatatype; readonly attribute USVString?language; }; dictionaryJsonLdOptions{ USVString?base= null; booleancompactArrays= true; booleancompactToRelative= true;LoadDocumentCallback?documentLoader= null; (JsonLdRecord? or USVString)expandContext= null; booleanextractAllScripts= false; booleanframeExpansion= false; booleanordered= false; USVStringprocessingMode= "json-ld-1.1"; booleanproduceGeneralizedRdf= true; USVString?rdfDirection= null; booleanuseNativeTypes= false; booleanuseRdfType= false; }; callbackLoadDocumentCallback= Promise<RemoteDocument> ( USVString url, optionalLoadDocumentOptions? options ); dictionaryLoadDocumentOptions{ booleanextractAllScripts= false; USVStringprofile= null; (USVString or sequence<USVString>)requestProfile= null; }; [Exposed=JsonLd] interfaceRemoteDocument{constructor(); readonly attribute USVStringcontentType; readonly attribute USVStringcontextUrl; attribute anydocument; readonly attribute USVStringdocumentUrl; readonly attribute USVStringprofile; }; dictionaryJsonLdError{JsonLdErrorCodecode; USVString?message= null; }; enumJsonLdErrorCode{ "colliding keywords", "conflicting indexes", "context overflow", "cyclic IRI mapping", "invalid @id value", "invalid @import value", "invalid @included value", "invalid @index value", "invalid @nest value", "invalid @prefix value", "invalid @propagate value", "invalid @protected value", "invalid @reverse value", "invalid @version value", "invalid base direction", "invalid base IRI", "invalid container mapping", "invalid context entry", "invalid context nullification", "invalid default language", "invalid IRI mapping", "invalid JSON literal", "invalid keyword alias", "invalid language map value", "invalid language mapping", "invalid language-tagged string", "invalid language-tagged value", "invalid local context", "invalid remote context", "invalid reverse property map", "invalid reverse property value", "invalid reverse property", "invalid scoped context", "invalid script element", "invalid set or list object", "invalid term definition", "invalid type mapping", "invalid type value", "invalid typed value", "invalid value object value", "invalid value object", "invalid vocab mapping", "IRI confused with prefix", "keyword redefinition", "loading document failed", "loading remote context failed", "multiple context link headers", "processing mode conflict", "protected term redefinition" };
이 절은 비규범입니다.
다음은 발행 시점에 열려 있던 이슈 목록입니다.
더 간결한 @prefix.
확장 개념인 "key's term definition"은 compact IRI 키에서 불명확합니다.
RDF/JS Dataset 인터페이스와의 관계.
확장은 중첩 프로퍼티의 property-scoped context를 고려하지 않습니다.
재귀적으로 중첩된 프로퍼티와 축약.
상대 IRI 축약.
이 절은 비규범입니다.
frameExpansion 플래그를 기반으로 하는
특수 처리 모드를 가집니다.
이러한 콘텐츠는 그렇지 않으면 유효한
JSON-LD 문서가 아닐
수
있습니다.
@context 엔트리를
가질 수 있으며,
이는 그러한 용어로 식별된
프로퍼티의
값에 사용되는 컨텍스트를 정의합니다. 이 컨텍스트는
확장 알고리즘과
축약 알고리즘 모두에서 사용됩니다.
@nest 엔트리를
가질 수 있으며,
이는 동일한 @nest 매핑을 사용하는
프로퍼티를 포함하는 데 사용되는
@nest로 확장되는 용어를 식별합니다. 확장 시,
@nest로 확장되는 엔트리의 값은
둘러싼 노드 객체 안에 직접 포함된
것처럼
처리됩니다.
@container 값은 이제
id 맵 및
type 맵에 대응하는
@id와 @type을 포함할 수 있습니다.
@none 값을 가질 수 있지만,
JSON-LD 1.0은 문자열 값만
허용했습니다. 이는
@none 값을 허용하고 무시하도록 갱신되었습니다.
@container 값은 @list 이외의 적절한 컨테이너 키워드와
@set을 함께 포함하는
배열일 수도 있습니다.
이는 그러한 엔트리 값이 항상
배열 형식으로 표현되도록
보장하는 방법을 제공합니다.
compactToRelative 옵션에 대한 지원이 추가되었습니다.
true인 @prefix
엔트리를 포함하는 경우에만,
용어가 compact IRI 접두사로 사용됩니다. 1.0
알고리즘은 URI gen-delim 문자로 끝나는
값에 매핑되는 용어만 고려하도록 갱신되었습니다.
@container가
@id, @index, @set과 함께 @graph를 포함하는 것을
허용합니다.
확장 알고리즘에서 이는
노드 객체,
또는 id 맵이나
인덱스 맵 안의
엔트리 값인 객체로부터
명명된 그래프를 생성하는 데
사용됩니다.
축약 알고리즘은 특정 형식의 그래프 객체를 다시
노드 객체 집합,
또는 노드 객체의 맵으로 축약할 수
있게
합니다.
@none 키워드 또는 그 별칭을 사용하는 데 사용됩니다.
확장 알고리즘은 이 인덱싱을 투명하게 제거합니다.
추가로, § D. JSON-LD Community Group 최종 보고서 이후 변경사항을 참조하십시오.
이 절은 비규범입니다.
false인
ordered 옵션을 추가합니다. 이는 알고리즘에서
맵 엔트리 키의
반복을 제어하는 데 사용됩니다. 이전에는 알고리즘이 항상 이러한 순서를 요구했습니다. 테스트 결과
평가 지침도 그에 따라 갱신되었습니다.
@type 또는 @type의 별칭 값은 이제 @type 엔트리가 항상
배열로 표현되도록 그 @container를 @set으로 설정할 수 있습니다. 이는
또한 @type에 대해 용어를 정의할 수 있게 하며, 여기서 값은 @container가
@set으로 설정된
맵이어야
MUST 합니다.
:)을 포함하지만
prefix가 용어가 아닌
경우,
value가 형식상
IRI일 때만 반환하고,
그렇지 않으면 알고리즘의 나머지로 진행합니다.
produceGeneralizedRdf 옵션도 제거될 수
있습니다.
text/html을 입력으로 받아들이고,
특별히 대상이 된
script 요소,
처음 발견된 JSON-LD
script 요소,
또는 모든 JSON-LD script
요소를 추출하기 위한 API 단계가 추가되었습니다.
RemoteDocument에
contentType 필드가 추가되었습니다.
context overflow 오류로 대체합니다.
"@type": "@none"에 대한 지원이 추가되었습니다.
RemoteDocument
처리를
HTML 처리의 변형을 포함하여
LoadDocumentCallback 안으로 통합했습니다.
@propagate 엔트리를
사용하여 제어할 수 있습니다.
@import 엔트리를
포함할 수 있으며,
이를 통해 원래 JSON-LD 1.0용으로 작성된 컨텍스트에 JSON-LD 1.1 기능을
추가할 수 있습니다.
colliding keywords 오류는 @type에 대해 발생하지
않습니다. 대신, 확장 시 이전 @type 값이 새 값 앞에 추가됩니다.@vocab에 가능한 값으로 추가되었습니다. 이것이 설정되면,
노드 객체의
엔트리와 같은
어휘 상대 IRI 참조는 문자열 연결을
사용하여 base IRI와
어휘 매핑에 상대적으로
확장되거나 축약됩니다.
LoadDocumentCallback에서 검색된 콘텐츠가 어떤 JSON
미디어 타입도 아니고 rel=alternate 및 type=application/ld+json을 가진
link header가 있는 경우, 해당 콘텐츠로 리디렉션합니다.@direction을 지원하도록 갱신되었습니다.
json-ld-1.0으로 설정되지 않는 한 암묵적으로
json-ld-1.1입니다.
"@"1*ALPHA)을 가진 용어와 IRI를 무시합니다.이 절은 비규범입니다.
모든 변경사항은 편집상의 변경이며, API의 관찰 가능한 동작이나 예상 테스트 결과에 영향을 주지 않습니다.
profile API 옵션의 사용으로서
application/xhtml+xml을 허용된 미디어 타입으로 추가했습니다.
i18n 데이터타입 또는 rdf:CompoundLiteral을 생성할 때,
구현 간 상호운용성을 개선하기 위해
언어 태그가 소문자로
정규화됩니다.
JsonLdProcessor 처리 단계 안으로
이동했습니다.
null인 일부
JsonLdOption 초기화자를 수정했습니다.
processingMode의 기본값을 json-ld-1.1로
설정했습니다.
rdf:JSON 리터럴을 정규화하기 위한 규범 텍스트를 제거하고,
§ 8.6 데이터
왕복에서 JSON
리터럴의 변환을 위해
구문 문서의 rdf:JSON 데이터타입을 참조했습니다.
Promise 경계
문제를 해결하기
위해 RemoteDocument를 직접 입력으로 사용할 수 있게 했습니다.
이 절은 비규범입니다.
모든 변경사항은 편집상의 변경이며, API의 관찰 가능한 동작이나 예상 테스트 결과에 영향을 주지 않습니다.
true뿐 아니라 @protected의 모든 boolean 값을 사용하도록 했습니다.
@index 엔트리가 있는 모든 값에 대해 @index를 사용하도록 했습니다.
null을 전달하도록 했습니다.
true를 전달하도록 했습니다.
false를 전달하도록 했습니다.
@set을 찾도록 했습니다.
@type을 제외하고 다음 단계에 맡기도록 했습니다.
이로 인해 노드의 type 값이 병합에서 누락될 수 있었습니다.
false와 함께 이를 사용합니다.
invalid container mapping의 설명에서 누락된
@container 값을 추가했습니다.
preserve 키워드를 설명하기 위해
§ 1.4.2 구문
토큰과 키워드를 추가했습니다.
이 절은 비규범입니다.
JsonLdProcessor
인터페이스를 노출하도록 전역 인터페이스로 선언된 [Exposed=JsonLd]로
[Exposed=(Window,Worker)]를 변경했습니다.
이 절은 비규범입니다.
편집자들은 이 명세의 작성과 편집에 중요한 기여를 한 다음 개인들에게 특별히 감사드립니다:
또한 다음 사람들은 발행 당시 Working Group의 구성원이었습니다:
메일링 리스트와 주간 전화회의에서 많은 기술적 이슈를 함께 해결한 JSON-LD Community Group 참여자들에게도 큰 감사를 전합니다: 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.