출판 매니페스트

W3C 권고안

이 버전:
https://www.w3.org/TR/2020/REC-pub-manifest-20201110/
최신 공개 버전:
https://www.w3.org/TR/pub-manifest/
최신 편집자 초안:
https://w3c.github.io/pub-manifest/
구현 보고서:
https://www.w3.org/publishing/groups/publ-wg/implementation/results.html
이전 버전:
https://www.w3.org/TR/2020/PR-pub-manifest-20201001/
편집자:
Matt Garrish (DAISY Consortium)
Ivan Herman (W3C)
참여:
GitHub w3c/pub-manifest
버그 신고
커밋 기록
풀 리퀘스트

출판 이후 보고된 오류나 문제는 정오표를 확인하십시오.

번역도 참조하십시오.

이 문서는 다음 비규범 형식으로도 제공됩니다: EPUB


개요

이 명세는 디지털 출판물에 관한 정보를 표현하기 위한 일반적인 매니페스트 형식을 정의한다. 이 명세는 [schema.org] 메타데이터를 사용하며, 출판물에 관한 다양한 구조적 속성을 포함하도록 이를 확장하고 [json-ld11]로 직렬화하여, 표현해야 하는 정보의 차이를 수용하면서 출판 형식 간의 상호운용성을 가능하게 한다.

이 문서의 상태

이 절은 출판 시점의 이 문서의 상태를 설명한다. 다른 문서가 이 문서를 대체할 수 있다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 https://www.w3.org/TR/ 의 W3C 기술 보고서 색인에서 확인할 수 있다.

이 문서는 Publishing Working Group에서 권고안으로 출판하였다.

이 명세에 관한 논의에는 GitHub 이슈 사용을 권장한다. 또는 메일링 리스트로 의견을 보낼 수도 있다. 의견은 public-publ-wg@w3.org (아카이브)로 보내기 바란다.

W3C 권고안은 광범위한 합의 형성을 거친 뒤 W3C와 그 회원들의 승인을 받은 명세이다. W3C는 이 명세를 웹의 표준으로 널리 배포할 것을 권고한다. 이 권고안의 향후 업데이트에는 새로운 기능이 포함될 수 있다.

이 문서는 2017년 8월 1일 W3C 특허 정책에 따라 운영되는 그룹에서 작성하였다. W3C는 이 그룹의 산출물과 관련하여 이루어진 특허 공개의 공개 목록을 관리하며, 해당 페이지에는 특허를 공개하기 위한 지침도 포함되어 있다. 어떤 개인이 자신이 믿기에 필수 청구항을 포함하는 특허에 대해 실제 지식을 가지고 있는 경우, 그 개인은 W3C 특허 정책의 6절에 따라 해당 정보를 공개해야 한다.

이 문서는 2020년 9월 15일 W3C 프로세스 문서의 적용을 받는다.

1. 소개

1.1 범위

이 명세는 출판물을 설명하기 위한 일반적인 매니페스트 형식을 정의한다. 이 형식은 특수화를 만들기 위한 모듈식 접근 방식을 지정함으로써, 오디오북 제작과 같은 특정 출판 분야의 요구에 적응할 수 있도록 설계되었다.

이 명세는 또한 서로 다른 사용자 에이전트 아키텍처를 용이하게 하려는 의도도 있다. 전통적인 웹 사용자 에이전트(브라우저)가 출판 매니페스트를 소비할 수 있을 것으로 예상되지만, 이것이 다른 가능한 유형의 사용자 에이전트(예: 독립 실행형이거나 사용자 에이전트 안에서 실행되는 애플리케이션, 또는 자체 사용자 인터페이스를 포함하는 출판물)의 기능을 제한해서는 안 된다.

이 명세는 매니페스트 형식을 사용하는 출판물을 사용자 에이전트가 어떻게 렌더링해야 하는지 정의하지 않는다.

1.2 매니페스트 형식

이 절은 비규범적이다.

디지털 출판물은 해당 매니페스트로 설명되며, 매니페스트는 특정 형태의 JSON-LD [json-ld11] (링크드 데이터를 위한 JSON [ecma-404]의 변형)을 사용해 표현되는 속성 집합을 제공한다.

매니페스트는 사용자 에이전트가 디지털 출판물범위와 그 리소스 사이의 연결을 이해할 수 있게 해 주는 것이다. 매니페스트에는 디지털 출판물을 설명하는 메타데이터가 포함되는데, 출판물은 그 구성 리소스를 넘어서는 정체성과 성격을 가지기 때문이다. 또한 매니페스트는 디지털 출판물에 속하는 리소스 목록과 리소스를 하나의 연속된 저작물로 연결하는 방식인 기본 읽기 순서를 제공한다.

매니페스트의 속성은 사용자 에이전트가 출판물을 처리하고 렌더링하는 데 필요한 기본 정보를 설명한다. 이해를 돕기 위해, 이러한 속성은 다음과 같이 분류된다.

기술 속성

기술 속성은 제목, 작성자, 언어와 같은 디지털 출판물의 측면을 설명한다.

리소스 분류 속성

리소스 분류 속성은 리소스 목록기본 읽기 순서와 같은 공통 리소스 집합을 설명하거나 식별한다. 이러한 속성은 HTML 문서, 이미지, 스크립트, 메타데이터 레코드와 같은 하나 이상의 리소스를 참조한다.

매니페스트는 링크 관계를 사용하여 디지털 출판물의 주요 리소스도 식별한다. 이러한 관계는 LinkedResource 객체(즉, 기본 읽기 순서, 리소스 목록, 링크 절에서 각 리소스를 나타내는 JSON 객체)의 rel 속성에 정의된다.

이러한 관계가 식별하는 리소스 유형은 다음과 같이 분류된다.

정보 제공 리소스

정보 제공 리소스는 출판물의 개인정보 처리방침, 접근성 보고서, 또는 미리보기와 같이 출판물에 대한 추가 정보를 포함하는 리소스이다.

구조적 리소스

구조적 리소스는 표지 이미지, 목차, 페이지 목록과 같은 출판물의 주요 메타 구조이다.

1.3 JSON-LD 작성 및 처리

이 명세는 출판 매니페스트를 [json-ld11]의 특정 "형태"로 정의한다. 이는 JSON-LD 구문이 제공하는 모든 가능성과 달리, 매니페스트가 이 명세에서 정의한 구문적 구성만을 사용하여 표현되는 것이 SHOULD임을 의미한다.

참고

이 형태는 이 명세에 정의된 제약을 표현하는 JSON 스키마 [json-schema]를 통해 비공식적으로도 정의되어 있다. 이 스키마는 https://www.w3.org/ns/pub-schema/manifest/에서 관리된다.

출판 매니페스트에는 여러 작성 유연성과 간결한 작성 표현도 있다. 예를 들어, 객체 유형은 누락된 경우 처리 중에 자동으로 생성되므로 항상 명시적으로 작성할 필요는 없다 (자세한 내용은 § 4.2.4 명시적 객체와 암시적 객체 참조). 매니페스트 데이터의 내부 표현은 별도로 정의되어 있다. 자세한 내용은 § A. 내부 표현 데이터 모델을 참조하라.

따라서 사용자 에이전트가 완전한 JSON-LD 프로세서일 필요는 없다. 사용자 에이전트는 매니페스트의 특정 형태를 읽고 데이터를 내부화할 수 있기만 하면 된다.

1.4 Schema.org와의 관계

이 절은 비규범적이다.

매니페스트 속성, 특히 기술 속성으로 분류되는 속성은 주로 Schema.org와 그 호스팅 확장 [schema.org]에서 가져온다. 따라서 이러한 속성은 Schema.org에서 구문과 의미를 상속받아, 매니페스트 작성이 Schema.org 작성과 호환되도록 한다.

매니페스트 항목이 Schema.org 속성에 해당하는 경우, 그 속성 정의는 해당 매핑을 식별하고 정의 타입(예: CreativeWork 또는 Book)을 괄호 안에 포함한다.

Schema.org에는 출판과 관련이 있지만 이 명세에서 언급하지 않는 많은 속성도 포함되어 있다. 이 문서는 매니페스트 항목의 최소 집합만 정의하므로 이러한 속성은 매니페스트에서 사용할 수 있다 (§ 4.7.3.2 추가 매니페스트 속성 참조).

추가 Schema.org 속성을 사용할 때는 해당 속성이 매니페스트에 지정된 출판물 유형에 유효한지 확인하라. 속성은 어휘가 사용하는 상속 모델의 결과로 여러 Schema.org 타입에서 사용할 수 있는 경우가 많지만, 모든 속성이 모든 타입에서 사용할 수 있는 것은 아니다. 어떤 타입이 어떤 속성을 허용하는지에 대한 자세한 정보는 [schema.org]을 참조하라.

추가 Schema.org 속성 사용에 관한 자세한 정보는 § 4.5 출판물 유형§ 4.7.3.2 추가 매니페스트 속성에서도 확인할 수 있다.

2. 용어

이 명세는 Infra 표준 [infra]에 의존한다.

범위

디지털 출판물은 그 콘텐츠를 나타내는 유한한 리소스 집합으로 구성된다. 이러한 범위는 그 bounds로 알려져 있으며, § 5. 출판물 리소스에서 설명한 대로 매니페스트 안에 정의된다.

디지털 출판물

디지털 출판물은 매니페스트프로파일을 사용하는 형식으로 작성된 모든 출판물이다.

내부 표현

매니페스트의 내부 표현은 사용자 에이전트가 매니페스트를 처리하고 가능한 모든 모호성을 제거하며, 다른 출처에서 추론할 수 있는 누락 값을 통합할 때 생성하는 데이터 구조이다.

모호성이나 누락 정보가 없는 경우, 매니페스트에 표현된 정보가 사용자 에이전트가 생성한 내부 표현과 동등할 수 있다.

매니페스트

매니페스트는 정보 제공 메타데이터, 리소스 목록, 그리고 기본 읽기 순서와 같은 출판물에 관한 구조화된 정보를 나타낸다.

프로파일

프로파일은 이 명세에서 정의한 매니페스트 형식을 사용하여 자신의 범위와 콘텐츠를 설명하는 출판 형식(예: 오디오북)이다. 이러한 형식은 이 명세의 핵심 정의를 프로파일별 용어 및/또는 새로운 요구사항으로 확장할 수 있다.

프로파일은 구조 및 콘텐츠 요구사항이 서로 다를 수 있지만, 형식 간 높은 수준의 예측 가능성을 유지하기 위해 그러한 차이는 제한된다. (§ 8. 모듈식 확장 참조.)

3. 적합성

비규범적으로 표시된 절뿐만 아니라, 이 명세의 모든 작성 지침, 도표, 예제, 참고는 비규범적이다. 이 명세의 그 밖의 모든 내용은 규범적이다.

이 문서의 핵심 단어 MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, REQUIRED, SHOULD, 및 SHOULD NOT은 여기에 표시된 것처럼 모두 대문자로 나타날 때, 그리고 오직 그 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 한다.

모든 알고리즘 설명은 정보 제공이다.

4. 출판 매니페스트

4.1 요구사항

다음 속성은 매니페스트에 설정되어 있어야 MUST 한다.

다음 속성은 RECOMMENDED된다.

다른 모든 속성리소스 관계의 우선순위는 OPTIONAL이지만, 매니페스트 형식의 구현에 의해 수정될 MAY 있다.

참고

일부 속성은 명시적으로 작성되지 않은 경우 대체 정보에서 컴파일되므로 암시적으로 필요하다. 자세한 내용은 § A. 내부 표현 데이터 모델을 참조하라.

4.2 값 범주

이 절은 출판 매니페스트의 속성과 함께 사용할 수 있는 값의 범주를 설명한다.

4.2.1 리터럴

매니페스트 속성이 코드 값이나 날짜처럼 언어에 의존하지 않는 리터럴 텍스트 문자열을 값으로 기대하는 경우, 그 값은 [json] 문자열로 표현되어야 MUST 한다.

리터럴 값은 예를 들어 객체로 변환될 수 있는 다른 값들과 달리, 매니페스트 처리 중에 변경되지 않는다.

4.2.2 숫자

매니페스트 속성이 숫자를 값으로 기대하는 경우, 그 값은 [json] 숫자로 표현되어야 MUST 한다.

4.2.3 불리언

매니페스트 속성이 불리언을 값으로 기대하는 경우, 그 값은 [ecmascriptBoolean 값 (true 또는 false)으로 표현되어야 MUST 한다.

4.2.4 명시적 객체와 암시적 객체

다양한 매니페스트 속성은 [json객체로 표현될 것으로 기대된다. 명시적 객체의 사용이 일반적으로 권장되지만, 다음 절들은 문자열 값을 사용하는 것도 허용되는 경우를 식별한다. 이러한 문자열은 사용자 에이전트가 매니페스트를 처리하는 중에 자동으로 객체로 변환한다(텍스트 값을 객체로 매핑하는 정확한 방식은 각 정의에 포함되어 있다).

4.2.4.1 지역화 가능한 문자열

매니페스트 속성이 지역화 가능한 텍스트 문자열을 값으로 기대하는 경우, 그 값은 다음 중 하나로 표현되어야 MUST 한다.

단일 문자열 값은 value 속성이 그 문자열의 텍스트이고, 언어와 기본 방향이 매니페스트의 다른 정보에서 결정되는 암시적 객체를 나타낸다.

지역화 가능한 문자열은 값의 여러 언어 표현을 용이하게 하기 위한 것이므로, 지역화 가능한 문자열을 허용하는 속성은 항상 이러한 값의 배열을 허용한다. 이러한 이유로, 단일 문자열 또는 객체만 작성하면 되더라도, 처리의 일관성을 위해 이러한 값은 배열로 변환된다.

LocalizableString은 다음 속성으로 구성된 [json객체이다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
value 지역화 가능한 문자열의 값. REQUIRED. 텍스트. 리터럴 (없음)
language 값의 언어. OPTIONAL. 올바른 형식의 언어 태그 [bcp47]. 리터럴 (없음)
direction 값의 기본 방향. OPTIONAL. ltr 또는 rtl 리터럴 (없음)

기본 방향 값의 의미는 다음과 같다.

  • ltr: 텍스트 값이 왼쪽에서 오른쪽 방향의 텍스트로 명시적으로 설정되었음을 나타낸다.
  • rtl: 텍스트 값이 오른쪽에서 왼쪽 방향의 텍스트로 명시적으로 설정되었음을 나타낸다.

기본 방향 값이 없다는 것은, Unicode Bidirectional Algorithm [bidi]의 규칙에 따라 텍스트 값이 강한 방향성을 가진 첫 번째 문자의 방향으로 명시적으로 설정됨을 의미한다.

참고

마지막 예제에서 기본 방향 값이 설정되지 않았다면, Unicode Bidirectional Algorithm [bidi]을 따르고, 문자열을 시작하는 라틴 문자가 존재하기 때문에 텍스트는 다음과 같이 표시될 것이다.

HTML היא שפת סימון.

그러나 이는 올바르지 않다. 표시를 제어하여 다음 결과를 얻으려면 추가 direction 값이 필요하다.

HTML היא שפת סימון.

예제의 value 필드는 메모리에 저장된 그대로의 텍스트를 나타내므로, 여기에서 묘사된 두 렌더링과 차이가 있음을 유의하라. 텍스트 편집기도 JSON 값을 다르게 표시할 수 있다(예: Unicode Bidirectional Algorithm만 사용).

추가 설명과 예제는 [string-meta] 문서도 참조하라.

4.2.4.2 엔티티

매니페스트 속성이 엔티티(즉, 창작의 여러 측면에 책임이 있는 개인 또는 조직)를 기대하는 경우, 그 값은 다음 중 하나로 표현되어야 MUST 한다.

단일 문자열 값은 name 속성이 그 문자열의 텍스트이고 typePerson [schema.org]인 것으로 간주되는 Entity 객체의 인스턴스를 나타낸다.

Entity는 다음과 같은 최소 속성 집합을 가진 [schema.org] Person 또는 Organization 타입의 인스턴스로 정의된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
type 엔티티의 타입. OPTIONAL 하나 이상의 텍스트. 시퀀스는 "Person" 또는 "Organization"을 포함해야 MUST 한다. 배열리터럴 (없음)
name 엔티티의 이름. REQUIRED. 하나 이상의 텍스트. 배열지역화 가능한 문자열 name
id 엔티티와 연관된 정식 식별자. OPTIONAL. URL 레코드 [url]. 식별자 (없음)
url 엔티티와 연관된 주소. OPTIONAL. 유효한 URL 문자열 [url]. URL url
identifier 엔티티와 연관된 식별자(예: ORCID). OPTIONAL. 하나 이상의 텍스트. 배열리터럴 identifier
참고

이 최소 속성 집합은 제한적이지 않다. 작성자는 적절한 경우 [schema.org] Person 또는 Organization 타입에 정의된 추가 속성을 포함할 수 있다. 사용자 에이전트도 마찬가지로 앞의 속성들만 해석하도록 제한되지 않는다.

4.2.4.3 링크된 리소스

매니페스트 속성이 하나 이상의 리소스에 링크하는 경우, 이는 다음 중 하나로 표현되어야 MUST 한다.

  1. 리소스의 URL을 인코딩한 [json] 문자열, 또는
  2. LinkedResource의 인스턴스.

문자열 값은 url 속성이 해당 문자열 값으로 설정된 암시적 LinkedResource 객체를 나타낸다.

LinkedResource 객체는 다음과 같이 정의된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
type 리소스의 타입. OPTIONAL 하나 이상의 텍스트. 시퀀스는 "LinkedResource"를 포함해야 MUST 한다. 배열리터럴 (없음)
url 리소스의 위치. REQUIRED. 유효한 URL 문자열 [url]. 추가 제한 사항은 이 타입을 허용하는 속성 정의를 참조하라. URL url
encodingFormat 리소스의 미디어 타입(예: text/html). OPTIONAL. MIME 미디어 타입 [rfc2046]. 리터럴 encodingFormat
name 항목의 이름. OPTIONAL. 하나 이상의 텍스트. 배열지역화 가능한 문자열 name
description 항목의 설명. OPTIONAL. 하나 이상의 텍스트. 배열지역화 가능한 문자열 description
rel 출판물에 대한 리소스의 관계. OPTIONAL.

하나 이상의 관계.

키워드는 ASCII 대소문자 구분 없음 [infra]이며, 그렇게 비교되어야 MUST 한다.

배열리터럴 (없음)
integrity 무결성을 검증할 수 있게 하는 리소스의 암호화 해싱. OPTIONAL.

하나 이상의 공백으로 구분된 무결성 메타데이터 집합 [sri]. 값은 메타데이터 정의 [sri]를 준수해야 MUST 한다.

사용자 에이전트가 지원할 것으로 기대되는 암호화 해시 함수 목록은 [sri]를 참조하라.

리터럴 (없음)
duration 시간 기반 미디어 리소스의 전체 지속 시간. OPTIONAL  [iso8601-1]에서 정의한 지속 시간 값. 리터럴 duration (Property)
alternate

encodingFormat이 재구성 형식의 형식을 지정하는 대체 형식에서 리소스의 하나 이상의 재구성에 대한 참조. OPTIONAL.

다음 중 하나 이상:

  • 대체 형식에서 리소스 재구성의 URL을 나타내는 문자열, 또는
  • LinkedResource 객체의 인스턴스

문자열 값은 url 속성이 해당 문자열 값으로 설정된 암시적 LinkedResource 객체를 나타낸다.

배열링크된 리소스 (없음)

integrity 속성에 대한 사용자 에이전트 지원은 OPTIONAL이지만, 이 속성을 사용하여 암호화 해싱 비교를 지원하는 사용자 에이전트는 [sri]에 따라 이를 수행해야 MUST 한다.

이 명세는 대체 형식에서 선택하기 위한 alternate 속성만 정의한다 (즉, encodingFormat에 기반하거나 URL을 검사함). 프로파일은 다른 기준에 기반한 선택을 허용하도록 이 동작을 확장할 MAY 수 있다. 대체 리소스를 선택하는 과정은 § B. 대체 리소스 선택에 설명되어 있다.

참고

LinkedResource 객체를 정의할 때는 항상 encodingFormat 속성을 사용하여 리소스의 미디어 타입을 지정하는 것이 좋다. 그렇게 하면 사용자 에이전트가 리소스의 사용 가능성을 더 쉽게 판단할 수 있다.

예제 4 : 콘텐츠의 SHA-256 해싱을 가진 리소스.
{
    "type"           : "LinkedResource",
    "url"            : "chapter1.html",
    "encodingFormat" : "text/html",
    "name"           : "Chapter 1 - Loomings",
    "integrity"      : "sha256-13AE04E21177BABEDFDE721577615A638341F963731EA936BBB8C3862F57CDFC"
}
예제 5 : 대체 형식을 가진 리소스.
{
    "type"           : "LinkedResource",
    "url"            : "chapter1.mp3",
    "encodingFormat" : "audio/mpeg",
    "name"           : "Chapter 1 - Loomings",
    "alternate"      : [
        "chapter1.html",
        {
            "type": "LinkedResource",
            "url": "chapter1.json",
            "encodingFormat": "application/vnd.syncnarr+json",
            "duration": "PT1669S"
        }
    ]
}
4.2.4.4 객체

매니페스트 속성이 이 절이나 프로파일에서 정의하지 않은 객체 타입을 기대하는 경우, 이는 [json] 객체로 표현되어야 MUST 한다(즉, 속성 값은 객체를 만들기 위해 처리되지 않는다).

4.2.5 URL

URL디지털 출판물과 연관된 리소스를 식별하는 데 사용된다. 속성이 URL 값을 기대하는 경우, 이는 유효한 URL 문자열 [url]이어야 MUST 한다.

상대 URL 문자열의 경우, 이는 기본 URL [url]을 사용하여 절대 URL 문자열로 해석된다.

상대 URL 문자열의 기본 URL은 다음과 같이 결정된다.

따라서 임베드된 매니페스트의 상대 URL 문자열은 문서가 기본 URL을 선언하지 않는 (즉, 헤더의 <base> 요소) 매니페스트를 참조하는 문서의 URL을 기준으로 해석된다.

4.2.6 식별자

식별자는 디지털 출판물과 그 창작을 책임지는 엔티티를 지속적이고 명확한 방식으로 참조하는 데 사용된다. URL, URN, DOI, ISBN, 및 PURL은 모두 출판에서 자주 사용되는 지속적 식별자의 예이다.

식별자는 URL 레코드 [url]로 표현되어야 MUST 한다.

4.2.7 배열

매니페스트 속성이 각각의 타입(예: 리터럴, 객체, 또는 URL)에 대해 하나 이상의 값을 허용하는 경우, 이러한 값은 [json] 배열로 표현된다. 그러나 속성 값이 단일 요소인 경우 배열 구문은 생략될 MAY 수 있다.

4.3 매니페스트 컨텍스트

매니페스트는 다음 두 구성요소를 지정된 순서대로 사용하여 JSON-LD 컨텍스트 [json-ld11]를 설정해야 MUST 한다.

  1. [schema.org] 컨텍스트: https://schema.org
  2. 출판 컨텍스트: https://www.w3.org/ns/pub-context
참고

Schema.org는 종종 http URI 스킴을 사용해 참조되지만, 이 어휘는 보안 https 스킴을 기본값으로 사용하도록 마이그레이션되고 있다. 따라서 출판 매니페스트 컨텍스트에서는 https 스킴만 인식된다.

예제 8 : 컨텍스트 선언 설정.
{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context"
    ],
    …
}

출판 컨텍스트 문서는 Schema.org에 정의된 속성에 기능을 추가한다(예: creator 속성이 순서를 보존해야 한다는 요구사항).

이 명세의 프로파일은 추가 컨텍스트 URL을 요구할 MAY 수 있지만, 그러한 URL은 이 두 구성요소 뒤에 배치되어야 MUST 한다.

컨텍스트는 출판 컨텍스트 뒤에 오는 객체 안에 전역 언어 및 방향 선언과 같은 추가 매개변수를 포함하여 확장할 수 있다.

{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {
            "language" : "es"
        }
    ],
    …
}

4.4 매니페스트 언어 및 방향

매니페스트의 각 자연어 속성 값(예: title, creators)에는 기본 자연어 언어가 있으며, 이는 그 값이 표현된 언어(예: 영어, 프랑스어, 중국어)이다. 또한 작성된 자연스러운 기본 방향도 가진다 — 표시 방향으로, 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽이다.

디지털 출판 매니페스트는 사용자 에이전트가 메타데이터를 해석하고 표시하는 것을 돕기 위해 이 두 개념을 전역적으로 설정할 수 있을 뿐 아니라 개별 항목에도 설정할 수 있는 기능을 제공한다.

참고

기본 방향을 설정하는 기능은 JSON-LD 1.1 [json-ld11] 기능이다. 즉, Publication Manifest는 이전 1.0 [json-ld10] 버전이 아니라 해당 버전의 JSON-LD 명세에 의존한다.

4.4.1 전역 선언

자연어 매니페스트 속성에 대한 전역 언어 및 기본 방향 선언은 각각 context 안에서 languagedirection 키워드 [json-ld11]를 사용하여 설정된다. 이러한 값은 매니페스트 처리 중에 단순 문자열 값을 지역화 가능한 문자열로 확장하는 데 사용되며, 또한 언어나 기본 방향을 생략한 지역화 가능한 문자열에 언어와 기본 방향을 제공하는 데 사용된다.

language의 값은 올바른 형식의 언어 태그 [bcp47]여야 MUST 한다.

direction의 값은 다음 값 중 하나여야 MUST 한다.

  • "ltr": 텍스트 값이 왼쪽에서 오른쪽 방향의 텍스트로 명시적으로 설정되었음을 나타낸다.
  • "rtl": 텍스트 값이 오른쪽에서 왼쪽 방향의 텍스트로 명시적으로 설정되었음을 나타낸다.

전역 언어 및 기본 방향 선언이 있는 경우, 이는 출판 컨텍스트 뒤에 와야 MUST 한다.

전역 언어 또는 기본 방향에는 기본값이 지정되어 있지 않다.

4.4.2 항목별 선언

매니페스트의 모든 자연어 값에 대해 localizable string을 사용하여 언어 또는 기본 방향을 로컬로 설정할 수 있다.

languagedirection 키워드 [json-ld11]의 가능한 값은 전역 선언의 경우와 같다. 또한 두 값 모두 (JSON) 값 null일 수도 있으며, 이는 각각 명시적인 언어 또는 방향이 설정되지 않았음을 나타낸다.

참고

어떤 값(예: 조직 이름)이 일반적으로 연관된 언어 없이 사용되는 경우 (예: "Google"), language 값을 null로 설정하는 것이 유용할 수 있다.

언어 또는 기본 방향의 로컬 선언은 각각 전역 선언보다 우선한다.

4.5 출판물 타입

디지털 출판물매니페스트type 키워드 [json-ld11]를 사용하여 그 출판물 타입을 정의한다. 타입은 어떤 [schema.org] 타입에도 매핑될 MAY 수 있지만, 타입이 지정되지 않은 경우 CreativeWork기본값으로 간주된다.

예제 14 : 출판물의 타입을 CreativeWork로 설정.
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : "CreativeWork",
    …
}

Article, Book, TechArticle, 및 Course와 같은 CreativeWork의 더 구체적인 하위 타입은 CreativeWork 대신 또는 그에 추가하여 사용할 수 있다.

예제 15 : 출판물의 타입을 Book으로 설정.
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : "Book",
    …
}

각 Schema.org 타입은 함께 사용할 수 있는 유효한 속성 집합을 정의한다. 매니페스트가 Schema.org 인식 프로세서에 의해 검증되고 처리될 수 있도록, 매니페스트는 선택된 타입과 관련된 속성만 포함하는 것이 SHOULD이다.

둘 이상의 타입에서 온 속성이 필요한 경우, 매니페스트는 여러 타입 선언을 포함할 MAY 수 있다.

예제 16 : Book과 VisualArtwork의 속성을 결합하는 출판물에 type 속성 설정.
{
    "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
    "type"     : ["Book", "VisualArtwork"],
    …
}

사용자 에이전트는 선언된 Schema.org 타입에 유효하지 않은 매니페스트를 처리하지 못해서는 SHOULD NOT 된다.

참고

CreativeWork 하위 타입의 전체 목록은 Schema.org 사이트를 참조하라.

4.6 프로파일 적합성

디지털 출판물conformsTo 속성을 사용하여 그 매니페스트와 콘텐츠가 적합한 프로파일을 나타낸다.

용어 설명 필수 값 값 범주 [dcterms] 매핑
conformsTo 프로파일의 URL. 프래그먼트가 있는 절대 URL 문자열 [url]. 배열리터럴 conformsTo

프로파일에 사용할 URL은 해당 명세에서 정의된다.

참고

conformsTo 속성은 다른 명세와 표준(예: [wcag21])에 대한 적합성을 나타내는 데에도 사용할 수 있다.

예제 17 : 디지털 출판물이 W3C Audiobooks 명세에 적합함을 식별.
{
    …
    "conformsTo" : "https://www.w3.org/TR/audiobooks/",
    …
}

4.7 속성

4.7.1 기술 속성

4.7.1.1 축약판

abridged 속성은 디지털 출판물이 원래 형태에서 축약되었는지 여부에 관한 정보를 제공한다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
abridged 책이 축약판인지 여부를 나타낸다. true 또는 false. 불리언 abridged (Book)
예제 18 : 출판물이 축약되었음을 설정.
{
    …
    "abridged" : true,
    …
}
4.7.1.2 접근성

접근성 속성은 서로 다른 선호 읽기 양식을 가진 사용자가 디지털 출판물을 소비하기에 적합한지에 관한 정보를 제공한다. 이러한 속성은 일반적으로 [wcag21]에서 제공하는 것과 같은 확립된 접근성 기준에 대한 평가를 보완한다.

다음 속성은 접근성 속성으로 분류된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
accessMode 사람이 정보를 처리하거나 지각할 수 있는 인간의 감각 지각 체계 또는 인지 능력. 하나 이상의 텍스트. 배열리터럴 accessMode (CreativeWork)
accessModeSufficient 리소스의 모든 지적 콘텐츠를 이해하기에 충분한 단일 또는 조합 접근 모드 목록. 하나 이상의 ItemList. 배열객체 accessModeSufficient (CreativeWork)
accessibilityFeature 접근 가능한 미디어, 대체 항목, 접근성을 위해 지원되는 향상 기능과 같은 리소스의 콘텐츠 기능. 하나 이상의 텍스트. 배열리터럴 accessibilityFeature (CreativeWork)
accessibilityHazard 일부 사용자에게 생리적으로 위험한, 설명된 리소스의 특성. 하나 이상의 텍스트. 배열리터럴 accessibilityHazard (CreativeWork)
accessibilitySummary 다른 접근성 메타데이터와 일관되는 특정 접근성 기능 또는 결함에 대한 사람이 읽을 수 있는 요약. 텍스트. 배열지역화 가능한 문자열 accessibilitySummary (CreativeWork)
참고

이러한 속성에 대한 자세한 설명과 함께 사용할 것으로 기대되는 값은 [webschemas-a11y]에서 확인할 수 있다.

참고

이러한 속성으로 표현할 수 있는 것보다 더 많은 정보가 필요한 경우, 자세한 접근성 보고서에 대한 참조도 제공할 수 있다.

예제 19 : 각 이미지에 적절한 대체 텍스트와 긴 설명을 제공하여 순수한 텍스트 형태로 읽을 수 있게 하는 출판물의 접근성 메타데이터 설정.
{
    …
    "accessMode"              : ["textual", "visual"],
    "accessibilityFeature"    : ["alternativeText", "longDescription"]
    "accessModeSufficient"    : [
        {
            "type"            : "ItemList",
            "itemListElement" : ["textual", "visual"]
        },
        {
            "type"            : "ItemList",
            "itemListElement" : ["textual"]
        }
    ],
    …
}
4.7.1.3 주소

주소디지털 출판물의 출처 위치를 식별하는 URL이다. 이는 url 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
url 출판물의 URL. 유효한 URL 문자열 [url]. 배열URL url (Thing)

디지털 출판물은 둘 이상의 주소를 가질 MAY 수 있지만, 모든 주소는 같은 문서로 해석되어야 MUST 한다.

참고
출판물의 주소는 identifier 링크 관계 [link-relation]의 값으로도 사용할 수 있다.
예제 20 : 출판물의 주소 설정.
{
    …
    "url" : "https://publisher.example.org/frankenstein",
    …
}
4.7.1.4 정식 식별자

디지털 출판물정식 식별자 속성은 디지털 출판물에 대한 고유한 식별자를 제공한다. 이는 id 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
id 출판물의 선호 버전. URL 레코드 [url]. 식별자 (없음)
참고

정식 식별자의 고유성을 보장하는 것은 이 명세의 범위를 벗어난다. 실제로 달성 가능한 고유성은 사용되는 식별자 스킴의 관례와 식별자 할당에 대한 통제 정도와 같은 요인에 따라 달라진다.

정식 식별자가 매니페스트에 제공되지 않았거나 값이 유효하지 않은 URL인 경우, 디지털 출판물에는 정식 식별자가 없다. 사용자 에이전트는 매니페스트에 제공된 다른 식별자로부터 정식 식별자를 구성하려 시도해서는 MUST NOT 안 된다.

정식 식별자의 지정은 identifier 속성 [schema.org] 및/또는 그 하위 타입을 사용하여 추가 유형의 식별자를 포함함으로써 보완될 MAY 수 있다.

예제 21 : 정식 식별자와 주소를 URL로 설정.
{
    …
    "id"  : "http://www.w3.org/TR/tabular-data-model/",
    "url" : "http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/",
    …
}
예제 22 : 정식 식별자에 URN 사용.
{
    …
    "id"  : "urn:isbn:9780123456789",
    "url" : "https://publisher.example.org/wuthering-heights",
    …
}
4.7.1.5 작성자

작성자디지털 출판물의 창작을 책임지는 개인 또는 조직이다.

다음 속성은 작성자로 분류된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
artist 연필 또는 디지털 선화 이외의 매체에서 출판물의 주 아티스트. 하나 이상의 Person. 배열엔티티 artist (VisualArtwork)
author 출판물의 저자. 하나 이상의 Person 및/또는 Organization. 배열엔티티 author (CreativeWork)
colorist 잉크 처리된 그림에 색을 추가하는 개인. 하나 이상의 Person. 배열엔티티 colorist (VisualArtwork)
contributor 역할이 이 표의 다른 역할 중 하나에 맞지 않는 기여자. 하나 이상의 Person 및/또는 Organization. 배열엔티티 contributor (CreativeWork)
creator

출판물의 작성자.

이 속성을 사용하면 사용자 에이전트에서 일관되지 않은 결과가 발생할 수 있다. 이 속성은 [schema.org]에서 author의 동의어로 표시되어 있지만, 어느 것이 우선하는지 또는 어떻게 결합할지에 대한 지침은 없다. 둘 중 하나만 사용하는 것이 권장되며, 더 구체적인 author 속성을 선호한다.

하나 이상의 Person 및/또는 Organization. 배열엔티티 creator (CreativeWork)
editor 출판물의 편집자. 하나 이상의 Person. 배열엔티티 editor (CreativeWork)
illustrator 출판물의 삽화가. 하나 이상의 Person. 배열엔티티 illustrator (Book)
inker 연필 그림 위에 잉크로 선을 따라 그리는 개인. 하나 이상의 Person. 배열엔티티 inker (VisualArtwork)
letterer 말풍선과 음향 효과를 포함하여 작품에 글자를 추가하는 개인. 하나 이상의 Person. 배열엔티티 letterer (VisualArtwork)
penciler 주요 서사 작품을 그리는 개인. 하나 이상의 Person. 배열엔티티 penciler (VisualArtwork)
publisher 출판물의 발행자. 하나 이상의 Person 및/또는 Organization. 배열엔티티 publisher (CreativeWork)
readBy 출판물을 읽어 주는(수행하는) 사람(오디오북용). 하나 이상의 Person. 배열엔티티 readBy (Audiobook)
translator 출판물의 번역자. 하나 이상의 Person 및/또는 Organization. 배열엔티티 translator (CreativeWork)

작성자는 다음 중 하나로 표현되어야 MUST 한다.

  1. Person [schema.org]의 이름을 인코딩하는 [json] 문자열, 또는
  2. Person 또는 Organization [schema.org]의 인스턴스.

단일 문자열 값은 name 속성이 해당 문자열 값으로 설정된 [schema.org] Person의 축약 표현이다. (§ 4.2.4.2 엔티티도 참조.)

매니페스트는 각 작성자 유형을 둘 이상 포함할 MAY 수 있다.

예제 23 : 책의 저자 설정.
{
    …
    "url"      : "https://publisher.example.org/alice-in-wonderland",
    "author"   : {
        "type"  : "Person",
        "name"  : "Lewis Carroll"
    }
}
예제 24 : 편집자, 저자, 발행자 구분. 일부 사람은 객체 대신 단순 문자열로 표현.
{
    …
    "author"     : [
        "Jeni Tennison",
        {
            "type"       : "Person",
            "name"       : "Gregg Kellogg",
        },
        {
            "type"       : "Person",
            "name"       : "Ivan Herman",
            "id"         : "https://www.w3.org/People/Ivan/"
            "identifier" : "0000-0003-0782-2704",
        }
    ],
    "editor"    : [
        "Jeni Tennison",
        {
            "type" : "Person",
            "name" : "Gregg Kellogg",
        }
    ],
    "publisher" : {
        "type" : "Organization",
        "name" : "World Wide Web Consortium",
        "id"   : "https://www.w3.org/"
    }
    …
}
4.7.1.6 지속 시간

전역 지속 시간시간 기반 디지털 출판물(예: 오디오북 또는 일련의 비디오 클립으로 구성된 책)의 전체 길이를 나타낸다. 이는 duration 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
duration 시간 기반 출판물의 전체 지속 시간.  [iso8601-1]에서 정의한 지속 시간 값. 리터럴 duration (Property)
예제 25 : 전역 지속 시간을 초 단위로 설정.
{
    …
    "type"     : "Audiobook",
    "id"       : "https://example.org/flatland-a-romance-of-many-dimensions/",
    "url"      : "https://w3c.github.io/pub-manifest/experiments/audiobook/",
    "name"     : "Flatland: A Romance of Many Dimensions",
    …
    "duration" : "PT15153S",
    …
}
참고

관련 Wikipedia 페이지는 ISO 지속 시간 구문을 간결하게 설명한다.

4.7.1.7 최종 수정일

최종 수정일디지털 출판물이 마지막으로 업데이트된 날짜이다(즉, 매니페스트를 포함하여 출판물의 리소스 중 어느 것에든 마지막으로 변경이 이루어진 때). 이는 dateModified 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
dateModified 출판물의 최종 수정일. Date 또는 DateTime 값 [schema.org]이며, 각각 ISO 8601 날짜 또는 날짜 시간 형식으로 표현된다 [iso8601-1]. 리터럴 dateModified (CreativeWork)

최종 수정일은 출판물에 대한 모든 변경 사항을 반드시 반영하지는 않는다(예: 디지털 출판물 형식이 제3자 콘텐츠에 대한 참조를 허용하는 경우). 사용자 에이전트는 개별 리소스가 변경되어 업데이트가 필요한지 확인하기 위해 해당 리소스의 최종 수정일을 확인하는 것이 SHOULD이다.

예제 26 : 출판물의 최종 수정일 설정.
{
    …
    "dateModified" : "2015-12-17",
    …
}
4.7.1.8 출판일

출판일디지털 출판물이 최초로 출판된 날짜이다. 이는 출판물의 생명주기에서 정적인 사건을 나타내며 이후 개정판을 식별하고 비교할 수 있게 한다. 이는 datePublished 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
datePublished 출판물의 생성일. Date 또는 DateTime이며, 각각 ISO 8601 날짜 또는 날짜 시간 형식으로 표현된다 [iso8601-1]. 리터럴 datePublished (CreativeWork)

정확한 출판 시점은 의도적으로 해석에 맡겨져 있다. 이는 출판물이 처음 제공된 때일 수도 있고, 출판 전에 출판물이 최종본으로 간주된 시점일 수도 있다.

예제 27 : 출판물의 생성일과 수정일 설정.
{
    …
    "datePublished" : "2015-12-17",
    "dateModified"  : "2016-01-30",
    …
}
4.7.1.9 출판물 언어

디지털 출판물에는 적어도 하나의 자연어가 있으며, 이는 콘텐츠가 표현된 언어이다(예: 영어, 프랑스어, 중국어). 매니페스트에는 이 개념을 설정하기 위한 다음 속성이 포함되며, 이는 예를 들어 사용자 에이전트의 동작(예: 사전 또는 텍스트 음성 변환 엔진을 미리 로드하는 것)에 영향을 줄 수 있다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
inLanguage 출판물의 기본 언어. 하나 이상의 올바른 형식의 언어 태그 [bcp47]. 배열리터럴 inLanguage (Property)

자연어는 올바른 형식의 언어 태그여야 MUST 한다  [bcp47].

사용자 에이전트가 출판물 언어를 필요로 하는데 매니페스트에서 사용할 수 없거나 얻은 값이 올바른 형식 [bcp47]이 아닌 경우, 사용자 에이전트는 내부 표현을 생성할 때 출판물 언어를 결정하려 시도할 MAY 수 있다. 이 명세는 그러한 언어 태그가 어떻게 만들어지는지 규정하지 않는다. 사용자 에이전트는 다음을 수행할 수 있다.

사용자 에이전트가 출판물의 기본 언어를 필요로 하고 둘 이상의 언어가 지정된 경우, inLanguage 배열의 첫 번째 항목은 기본 언어로 인식되어야 MUST 한다.

참고

출판물의 언어와 그것을 구성하는 개별 리소스의 언어를 구별하는 것이 중요하다. 예를 들어 그러한 리소스가 HTML인 경우, 해당 리소스에도 언어를 설정해야 한다. 출판물의 언어는 상속되지 않는다.

4.7.1.10 읽기 진행 방향

읽기 진행 방향디지털 출판물 안에서 한 리소스에서 다음 리소스로 가는 읽기 방향을 설정한다. 이는 메뉴 위치, 터치 제스처, 전환 방향, 다음 및 이전 페이지를 위한 탭 영역과 같은 출판물 수준의 상호작용을 조정하는 데 사용된다. 읽기 진행은 readingDirection 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
readingProgression 한 리소스에서 다른 리소스로의 읽기 진행 방향. 다음 중 하나: ltr 또는 rtl. 리터럴 (없음)

이 속성의 값은 다음 중 하나여야 MUST 한다.

  • ltr: 왼쪽에서 오른쪽, 또는
  • rtl: 오른쪽에서 왼쪽.

기본값은 ltr이다. readingProgression이 설정되지 않은 경우, 사용자 에이전트는 내부 표현을 생성할 때 기본값을 사용해야 MUST 한다.

이 속성은 개별 기본 리소스의 렌더링에는 영향을 주지 않는다. 이는 한 리소스에서 다른 리소스로의 진행 방향에만 관련된다.

예제 28 : 읽기 진행을 ltr(왼쪽에서 오른쪽)로 명시적으로 설정.
{
    …
    "readingProgression" : "ltr",
    …
}
4.7.1.11 제목

제목은 디지털 출판물의 사람이 읽을 수 있는 이름을 제공한다. 이는 name 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
name 출판물의 사람이 읽을 수 있는 제목. 하나 이상의 텍스트. 배열지역화 가능한 문자열 name (Thing)

매니페스트에 제목이 포함되어 있지 않은 경우, 사용자 에이전트는 제목을 만들어야 MUST 한다. 제목을 얻는 과정은 § 7.4.3 기본 값 추가에 정의되어 있다.

참고

사용자 에이전트는 제목이 지정되지 않은 출판물에 대해 의미 있는 제목 [wcag21]을 생성할 것으로 기대되지 않는다.

예제 29 : 책의 제목을 명시적으로 설정.
{
    …
    "name" : "Heart of Darkness",
    …
}

4.7.2 리소스 분류 속성

출판물 리소스는 이 절에서 정의한 대로 기본 읽기 순서, 리소스 목록, 및 링크를 통해 지정된다. 이러한 목록에는 개인정보 처리방침과 같은 정보 제공 리소스목차와 같은 구조적 리소스에 대한 참조가 포함된다.

참고

이러한 목록 중 어느 곳에도 매니페스트에 대한 참조를 포함할 필요는 없다.

4.7.2.1 기본 읽기 순서

기본 읽기 순서디지털 출판물 리소스 집합을 통과하는 특정 진행이다. 사용자는 콘텐츠를 통과하는 대체 경로를 따를 수 있지만, 그러한 상호작용이 없는 경우 기본 읽기 순서는 한 리소스에서 다음 리소스로의 예상 진행을 정의한다.

기본 읽기 순서는 readingOrder 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
readingOrder 디지털 출판물의 리소스를 통과하는 진행 순서.

하나 이상의 LinkedResource.

배열링크된 리소스 (없음)

readingOrder 속성의 각 요소는 다음 중 하나로 표현되어야 MUST 한다.

단일 문자열 값은 url 속성이 그 문자열의 텍스트인 LinkedResource 객체의 인스턴스를 나타낸다.

항목의 순서는 중요하다.

읽기 순서에 표현된 URL은 프래그먼트 식별자를 포함할 MAY 수 있지만, 이 명세의 프로파일은 그 사용뿐 아니라 지원되는 스킴과 기능도 제한할 MAY 수 있다. 프래그먼트 식별자는 각 해당 명세에서 정의한 대로 해석되어야 한다(예: 사용자를 이동시킬 시작 위치, 또는 읽기 순서의 다음 항목으로 이동하기 전에 렌더링할 콘텐츠 범위).

리소스는 읽기 순서에 둘 이상 나열해서는 SHOULD NOT 안 된다. 이는 사용자 에이전트에서 예기치 않은 결과를 초래할 수 있기 때문이다(예: 리소스에 대한 링크가 읽기 순서의 올바른 인스턴스로 해석되지 않을 수 있음).

디지털 출판물매니페스트에 링크하는 리소스만으로 구성된 경우 기본 읽기 순서는 생략될 MAY 수 있다. 기본 읽기 순서가 없는 경우 사용자 에이전트는 내부 표현을 컴파일할 때 링크하는 리소스에 대한 항목을 포함해야 MUST 한다. 자세한 내용은 § 7.4.3 기본 값 추가를 참조하라.

기본 읽기 순서는 매니페스트 처리 후에 적어도 하나의 리소스를 포함해야 MUST 한다.

예제 30 : 읽기 순서를 단순한 URL 목록으로 표현.
{
    …
    "readingOrder" : [
        "html/title.html",
        "html/copyright.html",
        "html/introduction.html",
        "html/epigraph.html",
        "html/c001.html",
        …
    ],
    …
}
예제 31 : 더 많은 정보를 제공하기 위해 읽기 순서를 LinkedResource 객체로 표현.
{
    …
    "readingOrder" : [
        {
            "type"           : "LinkedResource",
            "url"            : "html/title.html",
            "encodingFormat" : "text/html",
            "name"           : "Title page"
        },
        {
            "type"           : "LinkedResource",
            "url"            : "html/copyright.html",
            "encodingFormat" : "text/html",
            "name"           : "Copyright page"
        },
        …
    ],
    …
}
4.7.2.2 리소스 목록

리소스 목록기본 읽기 순서에 아직 나열되지 않았지만 디지털 출판물의 처리 또는 렌더링에 사용되는 추가 리소스를 열거한다. 이는 resources 속성을 사용하여 표현된다.

용어 설명 필수 값 값 범주 [schema.org] 매핑
resources 출판물의 처리 또는 렌더링에 사용되는 추가 출판물 리소스 목록.

하나 이상의 LinkedResource.

배열링크된 리소스 (없음)

resources 속성의 각 요소는 다음 중 하나로 표현되어야 MUST 한다.

단일 문자열 값은 url 속성이 그 문자열의 텍스트인 LinkedResource 객체의 인스턴스를 나타낸다.

항목의 순서는 중요하지 않다.

리소스에 대한 상충되는 정보를 피하기 위해, 특정 리소스의 URL은 리소스 목록 안에서 반복하지 않는 것이 SHOULD NOT이다.

리소스 목록에 표현된 URL은 프래그먼트 식별자를 포함하지 않는 것이 SHOULD NOT이다.

리소스 목록의 완전성은 특정 읽기 시나리오(예: 오프라인에서 읽을 수 있는 능력)에서 디지털 출판물의 사용성에 영향을 줄 수 있다. 이러한 이유로, 기본 읽기 순서에 나열된 리소스를 넘어 출판물을 구성하는 모든 리소스의 포괄적인 목록을 제공하는 것이 강력히 권장된다.

어떤 경우에는 이러한 리소스의 포괄적인 목록을 쉽게 만들 수 없을 수도 있다(예: 소스 깊숙한 곳의 리소스를 참조하는 제3자 스크립트). 그러나 사용자 에이전트는 이러한 리소스 중 일부가 출판물에 속하는 것으로 식별되지 않았더라도 출판물을 렌더링할 수 있는 것이 SHOULD이다 (예: 이러한 리소스 없이 오프라인으로 가져간 경우).

예제 32 : 단순 URL 문자열과 LinkedResource 객체의 조합으로 리소스 목록 표현.
{
    …
    "resources"  : [
        "datatypes.html",
        "datatypes.svg",
        "datatypes.png",
        "diff.html",
        {
            "type"           : "LinkedResource",
            "url"            : "test-utf8.csv",
            "encodingFormat" : "text/csv"
        },
        {
            "type"           : "LinkedResource",
            "url"            : "test-utf8-bom.csv",
            "encodingFormat" : "text/csv"
        },
        …
    ],
    …
}

4.7.3 확장성

매니페스트는 사용자 에이전트가 디지털 출판물을 표시하고 렌더링하는 데 사용할 기본 속성 집합을 제공하도록 설계되었지만, 다음과 같은 방식으로 확장될 MAY 수 있다.

  1. 링크된 메타데이터 레코드를 제공하거나,
  2. 매니페스트에 추가 속성을 포함함으로써.

이 명세는 그러한 추가 속성이 사용자 에이전트의 매니페스트 내부 표현에서 어떻게 컴파일, 저장 또는 노출되는지를 정의하지 않는다. 사용자 에이전트는 일부 또는 모든 확장 속성을 무시할 MAY 수 있다.

4.7.3.1 링크된 레코드

매니페스트는 ONIX [onix] 또는 BibTeX [bibtex]와 같은 메타데이터 레코드에 대한 링크를 통해, 다음과 같은 LinkedResource 객체를 사용하여 확장될 MAY 수 있다.

  • LinkedResourcerel 속성은 관련 식별자를 포함한다(예: 링크된 레코드가 기술 메타데이터를 포함하는 경우, describedby 식별자 [iana-link-relations]를 사용할 수 있다).
  • encodingFormat의 값은 적용 가능한 경우 해당 특정 레코드 유형에 대해 정의된 MIME 미디어 타입 [rfc2046]을 식별한다.

링크된 레코드가 출판물의 일부인 경우(즉, 매니페스트 확장성 이상의 용도로 필요한 경우) 리소스 목록에 포함된다. 그렇지 않으면 링크 목록에 포함된다.

예제 33 : 외부 ONIX for Books 메타데이터 레코드에 링크.
{
    …
    "links"  : [
        {
            "type"            : "LinkedResource",
            "url"             : "https://www.publisher.example.org/time-machine/onix.xml",
            "encodingFormat"  : "application/onix+xml",
            "rel"             : "describedby"
        },
        …
    ],
    …
}
편집자 참고

application/onix+xml MIME 타입은 이 문서를 작성하는 시점에 IANA에 아직 등록되지 않았으며, 예시 목적만으로 포함되었다.

4.7.3.2 추가 매니페스트 속성

추가 속성은 [schema.org] 또는 [dcterms]와 같은 공개 스킴을 사용하여 매니페스트에 직접 포함될 MAY 수 있다. 독점 용어도 사용될 MAY 수 있지만, 그러한 용어는 컨텍스트의 일부로 정의된 접두사를 사용하는 Compact IRI [json-ld11]를 사용하여 포함하는 것이 RECOMMENDED된다.

참고

접두사와 Compact IRI의 적절한 사용은 전체 JSON-LD 프로세서와 함께 매니페스트를 사용하기 위해 필요하지만, 이 명세에서 정의한 처리 알고리즘의 요구사항은 아니다. 전체 JSON-LD 처리가 기대되는 경우, 접두사가 붙은 용어의 검증은 별도로 수행되어야 한다.

예제 34 : 어휘 접두사 선언을 사용하여 기본 데이터 집합 확장.
{
    "@context" : [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {
            "language" : "en",
            "ex"       : "https://example.org/vocab"
        }
    ],
    …
    "ex:region" : "North America",
    …
}

Schema.org 컨텍스트 파일 [schema.org]은 Dublin Core Terms(dcterms) [dcterms] 및 Element Set(dc) [dc11], FOAF 어휘(foaf) [foaf], 그리고 Bibliographic Ontology(bibo) [bibo]와 같은 일반적으로 사용되는 어휘에 대한 여러 접두사를 정의한다. 이러한 어휘의 속성은 해당 접두사를 선언할 필요 없이 사용할 수 있다.

예제 35 : Schema.org 'copyrightYear' 및 'copyrightHolder' 용어를 사용하여 기본 데이터 확장.
{
    …
    "copyrightYear"   : "2015",
    "copyrightHolder" : "World Wide Web Consortium",
    …
}
예제 36 : 2012 ACM 분류 용어와 함께 Dublin Core 'subject' 용어를 사용하여 기본 데이터 집합 확장.
{
    …
    "dcterms:subject" : ["Web data description languages","Data integration","Data Exchange"],
    …
}

4.8 리소스 관계

4.8.1 구조적 리소스

4.8.1.1 표지

표지는 사용자 에이전트가 디지털 출판물을 표시하는 데 사용할 수 있는 리소스이다 (예: 라이브러리나 책장 안에서, 또는 출판물을 처음 로드할 때).

표지는 cover 링크 관계로 식별된다.

표지에 대한 링크는 링크 목록에 지정되어서는 MUST NOT 안 된다.

편집자 참고

cover 용어는 현재 IANA 링크 관계에 등록되어 있지 않지만, 워킹 그룹은 이를 추가할 것으로 예상한다.

예제 37 : HTML 표지 페이지 식별.
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "cover.html",
            "encodingFormat" : "text/html",
            "rel"            : "cover"
        },
        …
    ],
    …
}

표지가 이미지인 경우(HTML 리소스에 포함되어 있든 아니든), 대체 텍스트와 확장 설명을 제공하기 위해 성공 기준 1.1.1 [wcag21]을 따르는 것이 강력히 권장된다. 이 정보를 삽입할 수 있는 기능을 제공하지 않는 이미지 형식의 경우, LinkedResourcenamedescription 속성을 각각 대체 텍스트와 확장 설명을 제공하는 데 사용할 수 있다. 이러한 경우 name 속성은 항상 설정하는 것이 SHOULD이다 — 장식용 이미지의 경우 이 속성은 비워 둘 수 있다.

예제 38 : 표지 이미지 식별. 대체 텍스트와 설명은 각각 name 및 description 속성에 제공된다.
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "whale-image.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover",
            "name"           : "Moby Dick attacking hunters",
            "description"    : "A white whale is seen surfacing from the water to attack a small whaling boat"
        },
        …
    ],
    …
}
예제 39 : 장식용 표지. name 속성은 비워 둔다.
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "cover.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover",
            "name"           : "",
        },
        …
    ],
    …
}

사용자 에이전트가 인터페이스를 접근 가능하게 만들기 위해 표지 이미지의 대체 텍스트를 필요로 하는데 name 속성이 지정되지 않은 경우, 출판물 메타데이터에서 대체 텍스트를 구성하려 시도할 MAY 수 있다. 이 명세는 그러한 대체 텍스트가 어떻게 만들어지는지 규정하지 않는다. 한 가지 방법은 이미지가 표지임을 식별하는 문자열 뒤에 출판물 제목을 붙여 대체 텍스트를 구성하는 것이다.

하나의 리소스만 표지로 식별될 MAY 수 있지만, 추가 표지는 alternate 속성을 사용하여 지정될 MAY 수 있다(예: 대체 크기 또는 해상도를 제공하기 위해).

예제 40 : JPEG 및 SVG 형식으로 표지 이미지 제공.
{
    …
    "resources" : [
        {
            "type"           : "LinkedResource",
            "url"            : "lilliput.jpg",
            "encodingFormat" : "image/jpeg",
            "rel"            : "cover"
            "alternate"      : [
                 {
                     "type"           : "LinkedResource",
                     "url"            : "lilliput.svg",
                     "encodingFormat" : "image/svg+xml",
                     "rel"            : "cover"
                 }
            ]
        },
        …
    ],
    …
}
4.8.1.2 페이지 목록

페이지 목록은 디지털 출판물 안의 정적 페이지 구분 지점 목록을 포함하는 탐색 보조 수단이다.

페이지 목록은 pagelist 링크 관계로 식별된다.

편집자 참고

pagelist 용어는 현재 IANA 링크 관계에 등록되어 있지 않지만, 워킹 그룹은 이를 추가할 것으로 예상한다.

하나의 리소스만 페이지 목록을 포함하는 것으로 식별될 MAY 수 있다. 여러 인스턴스가 지정된 경우, 사용자 에이전트는 읽기 순서에 우선순위를 두고 처음 발견한 인스턴스를 사용해야 MUST 한다.

페이지 목록에 대한 링크는 링크 목록에 지정되어서는 MUST NOT 안 된다.

예제 41 : 페이지 목록을 포함하는 리소스 식별.
{
    …
    "resources" : [
        {
            "type" : "LinkedResource",
            "url"  : "toc_file.html",
            "rel"  : "pagelist"
        },
        …
    ],
    …
}
4.8.1.3 목차

목차는 디지털 출판물의 주요 구조적 섹션으로 연결되는 링크를 제공하는 탐색 보조 수단이다.

목차를 포함하는 리소스는 contents 링크 관계 [iana-link-relations]로 식별된다. 실제 목차는 해당 리소스 안에서 § C.2 HTML 구조에 정의된 대로 role 값이 doc-toc인 첫 번째 요소이다.

하나의 리소스만 목차를 포함하는 것으로 식별될 MAY 수 있다. 여러 인스턴스가 지정된 경우, 사용자 에이전트는 읽기 순서의 리소스에 우선순위를 두고 처음 발견한 인스턴스를 사용해야 MUST 한다.

이 명세의 프로파일contents 관계로 식별되는 리소스가 없는 경우 목차를 포함하는 리소스를 찾는 방법을 정의할 MAY 수 있다.

목차에 대한 링크는 링크 목록에 지정되어서는 MUST NOT 안 된다.

목차에 대한 RECOMMENDED 구조와 처리 모델은 § C. 기계 처리 가능한 목차에 정의되어 있다.

예제 42 : 목차를 포함하는 리소스 식별.
{
    …
    "resources" : [
        {
            "type" : "LinkedResource",
            "url"  : "toc_file.html",
            "rel"  : "contents"
        },
        …
    ],
    …
}

4.8.2 정보 제공 리소스

4.8.2.1 접근성 보고서

접근성 보고서는 서로 다른 선호 읽기 양식을 가진 사용자가 디지털 출판물을 소비하기에 적합한지에 대한 정보를 제공한다. 이러한 보고서는 일반적으로 [wcag21]에서 제공하는 것과 같은 확립된 접근성 기준에 대한 평가 결과를 식별하며, 출판물의 사용성을 판단하는 중요한 정보원이다.

접근성 보고서는 accessibility-report 링크 관계를 사용하여 식별된다.

편집자 참고

accessibility-report 용어는 현재 IANA 링크 관계에 등록되어 있지 않지만 워킹 그룹은 이를 추가할 것으로 예상한다.

예를 들어 출판물을 오프라인으로 읽을 때 사용할 수 있도록, 보고서를 출판물의 리소스로 포함하는 것이 도움이 된다.

참고

접근성 보고서를 HTML [html]과 같은 사람이 읽을 수 있는 형식으로 제공하면, 사용자가 접근하고 이해할 수 있도록 보장하는 데 도움이 된다. Schema.org [schema.org]에서 제공하는 것과 같은 기계 처리 가능한 메타데이터로 보고서를 보강하면 기계 처리에도 추가로 도움이 된다.

4.8.2.2 미리보기

모든 디지털 출판물이 모든 사용자에게 제공되는 것은 아니다(예: 사이트의 등록 사용자로 제한될 수 있음). 이러한 경우 발행자는 사용자가 전체 버전에 접근하도록 유도하기 위해 콘텐츠의 미리보기를 제공하고자 할 수 있다.

미리보기preview 링크 관계 [iana-link-relations]를 사용하여 식별된다.

미리보기는 외부에 위치할 MAY 수 있거나 디지털 출판물의 리소스로 포함될 수 있다.

예제 44 : 미리보기를 디지털 출판물의 오디오 리소스로 식별.
{
    …
    "links" : [
        {
            "type"           : "LinkedResource",
            "url"            : "preview.mp3",
            "encodingFormat" : "audio/mpeg",
            "rel"            : "preview"
        },
        …
    ],
    …
}
4.8.2.3 개인정보 처리방침

사용자는 자신에 대해 어떤 정보가 수집되는지, 그러한 정보가 어떻게 저장되고 얼마나 오래 저장되는지, 개인을 식별할 수 있는지, 그리고 어떻게 삭제될 수 있는지를 알고 통제할 법적 권리를 가지는 경우가 많다. 따라서 이러한 개인정보 보호 우려를 다루는 진술을 포함하는 것은 디지털 출판물을 출판하는 데 중요한 부분이다. 정보가 수집되지 않더라도, 그러한 선언은 사용자가 콘텐츠에 갖는 신뢰를 높인다.

이 목적을 위해 개인정보 처리방침에 대한 링크를 매니페스트에 포함할 수 있다. 예를 들어 출판물을 오프라인으로 읽을 때 사용할 수 있도록, 개인정보 처리방침을 출판물의 리소스로 포함하는 것이 도움이 된다.

개인정보 처리방침privacy-policy 링크 관계 [iana-link-relations]를 사용하여 식별된다.

4.8.3 확장

이 명세에서 정의한 것 이외의 추가 관계를 표현해야 하는 경우, rel 속성은 다음 방법 중 하나로 확장할 수 있다.

5. 출판물 리소스

디지털 출판물에 속하는 고유한 리소스 목록 — 그 범위 — 은 alternate 리소스를 포함하여 readingOrderresources에 나열된 리소스의 합집합에서 얻어진다. 이 목록을 생성하는 정확한 과정은 매니페스트 처리 알고리즘에 설명되어 있다.

그 밖의 모든 리소스는 디지털 출판물의 범위 밖에 있다(예: links 절에 나열된 리소스 및 콘텐츠 안에서 웹의 외부 리소스로 연결되는 하이퍼링크).

이 명세는 출판물 리소스에 어떠한 제한도 두지 않지만, 이 명세의 프로파일은 리소스의 콘텐츠 타입과 위치를 모두 제한할 MAY 수 있다.

사용자 에이전트는 리소스가 디지털 출판물의 범위 안에 있는지 여부에 따라 리소스를 다르게 처리하고 렌더링하도록 선택할 MAY 수 있다(예: 출판물의 오프라인 또는 패키지 버전에서 외부 리소스를 제외).

6. 매니페스트 발견

6.2 임베딩

디지털 출판물 형식이 매니페스트를 HTML 문서 안에 임베드하는 것을 허용하는 경우, 매니페스트는 script 요소 [html] 안에 포함되어야 MUST 하며, 그 type 속성은 application/ld+json [json-ld11]으로 설정된다.

예제 50 : HTML 문서에 임베드된 출판 매니페스트를 위한 script 태그.
<script type="application/ld+json">
    {
        "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
        …
    }
</script>

6.3 기타 발견 방법

디지털 출판물 형식은 매니페스트에 링크하거나 매니페스트를 임베드하는 것을 포함하지 않는, 매니페스트를 발견하는 대체 방법을 정의할 MAY 수 있다(예: 해당 매니페스트는 제한된 이름 및/또는 위치를 사용하여 발견될 수 있음). 이 명세는 그러한 방법에 어떠한 제한도 추가하지 않는다.

7. 매니페스트 처리

이 절은 Infra Standard [infra]에 의존한다.

7.1 소개

이 절은 비규범적이다.

디지털 출판물의 매니페스트는 [json-ld11]로 작성되지만, 이 절에서 설명하는 매니페스트 처리 단계는 사용자 에이전트가 매니페스트를 데이터의 내부 표현으로 변환하는 방법을 자세히 설명한다. 이 알고리즘은 [infra]에 정의된 용어와 데이터 타입을 사용하여 과정을 설명하며, 성공하면 데이터의 [infra] map이 반환된다.

참고

이 알고리즘의 실제 구현은 사용되는 언어의 해당 구성 요소와 데이터 타입을 사용하게 된다.

7.2 오류 처리

다음 오류 타입은 처리 알고리즘에서 사용된다.

사용자 에이전트는 검증 오류와 치명적 오류를 모두 노출하는 것이 SHOULD이나, 이 명세는 그 방법을 규정하지 않는다.

검증 오류의 경우, 사용자 에이전트는 오류의 심각도(즉, 필수 또는 권장 관행이 위반되었는지 여부)를 구분하는 것이 SHOULD이다.

7.3 처리 컨텍스트

처리 알고리즘의 일부 단계는 용어의 예상 값 범주에 의존하므로, 용어가 사용되는 컨텍스트가 처리에 영향을 줄 수 있다(예: url은 Publication Manifest의 직접 속성일 때만 URLArray를 기대한다). 이러한 사용을 구분하기 위해 특정 함수 호출에는 컨텍스트가 제공된다. 이 컨텍스트는 처리 호출을 시작하는 객체의 타입으로 설정된다.

기본 인식되는 타입 목록에는 Person, OrganizationLinkedResource가 포함된다. 프로파일은 추가 객체 타입을 포함하도록 이 목록을 확장할 MAY 수 있다.

컨텍스트가 함수에 제공되지 않은 경우, 처리 중인 용어는 전역 컨텍스트의 일부로 간주된다(즉, 매니페스트의 직접 자식이다).

참고

인식되는 타입 목록을 확장할 때는, 모든 객체에 타입이 지정되도록 보장하기 위해 데이터 정규화 함수도 확장해야 할 수 있다(예: 문자열 값이 자동으로 객체로 확장되는 경우).

7.4 내부 표현 생성

이 알고리즘은 다음 인수를 받는다.

참고

이 알고리즘은 매니페스트가 어떻게 발견되고 획득되는지를 설명하지 않는다. 이를 수행하는 단계는 각 디지털 출판물 형식에서 정의된다.

내부 표현을 생성하려면, 다음 단계를 실행한다.

  1. processed를 매니페스트의 내부 표현을 담을 빈 map으로 둔다.

  2. manifesttext가 주어졌을 때 JSON을 Infra 값으로 파싱한 결과로 둔다. manifestmap이 아니면, 치명적 오류로 처리하고 실패를 반환한다.

    설명

    출판 매니페스트는 배열이 아니라 JSON 객체로 표현되어야 한다. 매니페스트를 [infra] 타입으로 변환한 뒤, 결과 구조가 map인지 추가로 검사한다.

  3. (§ 4.3 매니페스트 컨텍스트) manifest["@context"]list로 설정되어 있지 않거나, manifest["@context"]의 첫 번째와 두 번째 항목문자열 값 "https://schema.org" 및 "https://www.w3.org/ns/pub-context"가 이 순서대로 아니면, 치명적 오류로 처리하고 실패를 반환한다.

    설명

    컨텍스트 URL이 예상대로 설정되어 있지 않으면, JSON 데이터는 출판 매니페스트를 나타내지 않는다.

  4. (§ 4.6 프로파일 적합성) processed["profile"]을 매니페스트가 적합한 프로파일로 둔다. processed["profile"]을 다음과 같이 설정한다.

    1. manifest["conformsTo"]가 설정되어 있지 않거나, 사용자 에이전트가 처리 및/또는 렌더링할 수 있다고 인식하는 프로파일을 포함하지 않는 경우, 사용자 에이전트는 읽기 순서의 리소스 미디어 타입을 검사하여 출판물이 자신이 처리하거나 렌더링할 수 있는 프로파일과 일치하는지 판단하는 것이 SHOULD이다. 일치하는 경우, 검증 오류로 처리하고 processed["profile"]을 일치하는 프로파일로 설정한다. 그렇지 않으면 치명적 오류로 처리하고 실패를 반환한다.

    2. 그렇지 않으면, processed["profile"]manifest["conformsTo"]에서 사용자 에이전트가 처리 및/또는 렌더링할 수 있는 첫 번째 URL로 설정한다.

    참고

    이 처리 단계에서 manifest["conformsTo"]의 값은 문자열 또는 list일 수 있다.

    설명

    출판물이 적합한 프로파일은 처리 중 수행되어야 하는 추가 확장 단계를 결정한다. 이러한 단계는 각 해당 명세에서 정의된다.

    conformsTo가 프로파일 식별자로 제한되지 않기 때문에 새 용어 profile이 만들어진다(즉, 새 용어는 내부 표현 안에서 프로파일의 지속적인 식별자를 제공한다).

  5. (§ 4.4.1 전역 선언) lang을 전역 언어로, dir을 이 단계에서 얻은 전역 방향으로 둔다. 각각을 처음에는 빈 문자열로 설정한다.

    manifest["@context"]context 각각에 대해, 마지막 항목에서 첫 번째 항목으로 이동하면서, contextmap인 경우:

    1. lang이 빈 문자열이고 context["language"]가 정의되어 있으면, langcontext["language"]로 설정한다;
    2. dir이 빈 문자열이고 context["direction"]이 정의되어 있으면, dircontext["direction"]으로 설정한다;
    3. langdir 어느 것도 빈 문자열이 아니면, break한다.

    lang이 빈 문자열도 아니고 올바른 형식의 [bcp47] 언어 태그도 아니면, 검증 오류로 처리하고 lang을 빈 문자열로 설정한다.

    dir이 빈 문자열도 아니고 "ltr" 또는 "rtl" 값 중 하나도 아니면, 검증 오류로 처리하고 dir을 빈 문자열로 설정한다.

    설명

    여기에서 얻은 전역 언어 및 방향 선언은 선언이 없는 지역화 가능한 문자열의 언어와 기본 방향을 각각 설정하는 데 사용된다.

    마지막 언어 및 방향 선언이 앞선 선언을 재정의하므로, 반복자는 @context를 뒤에서부터 앞으로 이동한다.

  6. (§ 4.3 매니페스트 컨텍스트) 프로파일이 매니페스트 컨텍스트의 추가 검증을 요구하는 경우, 그 단계가 여기에서 수행된다.

    설명

    이 확장 단계는 프로파일이 매니페스트 컨텍스트 안에 존재해야 한다고 요구하는 정보 (예: 추가 컨텍스트 URL 또는 매개변수)의 검증을 가능하게 한다. 이러한 단계는 이 시점에서 수행되어야 한다. 다음 단계의 데이터 정규화의 일부로 @context 용어가 제거되기 때문이다. 프로파일 데이터를 처리하기 위한 더 일반적인 단계는 나중 단계에 제공된다.

  7. manifesttermvalue 각각에 대해, term, value, lang, dirbase가 주어졌을 때 데이터 정규화를 호출한 결과가 성공하면, processed[term]을 그 결과로 설정한다. 실패가 반환되면 termprocessed에 추가하지 않는다.

    설명

    데이터 정규화 단계는 객체나 배열이 기대되는 곳에서 문자열을 사용할 수 있는 기능과 같은 작성 편의를 제거하기 위해 들어오는 매니페스트 데이터를 표준화한다. 결과로 처리된 데이터는 processed 변수에 추가되고 이후 단계에서 그 위에 작업이 수행된다.

  8. processedprocessed가 주어졌을 때 데이터 검증을 실행한 결과로 설정한다.

    설명

    데이터 검증 검사는 들어오는 데이터가 예상 값 범주와 일치하는지 보장한다. 예상 값에 대한 모든 제한도 이 단계에서 적용되며, 유효하지 않은 모든 데이터는 최종 표현에서 제거된다.

  9. 프로파일이 실행해야 하는 추가 처리 함수를 지정하는 경우, 그 단계가 이 시점에서 실행된다.

  10. processedprocessed와, 지정된 경우 document가 주어졌을 때 기본 값 추가를 실행한 결과로 설정한다. 성공할 때에 한한다. 그렇지 않으면 처리를 종료하고 실패를 반환한다.

    설명

    이 단계는 매니페스트에서 누락된 정보가 문서에 링크하는 HTML 문서나 다른 출처에서 얻어질 수 있는지 확인한다.

  11. processed를 반환한다.

참고

결과 구조의 시각화는 § A. 내부 표현 데이터 모델을 참조하라.

7.4.1 데이터 정규화

속성 termvalue를, 전역 언어 lang, 전역 방향 dir, 기본 URL base, 그리고 선택적 컨텍스트 context와 함께 데이터 정규화하려면, 다음 단계를 실행한다.

  1. normalizedvalue의 값으로 둔다.

    설명

    데이터 정규화 단계는 이 단계에서 정의된 normalized 변수에 보관된 들어오는 값의 사본에 대해 수행된다. 이 변수는 성공적인 정규화 과정의 끝에서 반환된다.

  2. (§ 4.3 매니페스트 컨텍스트) term@context이면 실패를 반환한다.

    설명

    @context는 매니페스트의 초기 처리를 위한 정보를 제공하지만, 내부 데이터 표현에는 유지되지 않는다. 실패를 반환하는 것은 해당 용어를 제거하라는 신호이다.

  3. (§ 4.2.7 배열) context에 따라 term배열을 기대하고 valuelist가 아니면, normalized를 다음 list로 설정한다: « value ».

    설명

    여러 용어는 그 값이 배열이어야 하지만, 편의를 위해 작성자는 하나의 요소 배열 대신 단일 값을 사용할 수 있다. 예를 들어,

    {
        …
        "name"   : "Et dukkehjem",
        "author" : "Henrik Ibsen",
        …
    }

    다음을 산출한다.

    «[
        …
        "name"   → « "Et dukkehjem" »,
        "author" → « "Henrik Ibsen" »,
        …
    ]»
  4. (§ 4.2.4.2 엔티티) context에 따라 term배열엔티티를 기대하면, normalizedentity 각각에 대해:

    1. entity문자열이면, entity를 다음 map으로 설정한다.

      «[
          "type" → « "Person" »,
          "name" → entity
      ]»
    2. 그렇지 않고 entitymap이 아니면, 검증 오류로 처리하고 normalized에서 entity제거한다.

    3. 그렇지 않고 entity["type"]이 설정되어 있지 않으면, 이를 다음 list로 설정한다: « "Person" ». entity["type"]이 설정되어 있지만 Person 또는 Organization 값을 포함하지 않으면, Person 값을 list추가한다.

    설명

    작성자(저자, 편집자 등)는 명시적으로 객체로 정의될 것으로 기대되지만, 편의를 위해 매니페스트에는 이름만 지정해도 된다. 예를 들어:

    {
        …
        "author": "Ralph Ellison",
        …
    }

    이 규칙은 이러한 문자열 값을 기본 타입이 Person인 map으로 변환하여 앞의 예제에 대해 다음을 산출한다.

    «[
        …
        "author" → « 
            «[
                "type" → « "Person" »
                "name""Ralph Ellison"
            ]»
        »,
        …
    ]»

    단순성을 위해, name을 지역화 가능한 문자열로 변환하는 과정은 이후 단계에서 설명한다.

  5. (§ 4.2.4.1 지역화 가능한 문자열) context에 따라 term배열지역화 가능한 문자열을 기대하면, normalizeditem 각각에 대해:

    1. item문자열이면, item을 다음 map으로 설정한다.

      «[
          "value" → item,
          "language" → lang,
          "direction" → dir
      ]»

      lang 또는 dir이 설정되어 있지 않거나 빈 문자열이면, 각각 item["language"] 또는 item["direction"]제거한다.

    2. 그렇지 않고 itemmap이 아니면, 검증 오류로 처리하고 normalized에서 item을 제거한다.

    3. 그렇지 않으면, item 안의 map을 다음과 같이 처리한다.

      1. item["language"]가 설정되어 있지 않으면, lang이 설정되어 있고 빈 문자열이 아닐 때 lang의 값으로 설정한다.

        그렇지 않고 item["language"]null이면, item["language"]제거한다.

      2. item["direction"]이 설정되어 있지 않으면, dir이 설정되어 있고 빈 문자열이 아닐 때 dir의 값으로 설정한다.

        그렇지 않고 item["direction"]null이면, item["direction"]제거한다.

    설명

    자연어 텍스트 값은 명시적으로 지역화 가능한 문자열 객체로 정의될 것으로 기대되지만, 편의를 위해 매니페스트에서 단순 문자열일 수 있다. 예를 들어 전역 언어 선언을 통해 언어 정보가 제공되지 않은 경우:

    {
        "@context" : ["https://schema.org", "https://www.w3.org/ns/pub-context"],
        "name"     : ["La Comédie humaine"],
        …
    }

    다음을 산출한다.

    «[
        "name"     → «
            «[
                "value""La Comédie humaine"
            ]»
        »,
        …
    ]»

    그러나 매니페스트에 명시적 언어가 제공되어 있으면, 그 언어는 지역화 가능한 문자열 객체에 추가된다. 예를 들어,

    {
        "@context" : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context",
            {"language": "fr"}
        ],
        "name"     : ["La Comédie humaine"],
        …
    }

    다음을 산출한다.

    {
        "name"     → «
            «[
                "value""La Comédie humaine"
                "language""fr"
            ]»
        »,
        …
    }

    로컬 설정 또는 로컬 null 값은 전역 값이 적용되는 것을 방지한다.

    {
        "@context" : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context", 
            {"language":"fr"}
        ],
        …
        "name" : [{
            "value" : "La Comédie humaine"
        }],
        "publisher" : [{
            "type":["Organization"],
            "name":[{
                "value": "Hachette",
                "language": null
            }]
        }],
        …
    }

    다음을 산출한다.

    {
        "name"     → «
            «[
                "value""La Comédie humaine"
                "language""fr"
            ]»
        »,
        "publisher"    → «
            «[
                "type" → « "Organization" »,
                "name" → «
                    «[
                        "value""Hachette",
                    ]»
            ]»
        »,
        …
    }
  6. (§ 4.2.4.3 링크된 리소스) context에 따라 term배열LinkedResources를 기대하면, normalizedresource 각각에 대해:

    1. resource가 문자열이면, resource를 다음 map으로 변환한다.

      «[
          "type" → « "LinkedResource" »,
          "url" → resource
      ]»
    2. 그렇지 않고 resourcemap이 아니면, 검증 오류로 처리하고 normalized에서 resource를 제거한다.

    3. 그렇지 않고 resource["type"]이 설정되어 있지 않으면, 이를 다음 list로 설정한다: « "LinkedResource" ». resource["type"]이 설정되어 있지만 LinkedResource 값을 포함하지 않으면, 해당 값을 list추가한다.

    설명

    리소스 링크는 LinkedResource 타입의 객체로 명시적으로 설계될 것으로 기대되지만, 편의를 위해 매니페스트에는 절대 또는 상대 URL만 지정하면 된다. 예를 들어,

    {
        …
        "resources" : [
            "css/book.css",
            …
        ],
        …
    }

    이 단계는 문자열 값을 객체로 변환하여 앞의 예제에 대해 다음을 산출한다.

    «[
        …
        "resources" → «
            «[
                "type" → « "LinkedResource" »,
                "url""css/book.css"
            ]»,
            …
        »,
        …
    ]»

    단순성을 위해, 상대 경로를 절대 경로로 변환하는 과정은 이후 단계에서 설명한다.

  7. (§ 4.2.5 URL) context에 따라 termURL 또는 URL배열을 기대하면:

    1. normalized문자열이면, normalizednormalized가 주어졌을 때 절대 URL로 변환을 실행한 결과로 설정한다. 성공할 때에 한한다. 실패가 반환되면 실패를 반환한다.

    2. 그렇지 않고 normalizedlist이면, normalizeditem 각각에 대해, itemnormalized가 주어졌을 때 절대 URL로 변환을 실행한 결과로 설정한다. 성공할 때에 한한다. 실패가 반환되면 normalized에서 item제거한다.

    3. 그렇지 않으면, 검증 오류로 처리하고 실패를 반환한다.

    설명

    매니페스트의 상대 URL은 기본 값에 대해 해석되어 절대 URL을 얻는다. 예를 들어:

    "url": "chapter01.html"

    https://example.org/publications/wuthering-heights에 호스팅된 출판물의 경우 다음을 산출한다.

    "url""https://example.org/publications/wuthering-heights/chater01.html"
  8. (§ 8. 모듈식 확장, 확장 지점) 프로파일이 프로파일별 용어에 대한 처리 단계를 정의하면, 그 단계는 이 시점에서 실행된다.

  9. 모든 속성이 정규화되도록 보장하기 위해 normalized를 다음과 같이 재귀적으로 검사한다.

    1. normalizedlist이면, mapnormalizeditem 각각에 대해:

      1. item["type"]이 설정되어 있고 인식되는 타입을 포함하면, itemkeykeyValue 각각에 대해, 성공할 때 keykey, keyValue, lang, dir, base가 주어지고 item["type"]을 컨텍스트로 사용하여 데이터 정규화를 실행한 결과로 설정한다. 실패가 반환되면 item에서 key제거한다.

      2. 그렇지 않으면, 아무것도 하지 않는다.

    2. 그렇지 않고 normalizedmap이면:

      1. normalized["type"]이 설정되어 있고 인식되는 타입을 포함하면, normalizedkeykeyValue 각각에 대해, key, keyValue, lang, dir, base가 주어지고 normalized["type"]을 컨텍스트로 사용하여 데이터 정규화를 실행한 결과가 성공하면 key를 그 결과로 설정한다. 실패가 반환되면 normalized에서 key제거한다.

      2. 그렇지 않으면, 아무것도 하지 않는다.

    3. 그렇지 않으면, 아무것도 하지 않는다.

    설명

    매니페스트의 모든 속성이 처리되도록 보장하기 위해, 이 단계는 처리할 추가 map 항목이 있는지 normalized를 재귀적으로 검사한다. normalized가 list이면, 각 항목이 처리 가능한 map인지 판단하기 위해 검사된다.

    실패가 반환되면, 항목은 map에서 제거된다.

  10. normalized를 반환한다.

7.4.1.1 절대 URL로 변환

기본 URL base와 함께 url절대 URL로 변환하려면, 다음 단계를 실행한다.

  1. url 또는 base문자열이 아니거나 빈 문자열이면, 검증 오류로 처리하고 실패를 반환한다.

    설명

    이 단계는 urlbase 모두 사용을 시도하기 전에 비어 있지 않은 문자열인지 확인한다.

  2. url을 입력으로, base를 기본 URL로 사용하여 성공할 때 URL parser [url]를 실행한 결과로 url을 설정한다. 실패가 반환되면, 검증 오류로 처리하고 실패를 반환한다.

    설명

    이 단계는 처리할 url에 대해 URL parser 함수를 호출한다. url이 절대 URL이 아니면, parser는 기본 URL을 사용하여 이를 절대 URL로 변환한다.

    파싱이 실패를 반환하면, URL을 제거하라고 호출자에게 알리기 위해 실패가 반환된다.

  3. url을 반환한다.

7.4.2 데이터 검증

map data에 대해 데이터 검증을 수행하려면, 다음 단계를 실행한다.

  1. datatermvalue 각각에 대해, termvalue가 주어졌을 때 성공하면 전역 데이터 검사를 실행한 결과로 term을 설정한다. 실패가 반환되면 data[term]을 제거한다.

    설명

    이 단계는 각 항목을 값과 값 안의 모든 속성에 대해 재귀적으로 실행해야 하는 전역 검증 검사 집합으로 전달한다.

    속성이 유효하지 않아 제거되어야 하는 경우 실패가 반환된다.

  2. 프로파일이 데이터 검증 검사를 지정하는 경우, 그 단계는 이 시점에서 실행된다.

    설명

    프로파일 검증 단계는 기본 단계보다 우선순위를 가진다. 예를 들어 프로파일에 적용할 다른 기본값이 있는 경우, 해당 값이 적용되도록 하기 위해서이다.

  3. (§ 4.5 출판물 타입) data["type"]이 설정되어 있지 않거나 빈 list이면, 검증 오류로 처리하고 « "CreativeWork" »로 설정한다.

  4. (§ 4.7.1.2 접근성) data["accessModeSufficient"]가 설정되어 있으면, data["accessModeSufficient"]item 각각에 대해, item["type"]이 설정되어 있지 않거나 "ItemList"를 포함하지 않으면, data["accessModeSufficient"]에서 item제거한다.

  5. (§ 4.7.1.4 정식 식별자) data["id"]가 설정되어 있지 않거나 빈 문자열이면, 검증 오류로 처리한다.

  6. (§ 4.7.1.6 지속 시간) data["duration"]이 설정되어 있고  [iso8601-1]에 따른 유효한 지속 시간 값이 아니면, 검증 오류로 처리하고 data["duration"]제거한다.

  7. (§ 4.7.1.7 최종 수정일) data["dateModified"]가 설정되어 있고  [iso8601-1]에 따른 유효한 날짜 또는 날짜 시간이 아니면, 검증 오류로 처리하고 data["dateModified"]제거한다.

  8. (§ 4.7.1.8 출판일) data["datePublished"]가 설정되어 있고  [iso8601-1]에 따른 유효한 날짜 또는 날짜 시간이 아니면, 검증 오류로 처리하고 data["datePublished"]제거한다.

  9. (§ 4.7.1.9 출판물 언어) data["inLanguage"]가 설정되어 있으면, data["inLanguage"]item 각각에 대해, item이 올바른 형식 [bcp47]이 아니면, 검증 오류로 처리하고 data["inLanguage"]에서 item제거한다.

  10. (§ 4.7.1.10 읽기 진행 방향) data["readingProgression"]이 설정되어 있지 않으면, "ltr"로 설정한다. 그렇지 않고 필수 방향 값 중 하나가 아니면, 검증 오류로 처리하고 "ltr"로 설정한다.

  11. (§ 5. 출판물 리소스) 출판물 범위 안의 고유한 URL을 다음과 같이 가져오고 검증한다.

    1. readingOrder가 설정되어 있으면, readingOrder가 주어졌을 때 고유한 URL 가져오기를 실행한 결과를 readingOrderURLs로 둔다. 그렇지 않으면 readingOrderURLs를 빈 ordered set으로 둔다.

    2. resources가 설정되어 있으면, resources가 주어졌을 때 고유한 URL 가져오기를 실행한 결과를 resourcesURLs로 둔다. 그렇지 않으면 resourcesURLs를 빈 ordered set으로 둔다.

    3. data['uniqueResources']readingOrderURLsresourceURLs합집합으로 설정한다.

    설명

    이 단계는 읽기 순서와 리소스 목록 안의 고유한 URL 목록을 가져온다. 그런 다음 data['uniqueResources']를 이 두 집합의 합집합으로 설정하며, 이는 출판물의 범위 안에 있는 고유한 리소스의 완전한 목록을 나타낸다.

    이 단계는 readingOrder 또는 resources 중 하나에 중복된 리소스 선언이 포함된 경우에도 경고한다. 검증 오류는 각 목록에서 고유한 URL을 얻는 과정의 일부로 발생한다.

  12. (§ 4.8.1 구조적 리소스) 구조적 관계의 사용을 다음과 같이 검증한다.

    1. resources를, 정의되어 있으면 data["readingOrder"]의 값으로 설정하고, 그렇지 않으면 빈 list로 설정한다. 정의되어 있으면 resourcesdata["resources"]확장한다.

    2. resources 안의 둘 이상의 항목이 대소문자를 구분하지 않는 값 "contents"를 포함하는 rel 항목을 가지면, 검증 오류로 처리한다.

    3. resources 안의 둘 이상의 항목이 대소문자를 구분하지 않는 값 "pagelist"를 포함하는 rel 항목을 가지면, 검증 오류로 처리한다.

    4. resources 안의 둘 이상의 항목이 대소문자를 구분하지 않는 값 "cover"를 포함하는 rel 항목을 가지면, 검증 오류로 처리한다.

      표지가 이미지 미디어 타입(image/*)을 지정하는 encodingFormat 항목을 가지고, name 항목을 가지고 있지 않으면, 검증 오류로 처리한다.

    설명

    이는 읽기 순서와 리소스 목록에 지정된 리소스를 검사하여 목차, 페이지 목록 및 표지가 각각 하나의 인스턴스만 지정되었는지 검증한다.

    표지의 경우, 접근성 목적을 위해 이미지 기반 형식에 name이 설정되어 있는지도 검사한다.

  13. datatermvalue 각각에 대해, 변수 termvalue가 주어졌을 때 빈 배열 제거를 실행하여 실패를 반환하면, data["term"]제거한다.

    설명

    매니페스트 처리에는 여러 단계에서 유효하지 않은 값을 제거하는 과정이 포함되므로, 최종 데이터 구조는 더 이상 값을 포함하지 않는 list를 일부 가지게 될 수 있다. 이 단계는 데이터를 다시 반복하면서 이러한 빈 list를 제거한다.

  14. data를 반환한다.

7.4.2.1 전역 데이터 검사

속성 termvalue에 대해 선택적 컨텍스트 context와 함께 전역 데이터 검사를 처리하려면, 다음 단계를 실행한다.

  1. (§ 4.2 값 범주) term에 알려진 값 범주가 있으면, 변수 term, valuecontext가 주어졌을 때 성공하면 값 범주 검증을 호출한 결과로 value를 설정한다. 실패가 반환되면 실패를 반환한다.

    그렇지 않으면 value를 반환한다.

    설명

    이 단계는 용어의 값이 해당 용어에 필요한 예상 범주와 일치하는지 검증한다. 예를 들어 abridged 용어는 불리언 값을 요구하므로, 이 용어와 함께 사용된 다른 값은 실패를 초래한다.

    함수 호출 중 실패가 발생하면, 이 단계 역시 실패를 반환하여 해당 속성이 최종 데이터 집합에서 제거되도록 한다.

    알려진 값 범주가 없는 용어는 처리되지 않으므로 들어오는 값이 반환된다.

  2. 먼저 하위 속성을 검사하기 위해 value 안으로 다음과 같이 재귀적으로 내려간다.

    1. valuemap이면:

      1. value["type"]인식되는 타입을 포함하면, valuekeykeyValue 각각에 대해, key, keyValue가 주어지고 value["type"]을 컨텍스트로 사용하여 전역 데이터 검사를 실행한 결과가 성공하면 value[key]를 그 결과로 설정한다. 실패가 반환되면 value[key]제거한다.

      2. 그렇지 않으면, 아무것도 하지 않는다.

    2. 그렇지 않고 valuelist이면, valueitem 각각에 대해, itemmap인 경우:

      1. item["type"]인식되는 타입을 포함하면, itemkeykeyValue 각각에 대해, key, keyValue가 주어지고 item["type"]을 컨텍스트로 사용하여 전역 데이터 검사를 실행한 결과가 성공하면 item[key]를 그 결과로 설정한다. 실패가 반환되면 item[key]제거한다.

      2. 그렇지 않으면, 아무것도 하지 않는다.

    3. 그렇지 않으면, 아무것도 하지 않는다.

    설명

    매니페스트의 모든 속성이 처리되도록 보장하기 위해, 이 단계는 각 항목을 재귀적으로 검사하여 처리할 추가 map 항목이 있는지 확인한다. 값이 list이면, 각 항목이 처리 가능한 map인지 판단하기 위해 검사된다.

    이 위치는 또한 모든 하위 속성이 먼저 검사되도록 하므로, 나중 단계의 상위 수준 검사는 유효하지 않은 값이 제거된 뒤 테스트된다.

  3. (§ 4.4.1 전역 선언§ 4.4.2 항목별 선언) termLocalizableStrings배열을 기대하면, valueitem 각각에 대해:

    • item["value"]가 설정되어 있지 않으면, value에서 item제거한다.

    • item["language"]가 설정되어 있고 그 값이 올바른 형식 [bcp47]이 아니면, 검증 오류로 처리하고, item["language"]제거한다.

    • item["direction"]이 설정되어 있고 그 값이 "ltr" 또는 "rtl" 중 하나가 아니면, 검증 오류로 처리하고, item["direction"]제거한다.

    설명

    이 단계는 지역화 가능한 문자열이 값을 가지고 있는지, 언어 선언이 올바른 형식인지, 방향 선언이 "ltr" 또는 "rtl" 값 중 하나를 가지는지 검사한다.

  4. (§ 4.2.4.2 엔티티) term엔티티배열을 기대하면, valueitem 각각에 대해 item["name"]이 설정되어 있는지 검사한다.

    • 그렇지 않으면, 검증 오류로 처리하고, value에서 item제거한다.

    • 그렇다면, item["name"]name 각각에 대해, name["value"]가 설정되어 있지 않거나 빈 문자열이면, item["name"]에서 name제거한다.
    설명

    이 단계는 모든 엔티티가 이름을 가지도록 보장한다. 이름이 없는 엔티티는 제거된다.

  5. (§ 4.2.4.3 링크된 리소스) termLinkedResources배열을 기대하면, valueresource 각각에 대해:

    설명

    이 단계는 LinkedResource의 용어에 대해 다음 두 검사를 수행한다.

    1. URL이 지정되어 있지 않거나 유효하지 않으면, LinkedResource가 제거된다.
    2. 리소스의 지속 시간이 지정되어 있거나 ISO 8601 지속 시간 값이 아니면, duration 속성이 제거된다.
  6. value를 반환한다.

7.4.2.2 값 범주 검증

속성 termvalue에 대해 컨텍스트 context와 함께 값 범주를 검증하려면, 다음 단계를 실행한다.

  1. context에 따라 term배열을 기대하면:

    1. valuelist가 아니면, 검증 오류로 처리하고 실패를 반환한다.

    2. 그렇지 않으면, valueitem 각각에 대해:

      1. item이 배열의 예상 값 범주와 일치하지 않으면, 검증 오류로 처리하고, value에서 item제거한 다음 continue한다.

      2. itemmap이면, itemkeykeyValue 각각에 대해, key가 예상 값 범주를 가지는 경우, key, keyValue가 주어지고 item["type"]을 컨텍스트로 사용하여 값 범주 검증을 실행한 결과로 key를 설정한다. item을 처리한 결과가 빈 map이면, 검증 오류로 처리하고, value에서 item제거한다.

      value를 처리한 결과가 빈 배열이면, 검증 오류로 처리하고 실패를 반환한다.

  2. 그렇지 않고 context에 따라 termmap을 기대하면:

    1. valuemap이 아니면, 검증 오류로 처리하고 실패를 반환한다.

    2. 그렇지 않으면, valuekeykeyValue 각각에 대해, key가 예상 값 범주를 가지는 경우, key, keyValue가 주어지고 value["type"]을 컨텍스트로 사용하여 값 범주 검증을 실행한 결과로 key를 설정한다. value를 처리한 결과가 빈 map이면, 검증 오류로 처리하고 실패를 반환한다.

    참고

    이 단계는 현재 프로파일에서 사용하기 위해서만 존재한다. 이 명세에서 정의한 속성은 모두 객체의 배열을 허용한다.

  3. 그렇지 않고 context에 따라 valueterm의 예상 값 범주와 일치하지 않으면, 검증 오류로 처리하고 실패를 반환한다.

  4. value를 반환한다.

설명

이 함수는 처리 중인 용어의 값이 예상 값 범주와 일치하는지 검사한다. 값이 list 또는 map인 경우 매니페스트의 모든 속성이 검사되도록 함수가 재귀적으로 호출된다.

7.4.2.3 고유한 URL 가져오기

resources에서 고유한 URL을 가져오려면, 다음 단계를 실행한다.

  1. uniqueURLs를 빈 ordered set으로 둔다.

  2. resources의 각 resource에 대해:

    1. resource["url"]에 대해 exclude fragment flag가 설정된 상태로 URL serializer [url]를 실행한 결과를 url로 둔다.

    2. uniqueURLsurl포함하면, 검증 오류로 처리한다. 그렇지 않으면 urluniqueURLs추가한다.

    3. resource["alternate"]가 설정되어 있으면, resource["alternate"]alternate 각각에 대해:

      1. alternate["url"]에 대해 exclude fragment flag가 설정된 상태로 URL serializer [url]를 실행한 결과를 alt_url로 둔다.

      2. uniqueURLsalt_url포함하면, 검증 오류로 처리한다.

      3. 그렇지 않으면, alt_urluniqueURLs추가한다.

  3. uniqueURLs를 반환한다.

설명

이 함수는 읽기 순서 또는 리소스 목록에서 온 LinkedResource 객체 목록을 받아 고유한 URL 집합을 반환한다. 중복이 발견되면 경고가 발생한다.

7.4.2.4 빈 배열 제거

속성 termvalue에서 빈 배열을 제거하려면, 다음 단계를 실행한다.

  1. value가 빈 list이면, 실패를 반환한다.

  2. 그렇지 않고 valuemap이면, valuekeykeyValue 각각에 대해, keykeyValue가 주어졌을 때 빈 배열 제거를 실행하여 실패를 반환하면, value[key]제거한다.

설명

이 함수는 처리 중인 용어의 값이 빈 list가 아닌지 검사한다. 처음에 list를 가진 용어는 처리되는 동안 항목을 잃을 수 있다(즉, list 항목이 유효하지 않을 때).

7.4.3 기본 값 추가

map data 안의 누락된 속성에 대해, 선택적 HTML Document (DOM) Node [html] document와 함께 기본 값을 추가하려면, 다음 단계를 실행한다.

  1. (§ 4.7.1.11 제목) data["name"]이 설정되어 있지 않으면:

    • title을 빈 map으로 둔다. 그 값을 다음과 같이 설정한다.

      • document가 설정되어 있으면, documenttitle 요소 [html]가 설정되어 있고 비어 있지 않은 경우, title["value"]title 요소의 텍스트 콘텐츠로 설정한다.

        가능한 경우 title["language"]언어 [html]로 설정하고, 해당 값을 사용할 수 있고 그 값이 "ltr" 또는 "rtl"이면 title["direction"]기본 방향 [html]으로 설정한다.

      • 그렇지 않으면, 검증 오류로 처리하고, title["value"]의 값을 생성한다(자세한 내용은 별도 참고 참조). 생성된 제목에 적절하게 title["language"]title["direction"]을 설정한다.

    • data["name"]을 다음 list로 설정한다: « title ».
    설명

    이 단계는 매니페스트에 name 속성이 지정되어 있지 않을 때 documenttitle 요소 콘텐츠를 추가한다. 예를 들어:

    <html>
    <head lang="en">
        <title>The Golden Bough</title><script type="application/ld+json">
        {
            "@context" : ["https://schema.org","https://www.w3.org/ns/pub-context"],
            …
        }
        </script>

    다음을 산출한다.

    «[
        …
        "name" → «
            «[
                "value""The Golden Bough",
                "language""en"
            ]»
        »,
        …
    ]»
  2. (§ 4.7.2.1 기본 읽기 순서§ 6.1 링크하기) data["readingOrder"]가 설정되어 있지 않으면:

    설명

    디지털 출판물이 참조하는 문서 하나만으로 구성된 경우, 기본 읽기 순서는 생략될 수 있다. 기본 읽기 순서는 자동으로 그 단일 리소스로 구성된다.

  3. 프로파일이 사용자 에이전트가 생성해야 하는 기본값을 지정하는 경우, 그 단계는 이 시점에서 실행된다.

  4. (§ 6.1 링크하기) document.URL이 설정되어 있고 data["uniqueResources"]document.URL포함하지 않으면, 검증 오류로 처리한다.

    설명

    매니페스트에 링크하는 페이지가 핵심 및 확장 기본값 규칙을 처리한 뒤에도 출판물의 고유 리소스로 나열되지 않으면, 출판물 리소스여야 하므로 오류가 발생한다.

  5. data를 반환한다.

8. 모듈식 확장

이 명세에서 정의한 매니페스트 형식은 출판 커뮤니티가 새로운 프로파일(예: 오디오북 및 학술 출판물)을 제작할 때 구현하고 확장하도록 설계되었다. 매니페스트 형식이 제공하는 유연성은 각 커뮤니티의 특정 요구에 맞게 조정할 수 있게 해 주면서도, 프로파일을 처리해야 하는 사용자 에이전트를 위한 공통 기반을 제공한다(즉, 각 프로파일 간 차이를 최소화하고 상호운용성을 단순화한다).

프로파일이 이 명세와 호환되려면 다음 조건이 충족되어야 MUST 한다:

  1. 이는 § 4. 출판 매니페스트에 정의된 매니페스트 구성 요구사항을 준수해야 MUST 한다.
  2. 이는 고유한 적합성 URL을 정의하고, 적합한 출판물이 해당 URL을 그 conformsTo 속성에 포함하도록 요구해야 MUST 한다.
  3. 매니페스트 발견에는 하나 또는 둘 모두의 링크 방법이 사용되어야 MUST 한다.
  4. § 7. 매니페스트 처리에 설명된 일반 처리 단계는 확장된 매니페스트에 대해 유효하게 유지되어야 MUST 한다. 이를 달성하기 위해, 그리고 일반 매니페스트에 새 용어가 추가되는 경우:
    • 해당 용어는 적용 가능한 경우 알고리즘에서 사용되는 일반 용어 범주 중 하나 이상으로 분류되는 것이 SHOULD이다(예: 배열 또는 지역화 가능한 문자열). 이는 관련 처리 단계가 이러한 용어에 대해 자동으로 실행됨을 의미한다
    • 필요한 경우, 프로파일은 처리 알고리즘 안의 지정된 확장 지점에서 실행될 자체 처리 단계(들)를 정의할 MAY 수 있다. 이러한 추가 단계는 일반적으로 처리 알고리즘에 대해 정의된 어떤 단계의 결과도 무효화해서는 MUST NOT 안 된다.
편집자 참고

예를 들어 오디오북 프로파일에 의해 추가되는 용어의 예제를, 사용할 수 있을 때 추가하는 것이 좋다.

9. 보안 및 개인정보 고려사항

매니페스트는 JSON-LD를 사용하여 표현되므로, 해당 명세에 자세히 설명된 개인정보보안 고려사항 [json-ld11]은 매니페스트의 모든 프로파일에 적용된다.

프로파일에 대한 몇 가지 추가 일반 고려사항은 다음과 같다.

더 구체적인 보안 및 개인정보 고려사항은 각 프로파일이 자세히 설명하도록 남겨 둔다. 이는 디지털 출판물 형식의 성격에 따라 달라질 것이기 때문이다.

A. 내부 표현 데이터 모델

이 절은 비규범적이다.

매니페스트에는 기본값, 일반적으로 객체가 필요한 곳에서 문자열을 사용할 수 있는 기능, 그리고 다른 출처에서 정보를 자동으로 컴파일하는 기능(예: 제목읽기 순서)과 같은 여러 작성 편의 기능이 포함된다. 매니페스트 처리는 이러한 편의 기능을 정규화하고 사용자 에이전트를 위한 일관된 데이터 집합(즉, 내부 표현)을 생성하지만, 이 집합은 처리 알고리즘에서 쉽게 시각화되지 않는다.

이 부록은 결과 데이터 구조를 설명하는 [WebIDL]을 사용하는 정보 제공용 추상 데이터 모델을 제공한다. 이 정의는 처리 후 매니페스트의 각 멤버에 대해 예상되는 이름, 데이터 타입, 가능한 제한을 표현한다.

참고

WebIDL의 선택은 오직 설명 목적일 뿐이다. 이 명세는 매니페스트 데이터를 노출하기 위한 API를 정의하지 않는다.

A.1 PublicationManifest 딕셔너리

dictionary PublicationManifest {
             sequence<DOMString>         type = "CreativeWork";
    required DOMString                   profile;
             sequence<DOMString>         conformsTo;
             DOMString                   id;
             boolean                     abridged;
             sequence<DOMString>         accessMode;
             sequence<DOMString>         accessModeSufficient;
             sequence<DOMString>         accessibilityFeature;
             sequence<DOMString>         accessibilityHazard;
             sequence<LocalizableString> accessibilitySummary;
             sequence<Entity>            artist;
             sequence<Entity>            author;
             sequence<Entity>            colorist;
             sequence<Entity>            contributor;
             sequence<Entity>            creator;
             sequence<Entity>            editor;
             sequence<Entity>            illustrator;
             sequence<Entity>            inker;
             sequence<Entity>            letterer;
             sequence<Entity>            penciler;
             sequence<Entity>            publisher;
             sequence<Entity>            readBy;
             sequence<Entity>            translator;
             sequence<DOMString>         url;
             DOMString                   duration;
             sequence<DOMString>         inLanguage;
             DOMString                   dateModified;
             DOMString                   datePublished;
             TextDirection               readingProgression = "ltr";
    required sequence<LocalizableString> name;
    required sequence<LinkedResource>    readingOrder;
             sequence<LinkedResource>    resources;
             sequence<LinkedResource>    links;
             sequence<DOMString>         uniqueResources;
};

enum TextDirection {
    "ltr",
    "rtl"
};

A.1.1 LinkedResource 딕셔너리

dictionary LinkedResource {
    required DOMString                   url;
             DOMString                   encodingFormat;
             sequence<LocalizableString> name;
             sequence<LocalizableString> description;
             sequence<DOMString>         rel;
             DOMString                   integrity;
             DOMString                   duration;
             sequence<LinkedResource>    alternate;
};

A.1.2 Entity 딕셔너리

dictionary Entity {
             sequence<DOMString>         type;
    required sequence<LocalizableString> name;
             DOMString                   id;
             DOMString                   url;
             sequence<DOMString>         identifier;
};

A.1.3 LocalizableString 딕셔너리

dictionary LocalizableString {
    required DOMString                   value;
             DOMString                   language;
             TextDirection               direction;
};

B. 대체 리소스 선택

이 부록은 Infra Standard [infra]에 의존한다.

LinkedResource resource에 대해 대체 리소스를 선택하려면, 다음 단계를 실행한다.

성공하면 이 알고리즘은 대체 리소스를 반환한다. 그렇지 않으면 실패를 반환한다.

  1. possibleAlternates를 빈 list로 둔다.

  2. resource["alternate"]가 설정되어 있지 않으면 실패를 반환한다.

  3. resource["alternate"]alternate 각각에 대해:

    1. alternate["encodingFormat"]이 설정되어 있고 사용자 에이전트가 지정된 미디어 타입을 지원하면, possibleAlternates추가한다.

    2. 그렇지 않고 프로파일이 추가 선택 기준을 정의하면, 이 확장 단계에서 alternate를 그 기준에 대해 평가한다.

    3. 그렇지 않으면, 선택적으로 alternate["url"]을 검사하여 미디어 타입에 대한 단서를 찾는다. 리소스가 지원되는 것으로 보이면, alternatepossibleAlternates추가한다.

  4. possibleAlternates가 빈 list이면, 실패를 반환한다.

  5. 그렇지 않고 possibleAlternates크기가 1이면, possibleAlternates의 리소스를 반환한다.

  6. 그렇지 않으면, 사용자 에이전트가 결정한 대로 possibleAlternates에서 리소스를 반환한다.

설명

이 함수는 리소스의 대체 형식을 반복하고 가능성 목록을 컴파일한다. 하나 이상의 가능성이 발견되면, 사용자 에이전트가 최적의 대체 리소스를 어떻게 우선순위화하고 선택할지 결정한다.

사용자 에이전트는 명시적 미디어 타입을 지정하지 않는 대체 항목을 가능성 목록에 추가할 필요가 없다.

C. 기계 처리 가능한 목차

C.1 소개

이 절은 비규범적이다.

HTML은 페이지 안과 사이트 간 탐색을 용이하게 하기 위해, 링크 목록을 표현하는 데 nav 요소 [html]를 사용한다. 기본적으로 일반적인 성격을 가지지만, nav 요소의 목적은 role 속성 [html]을 사용하여 더 구체적으로 식별할 수 있다. 특히 [dpub-aria-1.0] 어휘의 doc-toc role은 nav 요소를 디지털 출판물의 목차로 식별한다.

식별 가능한 목차를 포함하는 것은 모든 디지털 출판물을 제작하는 접근 가능한 방법이지만, HTML 마크업의 유연성 때문에 사용자 에이전트가 의미 있는 링크 계층 구조를 추출하려 할 때도 어려움을 제시한다(예: 어떤 페이지에서든 사용할 수 있는 사용자 정의 보기를 제공하기 위해). 서로 다른 용도를 위해 목차를 중복하지 않도록, 이 절은 사람에게 친숙하고 일반적으로 사용되면서도 사용자 에이전트 추출에 충분한 구조를 제공하는 구문을 정의한다.

작성자는 목차를 구성하기 위해 목록(순서 있는 목록 또는 순서 없는 목록)을 선택할 수 있다. 이러한 목록 안의 각 링크를 앵커 태그(a 요소)로 표시하면, 사용자 에이전트는 필요한 정보를 주변 콘텐츠(aside)나 함께 추가된 스타일 태그와 쉽게 구분할 수 있다. 목차는 활성 링크(href 속성이 있는 링크)와 비활성 링크(href 속성을 제외한 링크)를 모두 포함할 수 있어, 목차가 구성되는 방식에 추가적인 유연성을 제공한다(예: 특정 제목으로의 링크를 생략하거나 미리보기에서 특정 콘텐츠에만 링크하기 위해).

그러나 사용자 에이전트는 목차의 표시 측면을 보존해야 할 필요가 없음에 유의하라 (즉, 사용자 에이전트는 일반적으로 모든 출판물에서 공통된 방식으로 표시하기 위해 정보를 추출한다). 사용자 에이전트는 예를 들어 링크 요소의 텍스트 콘텐츠만 유지할 것으로 기대되므로, 텍스트 스타일, 인라인 이미지 및 기타 비텍스트 콘텐츠가 손실될 수 있다. 마찬가지로 목록 스타일과 표시할 링크 깊이 수준의 수조차도 사용자 에이전트의 재량에 달려 있다. 이러한 이유로, 사용자가 기계 처리된 목차에만 제한되지 않도록 표시용 목차에 링크하는 것이 권장된다.

C.2 HTML 구조

목차는 [html] 요소(일반적으로 nav 요소)를 통해 표현된다. 이 요소는 role 속성 [html] 값 "doc-toc" [dpub-aria-1.0]로 식별되어야 MUST 하며, 문서 트리 순서 [dom]에서 해당 role 값을 가진 첫 번째 요소여야 MUST 한다. 이 요소는 사용자에게 숨겨질 MAY 수 있다.

매니페스트는 목차를 포함하는 리소스를 식별하는 것이 SHOULD이다.

nav 요소의 콘텐츠 모델은 제한되지 않지만, 사용자 에이전트는 다음 마크업 지침을 따를 때만 사용 가능한 목차를 추출할 수 있다.

목차 제목

목차 제목은 선택 사항이지만, 필요할 때 사용자 에이전트가 자리표시자 제목을 생성하는 것을 피하기 위해 하나를 추가하는 것이 권장된다. 제목은 [htmlh1 부터 h6 요소 중 하나를 사용하여 지정된다. 그러한 요소 중 첫 번째 요소만 제목으로 인식된다는 점에 유의하라. 링크 목록보다 앞서 heading 요소가 발견되지 않으면, 사용자 에이전트는 제목이 지정되지 않은 것으로 가정한다.

nav 요소 안에서 발견되는 첫 번째 [htmlol 또는 ul 목록 요소는 콘텐츠로 들어가는 링크를 정의하는 목록을 포함하는 것으로 가정된다. 이 목록은 예를 들어 div 요소 안에 중첩되어 있더라도 찾을 수 있다. 알고리즘이 처리와 관련 없는 요소를 무시하기 때문이다. 그러나 그 내부 콘텐츠는 평가되지 않으므로, 목록은 어떤 건너뛰는 요소 안에도 나타날 수 없다.

nav 요소가 이러한 요소 중 하나를 포함하지 않으면, 사용자 에이전트는 디지털 출판물이 사용 가능한 목차를 포함하는 것으로 등록하지 않는다(예: 기계 렌더링 옵션은 사용할 수 없음).

분기

목차를 링크의 트리로 간주하면, 링크 목록 안의 각 목록 항목(li 요소)은 하나의 분기를 나타낸다. 이러한 각 분기는 사용자에게 표시되기 위해 이름과 선택적 목적지를 가져야 하며, 이 정보는 목록 항목 안에서 발견되는 첫 번째 a 요소에서 얻는다. 이는 어디에 중첩되어 있든 동일하다(다만 건너뛰는 요소 안의 a 요소는 제외).

분기의 링크 목적지는 지정된 경우 a 요소의 href 속성에서 얻는다. 링크를 사용할 수 없거나(예: 미리보기에서) 관련이 없는 경우(예: 그룹화 헤더) 이 속성은 생략될 수 있다. 콘텐츠 안으로 링크를 제공할 때, 링크된 문서의 관계(rel 속성)와 링크된 리소스의 미디어 타입(type 속성)을 지정하는 것도 가능하다.

분기에 레이블을 붙이는 a 요소를 찾은 뒤, 사용자 에이전트는 다른 목록 요소 (즉, 하위 분기)가 있는지 마크업 검사를 계속한다. 목록이 발견되면, 그 링크를 추출하기 위해 유사하게 처리되며, 더 이상 처리할 중첩 분기가 없을 때까지 계속된다.

건너뛰는 요소

목차를 파싱할 때 오해석을 피하기 위해 작은 요소 집합은 무시된다. 이는 [html섹셔닝 콘텐츠 요소섹셔닝 루트 요소이다. 이들이 무시되는 이유는 자체 outline을 정의할 수 있기 때문이다 (즉, 자체적으로 완결되어 있고 콘텐츠 링크 구조와 반드시 관련되지는 않는 임베드된 콘텐츠를 나타낼 수 있음).

hidden 속성이 설정된 요소도 건너뛴다. 숨겨진 요소는 사용자가 직접 접근하도록 의도된 것이 아니기 때문이다.

이러한 요소를 nav 요소 안에 포함할 수는 있지만, 중요한 콘텐츠를 그 안에 임베드하지 않도록 주의해야 한다(예: 콘텐츠 안으로 들어가는 모든 링크를 포함하는 목록 항목 주위에 section 요소를 감싸지 말 것).

무시되는 요소

목차 추출과 관련이 없고 건너뛰지 않는 모든 요소는 무시된다. 건너뛰는 요소와 달리, 무시는 사용자 에이전트가 관련 콘텐츠를 찾기 위해 그 안을 계속 검색함을 의미하며, 사용할 수 있는 태그 지정 측면에서 더 큰 유연성을 허용한다.

C.2.1 예제

이 절은 비규범적이다.

C.3 사용자 에이전트 처리

이 절은 Infra Standard [infra]에 의존한다.

이 절은 nav 요소에서 목차를 추출하기 위한 알고리즘을 정의한다. 이는 트리 순서 [dom]로 DOM 트리의 노드를 순회하는 방식으로 정의되며, 각 노드는 순회 중 진입할 때와 나갈 때 방문된다. 노드가 방문될 때마다 enter 또는 exit 이벤트를 트리거하는 것으로 볼 수 있다. 일부 단계에서는 서로 다른 표시 모델에 대한 유연성을 제공하기 위해, 사용자 에이전트에 콘텐츠 처리 방식에 대한 선택권이 제공된다.

참고

이 알고리즘은 순수하게 이벤트 기반 용어로 정의되지 않는다. DOM에서 필요한 정보를 얻기 위해 모든 자손 노드를 검사하는 것이 항상 필요한 것은 아니기 때문이다. 경우에 따라 요소와 그 모든 자손은 enter에서 처리된 직후 즉시 건너뛴다. 이벤트 접근 방식도 적용할 수 있지만, 건너뛴 노드를 처리/무시하도록 알고리즘을 수정해야 한다.

참고

사용자 에이전트는 데이터의 최종 형태를 표현할 수 있는 어떤 언어를 사용해서도 결과 구조를 처리하고 내부화할 수 있다.

이 알고리즘의 목적상, 목록 요소는 [htmlol 또는 ul 요소 중 하나로 정의된다.

다음 알고리즘은 role 속성 값 doc-toc를 가진 문서 순서의 첫 번째 요소를 루트로 하는 DOM 하위 트리의 순회에 적용되어야 MUST 한다. 해당 요소가 선언적으로 숨겨져 [html] 있거나 CSS로 보이지 않도록 스타일이 지정되었는지 여부와 관계없다.

참고

목차 요소를 포함하는 리소스를 찾기 위한 규칙은 § 4.8.1.3 목차에 정의되어 있다.

목차 요소가 발견되지 않으면, 출판물에는 기계 렌더링 목적으로 사용할 수 있는 목차가 없다.

  1. 목차를 나타내는 map «[ "name" → "", "entries" → « » ]»toc로 둔다.

    설명

    이 단계는 목차의 제목과 분기를 저장할 map을 초기화한다. 이 map에서:

    1. toc["name"]은 목차의 제목을 나타낸다.
    2. toc["entries"]는 목차의 분기를 나타낸다.
  2. 목차의 분기가 생성될 때 이를 보관하도록 stack branches를 초기화한다.

    설명

    스택은 아직 완료되지 않은 분기를 보관하는 데 사용된다. 새 하위 분기가 발견되면, 나중에 다시 가져올 수 있도록 부모가 스택에 push된다.

  3. current_toc_nodenull로 설정된 변수로 둔다.

    설명

    current_toc_node는 현재 처리 중인 목차 분기를 나타내는 map을 보관하는 데 사용된다.

  4. 목차가 만들어지는 요소부터 시작하여 트리 순서 [dom]로 DOM을 순회하고, 순회가 각 요소에 진입하고 나갈 때마다 아래의 첫 번째 관련 단계를 트리거한다.

    1. heading content 요소에 진입할 때:

      다음 단계를 실행한다.

      1. branches가 비어 있고 toc["name"]이 빈 문자열이면, toc["name"]을 다음 중 하나로 설정한다.

        • 요소의 자손 콘텐츠(HTML 태그를 보존하기 위해);
        • 자손 콘텐츠에서 얻은 텍스트 문자열(예: 요소의 접근 가능한 이름 [accname-1.1]을 계산하여).

        toc["name"]의 결과 값이 빈 문자열이면(예: 표시용 요소를 제거하고 모든 앞뒤 공백을 trim한 뒤), toc["name"]을 자리표시자 값 또는 null 중 하나로 설정한다.

      2. 요소의 추가 처리를 건너뛰고 다음으로 계속한다.
      설명

      이 단계는 목차의 heading을 식별한다. heading은 toc["name"]의 값이 빈 문자열일 때만 처리된다(즉, 아직 heading이 발견되지 않았을 때).

      사용자 에이전트가 name을 heading 요소의 자손 콘텐츠로 설정할지, 아니면 그로부터 텍스트 문자열을 생성할지는, 표시에서 자손 태그를 재사용할지 여부에 달려 있다(예: 이미지, MathML, ruby 및 텍스트로 쉽게 변환되지 않는 기타 콘텐츠를 유지하기 위해).

      예제 69 : heading이 있는 toc 객체의 시각화.
      «[
          "name""Contents",
          "entries" → « »
      ]»

      name이 빈 문자열이 아니거나 null이면, 이전 heading이 이미 발견되었거나 nav 요소에 heading이 없음을 나타내는 콘텐츠가 발견된 것이다(예: 링크 목록 뒤에는 heading이 올 수 없으므로, 목록이 이미 처리된 경우).

      예제 70 : heading이 없는 toc 객체의 시각화.
      «[
          "name"null,
          "entries" → « »
      ]»

      heading이 지정되지 않은 경우, 사용자 에이전트는 나중에 사용할 자체 heading을 제공할 수 있다.

    2. 목록 요소에 진입할 때:

      다음 단계를 실행한다.

      1. toc["name"]이 빈 문자열이면, toc["name"]null로 설정한다.

      2. current_toc_nodenull이 아니면:

        1. current_toc_node["entries"]null이거나 비어 있지 않은 list이면, 요소의 추가 처리를 건너뛰고 다음으로 계속한다.
        2. 그렇지 않으면, current_toc_nodebranchespush한 다음 current_toc_nodenull로 설정한다.
      3. 그렇지 않고 branches가 비어 있으면:

        1. toc["entries"]null이거나 비어 있지 않은 list이면, 요소의 추가 처리를 건너뛰고 다음으로 계속한다.
        2. 그렇지 않으면, 아무것도 하지 않는다.
      설명

      이 알고리즘은 단일 분기 또는 nav 요소의 루트에서 여러 목록을 처리하지 않으므로, 목록이 이미 발견된 경우(entries 속성이 하나 이상의 분기를 포함하거나 null로 설정되어 있는 경우), 이 목록은 건너뛴다.

      목록이 발견되었지만 목차(toc)에 아직 이름이 없는 경우(즉, heading 요소가 발견되지 않은 경우), 목차에는 heading이 없는 것으로 가정한다(즉, 목차의 heading은 첫 번째 항목 목록 뒤에 나타날 수 없다). name 속성의 값은 빈 문자열에서 null로 변경된다. 이후 발견되는 heading도 적용되지 않기 때문이다.

    3. 목록 요소를 나갈 때:

      1. branches가 비어 있지 않으면, branches에서 맨 위의 mappop하고 current_toc_node를 그것으로 설정한다.

      2. 그렇지 않고 toc.entries가 빈 list를 포함하면, 이를 null로 설정한다.

      설명

      이 단계는 모든 자식 분기가 처리된 뒤 current_toc_node를 부모 객체로 되돌린다.

      스택에 분기가 없으면, toc.entries가 어떤 항목도 포함하지 않는 경우 null로 설정된다(루트 수준에서 추가 목록을 처리하지 않기 위해).

    4. 목록 항목 요소에 진입할 때, current_toc_node를 다음 map으로 설정한다:

      «[
          "name"null,
          "url"null,
          "type"null,
          "rel"null,
          "entries" → « »
      ]»
      설명

      각 목록 항목은 목차에서 가능한 새 분기를 나타내므로, 이를 만날 때마다 current_toc_node 안에 새 빈 객체가 생성된다.

      이 객체는 자손 a 요소와 목록이 발견됨에 따라 정보로 채워진다.

    5. 목록 항목 요소를 나갈 때:

      다음 단계를 실행한다.

      1. current_toc_node["entries"]가 빈 list를 포함하면, 이를 null로 설정한다.

      2. current_toc_node["name"]null이거나 빈 문자열이면:

        1. current_toc_node["entries"]null이 아니면, current_toc_node["name"]을 자리표시자 값 또는 null로 설정한다;
        2. 그렇지 않으면, current_toc_nodenull로 설정하고 이 처리 단계를 종료한다.
      3. branches가 비어 있지 않으면, current_toc_nodebranches 맨 위의 mapentries 속성에 추가한다. 그렇지 않으면, current_toc_nodetoc["entries"]추가한다.

      4. current_toc_nodenull로 설정한다.

      설명

      목록 항목을 나가는 것은 현재 분기의 처리가 완료되었음을 나타낸다. 이 분기를 부모의 entries 배열에 추가하기 전에, 분기가 이름 및/또는 하위 분기를 가지고 있는지 테스트해야 한다. 이름은 없지만 하위 분기가 있는 경우, 분기는 유지된다. 사용자 에이전트는 자체적으로 만든 자리표시자 값을 제공하거나 값을 null로 설정할 수 있다. 이름도 분기도 없으면 유효하지 않으므로 버려진다.

      분기를 병합할 위치를 결정하기 위해 스택을 검사한다. 스택에 항목이 없으면, 루트 toc 객체의 entries 속성에 추가된다(즉, 최상위 분기이다). 그렇지 않으면 스택에서 바로 앞에 있는 객체의 entries 속성에 추가된다.

      마지막 단계로, current_toc_node가 다시 null로 재설정된다.

    6. 앵커 요소에 진입하고 current_toc_nodenull이 아닐 때:

      다음 단계를 실행한다.

      1. current_toc_node["name"]null이 아니면, 아무것도 하지 않는다.

      2. 그렇지 않으면:

        1. current_toc_node["name"]을 다음 중 하나로 설정한다.

          • 앵커 요소의 자손 콘텐츠(HTML 태그를 보존하기 위해);
          • 자손 콘텐츠에서 얻은 텍스트 문자열(예: 요소의 접근 가능한 이름 [accname-1.1]을 계산하여).
        2. 요소에 href 속성이 있고 해당 속성의 URL이 uniqueResources의 리소스로 해석되면, current_toc_node["url"]을 그 값으로 설정한다.
        3. 요소에 type 속성이 있고, 속성의 값이 앞뒤 공백을 trim한 뒤 빈 문자열이 아니면, current_toc_node["type"]을 trim된 값으로 설정한다.
        4. 요소에 rel 속성이 있고, 속성의 값이 앞뒤 공백을 trim한 뒤 빈 문자열이 아니면, trim된 값을 공백 기준으로 분할하고 current_toc_node["rel"]을 결과 list의 토큰으로 설정한다.

        요소의 추가 처리를 건너뛰고 다음으로 계속한다.

      설명

      이 단계는 앵커 태그를 처리하여 분기의 nameurl 속성 값을 얻는다.

      현재 분기의 이름이 이미 정의되어 있으면, 이 요소의 처리는 종료된다 (즉, 단일 분기에 대해 여러 링크를 처리하지 않기 위해).

      사용자 에이전트가 항목의 namea 요소의 자손 콘텐츠로 설정할지, 아니면 그로부터 텍스트 문자열을 생성할지는, 표시에서 자손 태그를 재사용할지 여부에 달려 있다(예: 이미지, MathML, ruby 및 텍스트로 쉽게 변환되지 않는 기타 콘텐츠를 유지하기 위해).

      href 속성이 지정되어 있는 것 외에도, 이 명세의 요구사항을 충족하려면 그것이 디지털 출판물에 속한 리소스로 해석되어야 한다. 그렇지 않으면 분기는 유지되지만 항목은 링크 가능하지 않다.

      링크 대상에 대한 추가 정보 — 리소스의 타입 및 그 관계 — 도 유지된다.

    7. 섹셔닝 콘텐츠 요소, 섹셔닝 루트 요소, 또는 hidden 속성이 있는 요소에 진입할 때:

      요소의 추가 처리를 건너뛰고 다음으로 계속한다.

      설명

      섹셔닝 및 섹셔닝 루트 요소는 자체 outline을 정의할 수 있으므로, 그 안으로 내려가는 것은 목차 생성에 문제를 일으킨다(즉, 직접 관련되지 않은 콘텐츠를 포함할 수 있음). 결과적으로 이러한 요소를 만나면 그 자식 콘텐츠가 처리되지 않도록 건너뛴다.

    8. 그렇지 않으면: 아무것도 하지 않는다.

      설명

      그 밖의 모든 요소에 대해, 이 단계는 그 자손 요소가 계속 처리될 수 있도록 한다.

  5. DOM 순회가 완료된 뒤, toc["entries"]가 비어 있지 않은 list를 포함하면 toc를 반환한다. 그렇지 않으면 null을 반환한다.

    설명

    루트 toc 객체의 entries 배열이 어떤 분기도 포함하지 않으면 (nav 요소에서 목록을 찾지 못했거나 목록에 적합한 목록 항목이 없었기 때문), 알고리즘은 사용 가능한 목차를 생성하지 않은 것이다.

D. 변경 기록

첫 공개 작업 초안 이후의 실질적인 변경 사항:

처리된 issue의 전체 목록은 GitHub tracker를 참조하라.

E. IANA 고려사항

이 절은 비규범적이다.

F. 매니페스트 예제

이 절은 비규범적이다.

F.1 기본 매니페스트

다음은 예제 도서 프로파일을 위한 기본 메타데이터 집합을 가진 매니페스트이다.

이 매니페스트의 내부 표현의 JSON 인코딩도 사용할 수 있다.

{
    "@context": [
        "https://schema.org",
        "https://www.w3.org/ns/pub-context",
        {"language" : "en"}
    ],
    "conformsTo": "https://example.com/publication",
    "type": "Book",
    "url": "https://publisher.example.org/mobydick",
    "author": "Herman Melville",
    "dateModified": "2018-02-10T17:00:00Z",

    "readingOrder": [
        "html/title.html",
        "html/copyright.html",
        "html/introduction.html",
        "html/epigraph.html",
        "html/c001.html",
        "html/c002.html",
        "html/c003.html",
        "html/c004.html",
        "html/c005.html",
        "html/c006.html"
    ],

    "resources": [
        "css/mobydick.css",
        {
            "type": "LinkedResource",
            "rel": "cover",
            "url": "images/cover.jpg",
            "encodingFormat": "image/jpeg"
        },{
            "type": "LinkedResource",
            "url": "html/toc.html",
            "rel": "contents"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneral.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralBol.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralBolIta.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        },{
            "type": "LinkedResource",
            "url": "fonts/STIXGeneralItalic.otf",
            "encodingFormat": "application/vnd.ms-opentype"
        }
    ]
}

F.2 단일 문서 출판물

다음은 예제 article 프로파일을 위한 매니페스트이다. article은 매니페스트가 임베드된 문서로만 구성된다. 제목과 읽기 순서는 매니페스트에서 생략되어 있는데, 이러한 속성은 각각 포함하는 문서의 제목과 URL에서 처리 중 자동으로 생성되기 때문이다.

매니페스트의 내부 표현의 JSON 인코딩도 사용할 수 있으며, 같은 문서에 대한 더 정교한 버전도 사용할 수 있다.

<!DOCTYPE html>
<html lang="en-US">
<head>
    <title>Model for Tabular Data and Metadata on the Web</title>
    <link href="#wpm" rel="publication" />
    ...
    <script id="wpm" type="application/ld+json">
    {
        "@context"        : [
            "https://schema.org",
            "https://www.w3.org/ns/pub-context",
            {"language" : "en-US"}
        ],
        "conformsTo"      : "https://example.com/article",
        "type"            : "TechArticle",
        "id"              : "http://www.w3.org/TR/tabular-data-model/",
        "url"             : "http://www.w3.org/TR/2015/REC-tabular-data-model-20151217/",
        "copyrightYear"   : "2015",
        "copyrightHolder" : "World Wide Web Consortium",    
        "creator"         : ["Jeni Tennison", "Gregg Kellogg", "Ivan Herman"],
        "publisher" : {
            "type" : "Organization",
            "name" : "World Wide Web Consortium",
            "id"   : "https://www.w3.org/"
        },
        "datePublished"         : "2015-12-17",
        "resources"             : [
            "datatypes.html",
            "datatypes.svg",
            "datatypes.png",
            "diff.html",
            {
                "type"           : "LinkedResource",
                "url"            : "test-utf8.csv",
                "encodingFormat" : "text/csv"

            },
            {
                "type"           : "LinkedResource",
                "url"            : "test.xlsx",
                "encodingFormat" : "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
            }
        ],
    }
    </script>
</head>
<body>
    ....

    <section id="toc" role="doc-toc">
        <h2 resource="#h-toc" id="h-toc" class="introductory">Table of Contents</h2>
        <ul class="toc">
            <li class="tocline"><a class="tocxref" href="#intro">
                <span class="secno">1. </span>Introduction</a>
            </li>
            ...
        </ul>
    </section>
    ...

</body>
</html>

F.3 오디오북

다음 예제는 Audiobooks 프로파일 [audiobooks]에 적합한 매니페스트를 보여 준다.

이 매니페스트의 내부 표현의 JSON 인코딩도 사용할 수 있다.

{
  "@context": [
      "https://schema.org",
      "https://www.w3.org/ns/pub-context",
      {"language": "en"}
  ],
  "conformsTo": "https://www.w3.org/TR/audiobooks/",
  "type": "Audiobook",
  "id": "https://librivox.org/flatland-a-romance-of-many-dimensions-by-edwin-abbott-abbott/",
  "url": "https://w3c.github.io/pub-manifest/experiments/audiobook/",
  "name": "Flatland: A Romance of Many Dimensions",
  "author": "Edwin Abbott Abbott",
  "readBy": "Ruth Golding",
  "publisher": "Librivox",
  "inLanguage": "en",
  "dateModified": "2019-11-14",
  "datePublished": "2008-10-12",
  "duration": "PT13774S",
  "license": "https://creativecommons.org/publicdomain/zero/1.0/",
  "abridged": false,
  "accessMode": "auditory",
  "accessModeSufficient": [{
      "type": "ItemList",
      "itemListElement": ["auditory"],
      "description": "Audio"
  }],
  "accessibilityFeature": ["readingOrder", "unlocked"],
  "accessibilityHazard": "noSoundHazard",
  "accessibilitySummary": "This is just a test summary",
  "readingProgression": "ltr",
  "resources": [
    {
      "rel": "cover",
      "url": "http://ia800704.us.archive.org/9/items/LibrivoxCdCoverArt12/Flatland_1109.jpg",
      "encodingFormat": "image/jpeg",
      "name": "Cover page with title and author"
    },{
      "rel": "contents",
      "url": "toc.html",
      "encodingFormat": "text/html"
    },{
        "rel": "accessibility-report",
        "url": "a11y.html",
        "encodingFormat": "text/html"
    },{
        "rel": "privacy-policy,",
        "url": "privacy.html",
        "encodingFormat": "text/html"
    }
  ],

  "readingOrder": [
    {
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_1_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1371S",
      "name": "Part 1, Sections 1 - 3"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_2_abbott.mp3",
      "encodingFormat": "audio/mpeg", 
      "duration": "PT1669S",
      "name": "Part 1, Sections 4 - 5"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_3_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1506S",
      "name": "Part 1, Sections 6 - 7"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_4_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1669S",
      "name": "Part 1, Sections 8 - 10"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_5_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1506S",
      "name": "Part 1, Sections 11 - 12"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_6_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1798S",
      "name": "Part 2, Sections 13 - 14"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_7_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1225S",
      "name": "Part 2, Sections 15 - 17"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_8_abbott.mp3",
      "encodingFormat": "audio/mpeg",
      "duration": "PT1371S",
      "name": "Part 2, Sections 18 - 20"
    },{
      "url": "http://www.archive.org/download/flatland_rg_librivox/flatland_9_abbott.mp3", 
      "encodingFormat": "audio/mpeg",
      "duration": "PT1659S",
      "name": "Part 2, Sections 21 - 22"
    }
  ]
}

G. 속성 색인

이 절은 비규범적이다.

다음 표는 매니페스트 속성이 정의되고 확장되는 위치를 식별한다.

이름 출판 매니페스트
abridged § 4.7.1.1 축약판
accessMode § 4.7.1.2 접근성
accessModeSufficient § 4.7.1.2 접근성
accessibilityFeature § 4.7.1.2 접근성
accessibilityHazard § 4.7.1.2 접근성
accessibilitySummary § 4.7.1.2 접근성
artist § 4.7.1.5 작성자
author § 4.7.1.5 작성자
conformsTo § 4.6 프로파일 적합성
@context § 4.3 매니페스트 컨텍스트
contributor § 4.7.1.5 작성자
creator § 4.7.1.5 작성자
dateModified § 4.7.1.7 최종 수정일
datePublished § 4.7.1.8 출판일
direction § 4.4.1 전역 선언
duration § 4.7.1.6 지속 시간
editor § 4.7.1.5 작성자
id § 4.7.1.4 정식 식별자
illustrator § 4.7.1.5 작성자
inker § 4.7.1.5 작성자
inLanguage § 4.7.1.9 출판물 언어
language § 4.4.1 전역 선언
letterer § 4.7.1.5 작성자
link § 4.7.2.3 링크
name § 4.7.1.11 제목
penciler § 4.7.1.5 작성자
publisher § 4.7.1.5 작성자
readBy § 4.7.1.5 작성자
readingOrder § 4.7.2.1 기본 읽기 순서
readingProgression § 4.7.1.10 읽기 진행 방향
resources § 4.7.2.2 리소스 목록
translator § 4.7.1.5 작성자
type § 4.5 출판물 타입
url § 4.7.1.3 주소

H. 리소스 관계 색인

이 절은 비규범적이다.

다음 표는 리소스 관계의 사용이 정의되는 위치를 식별한다.

이름 출판 매니페스트
accessibility-report § 4.8.2.1 접근성 보고서
contents § 4.8.1.3 목차
cover § 4.8.1.1 표지
pagelist § 4.8.1.2 페이지 목록
privacy-policy § 4.8.2.3 개인정보 처리방침
preview § 4.8.2.2 미리보기

I. 감사의 말

이 절은 비규범적이다.

편집자는 이 명세에 기여한 Publishing Working Group 구성원들에게 감사를 표한다:

Working Group은 또한 이 명세를 위한 길을 닦는 데 많은 노력을 기울인 Digital Publishing Interest Group 구성원들에게도 감사를 표한다.

J. 참고문헌

J.1 규범적 참고문헌

[accname-1.1]
Accessible Name and Description Computation 1.1. Joanmarie Diggs; Bryan Garaventa; Michael Cooper. W3C. 2018년 12월 18일. W3C Recommendation. URL: https://www.w3.org/TR/accname-1.1/
[bcp47]
Tags for Identifying Languages. A. Phillips; M. Davis. IETF. 2009년 9월. IETF Best Current Practice. URL: https://tools.ietf.org/html/bcp47
[bibo]
Bibliographic Ontology Specification. Bruce D'Arcus; Frédérick Giasson. Structured Dynamics LLC. 2016년 5월 11일. URL: http://bibliontology.com/specification.html
[bibtex]
BibTeX Format Description. URL: http://www.bibtex.org/Format/
[bidi]
Unicode Bidirectional Algorithm. Mark Davis; Aharon Lanin; Andrew Glass. Unicode Consortium. 2020년 2월 12일. Unicode Standard Annex #9. URL: https://www.unicode.org/reports/tr9/tr9-42.html
[dc11]
Dublin Core Metadata Element Set, Version 1.1. DCMI. 2012년 6월 14일. DCMI Recommendation. URL: http://dublincore.org/documents/dces/
[dcterms]
DCMI Metadata Terms. DCMI Usage Board. DCMI. 2012년 6월 14일. DCMI Recommendation. URL: http://dublincore.org/documents/dcmi-terms/
[dom]
DOM Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://dom.spec.whatwg.org/
[dpub-aria-1.0]
Digital Publishing WAI-ARIA Module 1.0. Matt Garrish; Tzviya Siegman; Markus Gylling; Shane McCarron. W3C. 2017년 12월 14일. W3C Recommendation. URL: https://www.w3.org/TR/dpub-aria-1.0/
[ecmascript]
ECMAScript Language Specification. Ecma International. URL: https://tc39.es/ecma262/
[foaf]
FOAF Vocabulary Specification 0.99 (Paddington Edition). Dan Brickley; Libby Miller. FOAF project. 2014년 1월 14일. URL: http://xmlns.com/foaf/spec
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
Link Relations. URL: https://www.iana.org/assignments/link-relations/link-relations.xhtml
[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[iso8601-1]
Date and time — Representations for information interchange — Part 1: Basic rules. ISO 8601-1:2019.. International Organization for Standardization (ISO). 2019. ISO 8601-1:2019. URL: https://www.iso.org/standard/70907.html
[json]
The application/json Media Type for JavaScript Object Notation (JSON). D. Crockford. IETF. 2006년 7월. Informational. URL: https://tools.ietf.org/html/rfc4627
[json-ld11]
JSON-LD 1.1. Gregg Kellogg; Pierre-Antoine Champin; Dave Longley. W3C. 2020년 7월 16일. W3C Recommendation. URL: https://www.w3.org/TR/json-ld11/
[mfrel]
Microformats Wiki: existing rel values. Microformats.. URL: http://microformats.org/wiki/existing-rel-values#HTML5_link_type_extensions
[onix]
ONIX for Books. URL: https://www.editeur.org/83/Overview
[rfc2046]
Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types. N. Freed; N. Borenstein. IETF. 1996년 11월. Draft Standard. URL: https://tools.ietf.org/html/rfc2046
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. 1997년 3월. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[rfc5988]
Web Linking. M. Nottingham. IETF. 2010년 10월. Proposed Standard. URL: https://tools.ietf.org/html/rfc5988
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. 2017년 5월. Best Current Practice. URL: https://tools.ietf.org/html/rfc8174
[rfc8288]
Web Linking. M. Nottingham. IETF. 2017년 10월. Proposed Standard. URL: https://httpwg.org/specs/rfc8288.html
[schema.org]
Schema.org. URL: https://schema.org
[sri]
Subresource Integrity. Devdatta Akhawe; Frederik Braun; Francois Marier; Joel Weinberger. W3C. 2016년 6월 23일. W3C Recommendation. URL: https://www.w3.org/TR/SRI/
[url]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[wcag21]
Web Content Accessibility Guidelines (WCAG) 2.1. Andrew Kirkpatrick; Joshue O Connor; Alastair Campbell; Michael Cooper. W3C. 2018년 6월 5일. W3C Recommendation. URL: https://www.w3.org/TR/WCAG21/

J.2 정보 제공 참고문헌

[audiobooks]
Audiobooks. Wendy Reid; Matt Garrish. W3C. 2020년 11월 10일. W3C Recommendation. URL: https://www.w3.org/TR/audiobooks/
[ecma-404]
The JSON Data Interchange Format. Ecma International. 2013년 10월 1일. Standard. URL: https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf
[json-ld10]
JSON-LD 1.0. Manu Sporny; Gregg Kellogg; Markus Langhaler. 2014-01-16. W3C Recommendation. URL: https://www.w3.org/TR/2014/REC-json-ld-20140116/
[json-schema]
JSON Schema: core definitions and terminology. K. Zyp. Internet Engineering Task Force (IETF). 2013년 1월 31일. Internet-Draft. URL: https://tools.ietf.org/html/draft-zyp-json-schema
Identifier: A Link Relation to Convey a Preferred URI for Referencing. H. Van de Sompel; M. Nelson; G. Bilder; J. Kunze; S. Warner. IETF. URL: https://tools.ietf.org/html/draft-vandesompel-identifier-00
[string-meta]
Requirements for Language and Direction Metadata in Data Formats. Addison Phillips; Richard Ishida. 2017-12-01. URL: https://w3c.github.io/string-meta/
[WebIDL]
Web IDL. Boris Zbarsky. W3C. 2016년 12월 15일. W3C Editor's Draft. URL: https://heycam.github.io/webidl/
[webschemas-a11y]
WebSchemas Accessibility. URL: https://www.w3.org/wiki/WebSchemas/Accessibility