다음도 참조하십시오 번역본.
Copyright © 1999-2024 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 3 읽기 시스템, 즉 EPUB 출판물을 렌더링하는 사용자 에이전트에 대한 적합성 요구사항을 정의합니다.
이 섹션은 이 문서가 발행된 시점의 상태를 설명합니다. 현재 W3C 출판물 목록과 이 기술 보고서의 최신 개정판은 https://www.w3.org/TR/의 W3C 기술 보고서 색인에서 확인할 수 있습니다.
이 문서는 Publishing Maintenance Working Group이 권고안 트랙을 사용하여 권고안으로 발행했습니다.
W3C는 이 명세를 웹의 표준으로 널리 배포할 것을 권고합니다.
W3C 권고안은 광범위한 합의 형성 후 W3C와 그 회원이 승인하고, 작업 그룹 구성원이 구현에 대해 로열티 없는 라이선스 약속을 제공한 명세입니다. 이 권고안의 향후 업데이트에는 새 기능이 포함될 수 있습니다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹에서 작성했습니다. W3C는 이 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지 관리합니다. 해당 페이지에는 특허를 공개하기 위한 지침도 포함되어 있습니다. 개인이 필수 청구항을 포함한다고 믿는 특허에 대해 실제로 알고 있는 경우, W3C 특허 정책 제6절에 따라 해당 정보를 공개해야 합니다.
이 문서는 2023년 11월 03일 W3C 프로세스 문서의 적용을 받습니다.
이 섹션은 비규범입니다.
EPUB 3 표준은 두 가지 별개의 관심사로 나뉩니다. EPUB 출판물의 저작은 핵심 명세 [epub-33]에서 정의하며, 이 명세는 EPUB 읽기 시스템에서 이들을 렌더링하기 위한 요구사항을 자세히 설명합니다.
EPUB 읽기 시스템은 다양한 형태를 취할 수 있습니다. 예를 들어, 사용자에게 콘텐츠를 렌더링하기 위한 시각적 표시 영역이 있을 수도 있고, 콘텐츠의 오디오 재생만 제공할 수도 있습니다. 따라서 모든 읽기 시스템에 적용되는 단일 규칙 집합은 없습니다. 대신 이 명세는 읽기 시스템의 기능과 지원하는 기능을 기준으로 렌더링 요구사항을 세분화합니다.
또한 이 명세는 개발자가 고유한 사용자 인터페이스를 만들 수 있도록 매우 큰 유연성을 허용하며, 메타데이터 처리와 같은 사항에 대한 요구사항은 이러한 유연성을 허용하기 위해 의도적으로 최소화되어 있습니다.
따라서 이 명세가 읽기 시스템에 대한 공식 요구사항을 식별하더라도, 이 문서를 독립적으로 이해하는 것은 불가능합니다. 개발자는 사용 가능한 전체 정보 범위를 이해하기 위해 EPUB 출판물의 전체 콘텐츠 구조에도 익숙해져야 합니다.
적합한 읽기 시스템은 반드시 하나의 전용 프로그램이나 장치일 필요는 없으며, 분산 시스템으로 존재할 수도 있습니다.
이 명세는 EPUB 3.3에서 정의한 용어 [epub-33]를 사용합니다.
또한 다음 용어를 정의합니다:
뷰포트 내에서 EPUB 콘텐츠 문서의 표시에 할당된 영역. 콘텐츠 표시 영역은 EPUB 읽기 시스템이 뷰포트에 삽입할 수 있는 모든 테두리, 여백, 머리글, 바닥글 또는 기타 장식을 제외합니다.
합성 스프레드의 경우, 뷰포트는 두 개의 콘텐츠 표시 영역을 포함합니다.
한 섹션에서 용어의 첫 번째 인스턴스만 해당 정의로 연결됩니다.
비규범으로 표시된 섹션뿐만 아니라 이 명세의 모든 저작 지침, 다이어그램, 예제 및 참고는 비규범입니다. 이 명세의 그 밖의 모든 것은 규범입니다.
이 문서의 핵심 단어 MAY, MUST, MUST NOT, OPTIONAL, RECOMMENDED, SHOULD 및 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-33]이 포함된 EPUB 출판물이
시스템에 들어올 수 없는 경우), 읽기 시스템 전체는 여전히 적합한 것으로 간주됩니다.
권장 기능과 선택 기능을 지원할 때, 읽기 시스템은 각 섹션에서 정의한 모든 규범 요구사항을 MUST 충족해야 합니다.
읽기 시스템 개발자가 권장 기능 또는 선택 기능을 지원하지 않기로 선택하더라도, 그것이 항상 해당 섹션의 규범 요구사항이 전혀 적용되지 않는다는 의미는 아닙니다. 어떤 경우에는 기능을 구현하지 않을 때의 대체 요구사항이 있을 수 있습니다(예: 스크립팅이 지원되지 않을 때 폴백을 처리하는 것). 읽기 시스템은 기능을 지원하지 않을 때 이러한 대체 요구사항을 MUST 충족해야 합니다.
EPUB 출판물에는 이 명세에서 요구하지 않는 정보가 자주 포함됩니다(예: 패키지 문서 메타데이터). 읽기 시스템은 이 추가 정보를 어떤 목적(예: 사용자 인터페이스 개선)으로든 사용할 수 있습니다.
읽기 시스템은 EPUB 출판물이나 그 안의 리소스가 콘텐츠 저작 또는 처리 요구사항을 위반하는 경우 이를 로드할 필요가 없습니다.
이 섹션은 비규범입니다.
읽기 시스템은 EPUB 출판물을 처리하고 렌더링하는 동안 발생한 오류를 보고할 필요는 없지만(예: 고정 레이아웃 문서의 치수가 추론된 경우), 이 정보에 접근하는 수단을 제공하는 것이 강력히 권장됩니다. 이에 비견할 만한 예는 웹 브라우저가 HTML 페이지와 애플리케이션을 디버깅하기 위해 제공하는 개발자 도구입니다.
예를 들어, EPUB 작성자는 이러한 처리 정보에 접근할 수 있으면 큰 이점을 얻을 수 있습니다 (예: EPUB 출판물을 효율적으로 디버깅하기 위해). 디버깅에 최대한 유용하게 하려면, 읽기 시스템이 직접 만난 문제뿐만 아니라 사용하는 애플리케이션이 보고한 문제도 함께 보고하는 것이 권장됩니다(예: 콘텐츠를 렌더링하는 데 사용되는 브라우저 코어에서 보고된 HTML, CSS 및 JavaScript 오류나 EPUBCheck가 보고한 검증 문제).
오류 보고가 일반적인 사용자 읽기 경험에 영향을 주는 침해적인 경험이 될 것으로 예상되지는 않습니다. 대신 보고 정보는 예를 들어 사용자를 불필요하게 방해하지 않도록 설정 메뉴에서 선택적으로 활성화될 수 있습니다.
읽기 시스템은 출판물 리소스 [epub-33]를 MUST 처리해야 합니다.
읽기 시스템에 뷰포트가 있는 경우, 그 시스템은 이미지 핵심 미디어 유형 리소스 [epub-33]를 MUST 지원해야 합니다.
사전 녹음된 오디오를 렌더링할 수 있는 기능이 있는 경우, 그 시스템은 오디오 핵심 미디어 유형 리소스 [epub-33]를 MUST 지원해야 합니다.
읽기 시스템은 임의의 외부 리소스 유형 집합을 MAY 지원할 수 있으며, 외부 리소스가 지원되지 않는 경우 외부 리소스 [epub-33]에서 정의한 대로 폴백을 MUST 처리해야 합니다.
읽기 시스템은 원격 리소스를 SHOULD 지원해야 합니다. 이는 리소스 위치 [epub-33]에서 정의된 바와 같습니다.
네트워크 공격의 위험을 제한하기 위해, 읽기 시스템은
https URI 스킴 [rfc9110]을 통해 참조된 원격
리소스만 로드하는 것이 SHOULD 권장됩니다.
읽기 시스템은 컨텍스트 메뉴와 같은 읽기 시스템 어포던스를 통해 시작되는 경우를 제외하고, data URL [rfc2397]이 최상위 브라우징 컨텍스트 [html]에서 열리지 않도록 MUST 방지해야 합니다. 읽기 시스템이 최상위 콘텐츠 문서에 최상위 브라우징 컨텍스트를 사용하지 않는 경우, 예를 들어 최상위 콘텐츠 문서가 SVG인 경우에도, data URL이 최상위 콘텐츠 문서인 것처럼 열리지 않도록 MUST 방지해야 합니다.
읽기 시스템은 file URL [rfc8089]을 통해 참조된 리소스에 대한 접근을 MUST 방지해야 합니다.
출판물 리소스 처리의 일부로, 읽기 시스템은
XHTML 콘텐츠 문서 또는 SVG 콘텐츠 문서에서 언어와 기본 방향을 설정하는
속성뿐만 아니라 모든 XML 문서(예: 패키지 문서와 미디어 오버레이 문서)에 대한 xml:lang
속성을 처리해야 합니다.
또한 읽기 시스템은 dir
속성 [epub-33]도 패키지 문서에 대해 MUST 처리해야 합니다.
이때 dir로 지정된 기본
방향은 해당 속성이 지정된 요소와, 다른 dir 인스턴스로 재정의되지 않는 한
그 콘텐츠 안의 모든 요소에 적용됩니다. (자세한 내용은 5.1
기본 방향도
참조하십시오.)
이
정보가 출판물 리소스에 없을 경우, 읽기 시스템은
패키지 문서에 표현된 정보(즉, xml:lang 및 dir
속성, link
요소의 hreflang 속성, 또는
dc:language
요소 [epub-33]에서 가져온 정보)로부터
해당 리소스의 언어나 기본 방향을
MUST NOT 가정해서는 안 됩니다.
명시적 언어 또는 방향 정보가 없을 때 처리하는 방법에 대한 자세한 내용은
리소스의 공식 명세를 참조하십시오.
읽기 시스템은 원격 리소스를 검색하고 스크립트 콘텐츠 문서가 웹 호스팅 API와 통신하고 리소스를 검색할 수 있도록 네트워크 접근을 MAY 지원할 수 있습니다.
그러나 네트워크 접근을 제공하면 읽기 시스템에 대한 보안 위험과 사용자에 대한 보안 및 개인정보 보호 위험이 모두 증가합니다. 이러한 위험은 대개 읽기 시스템과 그것이 실행되는 플랫폼에 고유합니다. 대부분의 읽기 시스템이 기반으로 하는 브라우저 코어는 웹 브라우저 자체와 같은 보안 및 개인정보 보호 제어 기능을 제공하지 않습니다. 따라서 개발자는 네트워크 접근을 허용할 때 각별히 주의해야 하며, 읽기 시스템이 공격에 취약하지 않은지 더 철저히 테스트해야 합니다. 이러한 위험에 대한 자세한 정보는 15. 보안 및 개인정보 보호에 제공됩니다.
읽기 시스템 개발자가 네트워크 접근을 허용하는 경우, 다음 두 가지를 모두 수행하는 것이 RECOMMENDED됩니다:
링크가 http 또는 https
스킴
[url]을
갖는 경우, 읽기 시스템은:
로드에 보조 애플리케이션이 필요한 스킴을 가진 링크의 경우, 읽기 시스템은 사용자의 동의를 얻고 보조 애플리케이션을 여는 것에 대한 플랫폼 지침을 따르는 것이 SHOULD 권장됩니다.
외부 링크는 EPUB 콘텐츠 문서에서만 발견되는 것은 아닙니다. 예를 들어 읽기 시스템은 패키지 문서 메타데이터의 외부 연결된 레코드 [epub-33]에 대한 접근을 제공할 수 있습니다.
외부 링크와 관련된 보안 및 개인정보 보호 문제에 대한 자세한 정보는 15.2 위협 모델을 참조하십시오.
읽기 시스템은 MUST EPUB 컨테이너 [epub-33]를 처리해야 합니다.
EPUB 컨테이너를 처리하는 애플리케이션이 반드시 완전한 읽기 시스템일 필요는 없습니다 (예: 애플리케이션이 컨테이너의 콘텐츠만 추출하거나 패키지된 콘텐츠의 유효성만 검사할 수 있습니다). 이러한 경우, 해당 애플리케이션 개발자는 이 섹션에서 정의한 읽기 시스템의 렌더링 요구사항을 무시할 수 있습니다.
읽기 시스템은 OCF 추상 컨테이너의 루트 디렉터리에 URL [url]을 MUST 할당해야 합니다. 이 URL을 컨테이너 루트 URL이라고 합니다. 이는 구현 별로 다르지만, 구현은 다음 속성을 MUST 가져야 합니다:
/"를 컨테이너 루트
URL을 base로 하여 구문 분석하면 컨테이너
루트 URL이 됩니다..."를 컨테이너 루트
URL을 base로 하여 구문 분석하면 컨테이너
루트 URL이 됩니다.읽기 시스템 안의 EPUB 출판물의 각 사용자별 인스턴스마다 출처 [html]가 고유하다는 것은, 서로 다른 두 사용자가 같은 EPUB 출판물의 사본을 획득하더라도, 같은 읽기 시스템을 사용하더라도 그 두 사용자의 사본에서 출처가 서로 다르다는 것을 의미합니다.
컨테이너 루트 URL의 속성은 적합한 읽기 시스템이 모든 상대 URL 문자열을 콘텐츠 URL로 구문 분석하도록 합니다. 다시 말해, 상대 링크는 컨테이너 콘텐츠 밖으로 "누출"되지 않으며, 이는 보안에 중요한 기능입니다.
실제로 컨테이너 루트 URL은 다음과 같이 정의된 URL과 유사하게 동작합니다:
| URL 구성 요소 | 값 |
| 스킴 | http 또는 https |
| 호스트 | localhost |
| 포트 | EPUB 인스턴스에 고유하게 할당된 동적 포트 |
예:
| 컨테이너 파일 | 파일 경로 | URL |
| 루트 디렉터리 | 빈 문자열 |
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을
기본
URL [url]로 사용해야 합니다.
[epub-33]의 META-INF
디렉터리의 URL 구문 분석 섹션도 참조하십시오.
EPUB 작성자는 최대한의 상호 운용성을 위해 다양한 파일 이름 및 파일 경로 제한 [epub-33]을 따라야 하지만, 읽기 시스템은 이러한 요구사항을 따르지 않는 파일 이름과 경로도 처리하려고 시도하는 것이 SHOULD 권장됩니다. 유효하지 않은 파일 이름과 경로는 일부 운영 체제에서만 문제가 될 수 있습니다.
이 명세는 OCF 파일 이름과 경로를 표현할 수 없는 읽기 시스템이 이러한 비호환성을 어떻게 처리해야 하는지 지정하지 않습니다.
container.xml)
읽기 시스템은 기본적으로 첫 번째
rootfile
요소
[epub-33]에서 참조된 패키지 문서를 사용하여
EPUB 출판물을 렌더링해야
MUST 합니다. 읽기 시스템이 사용 가능한 다른 옵션 중에서
선택하는 수단을 인식하는 경우, 더 적절한 패키지
문서를 MAY 선택할 수 있습니다.
metadata.xml)읽기 시스템은 인식할 수 없는 루트
요소가 있는 metadata.xml 파일
[epub-33]을 무시하는 것이
SHOULD 권장됩니다.
manifest.xml)읽기 시스템은 EPUB 출판물을 처리하기 위해 ZIP 아카이브에 포함된
보조 매니페스트 정보나 manifest.xml 파일 [epub-33] 안의 정보를
MUST NOT 사용해서는 안 됩니다.
signatures.xml)signatures.xml
파일 [epub-33]의 서명을 검증하는 데 사용되는 다이제스트를 계산하기 전에,
읽기 시스템은 서명 후 암호화된 모든 데이터를 MUST
복호화해야 합니다
— 서명 전에 암호화된 데이터는 MUST NOT 복호화해서는 안 됩니다.
서명 후 암호화된 데이터를 식별하는 방법에 대한 자세한 정보는 XML Signature용 Decryption Transform [xmlenc-decrypt]을 참조하십시오.
읽기 시스템은 예약된 파일 [epub-33]에
나열되지 않은 META-INF 디렉터리의 구성 파일을 만나도
MUST NOT 실패해서는 안 됩니다.
읽기 시스템은:
콘텐츠를 세그먼트 [zip]로 분할하는 모든 OCF ZIP 컨테이너를 오류로 MUST 처리해야 합니다.
Deflate [rfc1951] 이외의 압축 기법을 사용하는 모든 OCF ZIP 컨테이너를 오류로 MUST 처리해야 합니다.
"Version 1" [zip]로 정의된 ZIP64 확장을 MUST 지원해야 합니다.
[zip] 암호화 기능을 사용하는 OCF ZIP 컨테이너를 오류로 MUST 처리해야 합니다.
내용을 압축 해제하는 경우 OCF 추상 컨테이너의 루트 디렉터리에 대해 물리적 디렉터리를 MAY 생성할 수 있습니다.
OCF 추상 컨테이너의 맥락 밖에서 로드 및 저장 작업을 거쳐 OCF ZIP 컨테이너의 정보를 보존할 필요가 없습니다. 특히, 읽기 시스템은 CRC 값, 주석 필드 또는 특정 운영 체제에 해당하는 파일 시스템 정보를 담는 필드 (예: External file attributes 및 Extra field)를 보존할 필요가 없습니다.
OCF ZIP 컨테이너 아카이브의 특정 필드와 관련하여, 읽기 시스템은:
읽기 시스템은 글꼴 난독화 [epub-33]에서 정의한 대로 글꼴의 난독화 해제를 SHOULD 지원해야 합니다.
원래 데이터를 복원하려면, 읽기 시스템은 단순히 과정을 반대로 수행하면 됩니다. 즉 소스 파일은 난독화된 데이터가 되고, 대상 파일에는 원시 데이터가 포함됩니다.
EPUB 3은 EPUB 3.0.1 이전부터 글꼴 난독화를 허용했지만, 난독화와 압축의 순서를 지정하지 않았습니다. 그 결과, 읽기 시스템은 압축 해제와 난독화 해제 후 유효하지 않은 글꼴을 만날 수 있습니다. 이러한 경우, 데이터를 팽창하기 전에 난독화 해제하면 유효한 글꼴이 반환될 수 있습니다. 읽기 시스템은 이 검색 방법을 지원할 필요는 없지만, 개발자는 EPUB 3 콘텐츠를 일반적으로 지원할 때 이를 고려해야 합니다.
읽기 시스템은 MUST 패키지 문서 [epub-33]를 처리해야 합니다.
dir
속성 [epub-33]이 설정되어 있고
ltr 또는 rtl의 기본 방향을 나타내는 경우, 읽기 시스템은 [bidi]에 정의된 상위 수준 프로토콜에 따라
bidi 알고리즘을 MUST 재정의해야 하며,
기본 방향이
ltr이면 단락 임베딩 수준을 0으로, 기본 방향이 rtl이면 1로 설정해야 합니다.
그렇지 않으면
기본 방향은 auto이며, 이 경우 읽기 시스템은 [bidi]의 규칙
P2부터 시작하여 Unicode Bidi Algorithm을 적용함으로써 텍스트의
방향을 MUST 결정해야 합니다.
[epub-33]에서 패키지 문서 메타데이터의 방향성 설정이 구현 부족으로 표시되어 있지만, 국제 독자를 대상으로 하는 읽기 시스템이나 국제 콘텐츠 지원을 주장하는 읽기 시스템은 해당 메타데이터를 사용자에게 노출할 때 이 기능을 구현할 것을 강력히 권장합니다. 텍스트 방향성을 무시하면 가독성 문제가 발생할 수 있습니다.
읽기 시스템에서 필요한 기준 수준의 지원이 달성되면 [epub-33]에서 구현 부족 레이블이 제거됩니다.
읽기 시스템은 고유 식별자가 오직 하나의 EPUB 출판물에만 고유하다는 데 의존해서는 SHOULD NOT 됩니다. 동일한 고유 식별자를 가진 두 EPUB 출판물이 같은 출판물의 다른 버전을 나타내는지, 아니면 다른 출판물을 나타내는지 확인하려면 마지막 수정 날짜, 제목, 저자와 같은 다른 메타데이터를 검사해야 할 수 있습니다.
읽기 시스템은 처리 전에
Dublin Core [dcterms] 및 meta
요소 값
[epub-33]에서 ASCII
공백을 제거하고 접기 [infra]를 MUST 수행해야 합니다.
dc:identifier 요소
dc:identifier
요소 [epub-33]의 값이
확립된 체계를 따르는지 또는 발급 기관에 의해 부여되었는지 판단하기 위해, 읽기 시스템은
identifier-type 속성
[epub-33]을 확인하는 것이 SHOULD 권장됩니다.
dc:title 요소읽기 시스템은 문서 순서에서 첫 번째
dc:title
요소 [epub-33]를 EPUB 출판물의 주 제목으로
MUST 인식하고, 다른 제목 요소보다 먼저 사용자에게 제시해야 합니다.
이 명세는 추가 dc:title
요소를 처리하는 방법을 정의하지 않습니다.
dc:language 요소
dc:language
요소에 지정된 EPUB 출판물의 언어는
정보 제공용입니다. 이 정보의 사용 예는 다음과 같습니다:
dc:creator 요소표시 우선순위를 결정할 때,
읽기 시스템은 metadata 섹션의
dc:creator
요소 [epub-33]의 문서 순서를
MUST 사용해야 하며, 처음 만나는 creator 요소가
주 작성자입니다. 읽기 시스템이 작성자 메타데이터를 사용자에게 노출하는 경우,
가능한 경우 언제나(예: 표시상의 제약이 없을 때) metadata 섹션에
나열된 모든 작성자를 포함하는 것이 SHOULD 권장됩니다.
meta 요소읽기 시스템은 인식하지 못하는 표현식을 정의하는
property 속성
[epub-33]을 가진 모든
meta
요소를 무시하는 것이 SHOULD 권장됩니다. 읽기 시스템은 알 수 없는
표현식을 만나도 MUST NOT 실패해서는 안 됩니다.
읽기 시스템이 scheme 속성 [epub-33] 값을 인식하지 못하는 경우, 해당
요소의 값을 문자열로 취급하는 것이 SHOULD 권장됩니다.
link 요소연결된 리소스의 가져오기 및 지원은 OPTIONAL입니다.
hreflang [EPUB-33] 속성에서 식별된 언어는
순전히 참고용입니다. 리소스에 표현된 언어 정보는 국제화 요구사항에 정의된 것처럼
처리 및 렌더링 목적상 해당 리소스의 언어를 결정합니다.
읽기 시스템은 인식하지 못하는
properties
속성 [epub-33]의 값을
MUST 무시해야 합니다.
읽기 시스템은 내재적인 제한과 관련 위험(예: 리소스와 처리 방법에 대한 정보 부족, 원격 호스팅 소스에서 오는 보안 위험, 폴백 부족 등)으로 인해 EPUB 출판물을 렌더링할 때 연결된 리소스를 사용해서는 SHOULD NOT 됩니다.
주어진 출판물 리소스의 MIME 미디어
유형 [rfc2046]을
지원하지 않는 읽기 시스템은 지원되지 않는 리소스 대신 사용할 지원되는 출판물 리소스를
식별할 때까지 매니페스트 폴백 체인 [epub-33]을 MUST 순회해야 합니다.
읽기 시스템이 폴백 체인의 여러
출판물 리소스를 지원하는 경우, 리소스의 properties 속성
[epub-33] 값을 기준으로 사용할 리소스를
MAY 선택할 수 있으며, 그렇지 않은 경우 EPUB 작성자가 선호하는
폴백 순서를 따르는 것이 SHOULD 권장됩니다.
읽기 시스템이 폴백 체인의 어떤 리소스도
지원하지 않는 경우, 콘텐츠를 표시할 수 없음을 사용자에게 MUST 알려야 합니다.
매니페스트 폴백 [epub-33]이 최상위 콘텐츠 문서에 제공되는 경우, 읽기 시스템은 주어진 맥락에서 렌더링할 최적의 버전을 찾기 위해 사용 가능한 옵션 중에서 MAY 선택할 수 있습니다(예: 각 항목의 properties 속성 검사).
읽기 시스템은 이미 만난 매니페스트 항목에 대한 첫 번째 참조에서 폴백 체인을 MUST 종료해야 합니다.
읽기 시스템은
spine
요소 [epub-33]에 정의된 순서로
EPUB 출판물을 렌더링하는 수단을
MUST 제공해야 하며, 여기에는 다음이 포함됩니다:
itemref [epub-33]를 기본 읽기 순서의 시작으로 인식하는 것;
그리고,spine에 주어진 순서대로 연속적인 기본 항목을 렌더링하는 것.사용자가 spine 요소에 정의된 기본 읽기 순서를
따라 이동할 때, 읽기 시스템은 비선형 itemref 요소
[epub-33]를 자동으로 건너뛸 수 MAY 있습니다.
그러나 사용자가
비선형
리소스로 연결되는 하이퍼링크를 활성화하면, 읽기 시스템은 참조된 리소스나 지정된
폴백을 MUST 렌더링해야 합니다. 또한 읽기 시스템은 사용자가
기본적으로 비선형
콘텐츠를 건너뛸지 여부를 선택할 수 있는 옵션을 MAY 제공할 수 있습니다.
EPUB
작성자가 page-progression-direction
속성 [epub-33]을 지정하지 않은 경우, 읽기 시스템은
default 값을 MUST
가정해야 합니다. page-progression-direction 값이
default인 경우, 읽기 시스템은 렌더링 방향을 선택할 수 있습니다.
page-progression-direction 속성의 값이 default가 아닌 경우,
읽기 시스템은 pre-paginated XHTML 콘텐츠 문서에서 계산된 모든 방향성을
MUST 무시해야 합니다.
읽기 시스템은
인식하지 못하는 spine itemref
properties 속성 [EPUB-33]에
표현된 모든 값을 MUST 무시해야 합니다.
읽기 시스템은 선형 읽기 순서를 렌더링할 때 중복된 매니페스트 항목 [EPUB-33]에 대한 spine 참조를 MUST NOT 건너뛰어서는 안 됩니다. 읽기 시스템은 사용자 인터페이스(UI) 목적상 이를 별개의 항목으로 MUST 취급해야 합니다 (예를 들어, 각 발생 항목은 독립적으로 북마크되거나 주석 처리될 수 있습니다). 읽기 시스템이 spine에서 여러 번 참조된 리소스로 연결되는 하이퍼링크를 따라갈 때, 읽기 시스템은 선형 읽기 순서에서 해당 문서의 첫 번째 발생 위치로 MUST 이동해야 합니다.
spine
itemref
요소의 properties 속성이
전역 렌더링 속성 [epub-33]을 재정의하는 경우,
읽기
시스템은 해당 spine
항목을 표시하기 위해 재정의의 전역 값에 대한 요구사항을 MUST 따라야 합니다.
예를 들어, layout-pre-paginated
재정의 [epub-33]를 포함하는 spine 항목은
전역 pre-paginated
값의 요구사항을 따라 렌더링됩니다.
동일한 속성에 대해 하나 이상의 재정의가 properties
속성에 지정된 경우, 읽기 시스템은 첫 번째 값만 MUST 사용해야 합니다.
이 명세의 맥락에서, 읽기 시스템의 컬렉션 [epub-33] 지원은
OPTIONAL입니다. 읽기 시스템은 인식하지 못하는
역할을 정의하는 collection 요소를
MUST 무시해야 합니다.
읽기 시스템은 이 버전의 EPUB [epub-33]에 적합한 콘텐츠에서 레거시 기능을 MUST NOT 지원해서는 안 됩니다.
EPUB 콘텐츠 문서 [epub-33]의 정의에는 콘텐츠의 교차 호환성을 최적화하기 위한 다양한 저작 제한이 포함됩니다(예: 언어와 방향 설정을 위한 CSS 금지 [epub-33]). 이 명세에서 달리 명시하지 않는 한, 읽기 시스템은 이러한 제한된 기능을 MAY 지원할 수 있습니다.
읽기 시스템은 MUST XHTML 콘텐츠 문서 [epub-33]를 처리해야 합니다.
이 섹션에서 재정의된 것으로 명시적으로 정의하지 않는 한, 읽기 시스템은 [html] 명세가 정의한 시맨틱을 사용하여 XHTML 콘텐츠 문서를 MUST 처리하고, 그 안에 표현된 모든 적용 가능한 사용자 에이전트 적합성 제약을 준수해야 합니다.
switch 요소의 사용은 폐기 예정입니다
[epub-33]. 구현
정보는 [epubcontentdocs-301]의 해당 정의를 참조하십시오.
trigger 요소의 사용은 폐기 예정입니다
[epub-33]. 구현
정보는 [epubcontentdocs-301]의 해당 정의를 참조하십시오.
읽기 시스템은 해당 속성이 이 명세의 요구사항을 수정하지 않는 한 사용자 정의 속성을 MAY 지원할 수 있습니다.
속성 처리 모델에 대한 읽기 시스템 지원은 OPTIONAL이며, JSON으로의 변환 [html]도 마찬가지입니다.
XHTML 콘텐츠 문서에 포함된 MathML [mathml3]을 지원하기 위해, 읽기 시스템은:
Presentation MathML에 대해 [mathml3] 명세에서 정의한 입력 준수 처리기여야 MUST 합니다.
뷰포트가 있는 경우, Presentation MathML의 시각적 렌더링을 MUST 지원해야 합니다.
annotation-xml
요소 [mathml3]에서
발견되는
Content MathML의 렌더링을 MAY
지원할 수 있습니다.
읽기 시스템은 MathML 렌더링을 제공하기 위해 MathJax와 같은 서드파티 라이브러리를 사용할 수 있습니다.
읽기 시스템은 XHTML 콘텐츠 문서에 내장된 SVG를 6.2 SVG 콘텐츠 문서에서 정의한 대로 MUST 처리해야 합니다.
참조로 XHTML 콘텐츠 문서에 내장된 SVG의 스타일 지정 목적상, 읽기 시스템은 포함하는 문서의 CSS 스타일 규칙을 참조된 SVG 문서에 MUST NOT 적용해서는 안 됩니다.
포함으로 XHTML 콘텐츠 문서에 내장된 SVG의 스타일 지정 목적상, 읽기 시스템은 포함하는 문서의 적용 가능한 CSS 규칙을 포함된 SVG 요소에 MUST 적용해야 합니다.
참조로 포함된 SVG는 별도의 문서로 처리되며, SVG 콘텐츠 문서처럼
자체 CSS 스타일 규칙을 포함할 수 있습니다.
이는 [html] object 요소가 외부 [html]
요소를 참조하는 상황과 일관됨에 유의하십시오.
[html]
form
요소 제출에 대한 읽기 시스템 지원은 OPTIONAL입니다. 예를 들어
읽기 시스템은 네트워킹 접근을 제한하여 폼 제출을 방지할 수 있습니다.
읽기 시스템은 MUST SVG 콘텐츠 문서 [epub-33]를 처리해야 합니다.
SVG 콘텐츠 문서와 XHTML 콘텐츠 문서에 내장된 SVG를 처리하기 위해, 읽기 시스템은:
이 명세에서 재정의된 것으로 명시적으로 정의하지 않는 한, [svg] 명세가 정의한 시맨틱을 사용하여 SVG 콘텐츠 문서를 MUST 처리하고, 그 안에 표현된 모든 적용 가능한 사용자 에이전트 적합성 제약을 준수해야 합니다.
6.4 스크립팅에 정의된 적합성 기준을 MUST 충족해야 합니다.
뷰포트가 있는 경우, Styling [svg]에 정의된 대로 CSS를 사용한 SVG의 시각적 렌더링을 MUST 지원해야 하며 그리고 Property Index [svg]에 정의된 모든 속성을 SHOULD 지원해야 합니다. 내장 SVG의 경우, 읽기 시스템은 6.1.2.3.1 내장 SVG와 CSS에 정의된 제약도 MUST 준수해야 합니다.
읽기 시스템에 뷰포트가 있는 경우, 그 시스템은 CSS를 통한 XHTML 콘텐츠 문서의 시각적 렌더링 [epub-33]을 MUST 지원해야 합니다.
CSS를 지원하기 위해, 읽기 시스템은:
[csssnapshot]에 설명된 CSS의 공식 정의를 MUST 지원해야 합니다.
[csssnapshot]에서 최소한 후보 권고안 상태 [w3cprocess]에 도달했고 (널리 구현된) 모든 적용 가능한 모듈을 SHOULD 지원해야 합니다.
@font-face 규칙
[css-fonts-4]에서 참조되는
[truetype],
[opentype], [woff],
및 [woff2] 글꼴 리소스를
MUST 지원해야 합니다.
CSS Style Sheets — 접두사 있는 속성 [epub-33]에 정의된 모든 접두사 있는 속성을 SHOULD 지원해야 합니다.
EPUB 작성자 스타일 시트를 작성된 그대로 EPUB 콘텐츠 문서에 SHOULD 적용해야 합니다.
EPUB 작성자의 스타일 시트를 재정의해서는 SHOULD NOT 되지만,
필요한 경우 캐스케이드를 보존하는 방식으로, 즉 사용자 에이전트 스타일 시트 또는
[html]
style
속성을 통해 재정의하는 것이 SHOULD 권장됩니다.
사용자 상호작용으로 인해 EPUB 작성자의 스타일 시트 일부를 MAY 재정의할 수 있습니다.
위에서 정의한 CSS 속성 지원에 더해, 읽기 시스템의 사용자 에이전트 스타일 시트는 [html]의 권장 기본 렌더링을 SHOULD 지원해야 합니다.
읽기 시스템 개발자는 주요 브라우저 수준으로 CSS 지원을 구현하고, 사용자 에이전트 스타일 시트와 그것이 EPUB 작성자의 스타일 시트와 상호작용하는 방식을 공개적으로 문서화해야 합니다.
읽기 시스템은 스크립팅 [epub-33]을 SHOULD 지원해야 합니다.
스크립팅에 대한 읽기 시스템 지원은 그 사용 맥락에 따라 달라집니다:
읽기 시스템은 리플로우 가능한 EPUB 콘텐츠 문서에서 컨테이너 제약 스크립팅 [epub-33]을 SHOULD 지원해야 합니다.
읽기 시스템은 고정 레이아웃 문서 [epub-33]에서 spine 수준 스크립팅 [epub-33]을 SHOULD 지원해야 합니다.
읽기 시스템은
rendition:flow 속성이 정의한 "scrolled-doc" 또는 "scrolled-continuous"
[epub-33] 표현 모드를 사용하는 리플로우 가능한 EPUB 콘텐츠 문서에서
spine 수준 스크립팅을 SHOULD 지원해야 합니다. 마찬가지로,
리플로우 가능한 EPUB 콘텐츠 문서에서 spine 수준 스크립팅을 지원하는 경우, 그 시스템은
"scrolled-doc" 표현 모드를 MUST 구현해야 하며
"scrolled-continuous" 표현 모드를 SHOULD
구현해야 합니다.
읽기 시스템은 다른 맥락에서 스크립팅을 MAY 지원할 수 있지만, 이 명세는 그러한 스크립팅을 다루지 않습니다. 그 결과, 이러한 맥락에서의 스크립팅 사용은 읽기 시스템 간에 일관되지 않을 수 있습니다.
읽기 시스템이 스크립팅을 지원하는 경우:
그 시스템은 [html]에 따라 스크립트 콘텐츠 문서를 대화형 스크립트 사용자 에이전트로 MAY 렌더링할 수 있습니다.
그 출처 [html]는 읽기 시스템 안의 EPUB 출판물의 각 사용자별 인스턴스마다 MUST 고유해야 합니다.
그 시스템은 컨테이너 제약 스크립트가 호스트 EPUB 콘텐츠 문서 또는 EPUB 출판물 내 다른 콘텐츠의 [dom]을 수정하도록 MUST NOT 허용해서는 안 됩니다 그리고 그 스크립트가 자신을 포함하는 사각형의 크기를 조작하도록 MUST NOT 허용해서는 안 됩니다 . (참고: 스크립트가 컨테이너 제약이 아니더라도, 읽기 시스템은 수정에 제한을 둘 수 있습니다. dom-manipulation 기능을 참조하십시오.)
그 시스템은 실행 중 스크립트에 제공되는 기능에 추가 제한(예: 네트워킹 제한)을 MAY 둘 수 있습니다.
그 시스템은 navigator 객체 [html]를
B.
epubReadingSystem 객체에 정의된
epubReadingSystem 인터페이스로 MUST 확장해야 합니다. 또한
컨테이너 제약 스크립팅
맥락에서 B.4.1.2
기능에 정의된
dom-manipulation 및 layout-change 기능을
MUST 지원해야 합니다.
읽기 시스템이 스크립팅을 지원하지 않는 경우, 스크립트 콘텐츠 문서의 폴백 [epub-33]에 정의된 대로 스크립트 콘텐츠에 대한 폴백을 MUST 처리해야 합니다.
읽기 시스템은 스크립트가 쿠키 및 웹 스토리지 [html]를 통해 영구 데이터를 저장하는 것을 MAY 차단할 수 있습니다.
로컬 스토리지 [html]를 허용하는 읽기 시스템은 사용자가 해당 데이터를 검사하거나 삭제할 수 있는 방법을 SHOULD 제공해야 합니다.
읽기 시스템은 [html]에 따른 DOM 이벤트 모델을 SHOULD 따르고, 이러한 이벤트와 관련된 기본 동작을 수행하기 전에 UI 이벤트를 스크립팅 환경에 전달해야 합니다.
읽기 시스템 개발자는 스크립트가 탐색과 같은 중요한 기능을 비활성화할 수 없도록 하여, 잠재적으로 악의적인 스크립트가 읽기 시스템에 미칠 수 있는 영향을 제한해야 합니다. 그 결과, 스크립팅 환경은 모든 이벤트의 기본 동작을 취소할 수 있어야 하지만, 일부 이벤트는 전달되지 않거나 취소할 수 없을 수 있습니다.
이 섹션은 비규범입니다.
스크립팅도 지원하는 읽기 시스템 개발자는 읽기 시스템이 스크립트 콘텐츠를 실행할 때 발생하는 보안 문제를 인식해야 합니다. 읽기 시스템과 브라우저가 사용하는 기본 스크립팅 모델은 동일하므로, 개발자는 웹 맥락에서 마주치는 것과 같은 종류의 문제를 고려해야 합니다.
각 읽기 시스템은 특정 문서의 스크립트를 신뢰할 수 있는지 확인해야 합니다. 읽기 시스템은 모든 스크립트를 신뢰할 수 없는 것(그리고 잠재적으로 악의적인 것)으로 취급해야 하며, 개발자는 모든 공격 벡터를 검토하고 이에 대비해야 합니다. 특히 개발자는 다음을 고려해야 합니다:
런타임 환경에 대한 공격(예: 사용자의 하드 드라이브에서 파일을 훔치는 것);
읽기 시스템 자체에 대한 공격(예: 사용자의 책 목록을 훔치거나 예상치 못한 동작을 유발하는 것);
하나의 EPUB 콘텐츠 문서가 다른 문서를 공격하는 것(예: 다른 문서에서 유래한 데이터를 훔치는 것);
암호화되지 않은 스크립트가 문서의 암호화된 부분을 공격하는 것(예: 주입된 악성 스크립트가 보호된 콘텐츠를 추출하는 것);
로컬 네트워크에 대한 공격(예: 방화벽 뒤의 서버에서 데이터를 훔치는 것).
신뢰할 수 없는 스크립트의 가능한 피해를 제한하기 위해, 이 명세는 읽기 시스템이 각 EPUB 출판물에 할당된 고유한 출처 [html]를 설정할 것을 권장합니다( 4.1.1 루트 디렉터리의 URL 참조). 고유한 출처를 할당하면 spine 수준 스크립트 [epub-33]가 다른 EPUB 출판물로부터 격리되고, 쿠키 [html], 웹 스토리지 [html] 등에 대한 접근을 제한합니다.
"origin" 개념에 연결된 웹 API의 예에는 웹 스토리지 [html]와 IndexedDB [indexeddb]가 있으며, EPUB 콘텐츠 문서는 스크립팅을 통해 이들과 상호작용할 수 있습니다. 읽기 시스템이 사용자가 관리되는 라이브러리(자신의 "책장")에 출판물을 추가/제거하도록 허용하는 경우, 해당 출판물이 제거되고 이후 콘텐츠 라이브러리로 다시 가져와질 때 출판물의 고유 출처를 유지할 수 있습니다. 반대로, 읽기 시스템은 새로 추가된 모든 출판물에 대해 새 고유 출처를 만들 수 있습니다.
이 명세는 또한 컨테이너 제약 스크립트 [epub-33]가 호스트 EPUB 콘텐츠 문서의 DOM을 수정하거나 포함하는 사각형을 조작하지 못하도록 할 것을 권장합니다(6.4 스크립팅 참조).
이러한 권장사항을 준수한다고 해서 위에 나열된 가능한 공격으로부터 보호가 보장되는 것은 아닙니다. 개발자는 각 잠재적 취약성을 자신의 읽기 시스템 맥락 안에서 검토해야 합니다.
읽기 시스템은 고정 레이아웃 문서 [epub-33]의 렌더링을 MUST 지원해야 합니다.
rendition:layout
속성을 지닌
meta
요소가 패키지 문서
메타데이터 [epub-33]에 나타나지 않는 경우, EPUB 읽기 시스템은
기본값 reflowable을 전역 값으로
MUST 가정해야 합니다.
rendition:layout 속성이 pre-paginated로 설정된 경우, 읽기
시스템은 합성 스프레드를 렌더링할 때 인접한 콘텐츠 슬롯 사이에
공간을 포함해서는 MUST NOT 안 됩니다.
rendition:layout 속성 값에는 다음 처리
요구사항이 있습니다:
rendition:orientation
속성을 지닌
meta
요소가 패키지 문서 메타데이터 [epub-33]에 나타나지 않는 경우, EPUB 읽기 시스템은
기본값 auto를 전역
값으로 MUST 가정해야 합니다.
rendition:orientation 속성 값에는 다음 처리
요구사항이 있습니다:
읽기 시스템은 EPUB 콘텐츠 문서를 렌더링할 방향을 결정합니다.
여러 방향을 지원하는 읽기 시스템은 EPUB 콘텐츠 문서를 가로 방향으로 렌더링하는 것이 SHOULD 권장됩니다.
여러 방향을 지원하는 읽기 시스템은 EPUB 콘텐츠 문서를 세로 방향으로 렌더링하는 것이 SHOULD 권장됩니다.
그 의도를 전달하는 수단은 구현별로 다릅니다.
읽기
시스템은 rendition:spread
속성을 지닌
meta
요소가 패키지 문서
메타데이터 [epub-33]에 나타나지 않는 경우 기본값 auto를
전역 값으로 반드시 가정해야 합니다.
rendition:spread 속성 값에는 다음 처리
요구사항이 있습니다:
읽기 시스템은 spine 항목을 합성 스프레드에 포함해서는 MUST NOT 안 됩니다. 읽기 시스템은 화면 중앙에 배치된 단일 뷰포트를 만드는 것이 SHOULD 권장됩니다.
읽기 시스템은 장치가 가로 방향일 때에만 spine 항목에 대한 합성 스프레드를 렌더링하는 것이 SHOULD 권장됩니다.
읽기 시스템은 "portrait" 값을
"both"의 동의어로 취급하고 방향과 관계없이 스프레드를 만드는 것이
SHOULD 권장됩니다.
읽기 시스템은 장치 방향과 관계없이 합성 스프레드를 렌더링하는 것이 SHOULD 권장됩니다.
읽기 시스템은 콘텐츠 표시 영역 활용 최적화 과정의 일부로 특정 또는 모든 장치 방향에서 합성 스프레드를 MAY 사용할 수 있습니다.
rendition:page-spread-left
속성 [epub-33]은 주어진 spine 항목이 스프레드의
왼쪽 슬롯에 렌더링되는 것이 SHOULD 권장됨을 나타냅니다.
rendition:page-spread-right
속성 [epub-33]은 주어진 spine 항목이 스프레드의
오른쪽 슬롯에 렌더링되는 것이 SHOULD 권장됨을 나타냅니다.
rendition:page-spread-left 및 rendition:page-spread-right
속성은 pre-paginated 콘텐츠와 reflowable 콘텐츠 모두에 적용되며, 읽기
시스템이 합성 스프레드를 만들 때에만 적용됩니다.
rendition:page-spread-* 속성은
page-break-before
속성 [csssnapshot]이 XHTML 콘텐츠 문서에 대해 어떤 값으로
설정되어 있든 그 값보다 MUST 우선해야 합니다.
reflowable spine 항목이 pre-paginated 항목 뒤에 오는 경우, reflowable 항목에는
rendition:page-spread-* 속성 값이 없을 때
page-progression-direction
속성 [epub-33]에 정의된 다음 페이지에서 시작하는 것이
SHOULD 권장됩니다.
읽기 시스템은 reflowable 및
pre-paginated
spine 항목 모두에서
rendition:page-spread-* 속성을 MUST 준수해야 합니다(예: 빈 페이지 삽입).
pre-paginated
spine 항목이 reflowable 항목 뒤에 오는 경우, pre-paginated 항목에는
rendition:page-spread-* 속성 값이 없을 때
(page-progression-direction 속성에 정의된) 다음 페이지에서 시작하는 것이
SHOULD 권장됩니다.
읽기
시스템이 실제 스프레드를 나타내는 두 spine 항목(즉,
rendition:page-spread-left 및
rendition:page-spread-right 속성이 있는 인접한 두 spine 항목)을 만나면,
인접한 페이지 사이에
공간 없이 스프레드를 만드는 것이 SHOULD 권장됩니다.
읽기 시스템은
XHTML 콘텐츠 문서에 대해
viewport meta 태그에 선언된 너비 및 높이 표현식을 사용하여
초기
컨테이닝 블록(ICB)을 MUST 생성해야 하며, 이는
HTML에서 표현하기 [epub-33]에서 정의된 바와 같습니다.
그 시스템은 ICB 밖에
배치된 콘텐츠를 MUST 잘라내야 합니다.
viewport meta
태그의 너비 또는
높이 값이 숫자가 아닌 문자를 포함하지만 숫자로 시작하는 경우(예: 값에
"500px"와 같은 길이 단위 선언이 포함된 경우), 숫자 접두사를 픽셀 값으로
사용하는 것이 SHOULD 권장되며,
그렇지 않으면 그 값은 유효하지 않은 것으로 MUST
처리해야 합니다.
읽기 시스템은 viewport meta 태그의 구문이 유효하지 않더라도
width 및
height
값을 추출하려고 시도하는 것이 SHOULD 권장됩니다.
읽기 시스템은 viewport
meta 태그에서 width 및 height 속성의 첫 번째
선언을 MUST 사용해야 합니다(즉, 반복된 선언은 무시합니다).
viewport meta가 width 또는 height 값을 포함하지 않거나,
이러한 값이 유효하지 않은 경우, 읽기 시스템은 값을 제공할 MAY 있습니다.
예를 들어, 읽기
시스템은 다음과 같이 할 수 있습니다:
device-width 및
device-height 값으로 간주합니다; 또는
XHTML 콘텐츠 문서가 둘 이상의
viewport meta 태그를 포함하는 경우, 읽기 시스템은 높이 및 너비 치수를 얻기 위해
문서 순서상 첫 번째 태그를 MUST
사용해야 합니다. 이후 선언은
MUST
무시해야 합니다.
ICB 종횡비가 읽기 시스템 콘텐츠 표시 영역의 종횡비와 일치하지 않는 경우, 읽기 시스템은 사용자 인터페이스를 수용하기 위해 ICB를 그 영역 안에 배치할 MAY 있습니다. 다시 말해, 추가된 레터박스 공간이 콘텐츠의 한쪽(또는 양쪽)에 나타날 MAY 있습니다.
읽기 시스템은 SVG 콘텐츠 문서를 렌더링하기 위해 SVG에서 ICB 표현하기 [epub-33]에 정의된 치수를 사용하여 초기 컨테이닝 블록(ICB)을 MUST 생성해야 합니다.
ICB 종횡비가 읽기 시스템 콘텐츠 표시 영역의 종횡비와 일치하지 않는 경우, 읽기 시스템은
[SVG]에 정의된 대로
viewBox
및 preserveAspectRatio
속성에 대한 규칙을 따라야 합니다.
고정 레이아웃 문서를 렌더링할 때, 기본 의도는 콘텐츠 표시 영역이 사용 가능한 뷰포트 영역을 가능한 한 많이 차지하는 것입니다. 읽기 시스템은 테두리, 여백, 머리글 또는 바닥글과 같은 추가 콘텐츠를 뷰포트에 주입해서는 SHOULD NOT 안 됩니다.
이 명세는 초기 컨테이닝 블록 [css2]이 읽기 시스템 콘텐츠 표시 영역 안에 어떻게 배치되는지 정의하지 않습니다.
사용자에게 읽기 시스템 제어 위젯을 노출하는 방식은 구현별로 다르며, 위의 동작 기대사항에는 포함되지 않습니다.
읽기 시스템은 리플로우 가능 레이아웃 속성 [epub-33]을 SHOULD 처리해야 합니다.
읽기 시스템이 지정된 렌더링을 지원하는 경우, 오버플로 콘텐츠를 처리하기 위해 해당 방법을 사용하는 것이 SHOULD 권장되지만, 사용자가 요청된 렌더링을 재정의할 수 있는 옵션을 MAY 제공할 수 있습니다.
이 속성을 지닌 meta 요소가 metadata
섹션 [epub-33]에 나타나지 않는 경우 기본 전역 값은 auto입니다.
읽기 시스템은 이 기본값만 MAY 지원할 수 있습니다.
rendition:flow 속성 값에는 다음 처리 요구사항이 있습니다:
읽기 시스템은 모든 오버플로 콘텐츠를 동적으로 페이지 매김하는 것이 SHOULD 권장됩니다.
읽기 시스템은 모든 EPUB 콘텐츠 문서를 오버플로 콘텐츠가 스크롤 가능하도록 렌더링하는 것이 SHOULD 권장되며, EPUB 출판물을 spine 항목에서 spine 항목으로 이어지는 하나의 연속 스크롤로 제공하는 것이 SHOULD 권장됩니다(단, 로컬로 재정의 [epub-33]된 경우는 예외).
읽기 시스템은 모든 EPUB 콘텐츠 문서를 사용자가 오버플로 콘텐츠를 스크롤할 수 있도록 렌더링하는 것이 SHOULD 권장되며, 각 spine 항목을 별도의 스크롤 가능한 문서로 제공하는 것이 SHOULD 권장됩니다.
읽기 시스템은 오버플로 콘텐츠를 기본 방법 또는 사용자 환경설정 중 적용 가능한 것으로 MAY 렌더링할 수 있습니다.
rendition:flow-scrolled-continuous 속성의 경우, 스크롤 방향은
itemref
요소 [epub-33]가 참조하는
XHTML 콘텐츠 문서의 루트 요소의
블록 흐름 방향을 기준으로 MUST
정의되어야 합니다. 블록 흐름 방향이 아래쪽(위에서 아래)인 경우 스크롤 방향은
수직이어야 MUST 합니다. 루트 요소의
블록 흐름 방향이 오른쪽(왼쪽에서 오른쪽) 또는 왼쪽
(오른쪽에서 왼쪽)인 경우 수평이어야 MUST
합니다.
읽기 시스템은 pre-paginated spine
항목 [epub-33]을 처리할 때
rendition:flow 속성과 그
재정의를 MUST 무시해야 합니다.
읽기 시스템 개발자는 이 제한을 무시하고,
rendition:flow의 scrolled-continuous 값을 각 pre-paginated spine 항목을
긴 세로 스트립에 표시하는 전환으로 받아들이기로 결정할 수 있습니다(스마트폰이나
컴퓨터에서 읽기 쉽게 함). 이러한 유형의 표현은 종종 "웹툰"이라고 합니다. 일부
출판자는 이미 이 가능성을 사용하고 있습니다. 추가 실험과 인큐베이션을 거친 후,
이 명세의 향후 버전은 이 접근 방식을 고정 레이아웃 문서의 표준 기능으로 도입할 수
있습니다. (연기된) github issue 2412도
참조하십시오.
rendition:align-x-center 속성이 spine 항목에 설정된 경우,
읽기 시스템은 해당 콘텐츠를 적용 가능한 경우
뷰포트 또는
스프레드 안에서 수평 중앙에 렌더링하는 것이
SHOULD 권장됩니다. 이 속성은 spine
항목의 렌더링에는 영향을 주지 않으며, 결과 콘텐츠 상자의 배치에만 영향을 줍니다.
reflowable 콘텐츠의 경우, 이 속성을 지원하는 읽기 시스템은 각 가상 페이지를 가운데에 MUST 정렬해야 합니다.
이 명세는 읽기 시스템이 이 속성을 지원하지 않거나 EPUB 작성자가 이를 지정하지 않을 때의 기본 렌더링 동작을 정의하지 않습니다. 읽기 시스템은 spine 항목을 자체 설계에 따라 MAY 렌더링할 수 있습니다.
고정 레이아웃 문서의 초기
컨테이닝 블록 치수를 얻는 경우를 제외하고, 읽기 시스템은 viewport meta
선언의 렌더링
지시를 MUST 무시해야 합니다.
이 제한은 고정 레이아웃 문서와 리플로우 가능 문서 모두에 적용됩니다.
읽기 시스템은 패키지 렌더링 어휘 [epub-33]에 정의된 속성과 동작상 충돌하는 표현식을 도입하지 않는 한 사용자 정의 속성을 MAY 지원할 수 있습니다.
읽기 시스템 중 사전 녹음된 오디오를 렌더링할 수 있는 것은 미디어 오버레이 [epub-33]를 SHOULD 지원해야 합니다.
읽기 시스템이 미디어 오버레이를 지원하지 않는 경우, 다음 둘 다 MUST 무시해야 합니다:
media-overlay 속성
(manifest
item
요소 [epub-33]의); 그리고
media-type 속성 값이
application/smil+xml과 같은 item 요소.
읽기
시스템이 패키지 문서를 로드할 때, 해당 시스템은
manifest
item
요소 [epub-33]의 media-overlay 속성을 참조하여
EPUB 콘텐츠 문서에 대응하는 미디어
오버레이를 발견해야 MUST 합니다.
읽기 시스템은 XHTML 콘텐츠 문서에 대한 재생을 MUST 지원해야 하며, SVG 콘텐츠 문서를 MAY 지원할 수 있습니다.
재생은 원하는 EPUB 콘텐츠 문서 시작 지점에 대응하는 미디어 오버레이 요소에서 MUST 시작해야 합니다. EPUB 콘텐츠 문서의 시작이 미디어 오버레이의 시작 부분 또는 중간에 있는 요소에 대응할 수 있음에 유의하십시오. 미디어 오버레이 문서의 재생이 끝나면, 읽기 시스템은 다음 EPUB 콘텐츠 문서 (패키지 문서 spine에 지정된 대로)를 로드하고, 해당하는 미디어 오버레이 문서가 제공된 경우 그것도 로드하는 것이 SHOULD 권장됩니다.
읽기 시스템은
body
요소 [epub-33]의 직접 자식을
순서대로 MUST 렌더링해야 합니다.
seq
요소 [epub-33]의 자식은 순서대로 MUST 렌더링되어야 하며,
마지막 자식의 재생이 끝나면 재생이 완료됩니다. 읽기 시스템은
par
요소
[epub-33]의 자식을 병렬로(각각이 같은
시각에 시작하도록) MUST 렌더링해야 하며, 모든 자식의 재생이 끝나면
재생이 완료됩니다. 미디어 오버레이 문서의 읽기 시스템 재생은
body 요소의 마지막 자식 재생이 끝나면 완료됩니다.
미디어 오버레이
audio
요소 [EPUB-33]가 주어지면, 읽기 시스템은
src 속성이 참조하는 오디오 리소스를
clipBegin 속성이 지정한 클립 오프셋 시각에서 시작하여
clipEnd 속성이 지정한 클립 오프셋 시각에서 끝나도록
MUST 재생해야 합니다 [epub-33].
추가로:
EPUB 작성자가
clipBegin 속성을 지정하지 않은 경우, 읽기
시스템은 "0" 값을 MUST 가정해야 합니다.
EPUB 작성자가 clipEnd 속성을 지정하지 않은 경우, 읽기 시스템은
그 값을 물리적 미디어의 전체 지속 시간으로 MUST 가정해야 합니다.
clipEnd 값이 물리적 미디어의 전체 지속 시간을 초과하는 경우,
읽기 시스템은 그 값을 물리적 미디어의 전체 지속 시간으로 MUST 가정해야 합니다.
사용자가 제어할 수 있는 오디오 재생 옵션은 사용자가 음높이를 왜곡하지 않고 재생 속도를 변경할 수 있는 타임스케일 수정을 포함하는 것이 SHOULD 권장됩니다. 권장 범위는 절반 속도에서 두 배 속도까지입니다.
미디어 오버레이
text
요소 [epub-33]가 주어지고 그 src 속성이
EPUB 콘텐츠 문서의 특정 부분을 참조하는 URL-fragment string을 포함하는 경우,
읽기 시스템은 참조된 부분이 뷰포트에서
보이도록 보장하는 것이 SHOULD 권장됩니다.
[html] 요소 ID 참조 및 SVG Fragment
Identifiers [svg]에 더해, 읽기 시스템은 다른
프래그먼트 식별자 스킴을 MAY 지원할 수 있습니다.
미디어 오버레이 재생 중에, 뷰포트가 있는 읽기 시스템은 지정된 경우
메타데이터 속성 active-class 및 playback-active-class [epub-33]가 지정한 클래스 이름을
EPUB 콘텐츠 문서의 적절한 요소에 추가하는 것이
SHOULD 권장됩니다. 반대로,
재생 상태가 변경되면 스타일 정보 연결
[epub-33]에 설명된 대로 클래스 이름을
제거하는 것이 SHOULD 권장됩니다.
active-class 및 playback-active-class 메타데이터 속성은
OPTIONAL이며, 생략된 경우 읽기 시스템 동작은
구현별로 다릅니다.
이 명세의 이전 버전에는 내장 오디오 및 비디오에 대한 일부 정보 [epubmediaoverlays-32]가 포함되어 있었습니다. 이 기능은 폐기 예정입니다.
내장 오디오 및 비디오의 자동 재생에 대한 지침은 이제 폐기 예정입니다.
자세한 정보는 [epubmediaoverlays-32]의 해당 정의를 참조하십시오.
미디어 오버레이
text
요소가
audio
[epub-33] 형제 요소 없이 대상
EPUB 콘텐츠 문서 안의 텍스트를 참조하는 경우,
텍스트 음성 변환(TTS) 재생이 가능한 읽기 시스템은
참조된 텍스트를 TTS를 사용하여 렌더링하는 것이 SHOULD 권장됩니다.
읽기 시스템은 미디어 오버레이 렌더링의 일부로 오디오 스트림을 재생하기 위해 대상 EPUB 콘텐츠 문서에 제공된 음성 관련 정보를 사용하는 것이 SHOULD 권장됩니다.
EPUB 출판물에서 TTS 기술을 지원하는 방법에 대한 자세한 정보는 EPUB 3 Text-to-Speech Support [epub-tts-10]를 참조하십시오(EPUB 출판물).
미디어 오버레이 text 요소의 수명은 연결된 음성 합성의 렌더링 시간에
대응합니다. 따라서 text 요소(그리고 추론상 부모 par 요소)의
암시적 지속 시간은 Text-to-Speech 엔진의 실행에 의해 결정되며, 저작 시점에는
알 수 없습니다(말하기 속도, 일시 정지 및 기타 운율 매개변수와 같은 요소가 오디오 출력에 영향을 줍니다).
이는 또한 읽기 시스템이 패키지 문서에 설정된
duration 속성
값을 사용할 때 근사값으로 취급해야 함을 의미합니다.
읽기 시스템은 미디어
오버레이 요소의
epub:type
속성이 제공하는 시맨틱 정보를 사용하여 사용자에게 콘텐츠를 건너뛸 옵션을 제공하는 것이
SHOULD 권장됩니다.
콘텐츠 건너뛰기가 활성화된 경우, 읽기 시스템은
epub:type 속성이 건너뛸 수 있는 구조와 일치하는 시맨틱을 포함하는 모든
par 및 seq 요소의 재생을 MUST 억제해야 합니다.
미디어 오버레이를 재생하는 동안, 읽기 시스템은 사용자에게
벗어날 수 있는
구조 [epub-33]에서 나가는("벗어나는") 옵션을 제공하는 것이
SHOULD 권장됩니다. 이러한 구조는 벗어날 수 있는 구조
목록의 값을 가진
epub:type
속성 [epub-33]의 존재로 결정됩니다.
사용자가 벗어날 수 있는 구조에서 벗어나기로 선택하면,
읽기 시스템은 그 구조 다음의 다음 순차 요소에서 재생을 MUST 계속해야 합니다.
읽기 시스템은 구조적 시맨틱 [epub-33]을 EPUB 콘텐츠 문서에서 MAY 지원할 수 있습니다.
epub:type
속성을 처리할 때, 읽기 시스템은:
각 값에 대해 확장된 URL을 얻을 MAY 있습니다.
epub:type의
정의 [epub-33]에서 사용이 허용되지 않는 요소에 사용된
용어는 MUST 무시해야 합니다.
다른 어휘의 용어에 동작을 연결할 MAY 수 있습니다.
읽기 시스템은
어휘 연결 메커니즘을 지원하여
property 데이터 유형 값
[epub-33]을
처리할 MAY 수 있습니다.
이 섹션은 property 데이터 유형
값에서 확장된 URL을 얻는 알고리즘을 정의합니다. 이는 [epub-33]
어휘 연결
메커니즘을 지원하는 읽기 시스템에만 적용됩니다.
[epub-33] 어휘
연결 메커니즘을 지원하지 않는 읽기 시스템은
property 값을 일반 문자열 값
[infra]으로
처리할 MAY 수 있습니다.
이 값들의 존재에 기반하여 읽기 시스템 동작을 추가하기 위해, 이 값들을 URL로
확장하는 것을 지원할 필요는 없습니다.
이 알고리즘은 [infra]에 정의된 용어와 데이터 유형을 사용하여 과정을 설명하며, 성공하면 확장된 URL이 반환된 문자열 값을 결과로 냅니다. 유효하지 않은 속성에는 null 값이 반환됩니다.
이 알고리즘은 다음 인수를 받습니다:
property 값.확장된 URL을 얻으려면, 다음 단계를 적용합니다:
baseURL, expandedURL, propertyPrefix 및 propertyReference를 빈 문자열로 둡니다.
이 알고리즘에서:
propertyPrefix 및 propertyReference의 값을 다음과 같이 얻습니다:
value가 콜론(U+003A)을 포함하지 않으면, propertyReference를 value로 설정합니다.
property 값에 콜론이 없으면 접두사가 없습니다. 이
경우, 알고리즘의 다음 단계에서 설명한 대로 값은 기본 어휘에서 가져옵니다.
그렇지 않고 value가 콜론으로 시작하면, 그 값은 유효하지 않습니다. null을 반환합니다.
값의 시작에 있는 콜론은 접두사가 설정되지 않았음을 나타내므로 유효하지 않습니다.
그렇지 않으면, value를 첫 번째 콜론에서 나누고 propertyPrefix를 콜론 앞의 문자열로, propertyReference를 콜론 뒤의 문자열로 설정합니다.
propertyReference가 path-relative-scheme-less-URL
문자열로서 유효하지 않으면,
property 데이터 유형
정의 [epub-33]에서 요구하는 바에 따라, 그 값은 유효하지 않습니다. null을 반환합니다.
path-relative-scheme-less-URL 문자열 정의에는 접두사가 있든 없든 참조에 적용되는 여러 제한이 있습니다.
예를 들어, 참조는 URL-scheme string 뒤에 콜론이 오는
것으로 시작해서는 안 됩니다.
이 제한은 다음 값이 두 번째 콜론이 스킴을 나타낼 수 있으므로 유효한
property 값이 아님을 의미합니다: foo:bar:baz/qux.
또한 어떤 문자를 퍼센트 인코딩해야 하는지에 대한 제한도 있습니다.
baseURL의 값을 다음과 같이 얻습니다:
propertyPrefix가 빈 문자열인 경우:
epub:type
[epub-33]이면, baseURL을
http://idpf.org/epub/vocab/structure/#로 설정합니다.
meta
요소 [epub-33]이고
attr이 scheme이면, 속성 값은 유효하지 않습니다. null을
반환합니다.
meta
요소 [epub-33]이면,
baseURL을
http://idpf.org/epub/vocab/package/meta/#로 설정합니다.
link
요소 [epub-33]이면,
baseURL을
http://idpf.org/epub/vocab/package/link/#로 설정합니다.
item
요소 [epub-33]이면,
baseURL을
http://idpf.org/epub/vocab/package/item/#로 설정합니다.
itemref
요소
[epub-33]이면, baseURL을
http://idpf.org/epub/vocab/package/itemref/#로 설정합니다.
그렇지 않으면:
prefix 속성이 doc의 문서 요소에 선언되어 있고,
해당 속성이 propertyPrefix와 일치하는 접두사를 포함하면,
baseURL을 접두사 선언과 연결된 URL로 설정합니다.
그렇지 않고 propertyPrefix가 doc에 대한 예약된 접두사 [epub-33]와 일치하면, baseURL을 예약된 접두사와 연결된 URL로 설정합니다.
property 값에 접두사가 있으면, 그 기본 URL을 확인할 첫 번째 위치는
문서 요소의 prefix 속성 선언입니다.
작성자가 접두사에 URL을 할당하지 않은 경우, 다음 단계는 해당 접두사가 예약된 접두사 중 하나와 일치하는지 확인하는 것입니다.
작성자가 할당한 접두사 URL은 예약된 접두사 URL을 재정의함에 유의하십시오.
baseURL이 빈 문자열이면, 속성 값은 유효하지 않습니다. null을 반환합니다.
이 처리 단계가 끝날 때 기본 URL이 비어 있으면, 접두사가
매핑되지 않았거나 예약되지 않았거나, 처리 중인 요소 또는 속성이
[epub-33]에 정의된 대로
property 데이터 유형을 허용하지 않는다는 뜻입니다.
기본 URL이 없으면 확장된 URL을 생성할 수 없으므로, 값은 유효하지 않습니다.
expandedURL이 유효한 URL 문자열이 아니면, 그 값은 유효하지 않습니다. null을 반환합니다.
그렇지 않으면, expandedURL을 반환합니다.
확장된 값을 얻을 수 있더라도, 그것이 반드시 유효한 URL인 것은 아닙니다. 이는 EPUB 작성자가 접두사에 유효하지 않은 기본 URL을 할당한 경우에만 발생할 가능성이 있습니다.
읽기 시스템은
패키지 문서의 version 속성 [epub-33]이
"3.0"보다 작은
EPUB 출판물을 처리하려고
MUST 시도해야 합니다.
이전 버전 번호를 가진 EPUB 출판물은 각자의 명세에 따라 처리하지 않으면 항상 의도한 대로 정확하게 렌더링되지는 않습니다. 읽기 시스템은 해당 명세에서 정의한 대로 이러한 EPUB 출판물을 지원하는 것이 SHOULD 권장됩니다.
읽기 시스템은
패키지 문서의 version 속성
[epub-33]이
"3.0"보다 큰 EPUB 출판물을 처리하려고
SHOULD
시도해야 합니다.
이 섹션은 비규범입니다.
이 명세의 주된 초점은 EPUB 출판물을 처리하고 렌더링하는 방법에 있지만, 모든 읽기 시스템이 제공해야 하는 특정 사용자 인터페이스를 의무화하지는 않습니다. 이것이 모든 읽기 시스템 개발자가 인식해야 하거나 애플리케이션에서 피하려고 해야 할 공통 접근성 문제가 없다는 의미는 아닙니다.
W3C의 User Agent Accessibility Guidelines [uaag20]는 많은 브라우저 접근성 문제가 EPUB 전용 사용자 에이전트에서도 유사하게 나타나므로, 개발자가 읽기 시스템을 개선하기 위해 적용해야 할 많은 유용한 실천 방법을 제공합니다.
다음 목록은 접근성 부족이 사용자의 읽기 경험에 영향을 주는 몇 가지 추가 EPUB 전용 영역을 개괄합니다:
DAISY 컨소시엄은 이러한 문제와 그 외의 문제를 평가하는 데 도움을 주기 위해 접근성 테스트 스위트를 유지 관리합니다.
이 섹션은 비규범입니다.
EPUB 출판물의 특수성은 그 구조에 있습니다. EPUB 형식은 HTML, CSS, SVG 및 기타 리소스를 포함하는 구조화되고 의미론적으로 강화된 웹 콘텐츠를 단일 파일 컨테이너로 배포하기 위해 표현하고, 패키징하고, 인코딩하는 수단을 제공합니다.
읽기 시스템의 경우, 이는 보안 및 개인정보 보호 문제가 주로 이러한 형식의 기능에 기반하며, 일반적인 웹 콘텐츠가 제시하는 위협과 매우 유사하다는 것을 의미합니다.
읽기 시스템 개발자에게는 애플리케이션의 보안과 개인정보 보호를 보장하는 동시에 그 안에서 렌더링되는 콘텐츠로부터 사용자에게 가해지는 위협을 제한하도록 돕는 이중 책임도 있습니다. 이 섹션의 나머지는 개발자가 이러한 위험을 인식하고 완화하는 데 도움을 주기 위해 EPUB 3의 위험 모델을 살펴봅니다.
EPUB 출판물 저작과 관련된 위험은 [epub-33]의 보안 및 개인정보 보호 섹션을 참조하십시오.
이 섹션은 비규범입니다.
사용자에게 가장 큰 위협은 사용자가 읽는 콘텐츠 [epub-33]에서 오며, 이러한 공격에 대한 첫 번째 방어선은 사용자가 사용하는 읽기 시스템입니다. 사용자는 읽기 시스템이 악성 콘텐츠에 대한 보호 장치로 작동할 것이라고 기대하며, EPUB 출판물이 웹 사이트와 동일한 보안 위험에 취약하다는 사실을 인식하지 못하는 경우가 많습니다.
하지만 읽기 시스템은 보안과 개인정보 보호를 제공하도록 의존되는 한편, 정보 처리 방식에 따라 사용자에게 의도치 않은 위협을 줄 수도 있습니다. 예를 들어 경험을 최적화하기 위해 사용자 정보를 추적하는 것은 흔한 필요이지만, 사용자 허가 없이 수행하면 읽기 시스템은 법적 개인정보 보호 요구사항을 위반할 수 있습니다.
이 섹션은 읽기 시스템 개발자가 고려해야 하는 주요 위협 몇 가지를 개괄하며, 자세한 내용과 권장사항은 다음 섹션들에 제공합니다.
악성 스크립트는 읽기 시스템에 대해 여러 공격 벡터를 제시합니다. 예를 들어 로컬 스토리지가 안전하지 않으면, 사용자의 데이터를 침해하려고 시도할 수 있습니다. 네트워크 접근이 제공되면, 사용자 데이터를 무단으로 수집하려고 시도할 수 있습니다.
이러한 문제와 완화 방법에 대한 더 자세한 논의는 6.4.3 보안 고려사항에 제공됩니다.
EPUB 출판물에는 읽기 시스템이나 그것이 실행되는 운영 체제의 보안 결함을 악용하도록 설계된 리소스가 포함될 수 있습니다. 공격자는 심볼릭 링크나 파일 별칭과 같은 파일 간접 참조 기법을 사용하여 원격 리소스에 접근하려고 시도할 수도 있습니다.
EPUB 출판물에 서명하는 표준 방법이 없다는 것은, 읽기 시스템이 저작과 장치 로딩 사이에 콘텐츠가 변조되었는지 항상 검증할 수 없다는 것을 의미합니다.
원격 리소스는 신뢰할 수 없는 출처에서 로드된 EPUB 출판물과 동일한 위험을 제시합니다. EPUB 출판물의 발행자를 신뢰하더라도, 원격 리소스는 침해될 수 있습니다.
원격 리소스 호출은 사용자에 대한 정보를 추적하는 데도 사용될 수 있습니다(예: 서버 로그를 통해). 읽기 시스템은 HTTP 요청을 통해 노출하는 정보를 리소스를 얻는 데 필수적인 것만으로 제한해야 합니다.
EPUB의 출처는 EPUB 작성자에게 알려져 있지 않고 각 읽기 시스템
구현마다 고유합니다. 따라서 EPUB
작성자가 자신이 제어하는 웹 서버에 원격 리소스를 호스팅하는 경우, 그 서버는 사실상
CORS, Content-Security-Policy,
또는 X-Frame-Options용 헤더와 같이
허용 가능한 출처를 지정해야 하는 보안 기능을 사용할 수 없습니다.
원격 리소스와 마찬가지로, 외부 링크는 방심한 사용자를 속여 웹상의 악성 리소스를 열게 하여 읽기 시스템이나 운영 체제를 악용하도록 설계된 리소스를 열게 하는 데 사용될 수 있습니다.
마찬가지로, 읽기 시스템은 링크 이동을 통해 사용자를 식별할 수 있는 정보를 노출하지 않도록 해야 합니다(예: 추적 식별자를 사용하지 않거나 사용자의 환경에 대한 불필요한 정보를 노출하지 않음).
읽기 경험 안의 사용자 생성 콘텐츠, 예를 들어 텍스트 영역이나 기타 대화형 구성 요소를 통한 콘텐츠는 적절히 보호되지 않으면 읽기 시스템 보안이나 사용자 개인정보 보호에 위협이 될 수 있습니다. 스크립팅 보안에 대한 자세한 내용은 6.4.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 권장됩니다(예: 출처에 처음 접근할 때 사용자에게 스크립팅 및 네트워크 접근 허용을 요청). 읽기 시스템이 사용자가 자신의 콘텐츠를 로드하도록 허용하는 경우(예: "사이드로딩" 과정), 각 인스턴스는 안전하지 않은 것으로 취급하는 것이 SHOULD 권장됩니다.
XML 문서를 처리할 때, 읽기 시스템은 DOCTYPE, ENTITY 및 NOTATION 선언의 외부 식별자 [xml]를 해석해서는 SHOULD NOT 안 됩니다. 읽기 시스템은 또한 예를 들어 DoS 공격으로도 알려진 "Billion laughs attacks" 또는 "XML external entity attacks"와 같은 내부 또는 외부 XML 엔터티와 관련된 보안 위험도 SHOULD 고려해야 합니다.
외부 링크, 네트워크 접근 및 스크립팅에 대한 추가 보안 권장사항은 각각 3.9 외부 링크, 3.8 네트워크 접근 및 6.4.3 보안 고려사항에서 확인할 수 있습니다.
읽기 시스템은 폐기 예정 기능 [epub-33]을 MAY 지원할 수 있습니다.
개발자는 폐기 예정 기능에 대한 새 지원을 추가하기 전에, 그러한 기능을 가진 콘텐츠를 마주칠 가능성이 낮다는 점을 고려해야 합니다.
읽기 시스템은 EPUB 출판물의 핵심 렌더링 엔진으로 작동하며, [dom] 명세에 기반한 스크립팅 환경을 제공합니다. 따라서 이 인터페이스 정의가 읽기 시스템 구현을 위해 [webidl] 표기법을 사용하더라도, 웹 브라우저가 일반적으로 이러한 객체를 구현할 필요는 없습니다.
이 명세는 Navigator 객체 [html]를
다음과 같이 확장합니다.
WebIDL[Exposed=(Window)]
interface EpubReadingSystem {
boolean hasFeature(DOMString feature, optional DOMString version);
};
이 명세는
WorkerNavigator
객체 [html]에 대한 epubReadingSystem 속성 확장을 정의하지
않습니다.
따라서 읽기 시스템은 Workers의 스크립팅 맥락에서
epubReadingSystem 객체를 노출할 필요가 없으며, EPUB 작성자는 그 존재에 의존할 수 없습니다.
Navigator.epubReadingSystem
객체는 스크립트 콘텐츠 문서가 사용자의 읽기
시스템에 대한 정보를 질의할 수 있는 인터페이스를
제공합니다.
읽기 시스템은 모든 로드된 스크립트 콘텐츠 문서의 navigator
객체에 epubReadingSystem 객체를 MUST 노출해야 하며,
여기에는 중첩된 컨테이너 제약 스크립팅
맥락 [epub-33]도 포함됩니다. 읽기 시스템은
DOMContentLoaded
이벤트가 트리거될 때 [html]까지는 epubReadingSystem
객체가 사용 가능하도록 MUST 보장해야 합니다.
읽기 시스템 구현은 기술적 실현 가능성 때문에 스크립트 콘텐츠 문서 안에
epubReadingSystem 객체의 복제된 인스턴스를 만들 수 있습니다. 이러한 경우,
읽기 시스템은 그 속성과 메서드의 값에 반영된 객체 상태를 모든 복사된 인스턴스에서
일관되게 유지하도록 보장해야 합니다.
이 명세는 예전에는 name, version 및
layoutStyle 속성을 정의했지만, 이제 이들은 폐기 예정입니다
[epub-33]. 자세한 정보는
[epubcontentdocs-32]의 정의(name
및 version에 대해)와 [epubcontentdocs-301]의 정의(layoutStyle에
대해)를 참조하십시오.
hasFeature
메서드는 읽기 시스템이 지정된 기능의 어떤 버전이든 지원하는지 여부를 나타내는
boolean 값을 반환하거나, 읽기 시스템이 지정된
기능을 인식하지 못하는 경우 undefined를 반환합니다.
선택적 version 매개변수는 EPUB 작성자가 시간이 지남에 따라 호환되지 않는 방식으로
변경될 수 있는 사용자 정의 기능을 질의할 수 있게 합니다. 반환값은 지정된 기능 버전에 대한
지원만을 나타냅니다.
이 명세에서 정의된 기능은
버전이 없습니다. 읽기 시스템이 이 명세에서 정의된 기능을 지원하는 경우, 제공된
version 매개변수를 MUST
무시하고 true 값을 반환해야 합니다.
다음 표는 epubReadingSystem 객체를 지원하는 읽기 시스템이
MUST 인식해야 하는 기능 집합을 나열합니다. 기능이
hasFeature 메서드에서 질의되면, 읽기 시스템은
해당 지원 여부를 나타내는 boolean 값을 MUST 반환해야 합니다.
| 이름 | 설명 |
|---|---|
dom-manipulation
|
스크립트가 문서의 DOM에 구조적 변경을 가할 수 있습니다(spine 수준 스크립팅 [epub-33]에만 적용). |
layout-changes
|
스크립트가 콘텐츠 레이아웃에 영향을 주는 속성과 CSS 스타일을 수정할 수 있습니다 (spine 수준 스크립팅 [epub-33]에만 적용). |
touch-events
|
장치가 터치 이벤트를 지원하며, 읽기 시스템이 터치 이벤트를 콘텐츠에 전달합니다. |
mouse-events
|
장치가 마우스 이벤트를 지원하며, 읽기 시스템이 마우스 이벤트를 콘텐츠에 전달합니다. |
keyboard-events
|
장치가 키보드 이벤트를 지원하며, 읽기 시스템이 키보드 이벤트를 콘텐츠에 전달합니다. |
spine-scripting
|
읽기 시스템이 spine 수준 스크립팅 [epub-33]을 지원하는지 여부를 나타냅니다 (예: 컨테이너 제약 스크립트 [epub-33]가 최상위 콘텐츠 문서의 스크립팅 지원에 의존하는 동작을 시도하기 전에 성공 가능성이 있는지 판단할 수 있도록). |
읽기 시스템 개발자는 추가 기능을 MAY 추가할 수 있지만, 이 명세의 향후 버전은 이러한 사용자 정의 추가 기능과 충돌하거나 호환되지 않을 수 있는 방식으로 이 목록에 추가할 수 있습니다.
EpubReadingSystem 인터페이스
§B.1
hasFeature 메서드
(EpubReadingSystem용)
§B.4.1.1
Navigator.epubReadingSystem 속성
(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
유형
style 속성(html-global
요소용)
boolean
유형
DOMString 인터페이스
[Exposed] 확장 속성
[LegacyUnforgeable] 확장 속성
[SameObject] 확장 속성
이 섹션은 비규범입니다.
이 변경 기록은 EPUB 3.2 이후의 실질적 변경만 식별한다는 점에 유의하십시오 — 즉 EPUB 읽기 시스템의 적합성에 영향을 줄 수 있는 변경입니다.
처리된 모든 이슈 목록은 워킹 그룹의 이슈 트래커를 참조하십시오.
실질적 변경은 없었습니다.
getOverrideStyle 참조를 제거했습니다.
pull request 2531을 참조하십시오.
rendition:flow 값이 웹툰 같은 출판물의
출판을 제어할 수 있는 향후 기능 가능성에 대한 참고를 추가했습니다.
issue 2412를 참조하십시오.
epubReadingSystem 객체의 name 및
version 속성이 폐기 예정이 되었습니다. issue
1872를 참조하십시오.
hreflang 값을 사용하지 않아야 한다는
중복 요구사항을 제거했습니다. pull request
2343을 참조하십시오.rendition:spread 및
rendition:orientation 속성의 기본값 문구를 요구사항으로 격상하여
rendition:layout과 맞추었습니다. issue
1936을 참조하십시오.
page-spread-center는 이제 spread-none의 별칭입니다. issue 1929를 참조하십시오.
textref 속성과 text 요소의
src 속성에서 HTML 대상 요소 및 SVG 프래그먼트 식별자에 대한 참조를 읽기 시스템이
지원하도록 권장했습니다. 다른 프래그먼트 식별자 스킴 지원은 선택 사항입니다. issue 1586을 참조하십시오.
meta 요소 속성이 자체 공백 처리 규칙을 정의할 수 있다는 예외를
제거했습니다. issue 1295를 참조하십시오.
dc:language 요소의 언어를 리소스의 언어로
사용하지 않아야 한다는 명시적 요구사항을 추가했습니다.
auto 값 추가를 고려하여 dir 속성의
기본 방향 결정 규칙을 추가했습니다. issue 1491을 참조하십시오.
link 요소의 새 hreflang 속성에 있는
언어 정보가 권위적이지 않다는 점을 명시했습니다. issue 1488을
참조하십시오.
이 섹션은 비규범입니다.
명세는 예술과 마찬가지로 인간의 창작물입니다. Garth Conboy만큼 EPUB에 많은 기여를 한 사람은 없습니다. 그는 1999년 최초의 OEB 1.0부터 오늘날의 EPUB 3.3까지 모든 단계에 함께했습니다. Garth의 비전, 지식, 그리고 비범하게 선한 성품이 없었다면 이 모든 것은 일어나지 않았을 것입니다. 우리는 EPUB 3.3을 그의 기억에 바칩니다. Garth, 우리는 영원히 당신에게 빚지고 있습니다.
EPUB 3 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:
Referenced in:
Referenced in: