Copyright © 1999-2026 International Digital Publishing Forum and World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
EPUB® 3은 디지털 출판물과 문서를 위한 배포 및 교환 형식을 정의한다. EPUB 형식은 HTML, CSS, SVG 및 기타 리소스를 포함한 구조화되고 의미론적으로 강화된 웹 콘텐츠를 단일 파일 컨테이너로 배포하기 위해 표현, 패키징 및 인코딩하는 수단을 제공한다.
이 명세는 EPUB 출판물을 렌더링하는 사용자 에이전트인 EPUB 3 읽기 시스템의 적합성 요구사항을 정의한다.
이 섹션은 발행 당시 이 문서의 상태를 설명한다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 확인할 수 있다.
이 문서는 Publishing Maintenance Working Group이 권고안 트랙을 사용하여 작업 초안으로 발행했다.
작업 초안으로 발행되었다고 해서 W3C와 그 회원들의 지지를 의미하지는 않는다.
이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있다. 진행 중인 작업 이외의 것으로 이 문서를 인용하는 것은 적절하지 않다. 향후 이 예정 권고안의 업데이트에는 새 기능이 포함될 수 있다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했다. W3C는 해당 그룹의 산출물과 관련하여 이루어진 특허 공개의 공개 목록을 유지한다. 해당 페이지에는 특허 공개 방법도 포함되어 있다. 자신이 알고 있는 특허가 필수 청구항을 포함한다고 믿을 실제 지식이 있는 개인은 W3C 특허 정책 섹션 6에 따라 그 정보를 공개해야 한다.
이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받는다.
이 섹션은 비규범적이다.
EPUB 3 표준은 두 가지 별개의 관심사로 나뉜다. EPUB 출판물의 작성은 핵심 명세 [epub-34]에 정의되어 있으며, 이 명세는 이를 EPUB 읽기 시스템에서 렌더링하기 위한 요구사항을 자세히 설명한다.
EPUB 읽기 시스템은 여러 형태를 취할 수 있다. 예를 들어 사용자에게 콘텐츠를 렌더링하기 위한 시각적 표시 영역을 가질 수도 있고, 콘텐츠의 오디오 재생만 제공할 수도 있다. 따라서 모든 읽기 시스템에 적용되는 단일 규칙 집합은 없다. 대신 이 명세는 읽기 시스템의 기능과 지원하는 기능에 따라 렌더링 요구사항을 세분화한다.
또한 이 명세는 개발자가 고유한 사용자 인터페이스를 만들 수 있도록 상당한 유연성을 허용하며, 메타데이터 처리와 같은 사항에 대한 요구사항은 그러한 유연성을 허용하기 위해 의도적으로 최소화되어 있다.
따라서 이 명세가 읽기 시스템에 대한 공식 요구사항을 식별하더라도, 이 문서만 따로 이해하는 것은 불가능하다. 개발자는 사용 가능한 정보의 전체 범위를 이해하기 위해 EPUB 출판물의 전체 콘텐츠 구조에도 익숙해져야 한다.
적합한 읽기 시스템은 반드시 하나의 전용 프로그램이나 장치일 필요는 없으며 분산 시스템으로 존재할 수도 있다.
이 명세는 EPUB 3.4에 정의된 용어 [epub-34]를 사용한다.
또한 다음 용어를 정의한다.
뷰포트 내에서 EPUB 콘텐츠 문서의 표시 전용으로 사용되는 영역이다. 콘텐츠 표시 영역에는 EPUB 읽기 시스템이 뷰포트에 삽입할 수 있는 테두리, 여백, 머리글, 바닥글 또는 기타 장식이 제외된다.
합성 펼침면의 경우 뷰포트에는 두 개의 콘텐츠 표시 영역이 포함된다.
한 섹션에서 어떤 용어가 처음 나타나는 경우에만 그 정의로 연결된다.
비규범적으로 표시된 섹션뿐만 아니라, 이 명세의 모든 작성 지침, 도표, 예제 및 참고는 비규범적이다. 이 명세의 그 밖의 모든 내용은 규범적이다.
이 문서의 핵심 단어 MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, SHOULD, and SHOULD NOT은 여기에 표시된 것처럼 모두 대문자로 나타나는 경우에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 한다.
모든 주의 상자, 괄호 안의 설명문 및 알고리즘 설명도 비규범적이다.
이 섹션은 비규범적이다.
[html] 표준은 계속 진화하고 있으며, 더 이상 버전이 있는 릴리스가 없다. 또한 이 표준은 MathML, SVG, CSS 및 JavaScript와 같이 계속 진화하는 다양한 기술을 참조한다.
읽기 시스템 개발자는 자신의 시스템을 최신 상태로 유지하기 위해 HTML과 HTML이 참조하는 기술의 변경 사항을 추적해야 한다.
이 명세는 EPUB 읽기 시스템이 스크립팅, 폼 제출, 또는 HTML DOM [dom]을 지원하도록 요구하지 않는다. 이 명세에 적합한 읽기 시스템은 적합한 EPUB 콘텐츠 문서를 처리할 수 있으면 되는 것으로 기대된다. 스크립팅 및 폼 제출 지원이 필수는 아니므로, 적합한 읽기 시스템이 완전히 적합한 HTML 사용자 에이전트가 아닐 수도 있다.
이 명세는 [svg]의 특정 버전을 참조하지 않고, 대신 날짜가 없는 참조를 사용한다. 이 참조에 모호함이 있는 경우, 최신 권고 명세가 권위 있는 참조가 된다.
이 접근 방식은 EPUB이 SVG 표준의 변경 사항을 항상 따라갈 수 있도록 보장한다. 읽기 시스템 개발자는 자신의 시스템을 최신 상태로 유지하기 위해 SVG 표준의 변경 사항을 추적해야 한다.
어떤 읽기 시스템이 기능을 지원해야 하는지는 해당 섹션의 시작 부분에 언급된다. 이 명세에 적합하려면 읽기 시스템은 해당 섹션에서 정의된 대로 모든 필수 기능뿐 아니라 모든 적용 가능한 조건부 필수 기능(예: 읽기 시스템에 뷰포트가 있는 경우 이미지 렌더링 지원)을 MUST 지원해야 한다.
읽기 시스템은 반드시 하나의 애플리케이션일 필요는 없고 분산 시스템으로 존재할 수 있으므로,
읽기 시스템 요구사항이 EPUB 출판물을 사용자에게 렌더링하는
애플리케이션에서 항상 충족되는 것은 아니다. 예로는 제어된 콘텐츠 저장소(예: 서점 또는 도서관 시스템)와만
상호작용하는 읽기 시스템이 있다. 이 경우 읽기 시스템 개발자가 요구사항이 해당
애플리케이션에 적용되지 않음을 입증할 수 있다면(예: 중복
itemref
항목이 있는 EPUB 출판물 [epub-34]이
시스템에 들어올 수 없는 경우), 전체로서의 읽기 시스템은 여전히 적합한 것으로 간주된다.
권장 및 선택 기능을 지원할 때, 읽기 시스템은 해당 섹션에서 정의된 모든 규범적 요구사항을 MUST 충족해야 한다.
읽기 시스템 개발자가 권장 또는 선택 기능을 지원하지 않기로 선택한 경우에도, 해당 섹션의 규범적 요구사항이 전혀 적용되지 않는다는 의미는 항상 아니다. 경우에 따라 기능을 구현하지 않을 때의 대체 요구사항이 있을 수 있다(예: 스크립팅이 지원되지 않을 때 폴백 처리). 읽기 시스템은 기능을 지원하지 않을 때 이러한 대체 요구사항을 MUST 충족해야 한다.
읽기 시스템은 EPUB 출판물이나 그 안의 리소스가 콘텐츠 작성 또는 처리 요구사항을 위반하는 경우 이를 로드할 필요가 없다.
이 섹션은 비규범적이다.
읽기 시스템은 EPUB 출판물을 처리하고 렌더링하는 동안 발생한 오류(예: 고정 레이아웃 문서의 크기가 추론된 경우)를 보고할 필요는 없지만, 이 정보에 접근할 수 있는 수단을 제공하는 것이 강력히 권장된다. 비교할 수 있는 예는 웹 브라우저가 HTML 페이지와 애플리케이션 디버깅을 위해 제공하는 개발자 도구이다.
이러한 처리 정보에 접근할 수 있으면, 예를 들어 EPUB 출판물을 더 효율적으로 디버깅할 수 있다. 디버깅에 최대한 활용하려면, 읽기 시스템은 자신이 직접 마주친 문제뿐 아니라 자신이 사용하는 애플리케이션이 보고한 문제(예: 콘텐츠 렌더링에 사용되는 브라우저 코어에서 보고된 HTML, CSS 및 JavaScript 오류, 또는 EPUBCheck가 보고한 검증 문제)도 보고하는 것이 좋다.
오류 보고가 사용자의 일반적인 읽기 경험에 영향을 주는 방해적인 경험이 될 것으로 기대되지는 않는다. 대신 보고 정보는 예를 들어 설정 메뉴에서 선택적으로 활성화되어 사용자를 불필요하게 방해하지 않도록 할 수 있다.
읽기 시스템은 출판물 리소스 [epub-34]를 MUST 처리해야 한다.
읽기 시스템에 뷰포트가 있는 경우, 이미지 핵심 미디어 유형 리소스 [epub-34]를 MUST 지원해야 한다.
사전 녹음된 오디오를 렌더링할 수 있는 기능이 있는 경우, 오디오 핵심 미디어 유형 리소스 [epub-34]를 MUST 지원해야 한다.
읽기 시스템은 임의의 외부 리소스 유형 집합을 MAY 지원할 수 있다.
외부 콘텐츠 문서의 경우, 읽기 시스템이 리소스의 MIME 미디어 유형을 지원하지 않으면, 지원되는 출판물 리소스를 식별하여 지원되지 않는 리소스 대신 사용할 때까지 리소스의 매니페스트 폴백 체인 [epub-34]을 MUST 순회해야 한다.
매니페스트 폴백 [epub-34]이 epub 콘텐츠 문서에 제공되는 경우, 읽기 시스템은 렌더링할 최적의 버전을 찾기 위해 사용 가능한 옵션 중에서 MAY 선택할 수 있다(예: 각각의 properties 속성을 검사하여).
읽기 시스템이 폴백 체인의 여러 출판물
리소스를 지원하는 경우, 리소스의 properties 속성 [epub-34]
값에 따라 사용할 리소스를 MAY 선택할 수 있으며, 그렇지 않으면 선호되는
폴백 순서 [epub-34]를 SHOULD 준수해야 한다.
읽기 시스템이 폴백 체인의 어떤 리소스도 지원하지 않는 경우, 콘텐츠를 표시할 수 없음을 사용자에게 MUST 알려야 한다.
읽기 시스템은 이미 만난 매니페스트 항목에 대한 첫 번째 참조에서 폴백 체인을 MUST 종료해야 한다.
읽기 시스템은 원격 리소스를 리소스 위치 [epub-34]에 정의된 대로 SHOULD 지원해야 한다.
네트워크 공격의 위험을 제한하기 위해, 읽기 시스템은 https URI scheme [rfc9110]을 통해 참조된
원격
리소스만 SHOULD 로드해야 한다.
읽기 시스템은 컨텍스트 메뉴와 같은 읽기 시스템의 기능을 통해 시작된 경우를 제외하고, data URL [rfc2397]이 최상위 탐색 컨텍스트 [html]에서 열리는 것을 MUST 방지해야 한다. 읽기 시스템이 최상위 콘텐츠 문서에 최상위 탐색 컨텍스트를 사용하지 않는 경우, 예를 들어 최상위 콘텐츠 문서가 SVG라면, data URL이 최상위 콘텐츠 문서인 것처럼 열리는 것도 MUST 방지해야 한다.
읽기 시스템은 file URL [rfc8089]을 통해 참조된 리소스에 대한 접근을 MUST 방지해야 한다.
출판물 리소스 처리의 일부로, 읽기 시스템은
XHTML 콘텐츠 문서 또는 SVG 콘텐츠 문서에서 언어와 기본 방향을 설정하기 위한 속성뿐 아니라,
모든 XML 문서(예: 패키지 문서 및 미디어 오버레이 문서)의 xml:lang 속성도
처리해야 한다.
또한 읽기 시스템은 dir
속성 [epub-34]을 패키지 문서에 대해서도 MUST 처리해야 하며,
여기서 dir로 지정된 기본
방향은 그것이 지정된 요소와, 다른 dir 인스턴스로 재정의되지 않는 한 그 콘텐츠의 모든
요소에 적용된다. (자세한 내용은 5.1 기본
방향도 참조.)
이
정보가 출판물 리소스에 없는 경우, 읽기 시스템은
패키지 문서에 표현된 정보(즉, xml:lang 및 dir
속성, link
요소의 hreflang 속성, 또는
dc:language
요소 [epub-34]에서)로부터 해당 리소스의 언어나 기본 방향을
MUST NOT 가정해서는 안 된다.
명시적인 언어 또는 방향 정보가 없는 경우를 처리하는 방법에 대한 자세한 내용은
해당 리소스의 공식 명세를 참조한다.
읽기 시스템은 원격 리소스를 가져오기 위해, 그리고 스크립트가 포함된 콘텐츠 문서가 웹 호스팅 API와 통신하고 리소스를 가져오는 것을 허용하기 위해 네트워크 접근을 MAY 지원할 수 있다.
그러나 네트워크 접근을 제공하면 읽기 시스템에 대한 보안 위험과 사용자에 대한 보안 및 개인정보 보호 위험이 모두 증가한다. 이러한 위험은 종종 읽기 시스템과 해당 시스템이 실행되는 플랫폼에 고유하다. 대부분의 읽기 시스템이 기반으로 하는 브라우저 코어는 웹 브라우저 자체와 같은 보안 및 개인정보 보호 제어를 제공하지 않는다. 따라서 개발자는 네트워크 접근을 허용할 때 각별히 주의해야 하며, 읽기 시스템이 공격에 취약하지 않은지 더 철저히 테스트해야 한다. 이러한 위험에 대한 자세한 정보는 15. 보안 및 개인정보 보호에 제공된다.
읽기 시스템 개발자가 네트워크 접근을 허용하는 경우, 다음 두 가지를 모두 수행하는 것이 RECOMMENDED된다:
링크가 http 또는 https
scheme
[url]을
가지는 경우,
읽기 시스템은:
로드하려면 도우미 애플리케이션이 필요한 scheme을 가진 링크의 경우, 읽기 시스템은 사용자의 동의를 SHOULD 얻고 도우미 애플리케이션을 여는 데 대한 플랫폼 지침을 따라야 한다.
외부 링크는 EPUB 콘텐츠 문서에서만 발견되는 것은 아니다. 예를 들어 읽기 시스템은 패키지 문서 메타데이터의 외부 연결된 레코드 [epub-34]에 대한 접근을 제공할 수 있다.
외부 링크의 보안 및 개인정보 보호 문제에 대한 자세한 정보는 15.2 위협 모델을 참조한다.
읽기 시스템은 EPUB 컨테이너 [epub-34]를 MUST 처리해야 한다.
EPUB 컨테이너를 처리하는 애플리케이션이 완전한 읽기 시스템일 필요는 없다 (예: 애플리케이션은 컨테이너의 콘텐츠만 추출하거나 패키징된 콘텐츠의 유효성을 확인할 수도 있다). 이러한 경우 해당 애플리케이션의 개발자는 이 섹션에 정의된 읽기 시스템의 렌더링 요구사항을 무시할 수 있다.
읽기 시스템은 OCF 추상 컨테이너의 루트 디렉터리에 URL [url]을 MUST 할당해야 한다. 이 URL은 컨테이너 루트 URL이라고 한다. 이는 구현에 따라 다르지만, 구현은 다음 속성을 MUST 가져야 한다:
/"를 컨테이너 루트
URL을 base로 사용하여 파싱하면, 그 결과는
컨테이너
루트 URL이다.
.."를 컨테이너 루트
URL을 base로 사용하여 파싱하면, 그 결과는
컨테이너
루트 URL이다.
읽기 시스템 내 EPUB 출판물의 각 사용자별 인스턴스마다 origin [html]이 고유하다는 것은, 두 명의 다른 사용자가 동일한 EPUB 출판물의 사본을 획득하면, 동일한 읽기 시스템을 사용하더라도 두 사용자의 해당 사본에서 origin이 서로 다르다는 의미이다.
컨테이너 루트 URL의 속성은 적합한 읽기 시스템이 임의의 상대 URL 문자열을 콘텐츠 URL로 파싱하도록 한다. 달리 말해, 상대 링크는 컨테이너 콘텐츠 밖으로 "누출"되지 않으며, 이는 보안에 중요한 기능이다.
실제로 컨테이너 루트 URL은 다음과 같이 정의된 URL과 유사하게 동작한다:
| URL 구성요소 | 값 |
| scheme | http 또는 https |
| host |
localhost
|
| port | EPUB 인스턴스에 고유하게 할당된 동적 포트 |
예:
| 컨테이너 파일 | 파일 경로 | URL |
| 루트 디렉터리 | empty string |
http://localhost:49152/
|
| 패키지 문서 |
EPUB/package.opf
|
http://localhost:49152/EPUB/package.opf
|
| EPUB 콘텐츠 문서 |
HTML/file name.xhtml
|
http://localhost:49152/HTML/file%20name.xhtml
|
| URL 문자열 (예를 들어 패키지 문서에서 발견됨) |
콘텐츠 URL |
../HTML/file%20name.xhtml
|
http://localhost:49152/HTML/file%20name.xhtml
|
/Media/img.png
|
http://localhost:49152/Media/img.png
|
../../../Media/img.png
|
http://localhost:49152/Media/img.png
|
마지막 두 링크는 부적합하거나 레거시인 읽기 시스템 및 도구 체인과의 더 나은 상호운용성을 보장하기 위해 EPUB 출판물에서 허용되지 않는다는 점에 유의한다.
일부 언어 명세는 [url]보다 앞선 Requests For Comments를 참조하며, 이 경우에는 해당 언어의 콘텐츠에 이전 RFC가 적용된다.
대부분의 언어 명세와 달리, 읽기 시스템은
META-INF 디렉터리 내 모든 파일에 대해 컨테이너 루트 URL을
base
URL [url]로 사용해야 한다.
[epub-34]의 META-INF
디렉터리에서 URL 파싱 섹션도 참조한다.
[epub-34]는 최대 상호운용성을 위해 파일 이름 및 파일 경로 제한을 정의하지만, 읽기 시스템은 이러한 요구사항을 따르지 않는 파일 이름과 경로도 처리하려고 SHOULD 시도해야 한다. 유효하지 않은 파일 이름과 경로는 일부 운영 체제에서만 문제가 될 수 있다.
이 명세는 OCF 파일 이름과 경로를 표현할 수 없는 읽기 시스템이 이러한 비호환성을 어떻게 처리해야 하는지 지정하지 않는다.
container.xml)
읽기 시스템은 기본적으로 첫 번째
rootfile
요소
[epub-34]가 참조하는 패키지 문서를 사용하여 EPUB 출판물을 렌더링해야 MUST 한다.
읽기 시스템이 다른 사용 가능한 옵션 중에서 선택하는 수단을 인식하는 경우, 더
적절한 패키지
문서를 MAY 선택할 수 있다.
metadata.xml)읽기 시스템은 인식하지 못하는 루트
요소가 있는 metadata.xml 파일
[epub-34]을 SHOULD 무시해야 한다.
manifest.xml)읽기 시스템은 ZIP 아카이브나 manifest.xml 파일 [epub-34]에 포함된 보조 매니페스트 정보를
EPUB 출판물 처리에 MUST
NOT 사용해서는 안 된다.
signatures.xml)signatures.xml
파일 [epub-34]의 서명을 검증하는 데 사용되는 digest를 계산하기 전에,
읽기 시스템은 서명 후 암호화된 모든 데이터를 MUST
복호화해야 한다
— 서명 전에 암호화된 데이터는 MUST NOT 복호화해서는 안 된다.
서명 후 암호화된 데이터를 식별하는 방법에 대한 자세한 정보는 Decryption Transform for XML Signature [xmlenc-decrypt]를 참조한다.
읽기 시스템은 Reserved files [epub-34]에
나열되지 않은 META-INF 디렉터리의 구성 파일을 만났을 때
MUST NOT 실패해서는 안 된다.
읽기 시스템은:
콘텐츠를 세그먼트로 분할하는 모든 OCF ZIP 컨테이너 [zip]를 오류로 MUST 처리해야 한다.
Deflate [rfc1951] 이외의 압축 기법을 사용하는 모든 OCF ZIP 컨테이너를 오류로 MUST 처리해야 한다.
"Version 1" [zip]으로 정의된 ZIP64 확장을 MUST 지원해야 한다.
[zip] 암호화 기능을 사용하는 OCF ZIP 컨테이너를 오류로 MUST 처리해야 한다.
콘텐츠를 압축 해제하는 경우 OCF 추상 컨테이너의 루트 디렉터리에 대한 물리적 디렉터리를 MAY 생성할 수 있다.
OCF 추상 컨테이너의 맥락 밖에서 로드 및 저장 작업을 거쳐 OCF ZIP 컨테이너의 정보를 보존할 필요는 없다. 특히 읽기 시스템은 CRC 값, comment 필드 또는 특정 운영 체제에 해당하는 파일 시스템 정보를 보유하는 필드(예: External file attributes 및 Extra field)를 보존할 필요가 없다.
OCF ZIP 컨테이너 아카이브의 특정 필드와 관련하여, 읽기 시스템은:
NIST는 SHA-1 알고리즘 [fips-180-4]의 사용을 2030년 말까지 단계적으로 중단할 것을 권고하고 있다. Publishing Maintenance Working Group은 SHA-1에 의존하기 때문에 그 날짜 이후 EPUB 출판물에서 글꼴 난독화를 지원할 의도가 없다. 이 기능은 기존 EPUB 출판물을 무효화하지 않기 위해 이제 오래된 것으로 표시된다. 읽기 시스템 개발자는 이 기능을 사용한 모든 EPUB 출판물을 완전히 지원하기 위해 난독화 해제를 계속 지원할지 고려해야 한다. 그러나 CSS가 글꼴 폴백을 제공하므로, 지원 종료는 일부 텍스트 콘텐츠의 외형에만 영향을 준다.
읽기 시스템은 글꼴 난독화 [epub-33]에 정의된 대로 글꼴의 난독화 해제를 SHOULD 지원해야 한다.
원래 데이터를 복원하려면, 읽기 시스템은 단순히 과정을 되돌리면 된다. 소스 파일은 난독화된 데이터가 되고, 대상 파일에는 원시 데이터가 포함된다.
EPUB 3은 EPUB 3.0.1 이전에 글꼴 난독화를 허용했지만, 난독화와 압축의 순서를 지정하지 않았다. 그 결과 읽기 시스템은 압축 해제와 난독화 해제 후 유효하지 않은 글꼴을 만날 수 있다. 이러한 경우 데이터를 팽창시키기 전에 난독화를 해제하면 유효한 글꼴이 반환될 수 있다. 읽기 시스템은 이 검색 방법을 지원할 필요는 없지만, 개발자는 EPUB 3 콘텐츠를 일반적으로 지원한다면 이를 마주칠 가능성이 높다는 점을 고려해야 한다.
읽기 시스템은 MUST 패키지 문서 [epub-34]를 처리해야 한다.
dir
속성 [epub-34]이 설정되어 있고
기본 방향이 ltr 또는 rtl임을 나타내는 경우, 읽기 시스템은 [bidi]에 정의된
상위 수준 프로토콜에 따라 bidi 알고리즘을
MUST 재정의해야 하며, 기본 방향이
ltr인 경우 단락 임베딩 수준을 0으로, 기본 방향이 rtl인 경우 1로 설정해야 한다.
그렇지 않으면
기본 방향은 auto이며, 이 경우 읽기 시스템은 [bidi]의 규칙
P2부터 시작하여 Unicode Bidi Algorithm을 적용함으로써 텍스트의
방향을 MUST 결정해야 한다.
국제 사용자를 대상으로 하거나 국제 콘텐츠 지원을 표방하는 읽기 시스템은 해당 메타데이터를 사용자에게 노출할 때 이 기능을 구현할 것을 강력히 권장한다. 텍스트의 방향성을 무시하면 가독성 문제가 발생할 수 있다.
읽기 시스템은 고유 식별자가 오직 하나의 EPUB 출판물에 대해서만 고유하다는 것에 SHOULD NOT 의존해서는 안 된다. 동일한 고유 식별자를 가진 두 EPUB 출판물이 같은 출판물의 서로 다른 버전을 나타내는지, 아니면 서로 다른 출판물을 나타내는지를 판단하려면 최종 수정일, 제목, 저자와 같은 다른 메타데이터를 검사해야 할 수 있다.
읽기 시스템은 처리하기 전에
Dublin Core [dcterms] 및 meta
요소 값
[epub-34]에서 ASCII 공백을 제거하고
축소 [infra]해야 MUST 한다.
dc:identifier 요소
dc:identifier
요소 [epub-34]의 값이
확립된 체계에 적합한지 또는 발급 기관에 의해 부여되었는지를 판단하기 위해, 읽기 시스템은
identifier-type 속성
[epub-34]이 있는지 SHOULD 확인해야 한다.
dc:title 요소읽기 시스템은 문서 순서에서 첫 번째
dc:title
요소 [epub-34]를 EPUB 출판물의 주 제목으로
MUST 인식하고, 다른 제목 요소보다 먼저 사용자에게 표시해야 한다.
이 명세는 추가 dc:title
요소를 처리하는 방법을 정의하지 않는다.
dc:language 요소
dc:language
요소에 지정된 EPUB 출판물의 언어는
정보 제공용이다. 이 정보의 일부 사용 예는 다음과 같다:
dc:creator 요소표시
우선순위를 결정할 때, 읽기 시스템은 metadata 섹션의
dc:creator
요소 [epub-34]의 문서 순서를
MUST 사용해야 하며, 처음 만나는 creator 요소가
주 창작자이다. 읽기 시스템이 창작자 메타데이터를
사용자에게 노출하는 경우, 가능한 한(예: 표시상의 제약이 없을 때)
metadata 섹션에 나열된 모든 창작자를
포함하는 것이 SHOULD 좋다.
meta 요소읽기 시스템은 자신이 인식하지 못하는 표현식을 정의하는
property 속성
[epub-34]을 가진 모든
meta
요소를 SHOULD 무시해야 한다. 읽기 시스템은 알 수 없는
표현식을 만났을 때 MUST NOT 실패해서는 안 된다.
읽기 시스템이 scheme 속성 [epub-34] 값을 인식하지 못하는 경우, 해당
요소의 값을 문자열로 취급하는 것이 SHOULD 좋다.
link 요소연결된 리소스의 검색 및 지원은 OPTIONAL이다.
hreflang [EPUB-34] 속성에서 식별된 언어는
순전히 참고용이다. 리소스에 표현된 언어 정보가
국제화 요구사항에 정의된 것처럼 처리 및 렌더링 목적의
언어를 결정한다.
읽기 시스템은 자신이 인식하지 못하는
properties
속성 [epub-34]의 값을
MUST 무시해야 한다.
읽기 시스템은 내재된 제한과 관련 위험(예: 리소스와 그 처리 방법에 대한 정보 부족, 원격 호스팅 출처로 인한 보안 위험, 폴백 부족 등) 때문에 EPUB 출판물 렌더링에 연결된 리소스를 사용하지 않는 것이 SHOULD NOT 좋다.
읽기 시스템은
spine
요소 [epub-34]에 정의된 순서로
EPUB 출판물을 렌더링하는 수단을
MUST 제공해야 하며, 여기에는 다음이 포함된다:
itemref [epub-34]를 기본 읽기 순서의 시작으로 인식하는 것;
그리고,spine에 주어진 순서대로 이어지는 주요 항목을 렌더링하는 것.매니페스트 폴백 처리에 대한 자세한 정보는 3.3 매니페스트 폴백을 참조한다.
사용자가 spine 요소에 정의된 기본 읽기 순서를
따라 이동할 때, 읽기 시스템은 비선형 itemref 요소
[epub-34]를 자동으로 건너뛸
MAY 수 있다. 그러나 사용자가 비선형 리소스에 대한 하이퍼링크를 활성화하면,
읽기 시스템은 참조된 리소스 또는 지정된
폴백을 MUST 렌더링해야 한다. 읽기 시스템은 사용자가 기본적으로
비선형 콘텐츠를 건너뛸지 여부를 선택할 수 있는 옵션도
MAY 제공할 수 있다.
page-progression-direction
속성 [epub-34]이 설정되지 않은 경우, 읽기
시스템은 default 값을 MUST 가정해야 한다.
page-progression-direction
값이 default일 때, 읽기 시스템은 렌더링 방향을 선택할 수 있다.
page-progression-direction 속성의 값이 default가 아닌 경우,
읽기 시스템은 pre-paginated XHTML 콘텐츠 문서에서 계산된 방향성을
MUST 무시해야 한다.
읽기 시스템은 자신이 인식하지 못하는
spine itemref
properties 속성 [EPUB-34]에
표현된 모든 값을
MUST 무시해야 한다.
읽기 시스템은 선형 읽기 순서를 렌더링할 때 중복 매니페스트 항목 [EPUB-34]에 대한 spine 참조를 MUST NOT 건너뛰어서는 안 된다. 읽기 시스템은 사용자 인터페이스(UI) 목적상 이를 서로 다른 항목으로 MUST 취급해야 한다 (예를 들어 각 출현은 독립적으로 북마크하거나 주석을 달 수 있다). 읽기 시스템이 spine에서 여러 번 참조된 리소스에 대한 하이퍼링크를 따라갈 때, 읽기 시스템은 선형 읽기 순서에서 해당 문서의 첫 번째 출현으로 MUST 이동해야 한다.
spine
itemref
요소의 properties 속성이
전역 렌더링 속성 [epub-34]을 오버라이드하는
경우, 읽기
시스템은 해당 spine
항목을 표시하기 위해 오버라이드의 전역 값에 대한 요구사항을 MUST 따라야 한다.
예를 들어, layout-pre-paginated
오버라이드 [epub-34]를 포함하는 spine 항목은
전역 pre-paginated
값의 요구사항에 따라 렌더링된다.
동일한 속성에 대한 오버라이드가 properties
속성에 둘 이상 지정된 경우, 읽기 시스템은 첫 번째 값만
MUST 사용해야 한다.
이 명세의 맥락에서, 읽기 시스템의 컬렉션 [epub-34] 지원은
OPTIONAL이다. 읽기 시스템은 인식하지 못하는 역할을 정의하는
collection 요소를
MUST 무시해야 한다.
읽기 시스템은 이 버전의 EPUB [epub-34]에 적합한 콘텐츠에서 레거시 기능을 MUST NOT 지원해서는 안 된다.
읽기 시스템은 리플로우 가능 레이아웃을 MUST 지원해야 한다.
패키지 문서
메타데이터 [epub-34]에
rendition:layout
속성을 담은
meta
요소가 나타나지 않는 경우, EPUB 읽기 시스템은 기본값
reflowable을 전역 값으로
MUST 가정해야 한다.
읽기 시스템은 리플로우 가능한 EPUB 콘텐츠 문서를 렌더링할 때 동적 페이지 매김을 MAY 적용할 수 있다.
읽기 시스템은 사전 페이지 매김 레이아웃을 MUST 지원해야 한다.
읽기 시스템은 렌더링할 때
spine
itemref
[epub-34]마다 정확히 한 페이지를
MUST 생성해야 한다.
사전 페이지 매김 레이아웃 렌더링의 기본 기대는 콘텐츠 표시 영역이 사용 가능한 뷰포트 영역을 가능한 한 많이 차지하는 것이다. 읽기 시스템은 테두리, 여백, 머리글 또는 바닥글과 같은 추가 콘텐츠를 뷰포트에 주입하지 않는 것이 SHOULD NOT 좋다.
합성 펼침면을 렌더링할 때, 읽기 시스템은 인접한 콘텐츠 슬롯 사이에 공간을 MUST NOT 포함해서는 안 된다.
이 명세는 초기 컨테이닝 블록 [css2]이 읽기 시스템 콘텐츠 표시 영역 안에 어떻게 배치되는지 정의하지 않는다.
읽기 시스템 제어 위젯을 사용자에게 노출하는 방식은 구현별 사항이며 위의 동작 기대사항에 포함되지 않는다.
펼침면 배치 spine 오버라이드는 다음과 같이 해석된다:
rendition:page-spread-left
속성 또는 page-spread-left
속성 [epub-34] 중 하나가 지정된 경우,
주어진 spine
항목이 펼침면의 왼쪽 슬롯에 렌더링되는 것이
SHOULD 좋다는 것을 나타낸다.
rendition:page-spread-right
속성 또는 page-spread-right
속성 [epub-34] 중 하나가 지정된 경우,
주어진 spine
항목이 펼침면의 오른쪽 슬롯에 렌더링되는 것이
SHOULD 좋다는 것을 나타낸다.
rendition:page-spread-center
속성 [epub-34]이
지정된 경우, 합성 펼침면을 비활성화하고
spine 항목을 뷰포트 중앙에 렌더링하는 것이
SHOULD 좋다는 것을 나타낸다.
rendition:page-spread-left, rendition:page-spread-right,
rendition:page-spread-center 속성(및 접두사가 없는
동등한 속성)은 사전 페이지 매김 콘텐츠에만, 그리고 읽기 시스템이
합성 펼침면을 생성하는 경우에만 적용된다.
rendition:page-spread-* 속성과 접두사가 없는 동등한 속성은
XHTML 콘텐츠 문서에 대해 설정된
page-break-before
속성 [css2]의
어떤 값보다도 MUST 우선해야 한다.
읽기
시스템이 실제 펼침면을 나타내는 두 spine 항목(즉, rendition:page-spread-left 및
rendition:page-spread-right 속성을 가진 인접한 두 spine
항목)을 만나는 경우, 인접한 페이지 사이에 공간 없이 펼침면을
생성하는 것이 SHOULD 좋다.
spine의 첫 번째 itemref 요소
[epub-34]가 펼침면
배치 위치를 지정하지 않는 경우, 이는 단독으로 표시되거나(즉, rendition:page-spread-center
속성이 설정된 것처럼) 두 개의 사용 가능한 펼침면 슬롯 중 하나에 단독으로 배치되는 것이
SHOULD 좋다(즉,
다른 슬롯은 비어 있음). 사용할 슬롯은 page-progression-direction
속성 [epub-34] 값에서
얻는 것이 SHOULD 좋다. 예를 들어, 왼쪽에서 오른쪽으로 진행되는
페이지 진행 방향을 가진 EPUB 출판물에서는
왼쪽 슬롯이 채워지지 않는다.
읽기 시스템은 롤 레이아웃 렌더링을 SHOULD 지원해야 한다.
롤
레이아웃 [epub-34]의 경우, 읽기 시스템은 각 spine
itemref의
너비를 뷰포트에 맞추고, 보이는 간격 없이
연속 롤로 표시해야 MUST 한다.
EPUB 출판물이 롤 레이아웃을 사용하도록 지정한 경우, 읽기 시스템은 모든 레이아웃 오버라이드 [epub-34]를 MUST 무시해야 한다.
롤 레이아웃이 도입되기 전에, 일부 일본 출판사는 사전 페이지 매김 레이아웃과
값이 "scrolled-continuous"로 설정된 rendition:flow
속성 [epub-33]을 조합하여 롤을 만들었다. 읽기 시스템
개발자가 이 콘텐츠를 지원하려는 경우, 해당 조합을
롤 레이아웃이 선언된 것과 동의어로 취급해야 한다.
읽기 시스템은 패키지 렌더링 어휘 [epub-34]에 정의된 속성과 동작상 충돌하는 표현식을 도입하지 않는다면, 사용자 정의 속성을 MAY 지원할 수 있다.
EPUB 콘텐츠 문서 [epub-34]의 정의에는 콘텐츠의 교차 호환성을 최적화하기 위한 다양한 작성 제한(예: 언어와 방향을 설정하기 위해 CSS 사용 금지 [epub-34])이 포함된다. 이 명세에서 달리 명시하지 않는 한, 읽기 시스템은 이러한 제한된 기능을 MAY 지원할 수 있다.
읽기 시스템은 XHTML 콘텐츠 문서 [epub-34]를 MUST 처리해야 한다.
이 섹션에서 오버라이드된 것으로 명시적으로 정의하지 않는 한, 읽기 시스템은 [html] 명세가 정의한 의미론을 사용하여 XHTML 콘텐츠 문서를 MUST 처리하고, 그 안에 표현된 적용 가능한 모든 사용자 에이전트 적합성 제약을 준수해야 한다.
ITS 마크업 처리 [its20]에 대한 읽기 시스템 지원은 OPTIONAL이다.
읽기 시스템은 속성이 이 명세의 요구사항을 수정하지 않는다면 사용자 정의 속성을 MAY 지원할 수 있다.
속성 처리 모델에 대한 읽기 시스템 지원은 OPTIONAL이며, JSON으로 변환 [html]도 마찬가지이다.
XHTML 콘텐츠 문서에 포함된 MathML [mathml3]을 지원하기 위해, 읽기 시스템은:
[mathml3] 명세에 정의된 대로 Presentation MathML에 대한 입력 적합 프로세서여야 MUST 한다.
뷰포트가 있는 경우, Presentation MathML의 시각적 렌더링을 MUST 지원해야 한다.
annotation-xml
요소 [mathml3]에서
발견되는 Content MathML 렌더링을
MAY 지원할 수 있다.
읽기 시스템은 MathML 렌더링을 제공하기 위해 MathJax와 같은 타사 라이브러리를 선택할 수 있다.
읽기 시스템은 XHTML 콘텐츠 문서에 포함된 SVG를 7.2 SVG 콘텐츠 문서에 정의된 대로 MUST 처리해야 한다.
참조에 의해 XHTML 콘텐츠 문서에 포함된 SVG를 스타일링할 목적으로, 읽기 시스템은 포함하는 문서의 CSS 스타일 규칙을 참조된 SVG 문서에 MUST NOT 적용해서는 안 된다.
포함에 의해 XHTML 콘텐츠 문서에 포함된 SVG를 스타일링할 목적으로, 읽기 시스템은 포함하는 문서의 적용 가능한 CSS 규칙을 포함된 SVG 요소에 MUST 적용해야 한다.
참조에 의해 포함된 SVG는 별도의 문서로 처리되며, SVG 콘텐츠 문서처럼
자체 CSS 스타일 규칙을 포함할 수 있다.
이는 [html] object 요소가
외부 [html]
요소를 참조하는 상황과 일치한다는 점에 유의한다.
[html]
form
요소 제출에 대한 읽기 시스템 지원은 OPTIONAL이다.
예를 들어 읽기 시스템은 네트워킹 접근을 제한하여 폼 제출을 막을 수 있다.
읽기 시스템은 SVG 콘텐츠 문서 [epub-34]를 MUST 처리해야 한다.
SVG 콘텐츠 문서 및 XHTML 콘텐츠 문서에 포함된 SVG를 처리하기 위해, 읽기 시스템은:
이 명세에서 오버라이드된 것으로 명시적으로 정의하지 않는 한, [svg] 명세가 정의한 의미론을 사용하여 SVG 콘텐츠 문서를 MUST 처리하고, 그 안에 표현된 적용 가능한 모든 사용자 에이전트 적합성 제약을 준수해야 한다.
7.5 스크립팅에 정의된 적합성 기준을 MUST 충족해야 한다.
뷰포트가 있는 경우, Styling [svg]에 정의된 대로 CSS를 사용한 SVG의 시각적 렌더링을 MUST 지원해야 한다 그리고 Property Index [svg]에 정의된 모든 속성을 SHOULD 지원해야 한다. 임베디드 SVG의 경우, 읽기 시스템은 7.1.2.3.1 임베디드 SVG 및 CSS에 정의된 제약에도 MUST 적합해야 한다.
읽기 시스템은 레이아웃이
pre-paginated 또는 roll로 지정된
spine 항목에서 EPUB 콘텐츠 문서 렌더링을
MUST 지원해야 한다. 또한 레이아웃이
pre-paginated 또는 roll로 지정된 spine 항목에서 이미지 외부 리소스 렌더링을
MAY 지원할 수 있다.
이 요구사항은 읽기 시스템이 롤 레이아웃을 지원해야 함을 요구하지 않는다. 레이아웃이 지원되는 경우에만 읽기 시스템은 고정 레이아웃 EPUB 콘텐츠 문서의 렌더링을 지원해야 한다.
읽기 시스템은 XHTML 콘텐츠 문서에 대해
Expressing in HTML [epub-34]에 정의된 대로
viewport meta 태그에 선언된 너비 및 높이 표현식을 사용하여
초기
컨테이닝 블록(ICB)을 MUST 생성해야 한다.
ICB 밖에 배치된 콘텐츠를
MUST 클리핑해야 한다.
viewport meta
태그의 너비 또는 높이 값이 숫자가 아닌 문자를 포함하지만
숫자로 시작하는 경우(예: 값에 "500px"와 같은 길이 단위 선언이 포함된 경우),
숫자 접두사를 픽셀 값으로 사용하는 것이 SHOULD 좋으며,
그렇지 않으면 해당 값을 유효하지 않은 것으로 MUST
처리해야 한다.
읽기 시스템은 viewport meta 태그의 구문이 유효하지 않더라도
width 및
height
값을 추출하려고 SHOULD 시도해야 한다.
읽기 시스템은 viewport
meta 태그에서 width 및 height 속성의 첫 번째
선언을 MUST 사용해야 한다(즉, 반복된 선언은 무시한다).
viewport meta에 너비 또는 높이 값이 없거나
이러한 값이 유효하지 않은 경우, 읽기 시스템은 값을 제공할
MAY 수 있다.
예를 들어 읽기
시스템은 다음을 할 수 있다:
device-width 및
device-height 값을 가진 것으로 간주한다; 또는
XHTML 콘텐츠 문서에
viewport meta 태그가 둘 이상 포함된 경우, 읽기 시스템은 높이와 너비 크기를 얻기 위해
문서 순서상 첫 번째 태그를
MUST 사용해야 한다. 이후 선언은
MUST
무시해야 한다.
ICB의 종횡비가 읽기 시스템 콘텐츠 표시 영역의 종횡비와 일치하지 않는 경우, 읽기 시스템은 사용자 인터페이스를 수용하기 위해 해당 영역 안에 ICB를 배치할 MAY 수 있다. 다시 말해, 추가된 레터박스 공간이 콘텐츠의 한쪽(또는 양쪽)에 나타날 MAY 수 있다.
읽기 시스템은 SVG 콘텐츠 문서를 렌더링하기 위해 Expressing the ICB in SVG [epub-34]에 정의된 크기를 사용하여 초기 컨테이닝 블록(ICB)을 MUST 생성해야 한다.
ICB의 종횡비가 읽기 시스템 콘텐츠 표시 영역의 종횡비와 일치하지 않는 경우,
[SVG]에 정의된 대로
viewBox
및 preserveAspectRatio
속성에 대한 규칙을 따르는 것이 권장된다.
읽기 시스템이 spine의 이미지 외부 리소스를 지원하는 경우, 이미지의 너비 및 높이 메타데이터에 정의된 크기를 사용하여 초기 컨테이닝 블록을 생성해야 한다. 이 메타데이터를 얻는 방법에 대한 자세한 정보는 지원되는 각 이미지 형식의 문서를 참조한다.
XHTML 고정 레이아웃 문서의 초기
컨테이닝 블록 크기를 얻는 경우를 제외하고, 읽기 시스템은
viewport meta
선언의 렌더링 지침을 MUST 무시해야 한다.
이 제한은 고정 레이아웃 및 리플로우 가능한 XHTML 콘텐츠 문서 모두에 적용된다.
읽기 시스템에 뷰포트가 있는 경우, CSS를 통한 XHTML 콘텐츠 문서의 시각적 렌더링 [epub-34]을 MUST 지원해야 한다.
CSS를 지원하기 위해, 읽기 시스템은:
[csssnapshot]에 설명된 CSS의 공식 정의를 MUST 지원해야 한다.
[csssnapshot]에서 최소한 후보 권고안 상태 [w3cprocess]에 도달했고 널리 구현된 모든 적용 가능한 모듈을 SHOULD 지원해야 한다.
@font-face 규칙
[css-fonts-4]에서 참조하는
[truetype], [opentype], [woff],
및 [woff2] 글꼴 리소스를
MUST 지원해야 한다.
CSS Style Sheets — Prefixed properties [epub-33]에 정의된 모든 접두사 속성을 SHOULD 지원해야 한다.
EPUB 콘텐츠 문서에서 참조하는 스타일 시트를 작성된 대로 SHOULD 적용해야 한다.
읽기 시스템 개발자는 자신의 사용자 에이전트 스타일 시트와 EPUB 출판물에 설정된 스타일링과 어떻게 상호작용하는지를 공개적으로 문서화해야 한다.
읽기 시스템은 EPUB 출판물 스타일링의 일부를 오버라이드할 MAY 수 있다(예: 인체공학적 이유나 사용자 인터페이스상의 이유로). 또한 사용자가 기본 테마 및 스타일 기본 설정(예: 더 접근성 높은 읽기를 위해)을 설정하여 출판물의 원래 디자인을 추가로 변경하도록 허용할 MAY 수 있다.
읽기 시스템은 스크립팅 [epub-34]을 SHOULD 지원해야 한다.
스크립팅에 대한 읽기 시스템 지원은 사용 맥락에 따라 달라진다:
읽기 시스템은 리플로우 가능한 EPUB 콘텐츠 문서에서 컨테이너 제약 스크립팅 [epub-34]을 SHOULD 지원해야 한다.
읽기 시스템은 XHTML 및 SVG 고정 레이아웃 문서 [epub-34]에서 spine 수준 스크립팅 [epub-34]을 SHOULD 지원해야 한다.
읽기 시스템은 콘텐츠가 스크롤 가능한 오버플로로 렌더링되는 리플로우 가능한 EPUB에서 spine 수준 스크립팅을 SHOULD 지원해야 한다. 마찬가지로, 읽기 시스템이 리플로우 가능한 EPUB에서 spine 수준 스크립팅을 지원하는 경우, 사용자가 오버플로 콘텐츠를 스크롤할 수 있는 옵션을 MUST 제공하고, 출판물을 spine 항목에서 spine 항목으로 이어지는 하나의 연속 스크롤로 볼 수 있는 옵션을 SHOULD 제공해야 한다.
읽기 시스템은 다른 맥락에서 스크립팅을 MAY 지원할 수 있지만, 이 명세는 그러한 스크립팅을 다루지 않는다. 그 결과 이러한 맥락에서의 스크립팅 사용은 읽기 시스템 간에 일관되지 않을 수 있다.
읽기 시스템이 스크립팅을 지원하는 경우:
[html]에 따라 스크립트가 포함된 콘텐츠 문서를 상호작용적이고 스크립트 가능한 사용자 에이전트로 렌더링할 MAY 수 있다.
그 origin [html]은 읽기 시스템 내 EPUB 출판물의 각 사용자별 인스턴스마다 MUST 고유해야 한다.
컨테이너 제약 스크립트가 호스트 EPUB 콘텐츠 문서 또는 EPUB 출판물 내 다른 콘텐츠의 [dom]을 수정하도록 MUST NOT 허용해서는 안 된다 그리고 그것이 포함하는 사각형의 크기를 조작하도록 MUST NOT 허용해서는 안 된다 . (참고: 스크립트가 컨테이너 제약이 아니더라도, 읽기 시스템은 수정에 제한을 부과할 수 있다. dom-manipulation 기능을 참조.)
실행 중 스크립트에 제공되는 기능에 추가 제한(예: 네트워킹 제한)을 둘 MAY 수 있다.
navigator 객체 [html]를
B.
epubReadingSystem 객체에 정의된
epubReadingSystem 인터페이스로
MUST 확장해야 한다. 또한 컨테이너 제약 스크립팅
맥락에서 B.3.1.2
기능에 정의된
dom-manipulation 및 layout-change 기능을
MUST 지원해야 한다.
읽기 시스템이 스크립팅을 지원하지 않는 경우, 스크립트가 포함된 콘텐츠 문서의 폴백 [epub-34]에 정의된 대로 스크립트가 포함된 콘텐츠의 폴백을 MUST 처리해야 한다.
읽기 시스템은 쿠키 및 웹 스토리지 [html]를 통해 스크립트가 지속 데이터를 저장하지 못하도록 차단할 MAY 수 있다.
로컬 스토리지 [html]를 허용하는 읽기 시스템은 사용자가 해당 데이터를 검사하거나 삭제할 수 있는 방법을 제공하는 것이 SHOULD 좋다.
읽기 시스템은 [html]에 따른 DOM Event 모델을 SHOULD 따르고, 이러한 이벤트와 관련된 기본 동작을 수행하기 전에 UI 이벤트를 스크립팅 환경에 전달해야 한다.
읽기 시스템 개발자는 스크립트가 탐색과 같은 중요한 기능을 비활성화할 수 없도록 하여, 잠재적으로 악의적인 스크립트가 읽기 시스템에 미칠 수 있는 영향을 제한해야 한다. 그 결과 스크립팅 환경은 어떤 이벤트의 기본 동작도 취소할 수 있어야 하지만, 일부 이벤트는 전달되지 않거나 취소할 수 없을 수 있다.
이 섹션은 비규범적이다.
스크립팅도 지원하는 읽기 시스템 개발자는 읽기 시스템이 스크립트가 포함된 콘텐츠를 실행할 때 발생하는 보안 문제를 인식해야 한다. 읽기 시스템과 브라우저가 사용하는 기본 스크립팅 모델은 동일하므로, 개발자는 웹 맥락에서 마주치는 것과 같은 종류의 문제를 고려해야 한다.
각 읽기 시스템은 특정 문서의 스크립트를 신뢰할 수 있는지 정해야 한다. 모든 스크립트를 신뢰할 수 없으며(잠재적으로 악의적일 수 있음) 공격의 모든 벡터를 검사하고 방어하는 것이 권장되며, 특히 다음을 고려해야 한다:
런타임 환경에 대한 공격(예: 사용자의 하드 드라이브에서 파일 훔치기);
읽기 시스템 자체에 대한 공격(예: 사용자의 책 목록을 훔치거나 예기치 않은 동작을 유발하기);
하나의 EPUB 콘텐츠 문서가 다른 문서를 공격하는 것(예: 다른 문서에서 비롯된 데이터 훔치기);
암호화되지 않은 스크립트가 문서의 암호화된 부분을 공격하는 것(예: 주입된 악성 스크립트가 보호된 콘텐츠를 추출하기);
로컬 네트워크에 대한 공격(예: 방화벽 뒤에 있는 서버에서 데이터 훔치기).
신뢰할 수 없는 스크립트의 가능한 피해를 제한하기 위해, 이 명세는 읽기 시스템이 각 EPUB 출판물에 할당되는 고유한 origin [html]을 설정할 것을 권장한다(4.1.1 루트 디렉터리의 URL 참조). 고유한 origin을 할당하면 spine 수준 스크립트 [epub-34]가 다른 EPUB 출판물로부터 격리되며, 쿠키 [html], 웹 스토리지 [html] 등에 대한 접근을 제한한다.
"origin" 개념에 연결된 웹 API의 예에는 웹 스토리지 [html] 및 IndexedDB [indexeddb]가 포함되며, EPUB 콘텐츠 문서는 스크립팅을 통해 이들과 상호작용할 수 있다. 사용자가 관리되는 라이브러리(자신의 "책장")에 출판물을 추가/삭제할 수 있도록 허용하는 읽기 시스템은 출판물이 제거된 뒤 콘텐츠 라이브러리에 다시 가져와질 때 해당 출판물의 고유 origin을 유지할 수 있다. 반대로, 읽기 시스템은 새로 추가되는 각 출판물마다 새로운 고유 origin을 만들 수도 있다.
또한 이 명세는 컨테이너 제약 스크립트 [epub-34]가 호스트 EPUB 콘텐츠 문서의 DOM을 수정하거나 포함하는 사각형을 조작하지 못하도록 할 것을 권장한다(7.5 스크립팅 참조).
이러한 권장사항을 준수한다고 해서 위에 나열된 가능한 공격으로부터 보호가 보장되는 것은 아니라는 점에 유의한다. 개발자는 자신의 읽기 시스템의 맥락에서 각 잠재적 취약점을 검토해야 한다.
텍스트 음성 변환 재생에 대한 읽기 시스템 지원은 OPTIONAL이다.
읽기 시스템에 오디오 재생 기능이 있는 경우, 접근성을 개선하기 위해 텍스트 음성 변환 재생 기능을 제공할 것을 강력히 권장한다.
텍스트 음성 변환 재생을 포함하는 경우, 읽기 시스템은 미디어 오버레이에 정의된 것과 유사한 재생 경험을 제공하기 위해 다음 기능을 SHOULD 지원해야 한다:
body 요소 안의 요소들을
순차적으로 읽기;
워킹 그룹은 향후 참고 문서에서 텍스트 음성 변환 재생의 콘텐츠 수준 문제에 대한 지침을 제공할 것으로 예상한다. 여기에는 현재 [ruby-tts-req]에서 다루는 것과 같은 언어 및 문자 체계별 문제가 포함된다.
텍스트 음성 변환 재생의 품질을 향상하기 위한 가능한 작성 기술은 [epub-tts-10]에 자세히 설명되어 있지만, 이러한 기술은 현재 널리 지원되지 않거나 전혀 지원되지 않는다. 이러한 기술 또는 대체 기술이 향후 지원을 얻게 되면 이 명세에 포함될 것이다.
사전 녹음된 오디오를 렌더링할 수 있는 기능이 있는 읽기 시스템은 미디어 오버레이 [epub-34]를 SHOULD 지원해야 한다.
읽기 시스템이 미디어 오버레이를 지원하지 않는 경우, 다음 둘 모두를 MUST 무시해야 한다:
item
요소 [epub-34]의 media-overlay
속성; 그리고
media-type 속성 값이
application/smil+xml과 같은 item 요소.
읽기
시스템이 패키지 문서를 로드할 때, manifest
item
요소 [epub-34]의 media-overlay 속성을 참조하여
EPUB 콘텐츠 문서에 해당하는 미디어
오버레이를 찾아야 MUST 한다.
읽기 시스템은 XHTML 콘텐츠 문서의 재생을 MUST 지원해야 하며, SVG 콘텐츠 문서를 MAY 지원할 수 있다.
재생은 원하는 EPUB 콘텐츠 문서 시작 지점에 해당하는 미디어 오버레이 요소에서 MUST 시작해야 한다. EPUB 콘텐츠 문서의 시작이 미디어 오버레이의 시작 부분에 있는 요소 또는 중간에 있는 요소에 해당할 수 있다는 점에 유의한다. 미디어 오버레이 문서의 재생이 끝나면, 읽기 시스템은 다음 EPUB 콘텐츠 문서(패키지 문서의 spine에 지정된 대로)를 로드하고, 해당되는 미디어 오버레이 문서가 제공되어 있다면 그것도 로드하는 것이 SHOULD 좋다.
읽기 시스템은
body
요소 [epub-34]의 직계 자식을 순서대로
MUST 렌더링해야 한다.
seq
요소 [epub-34]의 자식은 순서대로
MUST 렌더링되어야 하며,
마지막 자식의 재생이 끝나면 재생이 완료된다. 읽기 시스템은
par
요소 [epub-34]의 자식을 병렬로(각각 동시에 시작하여)
MUST 렌더링해야 하며,
모든 자식의 재생이 끝나면 재생이 완료된다. 미디어 오버레이 문서의 읽기 시스템 재생은
body 요소의 마지막 자식이 재생을 마치면 완료된다.
미디어
오버레이
audio
요소 [EPUB-34]가 제시되면, 읽기 시스템은
src 속성이 참조하는 오디오 리소스를
clipBegin 속성이 주는 클립 오프셋 시간에서 시작하고
clipEnd 속성이 주는 클립 오프셋 시간에서
끝나도록 MUST 재생해야 한다 [epub-34].
또한:
clipBegin 속성이 설정되지 않은 경우, 읽기 시스템은
"0" 값을 MUST 가정해야 한다.
clipEnd 속성이 설정되지 않은 경우, 읽기 시스템은 그 값을
실제 미디어의 전체 지속 시간으로
MUST 가정해야 한다.
clipEnd 값이 실제 미디어의 전체 지속 시간을 초과하는 경우,
읽기 시스템은 그 값을 실제
미디어의 전체 지속 시간으로 MUST 가정해야 한다.
사용자가 제어할 수 있는 오디오 재생 옵션에는 사용자가 피치를 왜곡하지 않고 재생 속도를 변경할 수 있는 시간축 수정이 SHOULD 포함되어야 한다. 권장 범위는 절반 속도에서 두 배 속도까지이다.
미디어
오버레이
text
요소에
audio
[epub-34] 형제 요소가 없고 대상 EPUB 콘텐츠 문서 안의 텍스트를 참조하는 경우,
텍스트 음성 변환(TTS)
재생이 가능한 읽기 시스템은 참조된 텍스트를 TTS로 렌더링하는 것이 SHOULD 좋다.
읽기 시스템은 대상 EPUB 콘텐츠 문서에 제공된 음성 관련 정보를 사용하여 미디어 오버레이 렌더링의 일부로 오디오 스트림을 재생하는 것이 SHOULD 좋다.
EPUB 3 Text-to-Speech Support [epub-tts-10]에서 EPUB 출판물에서 TTS 기술을 지원하는 방법에 대한 자세한 정보를 참조한다.
미디어 오버레이 text 요소의 수명은 연결된 음성 합성의 렌더링 시간에 해당한다.
따라서 text 요소의 암묵적 지속 시간(그리고 추론상 부모 par 요소의 지속 시간)은
Text-to-Speech 엔진의 실행에 의해 결정되며, 작성 시점에는 알 수 없다(말하기 속도,
멈춤 및 기타 운율 매개변수와 같은 요인이 오디오 출력에 영향을 준다). 이는 또한
읽기 시스템이 패키지 문서에 설정된 duration 속성 값을 사용할 때
이를 근사값으로 취급해야 함을 의미한다.
미디어 오버레이
text
요소 [epub-34]가 제시되고 그 src
속성이 EPUB 콘텐츠 문서의 특정
부분을 참조하는 URL-fragment string을 포함하는 경우,
읽기 시스템은 참조된 부분이
뷰포트에서 보이도록 보장하는 것이
SHOULD 좋다. [html] 요소
ID 참조 및 SVG
Fragment
Identifiers [svg] 외에도, 읽기 시스템은 다른
fragment identifier
scheme을 MAY 지원할 수 있다.
미디어 오버레이 재생 중, 뷰포트가 있는 읽기 시스템은
메타데이터 속성 active-class 및 playback-active-class
[epub-34]가 지정하는 클래스 이름이 명시된 경우,
EPUB 콘텐츠 문서의 적절한 요소에 이를
추가하는 것이 SHOULD 좋다.
반대로 재생 상태가 변경되면, 스타일 정보 연결
[epub-34]에 설명된 대로
클래스 이름을 SHOULD 제거해야 한다.
active-class 및 playback-active-class 메타데이터 속성은
OPTIONAL이며, 생략된 경우 읽기 시스템 동작은
구현별 사항이다.
fragment identifier [epub-34]가 요소를 참조하지 않을 때의 읽기 시스템 동작도 구현별 사항이다.
읽기 시스템은 미디어 오버레이 요소의
epub:type
속성이 제공하는 의미 정보를 사용하여 사용자가 콘텐츠를 건너뛸 수 있는 옵션을 제공하는 것이
SHOULD 좋다.
콘텐츠 건너뛰기가 활성화된 경우, 읽기 시스템은
epub:type 속성에 건너뛸 수 있는 구조와 일치하는 의미가 포함된
모든 par 및 seq 요소의 재생을
MUST
억제해야 한다.
미디어 오버레이를 재생하는 동안, 읽기 시스템은
epub:type
속성 [epub-34]에 escapable structures
목록의 값이 있는지에 의해 결정되는 이탈 가능한
구조 [epub-34]에서 사용자가 나갈("escape") 수 있는 옵션을
SHOULD 제공해야 한다.
사용자가 이탈 가능한 구조에서 나가기로 선택하면,
읽기 시스템은 해당 구조 다음의 순차 요소부터 재생을
MUST 계속해야 한다.
읽기 시스템은 구조적 의미 [epub-34]를 EPUB 콘텐츠 문서에서 MAY 지원할 수 있다.
epub:type
속성을 처리할 때, 읽기 시스템은:
각 값에 대해 확장 URL 얻기를 MAY 수행할 수 있다.
epub:type의
정의 [epub-34]에서 허용되지 않는 사용 방식의 요소에
해당 용어가 사용된 경우 이를 MUST 무시해야 한다.
다른 어휘의 용어에 동작을 MAY 연결할 수 있다.
읽기 시스템은 축약 URL [epub-34] 처리를 위한 어휘 연결 메커니즘을 MAY 지원할 수 있다.
이 섹션은 축약 URL에서 확장 URL을 얻기 위한 알고리즘을 정의한다. 이는 [epub-34] 어휘 연결 메커니즘을 지원하는 읽기 시스템에만 적용된다.
[epub-34] 어휘 연결 메커니즘을 지원하지 않는 읽기 시스템은 축약 URL을 일반 문자열 값 [infra]으로 MAY 처리할 수 있다. 이러한 값을 URL로 확장하거나 그 존재를 기반으로 읽기 시스템 동작을 추가할 필요는 없다.
이 알고리즘은 [infra]에 정의된 용어와 데이터 유형을 사용하여 과정을 설명하며, 성공하면 확장 URL이 반환된 문자열 값이 결과가 된다. 유효하지 않은 속성의 경우 null 값이 반환된다.
이 알고리즘은 다음 인수를 취한다:
확장 URL을 얻으려면, 다음 단계를 적용한다:
baseURL, expandedURL, prefix 및 reference를 빈 문자열로 둔다.
이 알고리즘에서:
prefix 속성에 할당되었거나, 기본 어휘에 해당하거나,
예약된 prefix에서 올 수 있다.
prefix 및 reference 값을 다음과 같이 얻는다:
value에 콜론(U+003A)이 포함되어 있지 않으면, reference를 value로 설정한다.
축약 URL 값에 콜론이 없으면 prefix가 없는 것이다. 이 경우 값은 알고리즘의 다음 단계에 설명된 대로 기본 어휘에서 가져온다.
그렇지 않고 value가 콜론으로 시작하면, 그 값은 유효하지 않다. null을 반환한다.
값의 시작 부분에 있는 콜론은 prefix가 설정되지 않았음을 나타내므로 유효하지 않다.
그렇지 않으면, 첫 번째 콜론을 기준으로 value를 나누고 콜론 앞의 문자열을 prefix로, 콜론 뒤의 문자열을 reference로 설정한다.
reference가 축약 URL 정의 [epub-34]에서 요구하는 path-relative-scheme-less-URL string으로 유효하지 않으면, 값은 유효하지 않다. null을 반환한다.
path-relative-scheme-less-URL string 정의에는 reference가 prefix를 가지든 가지지 않든 적용되는 여러 제한이 있다.
예를 들어, reference는
콜론이 뒤따르는 URL-scheme string으로 시작할 수 없다. 이 제한은
다음 값이 두 번째 콜론이 scheme을 나타낼 수 있으므로 유효한 property 값이
아니라는 뜻이다: foo:bar:baz/qux.
또한 어떤 문자가 퍼센트 인코딩되어야 하는지에 대한 제한도 있다.
baseURL 값을 다음과 같이 얻는다:
prefix가 빈 문자열인 경우:
epub:type
[epub-34]이면, baseURL을
http://idpf.org/epub/vocab/structure/#로 설정한다.
meta
요소 [epub-34]이고
attr이 scheme이면, 속성 값은 유효하지 않다. null을
반환한다.
meta
요소 [epub-34]이면,
baseURL을
http://idpf.org/epub/vocab/package/meta/#로 설정한다.
link
요소 [epub-34]이면,
baseURL을
http://idpf.org/epub/vocab/package/link/#로 설정한다.
item
요소 [epub-34]이면,
baseURL을
http://idpf.org/epub/vocab/package/item/#로 설정한다.
itemref
요소
[epub-34]이면, baseURL을
http://idpf.org/epub/vocab/package/itemref/#로 설정한다.
그렇지 않으면:
doc의 문서 요소에 prefix 속성이 선언되어 있고,
그 속성이 prefix와 일치하는 prefix를 포함하는 경우,
baseURL을 해당 prefix 선언과 연결된 URL로 설정한다.
그렇지 않고 prefix가 doc에 대한 예약된 prefix [epub-34]와 일치하는 경우, baseURL을 해당 예약된 prefix와 연결된 URL로 설정한다.
축약 URL에 prefix가 있는 경우, 해당 base URL을 확인할 첫 번째 위치는
문서 요소의 prefix 속성 선언이다.
저자가 해당 prefix에 URL을 할당하지 않은 경우, 다음 단계는 prefix가 예약된 prefix 중 하나와 일치하는지 확인하는 것이다.
저자가 할당한 prefix URL은 예약된 prefix URL을 오버라이드한다는 점에 유의한다.
baseURL이 빈 문자열이면, 속성 값은 유효하지 않다. null을 반환한다.
이 처리 단계의 끝에서 base URL이 비어 있다면, prefix가 매핑되지도 예약되지도 않았거나, 처리 중인 요소 또는 속성이 [epub-34]에 정의된 축약 URL 데이터 유형을 허용하지 않는다는 뜻이다.
base URL이 없으면 확장 URL을 생성할 수 없으므로, 해당 값은 유효하지 않다.
expandedURL이 유효한 URL 문자열이 아니면, 값은 유효하지 않다. null을 반환한다.
그렇지 않으면 expandedURL을 반환한다.
확장된 값을 얻을 수는 있지만, 그것이 반드시 유효한 URL이라는 뜻은 아니다. 이는 잘못된 base URL이 prefix에 할당된 경우에만 발생할 가능성이 높다.
읽기 시스템은
패키지 문서의 version 속성 [epub-34]이
"3.0"보다 작은 EPUB 출판물을 처리하려고
MUST 시도해야 한다.
이전 버전 번호를 가진 EPUB 출판물은 각 해당 명세에 따라 처리되지 않으면 항상 의도한 대로 정확하게 렌더링되지는 않는다. 읽기 시스템은 그러한 명세에 정의된 대로 이러한 EPUB 출판물을 지원하는 것이 SHOULD 좋다.
읽기 시스템은
패키지 문서의 version 속성
[epub-34]이
"3.0"보다 큰 EPUB 출판물을 처리하려고
SHOULD
시도해야 한다.
이 섹션은 비규범적이다.
이 명세의 주된 초점은 EPUB 출판물을 처리하고 렌더링하는 방법에 있지만, 모든 읽기 시스템이 제공해야 하는 특정 사용자 인터페이스를 의무화하지는 않는다. 이것이 모든 읽기 시스템 개발자가 자신의 애플리케이션에서 인지하거나 피하려고 노력해야 하는 공통적인 접근성 문제가 없다는 뜻은 아니다.
W3C의 User Agent Accessibility Guidelines [uaag20]는 많은 브라우저 접근성 문제가 EPUB 전용 사용자 에이전트에서도 유사하게 나타나므로, 개발자가 읽기 시스템을 개선하는 데 적용할 수 있는 유용한 관행을 많이 제공한다.
다음 목록은 접근성 부족이 사용자의 읽기 경험에 영향을 미치는 몇 가지 추가적인 EPUB 전용 영역을 설명한다:
DAISY Consortium은 이러한 문제와 더 많은 문제의 평가를 돕기 위해 접근성 테스트 스위트를 유지한다.
이 섹션은 비규범적이다.
EPUB 출판물의 특수성은 그 구조에 있다. EPUB 형식은 HTML, CSS, SVG 및 기타 리소스를 포함한 구조화되고 의미론적으로 강화된 웹 콘텐츠 — 를 단일 파일 컨테이너로 배포하기 위해 표현, 패키징 및 인코딩하는 수단을 제공한다.
읽기 시스템의 경우, 이는 보안 및 개인정보 보호 문제가 주로 해당 형식들의 기능에 기반하며, 일반적으로 웹 콘텐츠가 제시하는 위협을 밀접하게 반영한다는 뜻이다.
읽기 시스템 개발자는 자신의 애플리케이션의 보안과 개인정보 보호를 보장하는 동시에, 그 안에서 렌더링되는 콘텐츠로부터 사용자에 대한 위협을 제한하도록 돕는 이중 책임도 가진다. 이 섹션의 나머지는 개발자가 이러한 위험을 인식하고 완화하는 데 도움을 주기 위해 EPUB 3의 위험 모델을 살펴본다.
EPUB 출판물의 작성과 관련된 위험은 [epub-34]의 보안 및 개인정보 보호 섹션을 참조한다.
이 섹션은 비규범적이다.
사용자에게 가장 큰 위협은 그들이 읽는 콘텐츠 [epub-34]에서 비롯되며, 이러한 공격에 대한 첫 번째 방어선은 사용자가 사용하는 읽기 시스템이다. 사용자는 읽기 시스템이 악성 콘텐츠에 대한 보호 장치로 동작하기를 기대하며, EPUB 출판물이 웹 사이트와 같은 보안 위험에 취약하다는 사실을 종종 알지 못한다.
그러나 읽기 시스템은 보안 및 개인정보 보호를 제공하는 데 의존되지만, 정보 처리 방식에 따라 사용자에게 의도치 않은 위협을 줄 수도 있다. 예를 들어 경험을 최적화하기 위해 사용자 정보를 추적하는 것은 흔히 필요한 일이지만, 사용자 허가 없이 수행되면 읽기 시스템은 법적 개인정보 보호 요구사항을 위반할 수 있다.
이 섹션은 읽기 시스템 개발자가 고려해야 하는 몇 가지 핵심 위협을 개략적으로 설명하며, 자세한 내용과 권장사항은 다음 섹션들에 제공된다.
악성 스크립트는 읽기 시스템에 대한 여러 공격 벡터를 제시한다. 예를 들어 로컬 스토리지가 안전하지 않으면 사용자의 데이터를 침해하려고 시도할 수 있다. 네트워크 접근이 제공되면 사용자 데이터의 무단 수집을 시도할 수 있다.
이러한 문제와 이를 완화하는 방법에 대한 더 자세한 논의는 7.5.3 보안 고려사항에 제공된다.
EPUB 출판물은 읽기 시스템 또는 그 시스템이 실행되는 운영 체제의 보안 결함을 악용하도록 설계된 리소스를 포함할 수 있다. 공격자는 심볼릭 링크나 파일 별칭과 같은 파일 간접 참조 기법을 사용하여 원격 리소스에 접근하려고 시도할 수도 있다.
EPUB 출판물에 서명하는 표준 방법이 없다는 것은, 작성과 장치에서의 로드 사이에 콘텐츠가 변조되었는지 읽기 시스템이 항상 확인할 수는 없음을 의미한다.
원격 리소스는 신뢰할 수 없는 출처에서 로드된 어떤 EPUB 출판물과도 같은 위험을 제시한다. EPUB 출판물의 출판사가 신뢰할 수 있더라도, 원격 리소스는 침해될 수 있다.
원격 리소스에 대한 호출은 사용자에 대한 정보를 추적하는 데에도 사용될 수 있다(예: 서버 로그를 통해). HTTP 요청을 통해 노출되는 정보를 리소스를 얻는 데 필수적인 것만으로 제한하는 것이 권장된다.
EPUB의 origin은 각 읽기
시스템 구현에 특화되어 있으며 그 구현 밖에서는 알려져 있지 않다. 따라서 원격 리소스가
신뢰할 수 있는 웹 서버에서 호스팅되는 경우에도, 그 서버는
CORS, Content-Security-Policy,
또는 X-Frame-Options의 헤더와 같이
허용 가능한 origin을 지정해야 하는 보안 기능을 사실상 사용할 수 없다.
원격 리소스와 마찬가지로, 외부 링크는 부주의한 사용자를 속여 읽기 시스템 또는 운영 체제를 악용하도록 설계된 웹상의 악성 리소스를 열게 하는 데 사용될 수 있다.
마찬가지로, 링크를 따라 이동할 때 사용자에 대해 식별 가능할 수 있는 정보를 노출하지 않는 것도 권장된다(예: 추적 식별자를 사용하지 않거나 사용자의 환경에 대한 불필요한 정보를 노출하지 않기).
읽기 경험 안의 사용자 생성 콘텐츠, 예를 들어 텍스트 영역이나 기타 상호작용 컴포넌트를 통한 콘텐츠는, 적절히 보호되지 않으면 읽기 시스템 보안이나 사용자 개인정보 보호에 위협이 될 수 있다. 스크립팅 보안에 대한 자세한 내용은 7.5.3 보안 고려사항에 제공된다.
사용자와 그 읽기 습관에 대한 정보를 허가 없이 수집하는 것은, 그 정보가 내부 사용만을 목적으로 하더라도 사용자의 개인정보를 침해할 수 있다.
읽기 습관이나 출판물의 메타데이터(예: 접근성 선호)를 통해 사용자를 프로파일링하려는 시도는 사용자에게 의도치 않은 피해를 노출할 수 있다.
또한 [xml] 및
[zip] 파일에 적용되는 보안 고려사항은 각각
패키지 문서와 Open
Container Format에도 적용된다. 자세한 내용은
application/oebps-package+xml
및 application/epub+zip 형식에 대한
미디어 유형 등록의 "Security
Consideration" 섹션을 참조한다.
읽기 시스템 개발자가 개인정보 보호를 위해 취할 수 있는 가장 강력한 조치는 사용자 및/또는 그 읽기 행동에 대해 수집하고 사용하려는 데이터를 명시하고, 이를 얻기 위해 사용자 동의를 구하는 것이다. 또한 이 정보에 대한 개인화와 제어를 허용하는 것이 SHOULD 좋다.
읽기 시스템이 사용자가 지속 데이터를 저장할 수 있도록 허용하는 경우, 특히 개인 식별 정보라면, 해당 데이터를 민감한 것으로 취급하고 제3자가 접근할 수 없게 하는 것이 SHOULD 좋다.
일부 사용자 데이터의 수집은 EPUB 출판물의 판매, 전달 및 운영에 필요한 경우가 많다는 점은 이해된다. 특히 EPUB 출판물의 판매와 읽기 방법이 연결된 플랫폼에서 그렇다. 이러한 경우, 읽기 시스템은 수집되는 데이터, 그 사용 방식, 그리고 사용자가 거부할 수 있는 방법을 식별하는 것이 SHOULD 좋다(소매업자는 사용자가 웹 사이트에서 계정을 만들 때와 같은 다른 수단으로 사용자에게 알리도록 선택할 수 있다). 수집된 모든 데이터의 익명화는 사용자와 읽기 시스템의 개인정보 보호 및 보안을 위해 RECOMMENDED된다.
사용자 데이터가 일부 읽기 시스템 기능에 필요하거나 도움이 될 수도 있다는 점도 이해된다. 이러한 경우에도 익명화는 RECOMMENDED된다. 읽기 시스템은 필요한 데이터가 무엇인지, 그것이 무엇에 사용되는지 사용자에게 알리고, 거부할 방법을 제공하는 것이 SHOULD 좋다.
콘텐츠 프로세서 — 배포, 표시 또는 판매를 위해 EPUB 콘텐츠의 수집 처리를 담당하는 엔터티로 정의됨 — 역시 수집 처리 과정의 잠재적 위험을 인식해야 한다. 콘텐츠 프로세서는 일반적으로 발생하는 검증 단계에 더해, 수집 처리 시 콘텐츠에 악성 콘텐츠가 있는지 확인하는 것이 권장된다. 여기에는 바이러스 검사 실행, 외부 링크 및 원격 리소스 검증, 기타 예방 조치가 포함될 수 있다.
읽기 시스템은 통합 서점에서 온 것을 포함하여 새로운 모든 출처의 콘텐츠를 안전하지 않은 것으로 SHOULD 취급해야 한다(예: 해당 출처에 처음 접근할 때 스크립팅 및 네트워크 접근 허용 여부를 사용자에게 묻기). 읽기 시스템이 사용자가 자신의 콘텐츠를 로드할 수 있도록 허용하는 경우(예: "sideloading" 과정을 통해), 각 인스턴스는 안전하지 않은 것으로 SHOULD 취급되어야 한다.
XML 문서를 처리할 때, 읽기 시스템은 DOCTYPE, ENTITY 및 NOTATION 선언 [xml] 안의 외부 식별자를 해석하지 않는 것이 SHOULD NOT 좋다. 읽기 시스템은 또한 예를 들어 "Billion laughs attacks" 또는 "XML external entity attacks"로도 알려진 DoS 공격과 같은 내부 또는 외부 XML 엔터티와 관련된 보안 위험도 SHOULD 고려해야 한다.
외부 링크, 네트워크 접근 및 스크립팅에 대한 추가 보안 권장사항은 각각 3.10 외부 링크, 3.9 네트워크 접근, 및 7.5.3 보안 고려사항에서 확인할 수 있다.
읽기 시스템은 레거시 기능을 제외하고 오래된 기능 [epub-34]을 MAY 지원할 수 있다.
레거시 기능은 EPUB 2 읽기 시스템과의 호환성을 위해서만 허용되며, EPUB 3 읽기 시스템은 이를 MUST 무시해야 한다.
읽기 시스템은 사용 중단된 작성 기능 [epub-34]을 MAY 지원할 수 있다.
또한, 다음 읽기 시스템 기능은 이제 사용 중단되었다:
epubReadingSystem 객체개발자는 사용 중단된 기능을 포함한 콘텐츠를 마주칠 가능성이 낮다는 점을 새로 지원을 추가하기 전에 고려해야 한다.
읽기 시스템은 EPUB 출판물의 핵심 렌더링 엔진으로 동작하며 [dom] 명세에 기반한 스크립팅 환경을 제공한다. 따라서 이 인터페이스 정의가 읽기 시스템의 구현을 위해 [webidl] 표기법을 사용하더라도, 웹 브라우저는 일반적으로 이러한 객체를 구현할 필요가 없다.
이 명세는 Navigator 객체 [html]를
다음과 같이 확장한다.
WebIDL[Exposed=(Window)]
interface EpubReadingSystem {
boolean hasFeature(DOMString feature, optional DOMString version);
};
이 명세는 WorkerNavigator
객체 [html]에 대한 epubReadingSystem 속성 확장을
정의하지 않는다. 따라서 읽기 시스템은 Workers의 스크립팅 맥락에서
epubReadingSystem 객체를 노출할 필요가 없으므로, 그 존재에 의존할 수 없다.
Navigator.epubReadingSystem
객체는 스크립트가 포함된 콘텐츠 문서가 사용자의 읽기
시스템에 대한 정보를 질의할 수 있는 인터페이스를 제공한다.
읽기 시스템은 중첩된 컨테이너 제약 스크립팅
맥락 [epub-34]을 포함하여, 로드된 모든 스크립트가 포함된 콘텐츠 문서의
navigator 객체에 epubReadingSystem 객체를
MUST 노출해야 한다. 읽기 시스템은
epubReadingSystem 객체가 DOMContentLoaded
이벤트가 트리거될 때 [html]보다 늦지 않게 사용할 수 있도록
MUST 보장해야 한다.
읽기 시스템 구현은 기술적 실행 가능성 때문에 스크립트가 포함된 콘텐츠 문서에서
epubReadingSystem 객체의 복제된 인스턴스를 만들 수 있다. 이러한 경우,
읽기 시스템은 해당 객체의 속성 및 메서드 값에 반영되는 객체의 상태를
모든 복사된 인스턴스 전반에서 일관되게 유지해야 한다.
hasFeature
메서드는 읽기 시스템이 지정된 기능을 지원하는지 여부를 나타낸다. 이름이 지정된 기능과 함께
버전이 제공되지 않으면, 결과는 해당 기능의 어떤 버전이라도 지원되는지 여부를 나타낸다.
읽기 시스템이 hasFeature 메서드에서 질의된 기능을 지원하는 경우,
지원 여부를 나타내는 boolean 값을 MUST 반환해야 한다.
기능이 인식되지 않는 경우, 읽기 시스템은 undefined를
MUST 반환해야 한다.
hasFeature 호출에 지정된 feature 매개변수는 읽기 시스템이
true 값을 반환하기 위해 지원되는 기능과 [infra]에
따라 동일해야
MUST 한다.
지원되어야 하는 기능 목록은 B.3.1.2 기능을 참조한다.
version 매개변수는 시간이 지나며 호환되지 않는 방식으로 변경될 수 있는
사용자 정의 기능을 질의할 수 있게 한다. 반환 값은 지정된 버전의 기능에 대한
지원 여부만 나타낸다. version 매개변수가 설정된 경우, 읽기 시스템이
true 값을 반환하려면 그 값이 읽기 시스템이 지원하는 버전 번호와
[infra]에 따라
동일해야
MUST 한다.
이 명세에서 정의된 기능은 버전이 없다.
읽기 시스템이 이 명세에서 정의된 기능을 지원하는 경우, 제공된 모든 version
매개변수를 MUST 무시하고 true 값을 반환해야 한다.
다음
표는 epubReadingSystem 객체를 지원하는 읽기 시스템이
MUST 인식해야 하는 기능 집합을 나열한다.
| 이름 | 설명 |
|---|---|
dom-manipulation
|
스크립트가 문서의 DOM에 구조적 변경을 수행할 수 있다(spine 수준 스크립팅 [epub-34]에만 적용). |
layout-changes
|
스크립트가 콘텐츠 레이아웃에 영향을 주는 속성과 CSS 스타일을 수정할 수 있다 (spine 수준 스크립팅 [epub-34]에만 적용). |
touch-events
|
장치가 터치 이벤트를 지원하고, 읽기 시스템이 터치 이벤트를 콘텐츠에 전달한다. |
mouse-events
|
장치가 마우스 이벤트를 지원하고, 읽기 시스템이 마우스 이벤트를 콘텐츠에 전달한다. |
keyboard-events
|
장치가 키보드 이벤트를 지원하고, 읽기 시스템이 키보드 이벤트를 콘텐츠에 전달한다. |
spine-scripting
|
읽기 시스템이 spine 수준 스크립팅 [epub-34]을 지원하는지 나타낸다 (예: 컨테이너 제약 스크립트 [epub-34]가 최상위 콘텐츠 문서의 스크립팅 지원에 의존하는 동작이 시도 전에 성공할 가능성이 있는지 판단할 수 있도록). |
읽기 시스템 개발자는 추가 기능을 MAY 추가할 수 있지만, 이 명세의 향후 버전은 그러한 사용자 정의 추가 사항과 충돌하거나 호환되지 않을 수 있는 방식으로 이 목록에 추가할 수 있다.
EpubReadingSystem 인터페이스
§B.1
hasFeature 메서드
for EpubReadingSystem
§B.3.1.1
Navigator.epubReadingSystem 속성
for Navigator
§B.2
audio
요소
body
요소
dc:creator 요소
dc:identifier 요소
dc:language 요소
dc:title 요소
epub:type 속성
item
요소
itemref
요소
link
요소
meta
요소
par
요소
rootfile 요소
seq
요소
spine
요소
text
요소
form
요소
object
type
string용)
boolean
type
DOMString interface
[Exposed] 확장 속성
[LegacyUnforgeable] 확장 속성
[SameObject] 확장 속성
이 섹션은 비규범적이다.
이 변경 로그는 EPUB 3.3 이후의 실질적 변경 사항, 즉 EPUB 읽기 시스템의 적합성에 영향을 줄 수 있는 변경 사항만 식별한다는 점에 유의한다.
처리된 모든 이슈 목록은 워킹 그룹의 이슈 트래커를 참조한다.
hasFeature의 feature 및 version 매개변수가
일치 여부 판단에서 대소문자를 구분한다는 점을 명확히 했다. 이슈
2966 참조.
rendition:align-x-center가 이제 사용 중단된 기능으로 표시되었으므로
이에 대한 처리를 제거했다. 이슈
2847 참조.rendition:align-x-center,
rendition:flow, rendition:orientation 및
rendition:spread 속성과 그 오버라이드가 이제 오래된 기능으로 표시되었으므로
이에 대한 처리를 제거했다. 이슈
2841 참조.
이 섹션은 비규범적이다.
Publishing Maintenance Working Group은 우리가 그 과정에서 잃은 주목할 만한 기여자와 친구들에게 특별한 감사를 표하고자 한다. 특히 EPUB, EPUB 3만이 아니라 EPUB 전체는 Garth Conboy의 비전, 지식, 그리고 비범할 정도의 선한 성품 없이는 오늘날의 모습이 될 수 없었을 것이다. 마찬가지로 Ben Schroeter는 EPUB이 보편적으로 접근 가능한 형식으로서의 잠재력에 도달하도록 돕기 위해 헌신적으로 일한 인물로 언제나 기억될 것이다. 우리는 그들에게 영원히 빚을 지고 있다.
Publishing Maintenance Working Group의 다음 구성원들이 이 명세의 개발에 기여했다:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: