공개 후 보고된 오류나 이슈는 정오표를 확인하세요.
이 명세의 영어 버전만이 유일한 규범 버전입니다. 비규범적 번역본도 제공될 수 있습니다.
Copyright © 2017 W3C® (MIT, ERCIM, Keio, Beihang). W3C liability, trademark and permissive document license rules apply.
Linked Data Notifications는 서버(수신자)가 애플리케이션(발신자)으로부터 메시지를 푸시 받는 방법과, 다른 애플리케이션(소비자)이 해당 메시지를 조회하는 방법을 설명하는 프로토콜입니다. 모든 리소스는 메시지 수신 엔드포인트(인박스)를 광고할 수 있습니다. 메시지는 RDF로 표현되며, 임의의 데이터를 포함할 수 있습니다.
상태 업데이트(2017년 5월): 개요 다이어그램의 링크가 2017년 5월 22일에 바로잡혀 수정되었습니다. 잘못된 내부 앵커를 가리키고 있었습니다.
상태 업데이트(2017년 9월): 개념 URI가 2017년 9월 5일에 바로잡혀 수정되었습니다. 잘못된 내부 URI를 가리키고 있었습니다.
이 섹션은 이 문서가 출판된 시점의 상태를 설명합니다. 다른 문서가 이 문서를 대체할 수도 있습니다. 현재 W3C 발행물 목록 및 이 기술 보고서의 최신 개정본은 W3C 기술 보고서 인덱스 https://www.w3.org/TR/ 에서 확인할 수 있습니다.
이 문서는 소셜 웹 워킹 그룹에서 권고안으로 발행되었습니다. 이 문서에 대해 의견이 있으시면 public-socialweb@w3.org (구독, 아카이브)로 보내주시기 바랍니다. 모든 의견을 환영합니다.
작업 그룹의 구현 보고서도 참고 바랍니다.
이 문서는 W3C 회원, 소프트웨어 개발자 및 기타 W3C 그룹과 이해관계자의 검토를 거쳤으며, 디렉터의 승인으로 W3C 권고안으로 채택되었습니다. 이는 안정된 문서로, 참고 자료로 사용하거나 다른 문서에서 인용할 수 있습니다. W3C의 권고안 채택 목적은 사양에 대한 주목도를 높이고 널리 보급되도록 촉진하는 데 있습니다. 이는 웹의 기능성과 호환성을 향상시킵니다.
이 문서는 2004년 2월 5일 W3C 특허 정책에 따라 운영되는 그룹에서 생성한 것입니다. W3C는 해당 그룹 산출물과 관련해 제기된 특허의 공개 리스트를 유지하고 있으며, 해당 페이지에는 특허 공개 방법에 대한 안내도 포함되어 있습니다. 어떤 개인이 필수 청구항(Essential Claim(s))이 포함된 특허에 대해 실제로 알고 있을 경우, 그 정보는 W3C 특허 정책 6절에 따라 공개해야 합니다.
이 문서는 2017년 3월 1일 W3C 프로세스 문서의 적용을 받습니다.
웹의 데이터는 특정 시스템에만 묶이거나, 해당 데이터를 생성한 애플리케이션에서만 읽을 수 있도록 제한되어서는 안 됩니다. 사용자는 애플리케이션을 자유롭게 전환하고, 데이터도 서로 공유해야 합니다. 애플리케이션은 다양한 활동, 상호작용, 새로운 정보에 대한 알림을 생성하며, 이는 사용자에게 표시되거나 추가적으로 처리될 수 있습니다.
Linked Data Notifications (LDN) 는 알림이 어떻게 생성되었는지와 관계없이 애플리케이션 간 알림의 공유 및 재사용을 지원합니다. 이를 통해 데이터 저장과 데이터를 표시/활용하는 애플리케이션이 분리되는 더 모듈화된 시스템을 구축할 수 있습니다. 이 프로토콜은 독립적으로 구현되어 서로 다른 기술 스택 위에서 동작하는 발신자, 수신자, 소비자들이 웹에서 상호 연동되고, 우리의 웹 상 상호작용을 탈중앙화하는 데 기여할 수 있도록 설계되었습니다.
본 명세는 알림을 일시적·비영속적 엔터티로 취급하는 대신, 각 알림이 고유의 URI를 갖는 개별 엔터티가 될 수 있도록 합니다. 이렇게 하면 알림을 다시 조회하거나 재사용할 수 있습니다. 다양한 애플리케이션 도메인, 즉 사회적 혹은 그 외 영역까지 폭넓게 지원하므로, 알림의 내용은 애플리케이션이 자유롭게 정의하게 되어 있습니다. 알림의 인증 및 검증은 권장되지만, 구체적인 메커니즘은 알림의 종류나 도메인에 따라 수신자와 소비자가 각기 다르게 결정할 수 있습니다.
발신자는 사람이 직접 실행하거나 자동 프로세스로 트리거되어 서버에게 알림을 전달합니다. 알림 데이터는 수신자의 관심을 위한 정보이며, 예시로는 친구의 개인 메시지, 핑백 링크, 블로그 댓글, 협업 초대, 캘린더 알림, 과학적 관측정보 등이 있습니다.
발신자는 알림을 보낼 타겟 리소스를 선택하고, 대상의 Inbox 위치를 발견한 뒤, 그곳에 알림을 보냅니다. 모든 리소스는 Inbox를 광고할 수 있습니다. 수신자는 알림 데이터를(적절한 접근 제어에 따라) 소비자가 사용할 수 있도록 제공합니다.
소비자는 발신자와 동일한 방식으로 Inbox의 위치를 찾은 뒤, 알림을 추가 처리하거나 다른 데이터와 조합하여 쓰거나, 혹은 단순히 사람에게 읽기 좋은 방식으로 알림을 표시할 수 있습니다.
발신자와 소비자는 탐색 과정을 통해 리소스의
Inbox URL을 HTTP Link 헤더나 리소스 본문 내의 관계로부터 식별합니다.
POST 요청으로 전송하며, 본문은 JSON-LD 또는 서버가 허용하는 다른 직렬화로 전달합니다.GET 요청에 대해서는, 지금까지 받은 알림(URL 목록 포함) 정보를 반환합니다.GET 요청에는 JSON-LD(또는 선택적으로 다른 직렬화)를 반환합니다.POST 요청을 받아 알림을 생성합니다.GET 요청으로 조회하고, 애플리케이션 목적에 맞게 활용합니다.LDN은 알림 전송·소비를 위해 Linked Data Platform [LDP]의 특화된 활용 예시입니다. 완전한 LDP 구현이 반드시 필요한 것은
아니며, 구현이 쉬운 부분집합만으로도 충분합니다. LDP에 대한 사전 지식 없이도 본 명세를 이해할 수 있지만, 알고 있다면 몇몇 개념이 익숙하게 느껴질 수 있습니다.
우리는 분산되고 상호운용 가능한 방식으로 알림을 쉽게 교환할 수 있도록 필요한 특징만 기술합니다. LDN Inbox는 LDP
BasicContainer에 해당합니다.
이 문서에서 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"이라는 핵심 단어는 [RFC2119]에서 정의한 의미로 해석되어야 합니다. 비규범적(참고)으로 표시된 절 이외에도, 본 명세의 모든 작성 가이드라인, 다이어그램, 예시, 참고사항은 비규범적입니다.
LDN 구현체는 발신자, 수신자, 소비자가 될 수 있습니다. 각 역할별 적합성 기준은 본 명세의 해당 절에서 설명합니다.
이 절에서는 알림이 전달되거나 읽히는 URL(Inbox)의 탐색 방법과 전달 메커니즘을 설명합니다. 알림 내용은 Payload에서 설명합니다.
Inbox는 알림이 보내지거나 소비되는 엔드포인트로서 블로그 게시글, 사용자 프로필, 데이터셋, 비디오 등 임의의 리소스에서 발견될 수 있습니다. 탐색의 시작점은 알림이 향하는 혹은 알림에 관련된 리소스, 즉 target입니다. 어떤 리소스(RDF 또는 비-RDF)가 자체 Inbox를 가질 수 있으므로, 어느 리소스에서 탐색을 시작할지는 발신자나 소비자의 재량입니다.
발신자와 소비자는 Inbox URL을 찾기 위해 다음을 수행합니다:
HEAD
또는 GET 요청을 하고, rel 값이
http://www.w3.org/ns/ldp#inbox인 Link 헤더를 사용하는 방법GET
요청을 하여 RDF 표현 [RDF 1.1]을
가져오고, 그 인코딩된 RDF 그래프가 http://www.w3.org/ns/ldp#inbox 타입의 관계를 포함하는지 확인하는 방법.
그 관계의 주어는 타겟이고 객체는 Inbox입니다.이들은 어느 순서로든 수행될 수 있지만, 첫 번째 방법으로 Inbox를 찾지 못하면 두 번째 방법을 반드시(MUST) 시도해야
합니다. 발신자와 소비자는 분명히 프래그먼트 식별자를 가지는 URI를 대상으로 하는 경우에는 Link 헤더 기반 탐색을 생략하는 것이
권장됩니다(SHOULD).
타겟이 프래그먼트 식별자를 포함하는 경우, 프래그먼트는 서버에 대한 요청의 일부가 아닙니다. 발신자와 소비자는 Link 헤더에서 발견되는
모든 Inbox는 프래그먼트가 제거된 해결된 URL에 대한 것임을 유의해야 합니다. 자세한 내용은 [Cool URIs for the Semantic Web - Hash URIs]를
참조하세요.
리소스는 반드시(MUST) 하나의 Inbox만을 광고해야 합니다. 하나의 Inbox는 예를 들어 내 블로그 게시물의 모든 답글과 내 사진의 모든 공유에 대해 동일한 Inbox를 쓰는 등 여러 리소스에서 공유해서 사용할 수 있습니다(MAY).
탐색 예시 1: Link 헤더
HEAD /article HTTP/1.1Host: example.orgAccept: application/ld+jsonHTTP/1.1 200 OKLink: <http://example.org/inbox/>; rel="http://www.w3.org/ns/ldp#inbox"
Link 헤더를 수신했을 때의 요청과 응답 예시.탐색 예시 2: JSON-LD
GET /profile HTTP/1.1Host: example.orgAccept: application/ld+jsonHTTP/1.1 200 OKContent-Type: application/ld+json{"@context": "http://www.w3.org/ns/ldp","@id": "http://example.org/profile","inbox": "http://example.org/inbox/"}
GET 요청으로 Inbox를 발견하는 예시. 응답은 JSON-LD 축약 형식.
탐색 예시 3: 가시적 HTML
GET /event HTTP/1.1Host: example.orgAccept: text/html, application/ld+jsonHTTP/1.1 200 OKContent-Type: text/html;charset=utf-8<p about="http://example.org/event" typeof="http://schema.org/Event" lang="en"><a rel="http://www.w3.org/ns/ldp#inbox" href="/inbox/">RSVP</a> to event</p>
GET 요청으로 Inbox를 발견하는 예시. Inbox 링크는 사람에게 보이도록 표시되며 기계가
URL을 찾을 수 있도록 RDFa로 마크업되어 있습니다.탐색 예시 4: 비가시적 HTML
GET /article HTTP/1.1Host: example.orgAccept: text/html, application/ld+jsonHTTP/1.1 200 OKContent-Type: text/html;charset=utf-8<link href="/inbox/" rel="http://www.w3.org/ns/ldp#inbox" />
GET 요청으로 Inbox를 발견하는 예시. link 요소로 표현된 비가시적
Inbox이며 기계 탐색을 위해 RDFa로 마크업되어 있습니다.탐색 예시 5: 비가시적 HTML
GET /article HTTP/1.1Host: example.orgAccept: text/html, application/ld+jsonHTTP/1.1 200 OKContent-Type: text/html;charset=utf-8<section id="results" about="#results"property="http://www.w3.org/ns/ldp#inbox" resource="/inbox/"></section>
GET 요청으로 Inbox를 발견하는 예시. RDFa의 property 속성으로
표현된 비가시적 Inbox로, 조각 URI로 식별된 리소스가 대상일 수 있도록 합니다.탐색 예시 6: Turtle
GET / HTTP/1.1Host: csarven.caAccept: text/turtle, application/ld+jsonHTTP/1.1 200 OKContent-Type: text/turtle;charset=utf-8<http://csarven.ca/#i><http://www.w3.org/ns/ldp#inbox> <http://csarven.ca/inbox/> .
GET 요청으로 Inbox를 발견하는 예시.서버가 이 프로토콜을 모를 가능성을 고려하여 탐색을 수행하는 방법에 대한 권고는 Social Web Protocols를 참조하세요.
탐색을 마친 후, 알림을 전송하려는 발신자는 POST 요청을 통해 Inbox URL로 알림을 전달해야
합니다(MUST). 발신자는 성공적인 요청에 대해
201 Created(Location 헤더 포함) 또는 202 Accepted 응답을 기대할 수
있습니다.
발신자는 서버가 수락하는 RDF 콘텐츠 타입을 확인하기 위해 OPTIONS 요청을 사용할 수 있으며, 응답으로 반환된
Accept-Post 헤더의 값에 따라 요청 본문에 알림을 직렬화할 수 있습니다. 그렇지 않은 경우에는 POST 요청의 본문은 JSON-LD 형식의 알림 payload를 포함해야 합니다(MUST) 및 헤더
Content-Type: application/ld+json를 사용해야 합니다.
Content-Type 헤더는 profile URI를 포함할 수 있습니다(MAY)
[RFC6906].
발신자는 인증 또는 인가를 위해 추가 헤더나 콘텐츠(예: Authorization: Bearer XXX)를 포함할 수 있습니다(MAY).
발신자가 인증을 필요로 하지 않는 localhost에서 서비스를 실행 중인 경우, 악성 스크립트가 Inbox 엔드포인트에서 실행되어 발신자가 자신에게 임의의
POST 요청을 하게 만들 수 있습니다. 따라서 발신자는 localhost나 루프백 IP 주소로 POST 요청을 해서는 안
됩니다(SHOULD NOT).
전송 예시 요청
POST /inbox/ HTTP/1.1Host: example.orgContent-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"Content-Language: en{"@context": "https://www.w3.org/ns/activitystreams","@id": "","@type": "Announce","actor": "https://rhiaro.co.uk/#me","object": "http://example.net/note","target": "http://example.org/article","updated": "2016-06-28T19:56:20.114Z"}
전송 예시 응답
HTTP/1.1 201 CreatedLocation: http://example.org/inbox/5c6ca040
POST 요청에 대한 예시 응답.수신자는 Inbox URL에 대한 GET
및 POST 요청을 지원해야 합니다(MUST). LDP 관점에서 Inbox는 Container입니다.
수신자가 POST 요청을 수신했을
때, 알림 리소스가 성공적으로 처리되면 수신자는 상태 코드 201 Created로 응답하고 알림 데이터를 검색할 수 있는
URL을 가리키는 Location 헤더를 설정해야 합니다(MUST). 요청이
비동기적으로 큐에 들어간 경우, 수신자는 상태 코드 202 Accepted로 응답해야 하며 응답 본문에 요청 상태에 관한 정보를
포함해야 합니다(MUST).
제약(Constraints)을 강제하는 수신자는 제약이 충족되지 않으면 알림 처리를 실패시키고 적절한
4xx 오류 코드를 반환하는 것이 권장됩니다(SHOULD).
수신자는 요청 본문이 JSON-LD이며
Content-Type: application/ld+json인 경우 이를 수락해야 합니다(MUST). profile URI를 포함할 수 있습니다(MAY) [RFC6906].
수신자는 다른 RDF 콘텐츠 타입(예:
text/turtle, text/html)을 수락할 수 있으며(MAY), 그렇다면 Inbox URL에 대한 OPTIONS 요청에 응답할 때
수신 가능한 콘텐츠 타입을 Accept-Post 헤더로 광고하는 것이 권장됩니다(SHOULD).
수신자 예시 1: OPTIONS 응답
OPTIONS /inbox/ HTTP/1.1Host: example.orgHTTP/1.1 200 OKAllow: GET, HEAD, OPTIONS, POSTAccept-Post: application/ld+json, text/turtle
Accept-Post를 포함한 OPTIONS
요청에 응답하는 수신자 예시.수신자 예시 2: POST 응답
POST /inbox/ HTTP/1.1Host: example.orgContent-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"Content-Language: en{"@context": "https://www.w3.org/ns/activitystreams","@id": "","@type": "Announce","actor": "https://rhiaro.co.uk/#me","object": "http://example.net/note","target": "http://example.org/article","updated": "2016-06-28T19:56:20.114Z"}HTTP/1.1 201 CreatedLocation: http://example.org/inbox/92d72f00
POST 요청에 대해 알림을 생성하여 응답하는 수신자
예시.Inbox에 대한 성공적인 GET 요청은 요청자의 접근 권한에 따라 알림의 URI들을 포함한
HTTP 200 OK를 반환해야 합니다(MUST). 접근 권한에 따라 적절한 경우
4xx 오류 코드를 반환할 수 있습니다. 수신자는 Inbox에 있는 알림 중 소비자가 접근할 수 있는 알림의 URI만을 나열할 수
있습니다(MAY).
Inbox URL은 알림들을 참조하기 위해 http://www.w3.org/ns/ldp#contains 술어를 사용해야 합니다(MUST).
각 알림은 반드시(MUST) RDF 소스여야 합니다. 비-RDF 리소스가 반환되는 경우 소비자는 이를 무시할 수
있습니다(MAY). 알림 URI에 대한 성공적인 GET 요청은 요청자의 접근 권한에 따라
HTTP 200 OK를 반환해야 합니다(MUST), 필요시 4xx를
반환합니다.
JSON-LD 콘텐츠 타입은 모든 리소스에서 이용 가능해야 합니다(MUST), 하지만 클라이언트는 다른 콘텐츠
타입을 선호하도록 Accept 헤더를 보낼 수 있습니다(RFC7231 섹션 3.4 - 콘텐츠 협상).
클라이언트가 Accept 헤더를 보내지 않으면 서버는 JSON-LD 또는 동일한 정보를 충실히 전달하는 형식(예: Turtle)으로
데이터를 보낼 수 있습니다.
Inbox 자체에 대한 추가 설명(예: 제약)을 반환할 수 있습니다(MAY).
본 명세는 Inbox에 있는 알림 목록을 제공하기 위한 페이징 메커니즘을 정의하지 않습니다. 페이징을 활성화하려는 구현체는 효율적인 검색을 위해 기존 메커니즘(예: Linked Data Platform Paging 1.0, Activity Streams 2.0 Collection)을 사용할 수 있습니다.
수신자 예시 3: GET 응답
GET /inbox/ HTTP/1.1Host: example.orgAccept: application/ld+jsonAccept-Language: en-GB,en;q=0.8, en-US;q=0.6HTTP/1.1 200 OKContent-Type: application/ld+jsonContent-Language: en{"@context": "http://www.w3.org/ns/ldp","@id": "http://example.org/inbox/","contains": ["http://example.org/inbox/5c6ca040","http://example.org/inbox/92d72f00"]}
GET 요청에 대해 알림 목록으로 응답하는 수신자 예시.수신자는 발신자 검증을 수행하는 것이 권장됩니다(SHOULD). 예를 들어 다음과 같은 방법을 고려할 수 있습니다:
수신자는 부적절한 알림이 서버에 생성되어 Inbox에 노출되는 것을 필터링하기 위해 제약을 사용하는 것이 권장됩니다(SHOULD).
수신자는 Inbox URL에 대한 쓰기를 신뢰할 수 있는 발신자 화이트리스트로 제한하는 접근 제어를 구현하는 것을 고려할 수 있습니다.
소비자는 Inbox URL에 대한 GET 요청을 통해 Inbox에 있는 알림의 URI를 가져옵니다(이 URL을 찾으려면 탐색 참조).
알림의 URI는 Inbox
URL의 http://www.w3.org/ns/ldp#contains 술어를 통해 검색 가능해야 합니다(MUST).
Inbox 또는 개별 알림을 가져올 때 소비자는 선호 콘텐츠 타입(예: JSON-LD)을 나타내기 위해 Accept 헤더를 명시적으로 설정하는 것이
권장됩니다(SHOULD). 개별 알림을 몇 개, 어떤 기준으로 가져올지는 소비자의 재량입니다(예: 콘텐츠 길이, 타임스탬프
등).
소비자는 인증 또는 인가 목적을 위해 추가 헤더나 콘텐츠를 포함할 수 있습니다(MAY).
소비자는 페이로드에서 추가적인 페치나 추론(예: 알림에서 참조된 리소스의 역참조를 통해 내용을 가져오는 것)을 수행할 수 있으며(MAY), Inbox가 발표한 제약을 알림 처리 전에 확인하고자 할 수 있습니다(MAY).
가져온 알림 URI는 요청된 URI 자체와 다른 하나 이상의 주체 IRI를 포함하는 RDF 문장을 가질 수 있습니다. 소비자는 알림이 요청된 URI를 주제로 하는 삼중(triple)을 반드시 포함한다고 가정해서는 안 됩니다. 이는 알림 본문이 상대 IRI를 사용할 때에도 해당됩니다. 구현체는 알림 URI를 알림 페이로드의 RDF를 포함하는 그래프로 취급하는 것을 고려할 수 있습니다.
수신자에 따라 Inbox에 무엇이든 게시될 수 있으므로(수신자가 설정한 제한에 따름, 이 프로토콜에서 정의하지 않음) 소비자는 알림 데이터를 사용할 때 내용의 진위 여부를 판단하기 위한 예방 조치를 취하는 것이 바람직합니다.
소비자 예시: 알림 가져오기
GET /inbox/14a792f0 HTTP/1.1Host: example.orgAccept: application/ld+json, text/turtle, application/xhtml+xml, text/htmlAccept-Language: en-GB,en;q=0.8, en-US;q=0.6HTTP/1.1 200 OKContent-Type: application/ld+json;profile="https://www.w3.org/ns/activitystreams"Content-Language: en{"@context": ["https://www.w3.org/ns/activitystreams",{ "@language": "en" }],"@id": "http://example.org/inbox/14a792f0","@type": "Announce","actor": {"@id": "http://csarven.ca/#i","name": "Sarven Capadisli"},"object": {"@context": "http://www.w3.org/ns/anno.jsonld","@id": "http://example.net/note","@type": "Annotation","motivation": "http://www.w3.org/ns/oa#assessing","rights": "http://creativecommons.org/licenses/by/4.0/"},"target": "http://example.org/article","updated": {"@type": "http://www.w3.org/2001/XMLSchema#dateTime","@value": "2016-06-28T19:56:20.114Z"}}
GET 요청의 결과 예시.알림의 페이로드는 수신자와 다른 RDF 구문이 협상되지 않는 한 반드시(MUST) JSON-LD여야 합니다. 다양한 사용 사례를 허용하기 위해 페이로드의 실제 어휘는 여기서 명시하지 않습니다.
이 절은 비규범적입니다.
페이로드 예시 1
{"@context": "http://schema.org/","@id": "http://example.net/note#foo","citation": { "@id": "http://example.org/article#results" }}
페이로드 예시 2
{"@context": "https://www.w3.org/ns/activitystreams","@id": "","@type": "Announce","actor": "https://rhiaro.co.uk/#me","object": "http://example.net/note","target": "http://example.org/article","updated": "2016-06-28T19:56:20.114Z"}
페이로드 예시 3
{"@context": { "pingback": "http://purl.org/net/pingback/" },"@id": "","@type": "pingback:Item","pingback:source": { "@id": "http://example.net/note#foo" },"pingback:target": { "@id": "http://example.org/article#results" }}
페이로드 예시 4
{"@context": "http://schema.org/","@id": "","@type": "RsvpAction","event": { "@id": "http://example.org/event" },"agent": { "@id": "https://rhiaro.co.uk/#me" }}
알림은 임의의 정보를 담고 있을 수 있으며, 각기 다른 URI를 가진 여러 리소스에 대한 참조를 포함할 수 있습니다. 반드시 특정 외부 리소스나 데이터의 출처를 참조하지 않아도 됩니다. 소비자가 알림을 요청할 때 수신자는 처음 전송된 모든 트리플을 반환해야 합니다.
페이로드 예시 5
{"@context": {"@language": "en","sioc": "http://rdfs.org/sioc/ns#","foaf": "http://xmlns.com/foaf/0.1/"},"@id": "","@type": "sioc:Comment","sioc:reply_of": { "@id": "http://example.org/article" },"sioc:created_at": {"@type": "http://www.w3.org/2001/XMLSchema#dateTime","@value": "2015-12-23T16:44:21Z"},"sioc:content": "This is a great article!","sioc:has_creator": {"@id": "http://example.org/profile","@type": "sioc:UserAccount","sioc:account_of": { "@id": "http://example.org/profile#alice" },"sioc:avatar": { "@id": "http://example.org/profile/avatar.png" },"foaf:name": "Alice"}}
페이로드 예시 6
{"@context": [{"prov": "http://www.w3.org/ns/prov#"}],"@id": "http://example.org/activity/804c4e7efaa828e146b4ada1c805617ffbc79dc7","@type": "prov:Activity","http://www.w3.org/2000/01/rdf-schema#label": {"@language": "en","@value": "Make it so"},"prov:endedAtTime": {"@type": "http://www.w3.org/2001/XMLSchema#dateTime","@value": "2016-06-14T20:57:39.000Z"},"prov:generated": {"@id": "http://example.org/entity/804c4e7efaa828e146b4ada1c805617ffbc79dc7","@type": "prov:Entity","prov:specializationOf": { "@id": "http://example.org/entity/file" },"prov:wasGeneratedBy": {"@id": "http://example.org/activity/804c4e7efaa828e146b4ada1c805617ffbc79dc7"}},"prov:wasAssociatedWith": {"@id": "http://csarven.ca/#i","@type": "prov:Agent","http://xmlns.com/foaf/0.1/name": {"@language": "hy","@value": "Սարվէն Չափատիշլի"}}}
이 절은 비규범적입니다. 보안과 개인정보에 대한 규범적 요구사항은 각 해당 절에서 별도로 안내합니다.
Inbox URL은 rel 값이 http://www.w3.org/ns/ldp#constrainedBy인 HTTP
Link 헤더 또는 리소스 본문을 통해 자체 제약사항(예: SHACL, Web Annotation Protocol)을 알릴 수 있습니다. 발신자는 이
제약 명세를 따르는 것이 바람직하며, 그렇지 않을 경우 수신자는 알림을 거부하고 적절한 4xx 오류를 반환할 수 있습니다.
Inbox(타겟)를 광고하는 리소스의 발행자는 신뢰할 수 있는 서버에서 이를 해야 합니다. 발행자는 타사에서 헤더나 콘텐츠에 접근할 경우 알림이 리다이렉션 될 수 있음을 인지해야 합니다.
본 명세는 소비자가 pull을 통해 수신자로부터 알림을 읽는 방법을 설명하지만, 소비자가 새로 들어오는 알림이나 Inbox 내용 변경 사항을 푸시 받기를 원할 수 있습니다. 유사하게 수신자도 특정 발신자에 대한 알림을 요청하고자 할 수 있습니다. 이런 형태의 구독 메커니즘은 본 명세 범위에 포함되지 않으나, 발신자/수신자/소비자 간에 이런 계약을 맺는 것을 제한하지 않습니다. 구독 기능을 활성화하려는 구현체는 ActivityPub, WebSub, WebSocket 프로토콜, HTTP Web Push 등 기존 메커니즘을 사용할 수 있습니다.
Activity Streams 2.0 Core를 지원하려는 수신자 구현체는 Content-Type 및 어휘 동등성에 대한 안내가 있는 Social Web Protocols - Inbox Interop를 참고할 수 있습니다.
연합형 네트워크에서 국제적 사용자층을 구축하는 것은 중요합니다. 일부 LDN 상호작용은 HTML 조각, 요약 필드 등 자연어 텍스트 콘텐츠를 반환할 수 있습니다. 모든 항목에
대해 다국어 버전을 제공하는 것이 항상 가능하지 않을 수 있습니다. 구현체는 사용 가능한 언어를 식별하거나 반환할 언어를 협상할 방법(예: HTTP
Accept-Language 헤더를 활용하여 요청별로 가장 적합한 언어 표현을 선택할 수 있도록)을 마련하는 것이 바람직합니다.
수신자가 발신자 또는 소비자 인증을 기대하는 경우, 다른 데이터나 오류 코드를 반환하기 전에 이들의 자격 증명 유효성을 먼저 검사해야 합니다. 예를 들어, 수신자는 인가되지
않은 요청자에 대해서는 Inbox 존재 여부 확인(404 Not Found 반환 등)을 먼저 하지 말아야 합니다.
토큰 기반 인증은 반드시 HTTPS 상에서만 이뤄져야 합니다.
이 질문들은 Self-Review Questionnaire: Security and Privacy의 가이드에 따라 본 명세의 보안 및 개인정보 관련 고려사항을 요약합니다.
이 명세는 각 기능에 대해 최소 두 개의 독립적이며 상호운용되는 구현이 존재함을 조건으로 Proposed Recommendation 단계로 진입했습니다. 각 기능은 서로 다른 제품군에 의해 구현되어야 했습니다. 단일 제품이 모든 기능을 구현해야 한다는 요구는 없었습니다.
종료 기준을 평가하는 목적상, 아래 각각을 기능(feature)으로 간주하였습니다:
Link 헤더를 통해 특정 리소스의 Inbox 광고GET 요청에 대한 Inbox 목록 응답, 개별 알림에 대한
GET 요청 응답
본 명세에 기여해주신 아래 여러분들께 감사와 경의를 표합니다:
이 절은 비규범적입니다.
REC-ldn-20170502 ← PR-ldn-20170321 ← CR-ldn-20170223 ← CR-ldn-20161101 ← WD-ldn-20161011 ← WD-ldn-20160926 ← WD-ldn-20160913 ← WD-ldn-20160824 ← WD-ldn-20160726
1.1 소셜 웹 워킹 그룹
LDN은 소셜 웹 워킹 그룹에서 작성 중인 여러 관련 명세 중 하나입니다. 대체 접근 방식이나 보완 프로토콜에 관심 있는 구현자는 개요 문서 Social Web Protocols를 우선 참조하시기 바랍니다. 소셜 웹 프로토콜 명세의 특정 하위 섹션은 본 명세 전반에서 확장성 또는 다른 프로토콜과의 연동 지점을 밝히기 위해 인용하고 있습니다.