XSL-FO
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
XSL-FO(Extensible Stylesheet Language Formatting Objects)는 페이지 매체를 위한 XML 기반의 표현 언어이다. HTML과 CSS와 달리 통합된 표현 언어이며, 주로 XML 문서를 XSLT 변환을 통해 XSL-FO로 변환하여 PDF, PostScript, RTF 파일 등으로 변환하거나 화면에 표시한다. XSL-FO는 텍스트 레이아웃을 명확하게 설명하지 않고, 페이지의 모양과 내용의 위치를 설명하며, FO 프로세서가 텍스트 배치를 결정한다. XSL-FO는 다국어 지원, 낮은 비용, 성숙한 표준이라는 장점이 있지만, 제한된 기능, 확장 의존성, 수동 편집의 어려움 등의 단점도 존재한다. CSS3-paged가 XSL-FO를 대체하기 위한 W3C 제안으로 제시되고 있다.
더 읽어볼만한 페이지
- 페이지 기술 언어 - 포스트스크립트
어도비 시스템즈에서 개발한 포스트스크립트는 페이지 기술 언어이자 튜링 완전한 프로그래밍 언어로서, 데스크톱 출판 혁명을 이끌고 인쇄 기술 발전에 기여했으며, PDF 형식의 기반이 되었다. - 페이지 기술 언어 - EPUB
EPUB은 디지털 출판물 제작을 위한 전자책 파일 형식 기술 표준으로, 텍스트 자동 공간 조정, 글자 크기 변환, 이미지 내장, 메타데이터 포함, CSS 스타일 지정 등의 특징을 가지며, 최신 웹 기술을 지원하고 일본어 조판 지원을 강화하여 국제화를 추진한다. - 마크업 언어 - HTML
HTML은 웹 페이지 제작을 위한 표준 마크업 언어로서, 팀 버너스리가 제안하고 구현한 후 인터넷 발전과 함께 널리 사용되며, SGML에 기반하여 하이퍼텍스트 기능으로 다양한 콘텐츠를 표현하고 연결하며, W3C와 WHATWG에서 표준화를 진행하고 최신 버전은 HTML Living Standard이다. - 마크업 언어 - XAML
XAML은 마이크로소프트에서 개발한 XML 기반의 마크업 언어로, 사용자 인터페이스, 데이터 바인딩, 이벤트 처리 등을 정의하며 WPF, Silverlight, WF, WinRT API 앱, Xamarin.Forms 등에서 UI 개발에 널리 사용된다.
XSL-FO - [IT 관련 정보]에 관한 문서 | |
---|---|
XSL 포매팅 객체 | |
종류 | 마크업 언어 |
확장자 | .xml, .fo |
MIME 형식 | application/xml , text/xml (더 이상 사용되지 않음) |
소유자 | 월드 와이드 웹 컨소시엄 (W3C) |
최신 버전 | 1.1 |
최신 버전 출시일 | 2006년 12월 5일 |
기반 | XML |
개방 여부 | 예 |
URL | XSL 포매팅 객체 |
2. XSL-FO 기본 개념
CSS2(페이지 미디어 모듈)가 인쇄 미디어에 기본 기능을 제공하기 시작하면서 CSS 표준과 함께 XML 및 HTML 표준이 적용되었다. W3C는 CSS Paged Media Module Level 3을 통해 문서 형식화 및 PDF 생성을 위한 통합 표준을 공식화하고 있으며, 2013년부터 CSS3-paged는 XSL-FO 대체를 위한 W3C 제안이다.[1]
XSL 서식 개체 버전 2.0에 대한 디자인 노트는 2009년에 처음 게시되었으며 2012년에 마지막으로 업데이트되었다.[2]
HTML과 CSS의 조합과 달리 XSL-FO는 통합된 표현 언어이다. HTML에서 사용되는 의미론적 마크업이 없으며, 외부 XML 또는 HTML 문서의 기본 표현을 수정하는 CSS와 달리, 문서의 모든 데이터를 자체적으로 저장한다.[3]
XSL-FO는 "내용 주도"(content-driven) 설계에 적합하며, 서적, 논문, 법적 문서 등에서 표준적인 방법이다. 이 설계는 단일 흐름(플로우) 영역을 가지며 페이지 여백에 다양한 정보를 배치할 수 있다. 반면, "배치 주도"(layout-driven) 설계는 신문이나 잡지 등에서 사용되며, 문서 내용에 필요한 공간을 충분히 확보하지 못하면 배치를 조정해야 한다. XSL-FO는 배치 주도 설계의 제약을 표현하는 기능이 일부 부족하다.
XSL-FO는 표, 목록, 측면 부동체(본문과 분리된 영역) 등 다양한 기능을 갖추고 있으며, 이러한 기능은 CSS의 조판 기능과 호환된다.
XSL-FO는 여러 페이지로 구성된 매체를 상정하여 설계되었고, 페이지의 개념은 필수적인 요소이다. XML을 다루는 사람들에게 XSL-FO 처리 시스템은 여러 페이지에 정보를 표시할 때 강력한 도구이다.
XSL-FO의 기본적인 생각은 컴퓨터에 의한 조판이다. XSL-FO 문서에는 인쇄 대상이 되는 문서 데이터와 문서 데이터에 대한 조판의 제약 정보가 포함되어 있으며, 이를 바탕으로 XSL-FO 처리 시스템은 조판을 수행한다. 이러한 구조 때문에, XSL-FO 처리 시스템마다 출력이 일치하지 않을 수 있다. 그러나 XSL-FO의 일반적인 목적은 여러 페이지로 구성된 조판된 매체를 생성하는 것이므로, 이는 그다지 문제가 되지 않는다. XSL-FO는 주로 종이 등에 인쇄된 문서나 PDF 파일 생성에 사용된다.
2. 1. XSL-FO의 작동 방식
HTML과 CSS를 함께 사용하는 것과 달리, XSL-FO는 표현 언어가 통합되어 있습니다. HTML처럼 의미를 기준으로 마크업을 하지 않고, 조판에 필요한 마크업만 사용합니다. 또한, XSL-FO는 문서 자체에 조판 대상이 되는 모든 데이터를 저장합니다. 반면, CSS는 외부 XML이나 HTML 문서의 표현을 변경하는 방식을 사용합니다.일반적으로 XSL-FO를 사용할 때는, 먼저 FO가 아닌 XML 언어(예: XHTML, DocBook, TEI)로 문서를 작성합니다. 그런 다음, 직접 작성하거나 해당 문서 유형에 맞게 만들어진 것을 찾아 XSLT 변환을 얻습니다. 이 XSLT 변환을 통해 XML 문서를 XSL-FO 문서로 변환합니다.

XSL-FO 문서가 만들어지면, FO 프로세서라는 프로그램으로 전달됩니다. FO 프로세서는 XSL-FO 문서를 읽거나 인쇄할 수 있는 형태로 변환합니다. 가장 일반적인 출력은 PDF 파일이나 PostScript이지만, 일부 FO 프로세서는 RTF 파일처럼 다른 형식으로 출력하거나, 사용자 GUI에 페이지와 내용을 표시하는 창으로 출력할 수도 있습니다.
XSLT 언어는 원래 이 용도로만 만들어졌지만, 현재는 XML 변환에 널리 사용됩니다. XML을 XSL-FO로 변환하는 XSLT를 XSL-FO 문서 자체라고 부르기도 하고, XSL-FO 튜토리얼에서도 FO 처리 지침 주변에 XSLT 명령을 사용하여 작성하는 경향이 있습니다.
XSLT 변환은 목차, 연결된 참조, 색인 등을 자동 생성할 수 있을 정도로 강력합니다.
XSL-FO 문서는 PDF나 PostScript 문서처럼 텍스트 레이아웃을 명확하게 설명하지 않습니다. 대신, 페이지가 어떻게 보이고 내용이 어디에 들어가는지를 설명합니다. FO 프로세서는 FO 문서의 설명에 따라 텍스트를 배치합니다. XSL-FO 사양은 서로 다른 FO 프로세서가 결과 페이지에 대해 다양한 반응을 보일 수 있도록 허용합니다.
예를 들어, 어떤 FO 프로세서는 줄을 나눌 때 공간을 최소화하기 위해 단어를 하이픈으로 연결할 수 있지만, 다른 프로세서는 그렇지 않을 수 있습니다. 또한, 하이픈 연결 알고리즘도 프로세서마다 다를 수 있습니다. 이러한 차이로 인해 경계 사례에서는 페이지 레이아웃이 달라질 수 있습니다. XSL-FO 사양은 레이아웃과 관련하여 FO 프로세서에게 어느 정도 선택의 여지를 줍니다.
FO 프로세서 간의 이러한 차이는, 즉 프로세서 간에 결과가 일관되지 않는 것은 보통 문제가 되지 않습니다. XSL-FO의 일반적인 목적은 페이지가 매겨진 인쇄 매체를 만드는 것이기 때문입니다. XSL-FO 문서는 보통 중개자 역할을 하며, 주로 PDF 파일이나 인쇄 문서를 만드는 데 사용됩니다. 이는 HTML이 최종 형태로 사용자에게 전달되는 방식과 대조적입니다. 최종 PDF를 배포하면 수신자가 형식 언어 해석기 간의 차이로 인한 예측 불가능성에 영향을 받지 않지만, 다른 페이지 크기, 글꼴 크기, 화면/종이/오디오 표현 등 다양한 요구에 쉽게 적응할 수 없다는 의미이기도 합니다.
XSL-FO 문서와 변환 전의 문서 모두 XML을 따르는 마크업 언어입니다. 이는 XHTML/HTML과 CSS를 함께 사용하는 경우와 대조적입니다. XHTML/HTML은 XML/SGML을 따르지만, CSS는 독자적인 구문으로 작성되어 XML을 따르지 않습니다.
XSL은 XSLT가 임의의 XML을 처리할 수 있기 때문에 어떤 XML 문서에도 적용할 수 있습니다. 또한, 출력 수단도 XSL-FO에 국한되지 않고, XSLT를 사용하여 XHTML 등(XML 기반이라면 무엇이든)으로 변환할 수도 있습니다.
XSL에서는 먼저 XSLT 스타일시트를 사용하는 경우가 많습니다. 이 XSLT 스타일시트는 대상 XML 문서의 문서 타입(스키마)에 맞춰 작성됩니다. XSLT 스타일시트는 조판하는 사람이 직접 작성하거나, 문서 타입에 맞춰 작성된 기성품을 사용할 수도 있습니다. 이 XSLT 스타일시트를 적용하면 대상 XML 문서는 XSL-FO 문서로 변환됩니다.
XSL-FO에서는 XML 문서 작성자가 일반 XML 문서를 작성하고, 직접 XSL-FO 형식의 XML 문서를 작성하는 것은 상정하지 않습니다. XSL-FO에서는 XML 문서 작성자가 작성한 XML 문서를 XSLT를 사용하여 XSL-FO 형식의 XML 문서로 변환한다고 가정합니다. XSLT의 스타일시트는 작성된 XML 문서와 별도로 작성하거나 XML 문서 자체에 내장할 수 있습니다. XSL-FO 문서 생성은 XSLT 변환을 통해 수행할 수 있지만, 적절한 XSL-FO 형식으로 생성할 수 있다면 XSLT를 사용하지 않고 임의의 수단으로 생성해도 됩니다.
XSLT는 원래 XSL-FO 변환 용도로만 만들어졌지만, XML 문서의 범용적인 변환에 사용 가능합니다. 현재는 많은 소프트웨어 기술자(프로그래머)가 XSLT를 XML 문서의 범용적인 변환 언어로 인식하고 있으며, XML 문서를 XSL-FO 문서로 변환하는 용도는 잘 알려져 있지 않습니다.
XSLT 변환은 매우 강력합니다(튜링 완전). XSLT를 사용하면 자동으로 문서 목차를 만들거나, 참고 문헌 링크를 설정하거나, 색인을 만드는 등 다양한 기능을 수행할 수 있습니다.
XSL-FO 형식의 문서가 만들어지면, XSL-FO 처리 시스템이 해당 문서를 처리하여 조판합니다. XSL-FO 처리 시스템은 XSL-FO 문서를 입력으로 받아, 사람들이 읽기 쉬운 파일 형식이나 인쇄/표시 가능한 매체를 출력합니다. 출력 가능한 형식은 XSL-FO 처리 시스템의 구현에 따라 다릅니다. 현재 XSL-FO에서 가장 일반적인 출력 형식은 PDF입니다. 구현에 따라 PostScript나 RTF 등 다른 형식으로 출력하거나, 파일을 만들지 않고 직접 컴퓨터 화면에 표시하거나, 직접 인쇄할 수도 있습니다.
2. 2. XSLT의 역할
XSLT는 원래 XSL-FO로 변환하기 위한 목적으로만 구상되었다. 그러나 현재는 XML 문서의 범용적인 변환에 널리 사용된다. 많은 소프트웨어 기술자(프로그래머)들은 XSLT를 XML 문서의 범용적인 변환 언어로 인식하고 있으며, XML 문서를 XSL-FO 문서로 변환하는 용도는 상대적으로 덜 알려져 있다.XSL-FO를 사용하는 일반적인 방법은 다음과 같다. 먼저, 사용자는 XHTML, DocBook, TEI 등 FO가 아닌 XML 언어로 문서를 작성한다. 그런 다음, 직접 작성하거나 해당 문서 유형에 맞는 변환을 찾아 XSLT 변환을 얻는다. 이 XSLT 변환은 XML을 XSL-FO로 변환한다.
XSLT 변환 단계는 매우 강력하여, 목차, 연결된 참조, 색인 및 기타 다양한 기능을 자동 생성할 수 있다. XML을 XSL-FO로 변환하는 XSLT를 실제 XSL-FO 문서 자체라고 부르는 경우도 드물지 않다. 심지어 XSL-FO 튜토리얼조차도 FO 처리 지침 주위에 XSLT 명령을 사용하여 작성되는 경향이 있다.
2. 3. FO 프로세서의 유연성
HTML과 CSS 조합과 달리, XSL-FO는 통합된 표현 언어이다. HTML처럼 의미론적 마크업이 없고, 문서의 모든 데이터를 자체적으로 저장한다.일반적으로 사용자는 FO가 아닌 XHTML, DocBook, TEI 등의 XML 언어로 문서를 작성한다. 그런 다음 직접 작성하거나 해당 문서 유형에 대한 변환을 찾아 XSLT 변환을 얻어 XML을 XSL-FO로 변환한다.
XSL-FO 문서가 생성되면 FO 프로세서라는 애플리케이션으로 전달된다. FO 프로세서는 XSL-FO 문서를 읽거나, 인쇄하거나, 둘 다 할 수 있는 형태로 변환한다. 가장 일반적인 출력은 PDF 파일 또는 PostScript이지만, 일부 FO 프로세서는 RTF 파일 등 다른 형식으로 출력하거나, 사용자 GUI에 페이지 시퀀스 및 내용을 표시하는 창으로 출력할 수도 있다.
XSLT 언어는 원래 이 목적으로만 구상되었으나, 현재는 더 일반적인 XML 변환에 널리 사용된다. XML을 XSL-FO로 변환하는 XSLT를 실제 XSL-FO 문서 자체라고 부르는 것도 드문 일이 아니며, XSL-FO 튜토리얼조차도 FO 처리 지침 주위에 XSLT 명령을 사용하여 작성되는 경향이 있다.
XSLT 변환 단계는 목차, 연결된 참조, 색인 등을 자동 생성할 수 있을 정도로 강력하다.
XSL-FO 문서는 PDF 또는 PostScript 문서와 달리 텍스트 레이아웃을 명확하게 설명하지 않는다. 대신 페이지의 모습과 내용이 들어갈 위치를 설명하고, FO 프로세서가 텍스트 배치 방법을 결정한다. XSL-FO 사양은 서로 다른 FO 프로세서가 결과 페이지에 대해 다양한 응답을 가질 수 있도록 허용한다.
예를 들어, 일부 FO 프로세서는 줄을 나눌 때 공간을 최소화하기 위해 단어를 하이픈으로 연결할 수 있지만, 다른 프로세서는 그렇지 않을 수 있다. 하이픈 연결 알고리즘도 프로세서마다 다를 수 있으며, 이는 몇몇 경계 사례에서 페이지 레이아웃을 상당히 변경한다.
FO 프로세서 간의 이러한 차이는 문제가 되지 않는 경우가 많다. XSL-FO의 일반적인 목적은 페이지가 매겨진 인쇄 매체를 생성하는 것이기 때문이다. XSL-FO 문서는 중개자 역할을 하며, 주로 PDF 파일이나 인쇄 문서를 생성하는 데 사용된다. 이는 HTML이 최종 형태로 사용자에게 생성 및 배포되는 방식과 대조적이다. 최종 PDF를 배포하면 수신자가 형식 언어 해석기 간의 차이로 인한 예측 불가능성의 영향을 받지 않지만, 문서가 다른 페이지 크기나 글꼴 크기, 화면/종이/오디오 프레젠테이션 등 수신자의 다양한 요구에 쉽게 적응할 수 없다는 의미이기도 하다.
XSL-FO 문서와 변환 전 문서 모두 XML을 준수하는 마크업 언어이다. 이는 XHTML/HTML과 CSS 조합과 대조적인데, XHTML/HTML은 XML/SGML을 준수하지만 CSS는 독자적인 구문으로 작성되어 XML을 준수하지 않는다.
XSL-FO에서는 XHTML과 달리 의미 기반 마크업은 수행하지 않고 조판에 필요한 마크업만 수행하며, XSL-FO 문서 자체에 조판 대상 문서 데이터가 모두 저장된다. 반면 CSS는 다른 XML 또는 XHTML 문서의 기본 표현을 변경하는 방식을 사용한다.
3. XSL-FO 언어 개념
XSL-FO 언어는 페이지 매체용으로 설계되었으며, 페이지 개념은 XSL-FO 구조의 필수적인 부분이다.
XSL-FO 문서와 (XSLT에 의해 XSL-FO 형식으로 변환되기 전의 문서)는 모두 XML을 준수하는 마크업 언어이다. 이는 XHTML/HTML과 CSS를 함께 사용하는 것과는 대조적이다. XHTML/HTML은 XML/SGML을 준수하지만, CSS는 자체적인 구문으로 작성하는 언어이며 XML을 준수하지 않는다.[1]
XSL-FO에서는 XHTML과 달리 의미 기반 마크업을 수행하지 않고, 조판에 필요한 마크업만 수행한다. 또한, XSL-FO 문서 자체에 조판 대상이 되는 문서 데이터가 모두 저장된다. 반면에 CSS는 다른 XML 또는 XHTML 문서의 기본 표현을 변경하는 방식을 사용한다.[1]
일반적인 XML 문서 작성자는 XSL-FO가 아닌 XML 문서를 작성하며, XSL-FO 형식의 XML 문서를 직접 작성하는 경우는 상정하지 않는다. XSL-FO에서는 XML 문서 작성자가 작성한 XML 문서를 XSLT를 사용하여 XSL-FO 형식의 XML 문서로 변환한다. 이때 사용되는 XSLT 스타일시트는 작성된 XML 문서와 별도로 작성하거나 XML 문서 자체에 내장할 수 있다. XSL-FO 문서는 XSLT를 통해 생성할 수도 있지만, 적절한 XSL-FO 형식으로 생성할 수 있다면 XSLT를 사용하지 않아도 무방하다.[3]
XSLT는 본래 XSL-FO로 변환하기 위해 만들어졌지만, XML 문서의 범용적인 변환에도 사용 가능하다. 현재는 많은 소프트웨어 기술자(프로그래머)들이 XSLT를 XML 문서의 범용적인 변환 언어로 인식하고 있으며, XML 문서를 XSL-FO 문서로 변환하는 용도로는 잘 인식되지 않고 있다.[4]
XSL-FO 형식의 문서가 생성되면, XSL-FO 처리 시스템이 해당 문서를 처리하여 조판한다. XSL-FO 처리 시스템은 XSL-FO 문서를 입력으로 받아, 사람들이 읽기 쉬운 파일 형식이나 인쇄/표시 가능한 매체를 출력한다. 출력 가능한 형식은 XSL-FO 처리 시스템의 구현에 따라 다르다. 현재 가장 일반적인 출력 형식은 PDF이다. 구현에 따라서는 PostScript나 RTF 등의 다른 형식으로 출력할 수도 있으며, 파일을 생성하지 않고 직접 컴퓨터 화면에 표시하거나, 직접 인쇄할 수도 있다.[5]
XSL-FO 문서는 XML 문서이지만, 명시적인 DTD나 스키마를 따를 필요는 없으며, XSL 사양에서 XSL-FO 문서의 구문이 정의되어 있다.[5]
XSL-FO 문서는 크게 두 부분으로 구성된다.[5]
- 페이지 레이아웃 정의 (layout-master-set 요소): 페이지 레이아웃을 자세하게 정의한다. 레이아웃은 하나 또는 여러 개 정의할 수 있으며, 각 레이아웃에는 이름을 붙인다. 텍스트 표기 방향, 페이지 크기 및 여백, 페이지 연결(홀수/짝수 페이지 여백 지정 등)을 정의할 수 있다. 예를 들어 인쇄 또는 제본을 위한 여백을 지정할 수 있다.[5]
- 문서 데이터 기술 (page-sequence 요소): 문서 데이터를 기술하며, XSL-FO에서 규정된 마크업을 수행한다. 이 마크업을 통해, 문서 데이터가 앞부분에서 정의한 페이지 레이아웃 중 어떤 레이아웃으로 표현되는지를 지정한다. 문서 데이터는 여러 흐름으로 나뉘며, 각 흐름은 페이지 레이아웃 정의와 연결된다. 흐름은 여러 블록을 포함할 수 있으며, 각 블록에는 텍스트 데이터, 인라인 요소, 또는 이 둘의 혼합 내용을 포함할 수 있다. 페이지 여백에는 페이지 번호나 장 제목 등을 인쇄할 수 있다.[5]
XSL-FO와 CSS는 유사한 개념을 채택하고 있지만, 몇 가지 차이점이 있다.
- 블록과 인라인 요소의 개념은 CSS와 매우 유사하다.
- 간격(padding)과 여백(margin)의 규칙 중 일부는 CSS와 다르다.
- XSL-FO에서는 페이지의 특성에 따라 표기 방향을 모두 지정할 수 있다.
- 인라인 텍스트 등의 표기 방향("왼쪽에서 오른쪽으로", "위에서 아래로" 등)
- 블록 내 텍스트 줄 등의 흐름 방향("위에서 아래로", "오른쪽에서 왼쪽으로" 등)
- 이러한 표기 방향 지정 기능으로, 영어와 다른 방향으로 문서를 기술하는 관습이 있는 언어에도 대응하고 있다. 세로쓰기를 사용하는 일본어 등에도 대응하고 있다. 단, XSL-FO 처리 시스템은 적어도 하나의 표기 방향에 대응해야 하며, 모든 표기 방향에 대응할 필요는 없다.
- XSL-FO 사양에서는 CSS2.1과 달리, 방향에 관해 표기 방향에 기반한 용어(start(앞), end(뒤) 등)를 사용하며, left(왼쪽)나 right(오른쪽) 등은 출력 매체에 직접 관련되는 경우를 제외하고는 사용하지 않는다.
XSL-FO의 기본적인 문서 내용 마크업은 CSS 및 그 캐스케이딩 규칙을 기반으로 한다. 따라서 XSL-FO 문서에 기술한 요소의 많은 속성은 명시적으로 덮어쓰지 않는 한 자식 요소에 상속된다.
3. 1. 콘텐츠 중심 디자인
FO는 "콘텐츠 중심" 디자인에 가장 적합하다. 이것은 책, 기사, 법률 문서 등에 대한 표준 레이아웃 방식이다. 여기에는 페이지 여백에 다양한 반복 정보를 통합하여 비교적 연속적인 단일 흐름의 텍스트가 포함된다. 이것은 신문이나 잡지에 사용되는 "레이아웃 중심" 디자인과는 대조적이다. 이러한 문서의 콘텐츠가 필요한 공간에 맞지 않으면 일부가 잘려 나간다. XSL-FO는 잡지 레이아웃의 엄격한 제약을 쉽게 처리하지 못한다. 실제로 많은 경우, 해당 레이아웃의 일부 형태를 표현하는 능력이 부족하다.XSL-FO는 기본적으로 이렇게 설계되었지만, 매우 풍부한 표현력을 가지고 있다. 표, 목록, 측면 부동체(본문과 분리된 영역) 및 기타 다양한 기능을 갖추고 사용할 수 있다. XSL-FO의 이러한 많은 기능은 CSS의 조판 기능과 호환된다.
3. 2. 다양한 표현 기능
XSL-FO는 다양한 표현 기능을 가지고 있다.XSL-FO는 표, 목록, 사이드 플로트 등 다양한 기능을 사용할 수 있다. 이러한 기능은 CSS의 레이아웃 기능과 유사하지만, 이 중 일부는 XSLT에 의해 구축될 것으로 예상된다.
XSLT는 매우 강력한(튜링 완전) 변환 기능을 제공한다. XSLT를 사용하면 문서의 목차를 자동으로 생성하거나, 참고 문헌과의 링크를 설정하거나, 색인을 생성하는 등 다양한 작업을 자동화할 수 있다.[4]
4. XSL-FO 문서 구조
XSL-FO 문서는 XML 문서이지만, DTD나 스키마를 따를 필요는 없다. 대신, [http://www.w3.org/TR/xsl11/ XSL-FO 명세]에 정의된 구문을 따른다.
XSL-FO 문서는 크게 두 개의 필수적인 부분으로 구성된다.
- 첫 번째 섹션은 페이지 레이아웃을 상세하게 정의한다.
- 두 번째 섹션은 다양한 페이지 레이아웃을 사용하여 내용이 페이지를 채우는 방식을 결정하는 마크업과 함께 문서 데이터를 나열한다.
페이지 레이아웃은 페이지의 크기, 여백, 텍스트 흐름의 방향 등을 정의한다. 홀수 페이지와 짝수 페이지가 다르게 보이도록 페이지 시퀀스를 정의할 수도 있다. 예를 들어, 책 제본 시 안쪽 여백에 추가 공간을 주는 페이지 레이아웃을 설정할 수 있다.
문서 데이터는 일련의 흐름으로 나뉘며, 각 흐름은 특정 페이지 레이아웃에 연결된다. 흐름은 블록 목록을 포함하며, 각 블록에는 텍스트 데이터, 인라인 마크업 요소, 또는 이 둘의 조합이 들어간다. 페이지 번호나 장 제목과 같은 내용은 문서 여백에 추가할 수 있다.
4. 1. 주요 구성 요소
XSL-FO 문서는 XML 문서이지만, DTD나 스키마를 따를 필요는 없으며, XSL 사양에서 XSL-FO 문서의 구문을 정의한다.XSL-FO 문서는 크게 두 개의 필수 부분으로 구성된다.
- 첫 번째 부분은 페이지 레이아웃을 자세하게 정의한다. 레이아웃은 하나 또는 여러 개 정의할 수 있으며, 각 레이아웃에는 이름을 붙인다.
- 다음 부분은 일련의 문서 데이터를 기술한다. 문서 데이터에는 XSL-FO에서 규정된 마크업을 수행하며, 이 마크업을 통해 문서 데이터를 구성하는 내용이 앞부분에서 정의한 페이지 레이아웃 중 어떤 페이지 레이아웃에 의해 표현되는지를 지정한다.
첫 번째 부분(layout-master-set 요소)의 페이지 레이아웃 정의에서는 페이지의 특징을 정의한다.
- 텍스트의 표기 방향을 정의할 수 있다. "오른쪽에서 왼쪽으로 문장을 진행", "위에서 아래로 문장을 진행", "왼쪽에서 오른쪽으로 문장을 진행" 등 언어 고유의 중요한 관습에 따르도록 지정할 수 있다.
- 페이지의 세로, 가로 길이 및 페이지 여백(마진) 길이를 지정할 수 있다.
- 페이지 연결에 대해 정의할 수 있다. 예를 들어, 홀수 페이지와 짝수 페이지에서 여백 등의 지정을 변경할 수 있다.
인쇄를 위해 큰 여백을 확보하도록 페이지 레이아웃 정의를 하거나, 제본을 위해 더 크게 여백을 잡을 수도 있다.
다음 부분(page-sequence 요소)에서는 문서 데이터를 분할하여 여러 흐름으로 재구성한다.
- 각 흐름은 페이지 레이아웃 정의와 관련된다.
- 흐름은 여러 블록을 포함할 수 있다.
- 각 블록에는 순서대로 텍스트 데이터, 인라인 요소, 텍스트 데이터와 인라인 요소의 혼합 내용을 포함할 수 있다.
- 페이지 여백 부분에도 페이지 번호나 장 제목 등을 인쇄할 수 있다.
XSL-FO와 CSS는 유사한 개념을 채용하고 있지만, 몇 가지 차이점도 있다.
- 블록과 인라인 요소의 개념은 CSS와 매우 유사하다.
- 간격(padding)과 여백(margin)의 규칙 중 일부는 CSS와 다르다.
- 표기 방향(direction)에 관해서는, XSL-FO에서는 페이지의 특성에 따라 모두 지정할 수 있다.
- 인라인 텍스트 등의 표기 방향("왼쪽에서 오른쪽으로", "위에서 아래로" 등)
- 블록 내 텍스트 줄 등의 흐름 방향("위에서 아래로", "오른쪽에서 왼쪽으로" 등)
이 XSL-FO에서의 표기 방향 지정 기능으로, 영어와 다른 방향으로 문서를 기술하는 관습이 있는 언어에도 대응하고 있다. 세로쓰기에도 대응하고 있다. 단, XSL-FO 처리 시스템 구현으로는 적어도 하나의 표기 방향에 대응하는 것이 필수이며, 모든 표기 방향에 대응할 필요는 없다. XSL-FO 사양에서는 CSS2.1과 달리 방향에 관해 표기 방향에 기반한 용어를 채용하고 있다. start(앞)나 end(뒤) 등을 사용하며, left(왼쪽)나 right(오른쪽) 등은 출력 매체에 직접 관련되는 경우를 제외하고는 사용되지 않는다.
XSL-FO의 기본적인 문서 내용 마크업은 CSS 및 그 캐스케이딩 규칙을 기반으로 한다. 따라서 XSL-FO 문서에 기술한 요소의 많은 속성은 명시적으로 덮어쓰지 않는 한 자식 요소에 상속된다.
4. 2. 블록 및 인라인 요소
블록 및 인라인 요소는 CSS와 거의 동일한 방식으로 작동하지만, FO와 CSS 간에는 패딩과 여백에 대한 몇 가지 규칙이 다르다. 블록과 인라인의 진행 방향은 페이지 방향을 기준으로 완전히 지정할 수 있으므로 FO 문서는 영어가 아닌 다른 언어로도 작동할 수 있다. 세로쓰기를 사용하는 일본어에도 대응하고 있다. CSS 2.1과 달리 FO 명세의 언어는 이러한 방향을 설명할 때 왼쪽과 오른쪽 대신 시작과 끝과 같은 방향 중립적인 용어를 사용한다.XSL-FO의 기본 내용 마크업은 CSS 및 그 캐스케이딩 규칙에서 파생되었다. 따라서 XSL-FO의 많은 속성은 명시적으로 재정의되지 않는 한 하위 요소로 전파된다.
5. XSL-FO 기능 (v1.0)
XSL-FO는 텍스트 레이아웃의 많은 부분을 수행할 수 있으며, 다음과 같은 기능을 사양으로 규정하고 있다.[1]
- 단나눔 페이지 기술 및 다단 구성[1]
- 목록[1]
- 미망인과 고아 지정 및 페이지 매김 제어[1]
- 각주[1]
- 표[1]
- 텍스트 방향 제어: 페이지의 특징으로 텍스트 표기 방향을 정의하며, 세로쓰기를 사용하는 일본어 등에도 대응
- 페이지 번호 인용[1]
- 블록 테두리에 다양한 스타일 적용[1]
- 배경색, 이미지 배치[1]
5. 1. 다단 구성 (Multiple columns)
페이지는 여러 열을 갖도록 정의할 수 있다. 이 경우 블록은 기본적으로 한 열에서 다음 열로 흐른다. 개별 블록은 모든 열에 걸쳐 설정하여 페이지에 텍스트 중단을 만들 수 있다. 이 중단 위의 열은 서로 흐르고 중단 아래의 열도 서로 흐른다. 그러나 위의 섹션에서 아래 섹션으로 텍스트가 흐르는 것은 허용되지 않는다.XSL-FO의 페이지 사양 특성상 여러 페이지는 실제로 열의 숫자와 너비가 다를 수 있다. 따라서 텍스트는 3열 페이지에서 5열 페이지로, 다시 1열 페이지로 매우 쉽게 흐를 수 있다.
모든 FO 기능은 다중 열 페이지의 제한 내에서 작동한다.
두 가지 속성, 즉 span, padding-after를 지정하여 여러 열을 가로지를 수 있다.[1]
XSL-FO는 매우 많은 기능을 가지고 있다.[1]
앞서 언급한 것 외에도 XSL-FO는 다음과 같은 기능을 사양으로 규정하고 있다.[1]
- 여러 단으로 된 단나눔 페이지를 기술할 수 있다.[1]
- 단나눔 페이지를 기술하는 경우, 기본적으로 블록은 한 단에서 다음 단으로 흘러 들어간다.[1]
- 어떤 블록은 모든 단에 걸쳐 배치할 수 있다.[1]
- 이 경우 페이지 내에 본문의 구분을 넣는다.[1]
- 이 구분 앞의 본문은 이 구분 앞의 각 단에 순서대로 흘러 들어간다.[1]
- 구분 뒤의 본문에 대해서도 구분 뒤의 각 단에 순서대로 흘러 들어간다.[1]
- 단, 이 경우에는 구분을 넘어 구분 앞부분에서 구분 뒷부분에 걸쳐 문장을 흘러 넣을 수는 없다.[1]
단나눔으로 기술된 페이지에서도 XSL-FO의 모든 기능이 유효하다.[1]
5. 2. 목록 (Lists)
XSL-FO 목록은 기본적으로 나란히 쌓인 두 세트의 블록이다. 항목은 "왼쪽" 또는 시작 인라인 방향의 블록과 "오른쪽" 또는 끝 인라인 방향의 블록 시퀀스로 구성된다. 왼쪽에 있는 블록은 개념적으로 목록의 숫자 또는 글머리 기호가 된다. 하지만 사전 항목에서 볼 수 있듯이 텍스트 문자열일 수도 있다. 오른쪽에 있는 블록은 예상대로 작동한다. 이 두 블록은 모두 블록 컨테이너이거나 단일 목록 항목에 여러 블록을 가질 수 있다.XSL-FO 목록의 번호 매기기는 번호가 매겨진 경우 XSL-FO 문서를 생성한 XSLT 또는 기타 프로세스에 의해 수행될 것으로 예상된다. 따라서 번호 매기기 목록은 XSL-FO에서 명시적으로 번호가 매겨져야 한다.
XSL-FO의 리스트는 다른 리스트와 마찬가지로 여러 개의 리스트 요소가 나열된 것으로 구성된다. 리스트 요소는 요소의 레이블과 요소의 본문으로 구성된다.
- 리스트 요소의 레이블에는 명시적인 순서가 있는 리스트의 경우 숫자 또는 알파벳이 포함되고, 명시적인 순서가 없는 리스트의 경우 가운데 점이 포함되며, 정의 리스트의 경우 간단한 문자열(정의 대상이 되는 용어)이 포함될 것이다.
- 리스트 요소의 본문에는 요소의 실질적인 내용이 기술된다.
리스트의 레이블과 본문을 어떻게 배치할지는 XSL-FO 문서의 페이지 레이아웃 설명에 따라 달라진다.
- 일본어나 영어 등에서 가로쓰기로 쓰는 경우, 리스트 요소의 레이블을 왼쪽에, 리스트 요소의 본문을 오른쪽에 배치하여 조판한다.
- 아랍어 등으로 쓰는 경우에는 반대로 리스트의 레이블을 오른쪽에, 리스트 요소의 본문을 왼쪽에 배치하여 조판한다.
어떤 리스트 요소에서 그 레이블 또는 본문이 "블록 컨테이너"를 포함할 수 있다. 블록 컨테이너는 여러 블록을 포함하는 요소를 말한다.
5. 3. 페이지 매김 제어 (Pagination controls)
사용자는 블록 또는 흐름 자체에 대해 미망인과 고아를 지정하고, 속성이 하위 블록으로 캐스케이딩되도록 허용할 수 있다. 또한 단일 페이지에 함께 유지되도록 블록을 지정할 수 있다. 예를 들어 이미지 블록과 해당 이미지의 설명을 절대 분리되지 않도록 설정할 수 있다. FO 프로세서는 페이지에 많은 빈 공간을 생성해야 하는 경우에도 이러한 명령을 최대한 준수한다.[1]XSL-FO는 단락 중간에 페이지 나누기를 수행해야 하는 경우, 앞 페이지에 최소한 남겨야 할 행 수와 뒤 페이지에 최소한 인쇄해야 할 행 수를 지정할 수 있다. 이 지정은 해당 블록이 자식 블록을 포함하는 경우 상속된다. 또한 블록 전체를 분할하지 않고 1페이지 내에 포함하도록 지정할 수도 있다. 예를 들어, 이미지 블록과 해당 이미지의 설명문이 서로 다른 페이지로 분할되는 것은 바람직하지 않다. XSL-FO 처리 시스템은 페이지에 큰 여백이 생기더라도 이러한 지정을 따르도록 노력한다.[1]
5. 4. 각주 (Footnotes)
사용자는 페이지 하단에 표시되는 각주를 만들 수 있다. 각주는 참조되는 지점의 일반적인 텍스트 흐름 내에서 FO 문서에 작성된다. 참조는 인라인 정의로 표현되지만 필수는 아니다. 본문은 FO 프로세서가 페이지 하단에 배치하는 하나 이상의 블록이다. FO 프로세서는 참조가 있는 곳마다 해당 참조에서 인용한 각주가 동일한 페이지에서 시작되도록 보장한다. 이는 페이지에 여분의 빈 공간을 만드는 것을 의미하더라도 마찬가지이다.[1]5. 5. 표 (Tables)
FO 테이블은 HTML/CSS 테이블과 매우 유사하게 작동한다. 사용자는 각 셀에 대한 데이터 행을 지정하고, 배경색과 같이 각 열에 대한 스타일 정보를 지정할 수 있다. 또한 첫 번째 행을 머리글 행으로 지정하여 자체 스타일 정보를 지정할 수 있다.FO 프로세서는 각 열에 할당할 공간을 정확하게 지시하거나, 테이블의 텍스트를 자동 맞춤하도록 지시할 수 있다.
5. 6. 텍스트 방향 제어 (Text orientation controls)
FO는 텍스트 블록 방향을 제어하는 광범위한 기능을 가지고 있다. 페이지 중간에서도 텍스트 블록을 다른 방향으로 지정할 수 있다. 이러한 방향 지정된 블록은 문서의 나머지 부분과 다른 방향을 가진 언어에 사용하거나, 레이아웃 목적으로 텍스트 방향을 지정해야 할 경우에 사용될 수 있다. 이러한 블록은 표, 목록 또는 심지어 재지향된 텍스트의 다른 블록과 같이 사실상 모든 종류의 콘텐츠를 포함할 수 있다.페이지 레이아웃 정의에서는 페이지의 특징으로 텍스트의 표기 방향을 정의할 수 있다. "오른쪽에서 왼쪽으로 문장을 진행", "위에서 아래로 문장을 진행", "왼쪽에서 오른쪽으로 문장을 진행" 등, 언어 고유의 중요한 관습에 따르도록 지정할 수 있다.
표기 방향(direction)에 관해서는, XSL-FO에서는 페이지의 특성에 따라 모두 지정할 수 있다.
이 XSL-FO에서의 표기 방향 지정 기능으로, 영어와 다른 방향으로 문서를 기술하는 관습이 있는 언어에도 대응하고 있다. 세로쓰기를 사용하는 일본어 등에도 대응하고 있다. 단, XSL-FO 처리 시스템의 구현으로는, 적어도 하나의 표기 방향에 대응하는 것이 필수이며, 모든 표기 방향에 대응할 필요는 없다.
XSL-FO의 사양에서는, CSS2.1과 달리, 방향에 관해 표기 방향에 기반한 용어를 채용하고 있다. start (앞) 나 end (뒤) 등을 사용하며, left (왼쪽) 나 right (오른쪽) 등은 출력 매체에 직접 관련되는 경우를 제외하고는 사용되지 않는다.
5. 7. 기타 기능
XSL-FO는 매우 많은 기능을 가지고 있으며, 다음과 같은 기능들을 사양으로 규정하고 있다.- 페이지 번호 인용: 특정 태그를 포함하는 페이지를 XSL-FO 문서 텍스트에서 인용할 수 있으며, XSL-FO 처리 시스템은 인용하는 부분에 해당 페이지 번호를 설정한다.
- 블록 테두리에 다양한 스타일 적용.
- 배경색, 이미지 배치.
- 기타 인라인 요소.
6. XSL-FO 기능 (v1.1)
XSL-FO 버전 1.1은 버전 1.0에 여러 가지 새로운 기능을 추가했다. XSL-FO는 매우 많은 기능을 가지고 있다.
2006년 12월 현재, XSL의 최신 버전은 https://www.w3.org/TR/2006/REC-xsl11-20061205/ 1.1이다. XSL이 2001년 10월에 권고안이 된 이후, 몇몇 XSL-FO 처리기가 등장했지만, XSL-FO V1.0 권고안에서는 사용자가 원하는 기능이 부족했기 때문에, 처리기마다 독자적인 확장을 통해 기능을 추가했다. 이 때문에, W3C의 XSL 워킹 그룹에서는 처리기의 구현을 조사하여 공통 기능을 표준화하는 것을 우선적으로 추진해왔다.
그 작업 성과가 XSL-FO V1.1이며, V1.1에서 표준화된 기능은 다음과 같다.
- 권말 색인[1]
- 개정 바[1]
- PDF에서의 책갈피[1]
- 재무제표에서 부분 합에 대응하는 데 필요한 표 안에서의 조건부 텍스트 지표[1]
- 페이지 그룹 내에서의 최종 페이지 번호 감지[1]
- 단일 페이지 내에서의 복수 방향으로의 기술[1]
6. 1. 다중 흐름 및 흐름 매핑 (Multiple flows and flow mapping)
XSL-FO 1.0은 페이지의 어떤 영역에 어떤 텍스트가 허용되는지에 대해 상당히 제한적이었다. 버전 1.1은 이러한 제한을 완화하여 페이지의 여러 명시적 영역으로 흐르는 텍스트를 매핑할 수 있도록 한다. 이를 통해 신문과 유사한 조판이 가능해졌다.[1]2006년 12월 현재, XSL의 최신 버전은 1.1이다. XSL이 2001년 10월에 권고안이 된 이후, 몇몇 XSL-FO 처리기가 등장했지만, XSL-FO V1.0 권고안에서는 사용자가 원하는 기능이 부족했기 때문에, 처리기마다 독자적인 확장을 통해 기능을 추가했다. 이 때문에, W3C의 XSL 워킹 그룹에서는 처리기의 구현을 조사하여 공통 기능을 표준화하는 것을 우선적으로 추진해왔다. 그 작업 성과가 XSL-FO V1.1이며, V1.1에서 표준화된 기능에는 권말 색인, 개정 바, PDF에서의 책갈피, 재무제표에서 부분 합에 대응하는 데 필요한 표 안에서의 조건부 텍스트 지표, 페이지 그룹 내에서의 최종 페이지 번호 감지, 단일 페이지 내에서의 복수 방향으로의 기술 등이 있다.[1]
6. 2. 책갈피 (Bookmarks)
XSL-FO 프로세서는, 특히 PDF와 같은 많은 출력 형식에서 책갈피 기능을 제공한다. 이 기능을 통해 사용자는 별도의 창에서 텍스트 문자열을 선택해 문서의 특정 영역으로 바로 이동할 수 있다.[1]XSL-FO v1.1은 XSL-FO에서 명명된 책갈피를 생성하는 기능을 제공하여, 프로세서가 이를 지원하는 출력 형식으로 전달할 수 있도록 한다.[1] XSL-FO v1.1은 권말 색인, 개정 바, 재무제표에서 부분 합에 대응하는 데 필요한 표 안에서의 조건부 텍스트 지표, 페이지 그룹 내에서의 최종 페이지 번호 감지, 단일 페이지 내에서의 복수 방향 기술 등 다양한 기능을 표준화했다.[1]
6. 3. 색인 (Indexing)
XSL-FO 1.1은 책의 뒷부분에서 볼 수 있는 색인 생성을 지원한다. 이는 FO 문서에서 적절하게 마크업된 요소를 참조하여 수행된다. 2006년 12월 현재, XSL의 최신 버전은 https://www.w3.org/TR/2006/REC-xsl11-20061205/ 1.1이다.[1] XSL-FO V1.1에서 표준화된 기능에는 권말 색인, 개정 바, PDF에서의 책갈피, 재무제표에서 부분 합에 대응하는 데 필요한 표 안에서의 조건부 텍스트 지표, 페이지 그룹 내에서의 최종 페이지 번호 감지, 단일 페이지 내에서의 복수 방향으로의 기술 등이 있다.[2]6. 4. 마지막 페이지 인용 (Last page citation)
FO 문서는 특정 앵커에 대한 명시적인 문서 내 참조 없이도 마지막 페이지를 생성할 수 있다. "마지막 페이지"는 특정 페이지 집합으로 제한하거나 전체 문서를 포괄하도록 정의할 수 있다. 이를 통해 "15페이지 중 2페이지"와 같이 지정할 수 있으며, 여기서 15페이지는 마지막 페이지 정의의 페이지 번호이다.XSL-FO는 2006년 12월에 버전 1.1이 발표되었다. XSL-FO V1.1에서는 권말 색인, 개정 바, PDF 책갈피, 재무제표에서 부분 합에 대응하는 표 안의 조건부 텍스트 지표, 페이지 그룹 내 최종 페이지 번호 감지, 단일 페이지 내 복수 방향 기술 등의 기능이 표준화되었다.
6. 5. 표 마커 (Table markers)
테이블 마커를 사용하면 테이블 헤더와 바닥글 내에서 동적 콘텐츠를 생성할 수 있다. 예를 들어 테이블의 각 페이지 하단에 실행 중인 합계를 표시하거나 "테이블 계속" 표시자를 생성할 수 있다. XSL-FO는 매우 많은 기능을 가지고 있다.XSL-FO 사양에 규정된 주요 기능은 다음과 같다.
- 권말 색인
- 개정 바
- PDF에서의 책갈피
- 재무제표에서 부분 합에 대응하는 데 필요한 표 안에서의 조건부 텍스트 지표
- 페이지 그룹 내에서의 최종 페이지 번호 감지
- 단일 페이지 내에서의 복수 방향으로의 기술
6. 6. 내부/외부 플로트 (Inside/outside floats)
XSL-FO 1.1은 측면 플로트(side floats)에 "inside(내부)" 및 "outside(외부)" 키워드를 추가하여 페이지의 안쪽 또는 바깥쪽 가장자리에 여백(marginalia)을 배치하는 페이지 레이아웃을 구현할 수 있게 한다. 내부(Inside)는 책의 제본 쪽을 향하는 페이지 측면을 의미하고, 외부(outside)는 책의 제본에서 멀어지는 페이지 측면을 의미한다.6. 7. 개선된 그래픽 크기 조정 (Refined graphic sizing)
XSL-FO 1.1은 그래픽 크기를 맞춰 조정하는 기능을 개선하여, 축소(하지만 확대는 불가)하는 기능과 특정 확대/축소 단계를 정의하는 기능을 제공한다. 또한, 결과적인 확대/축소 비율을 표시할 때 참조할 수 있다 (예: 그림 캡션에서 "표시된 이미지는 실제 크기의 50%입니다"와 같이 표시).7. XSL-FO의 장점
XSL-FO는 다음과 같은 장점을 가진다.
- '''XML 언어''' - XML 언어이므로, XSL-FO 코드를 생성하려면 XSLT 변환(및 XSLT 프로세서)만 필요하다. TEI 또는 DocBook으로 문서를 쉽게 작성하고 웹 보기를 위해 HTML로 변환하거나 인쇄를 위해 PDF(FO 프로세서를 통해)로 변환할 수 있다. 실제로 이러한 두 가지 목적을 위한 기존의 TEI 및 DocBook XSLT가 많이 있다.[1]
- '''사용 편의성''' - CSS 사용자는 마크업 속성의 기본 사항에 익숙할 것이다. FO 문서의 특정 섹션이 어떻게 보일지 이해하는 것은 일반적으로 매우 쉽다.
- '''낮은 비용''' – 상업용 조판 및 페이지 레이아웃 제품과 비교하여 훨씬 낮은 비용으로 인쇄 및 레이아웃 요구 사항을 충족할 수 있다.
- '''다국어 지원''' – 여러 국가 언어로 현지화된 문서를 작성하는 데 특히 적합하며, 모든 언어 버전의 문서를 작성할 수 있는 단일 도구 세트를 필요로 한다.
- '''성숙한 표준''' – 다수의 견고한 상업용 및 비상업용 구현과 함께 성숙한 표준임을 입증하고 있다.
XSL은 XSLT가 임의의 XML을 처리할 수 있기 때문에 어떤 XML 문서에도 적용할 수 있다. 또한 출력 수단도 XSL-FO에 국한되지 않고, XSLT를 사용하여 XHTML 등으로 변환하는 것(XML 기반이라면 무엇이든)도 가능하다.
XSLT의 변환은 매우 강력하다(튜링 완전). XSLT를 사용하면 자동으로 문서의 목차를 생성하거나, 참고 문헌과의 링크를 설정하거나, 색인을 생성하는 등 다양한 기능을 활용할 수 있다.
XSL-FO는 여러 페이지로 구성된 매체를 상정하여 설계되었다. 반면 HTML과 CSS는 페이지 개념이 없는 매체(컴퓨터 화면 등)를 상정하여 설계되었다. XSL-FO에서 페이지 개념은 필수적이다. XML을 다루는 사람들에게 XSL-FO 처리 시스템은 여러 페이지에 정보를 표시할 때 강력한 도구이다.
XSL-FO는 "내용 주도"(content-driven) 설계에 의한 조판에 매우 적합하다. 이 조판 설계는 서적, 논문, 법적 문서 등에서 표준적인 방법이다.
XSL-FO는 기본적으로 이렇게 설계되었지만, 표현력이 풍부하다. 표, 목록, 측면 부동체(본문과 분리된 영역) 및 기타 다양한 기능을 갖추고 사용할 수 있다. XSL-FO의 이러한 많은 기능은 CSS의 조판 기능과 호환된다.
실제로 기존 TEI 문서나 DocBook 문서의 다수가 XSLT/XSL-FO를 통해 XHTML이나 PDF 등 사람이 이해하기 쉬운 형식으로 변환되어 왔다.
7. 1. XML 기반
XSL-FO 문서는 (XSLT에 의해) XSL-FO 형식으로 변환하기 전의 문서와 모두 XML을 준수하는 마크업 언어이다. 이것은 XHTML/HTML과 CSS를 조합하여 사용하는 경우와 대조적이다. XHTML/HTML은 XML/SGML을 준수하지만, CSS는 독자적인 구문으로 작성하는 언어이며 XML을 준수하지 않는다.XSL-FO에서는 XHTML과 달리 의미 기반 마크업은 수행하지 않고, 조판에 필요한 마크업만 수행한다. 또한, XSL-FO 문서 자체에 조판 대상이 되는 문서 데이터가 모두 저장된다. 반면에 CSS는 다른 XML 또는 XHTML 문서의 기본 표현을 변경하는 방법을 채택하고 있다.
XSL에서는 먼저 XSLT 스타일시트를 사용하는 경우가 많다. 이 XSLT 스타일시트는 대상이 되는 XML 문서의 문서 타입(스키마)에 맞춰 작성된다. XSLT 스타일시트는 조판을 수행하는 사람이 직접 작성하는 경우도 있지만, 문서 타입에 맞춰 작성된 기성품을 사용할 수도 있다. 이 XSLT 스타일시트를 적용함으로써 대상이 되는 XML 문서는 XSL-FO 문서로 변환된다.
XSL-FO에서 XML 문서 작성자는 일반적인 XML 문서를 작성하며, 직접 XSL-FO 형식의 XML 문서를 작성하는 것은 상정하지 않는다. XSL-FO에서는 XML 문서 작성자가 작성한 XML 문서를 XSLT를 사용하여 XSL-FO 형식의 XML 문서로 변환한다고 상정한다. XSLT의 스타일시트는 작성된 XML 문서와 별도로 작성하거나 XML 문서 자체에 내장하기도 한다. XSL-FO 문서 생성은 XSLT 변환을 통해 수행할 수 있지만, 적절한 XSL-FO 형식으로 생성할 수 있다면 XSLT를 사용하지 않고 임의의 수단으로 생성해도 무방하다.
XSL-FO 형식의 문서가 생성되면, XSL-FO 처리 시스템이 해당 XSL-FO 문서를 처리하여 조판한다. XSL-FO 처리 시스템은 XSL-FO 문서를 입력으로 하여, 일반인들이 읽기 쉬운 파일 형식 또는 인쇄/표시 가능한 매체를 출력한다. 출력 가능한 형식은 XSL-FO 처리 시스템의 구현에 따라 다르다. 현재 XSL-FO에서 가장 일반적인 출력 형식은 PDF이다. 구현에 따라서는 PostScript나 RTF 등의 다른 형식으로 출력하거나, 파일을 생성하지 않고 직접 컴퓨터 화면에 표시하거나, 직접 인쇄할 수도 있다.
XSL-FO 문서는 XML에 준거하는 문서이므로, 적절한 XSLT 스타일시트를 준비하여 XSLT 처리계를 적용하면 어떠한 문서 형식의 XML 문서라도 XSL-FO 문서를 생성할 수 있다. 따라서 XSLT 스타일시트와 XSLT 처리계를 사용하면 XML에 준거하는 TEI 문서나 DocBook 문서를 기반으로 웹에서 열람할 수 있는 XHTML 문서를 쉽게 만들 수 있으며(이 경우 XSL-FO 문서를 생성할 필요는 없다), XSL-FO 처리계를 사용하면 인쇄용 PDF 문서도 생성할 수 있다.
또한 XSL-FO 문서는 XML에 준거하지만, 명시적인 스키마나 DTD가 정의되어 있지 않기 때문에 XSL-FO 문서에는 XML 형식의 어떠한 데이터도 저장할 수 있다. 이러한 XML 형식의 데이터로 가장 많이 사용되는 것은 이미지 형식인 SVG일 것이다. 대부분의 XSL-FO 처리계는 SVG 데이터가 삽입된 XSL-FO 문서를 해석하여 SVG 이미지 데이터를 삽입한 출력을 생성할 수 있다.
7. 2. 사용 편의성
XSL-FO의 또 다른 장점은 상대적인 사용 편의성이다. 언어의 기능 중 상당 부분은 CSS의 작업을 기반으로 하므로 CSS 사용자는 마크업 속성의 기본 사항에 익숙할 것이다. FO 문서의 특정 섹션이 어떻게 보일지 이해하는 것은 일반적으로 매우 쉽다.[1]7. 3. 낮은 비용
XSL-FO는 상업용 조판 및 페이지 레이아웃 제품과 비교하여 훨씬 낮은 비용으로 인쇄 및 레이아웃 요구 사항을 충족할 수 있는 솔루션을 제공한다.[3] 소유권의 초기 비용은 낮으며(요구 사항을 충족하는 Apache FOP 및 [http://xmlroff.org xmlroff]와 같은 무료 구현을 사용하는 경우 0), 특히 상업용 컴포지션 도구의 비용과 비교할 때 그렇다.[3] 필요한 기술(주로 XSLT 프로그래밍)은 널리 사용 가능하다.[3] XSL-FO에 대한 여러 훌륭한 책과 온라인 리소스, 활발한 사용자 커뮤니티가 있다.[3]7. 4. 다국어 지원
XSL-FO는 모든 인류의 언어로 작성되도록 설계되었으며, 구현에서 대체로 그 목표를 달성했다.[3] 따라서 XSL-FO는 여러 국가 언어로 현지화된 문서를 작성하는 데 특히 적합하며, 모든 언어 버전의 문서를 작성할 수 있는 단일 도구 세트를 필요로 한다.[3] 이는 아시아 및 중동 언어가 중요하고 휴대폰 및 컴퓨터 주변 장치와 같은 제품의 거대한 시장을 나타내는 소비자 가전제품과 같은 기술 문서에 특히 유용하다.[3]7. 5. 성숙한 표준
XSL-FO 1.1의 출판으로 XSL-FO는 다수의 견고한 상업용 및 비상업용 구현과 함께 성숙한 표준임을 입증하고 있다. 페이지 컴포지션에 대한 다른 유사한 표준은 없다.[5]8. XSL-FO의 단점
XSL-FO는 몇 가지 단점을 가지고 있다. 첫째, "가볍게 설계된" 문서에 적합하도록 설계되어 고급 레이아웃이나 타이포그래피 기능을 구현하기 어렵다는 제한된 기능 문제가 있다. 예를 들어, 특정 조건에 따라 서식을 변경하는 동적인 기능을 구현하기 어렵다.
둘째, 특정 기능을 사용하려면 XSL-FO 구현체에서 제공하는 독점적 확장에 의존해야 하는 경우가 있어, 특정 구현체에 대한 종속성을 높인다.
셋째, XSL-FO는 사람이 직접 편집하는 것이 아니라 XSLT를 통해 생성하는 것을 전제로 설계되었기 때문에, 수동 편집이 매우 어렵고 비효율적이다.
넷째, 2006년 12월 기준으로 XSL-FO 처리 기능을 갖춘 소프트웨어가 적고, XSL-FO 1.0 사양을 100% 준수하는 처리 시스템은 사실상 존재하지 않는다.[2] TeX와 LaTeX 등이 이미 조판용 언어로 오랫동안 사용되어 왔기 때문에, XSL-FO에 대한 수요가 크지 않다는 견해도 있다.[2]
8. 1. 제한된 기능
XSL-FO는 기술 매뉴얼, 사업 문서, 송장 등과 같이 "가볍게 설계된" 문서의 요구 사항을 충족하도록 특별히 설계되었다. 더 정교한 디자인에도 사용할 수 있지만, 레이아웃 및 타이포그래피 관점에서 본질적으로 제한적이다.특히, XSL-FO는 두 서식 객체의 페이지 위치 관계에 의존하는 서식 효과를 얻는 직접적인 방법을 제공하지 않는다. 예를 들어, "이것이 저것과 같은 페이지에 있으면 X를 하고, 그렇지 않으면 Y를 하라"는 식의 표현은 불가능하다. 이는 XSL-FO가 2단계 변환 기반 추상 처리 모델을 사용하기 때문이다. 이 제한은 다중 패스 프로세스를 구현하여 해결할 수 있지만, 현재 첫 번째 패스의 결과가 두 번째 패스로 전달되는 방법에 대한 표준은 없다.
또한, 현재 XSL-FO 구현(상용 및 오픈 소스 모두)은 QuarkXPress 또는 InDesign과 같은 고급 레이아웃 도구나 LaTeX와 같은 프로그래밍 가능한 조판 시스템에서 제공하는 수준의 타이포그래피 정교함을 제공하지 않는다. 예를 들어, 마주보는 페이지의 텍스트 줄이 수직으로 정렬되도록 하는 기능은 현재 구현에서 제공되지 않는다. XSL-FO 사양에는 이를 방지하는 내용은 없지만, 요구하는 내용도 없다.[1]
XSL-FO가 주어진 문서에 적합한지 여부를 결정하려는 경우, 다음의 타이포그래피 및 레이아웃 요구 사항은 일반적으로 XSL-FO가 작동하지 않음을 나타낸다(단, 일부는 독점 확장을 통해 충족될 수 있음).[2]
- 각 새 페이지에서 각주 번호 또는 기호 시퀀스를 다시 시작해야 하는 경우 (일부 구현은 자동 각주 번호 매기기를 지원하는 확장을 제공)
- 부동 객체의 양쪽에 텍스트를 흐르게 해야 하는 경우 (XSL-FO는 한쪽, 위쪽 및/또는 아래쪽에 텍스트를 흐르게 할 수 있지만 양쪽은 안 됨. 일부 구현은 독점 확장을 통해 지원)
- 단일 페이지에 다양한 수의 열이 있어야 하는 경우 (최소 두 개의 상용 구현에서 페이지 내에 다중 열 블록을 만들 수 있는 확장을 제공)
- 열 너비의 각주가 있어야 하는 경우 (여러 구현에서 열 각주 확장을 제공)
- 다른 여백에 상대적으로 동적으로 배치된 여백 (예: 페이지에서 수직으로 균등하게 간격을 둔 여백) (XSL-FO는 앵커와 수직으로 정렬되도록 여백을 배치하는 기능만 제공)
- 반복되는 페이지 마스터의 동질적인 시퀀스에서 부동 또는 "선 밖" 객체로 두 페이지에 걸쳐 분산되는 콘텐츠를 생성해야 하는 경우 (XSL-FO 1.1에서 가능하지만, 페이지 마스터를 제어할 수 있어야 함)
- 동일한 페이지에서 하단 부동 콘텐츠와 각주가 모두 필요한 경우
- 임의의 곡선에 대해 텍스트를 실행할 수 있어야 하는 경우 (일부 구현에서는 SVG를 지원하여 해결)
- 특정 기준선 그리드에 줄을 제한해야 하는 경우 (예: 마주보는 페이지의 줄을 정확하게 등록)
- 앵커 지점에 면한 페이지에 항상 그림이 나타나야 하는 경우와 같이 페이지를 인식하는 레이아웃이 필요한 경우
8. 2. 확장 의존성
XSL-FO를 특정 문서나 문서 디자인에 적용할 때, 다양한 XSL-FO 구현에서 제공하는 독점적 확장을 고려해야 한다. 이러한 확장은 핵심 사양에 없는 기능을 추가한다. 예를 들어, 한 제품은 XSL-FO 사양에서 다루지 않는 일본 타이포그래피 관례에 대한 지원을 추가한다. 그러나 이러한 기능을 사용하면 해당 XSL-FO 시스템이 특정 구현에 더 종속된다.8. 3. 수동 편집의 어려움
XSL-FO 인스턴스를 수동으로 편집하는 것은 일반적으로 비실용적이다. XSL-FO가 편집의 용이성이 아닌 명확성과 완전성을 위해 설계되었기 때문이다. XFDesigner와 같은 시각적 편집 도구가 작업을 완화할 수 있지만, 모든 XSL-FO 태그에 접근할 수 있는 것은 아니다(특히 마커와 각주). XF Designer는 Ecrion Software에서 더 이상 지원하지 않는 제품이다.8. 4. 특정 요구 사항 미충족
XSL-FO는 기술 매뉴얼, 사업 문서, 송장 등과 같이 "가볍게 설계된" 문서의 요구 사항을 충족하도록 특별히 설계되었다. 그러나 레이아웃 및 타이포그래피 관점에서 본질적으로 제한적이다. 특히, XSL-FO는 두 개의 서식 개체의 페이지 위치 관계에 의존하는 서식 효과를 얻는 직접적인 방법을 제공하지 않는다. 예를 들어, "이것이 저것과 같은 페이지에 있으면 X를 하고, 그렇지 않으면 Y를 하라"는 식의 표현은 불가능하다. 이는 XSL-FO가 2단계 변환 기반 추상 처리 모델을 사용하기 때문이다. 이 문제는 다중 패스 프로세스를 구현하여 해결할 수 있지만, 현재 첫 번째 패스의 결과가 두 번째 패스로 전달되는 방법에 대한 표준은 없다.또한, XSL-FO에는 다음과 같은 중요한 레이아웃 기능이 없다.
- 각 새 페이지에서 각주 번호 또는 기호 시퀀스를 다시 시작하는 기능 (일부 구현에서 확장 기능 제공)
- 부동 객체의 양쪽에 텍스트를 흐르게 하는 기능 (일부 구현에서 확장 기능 제공)
- 단일 페이지에 다양한 수의 열을 가지는 기능 (일부 구현에서 확장 기능 제공)
- 열 너비의 각주 기능 (여러 구현에서 확장 기능 제공)
- 다른 여백에 상대적으로 동적으로 배치된 여백 (예: 페이지에서 수직으로 균등하게 간격을 둔 여백)
- 반복되는 페이지 마스터의 동질적인 시퀀스에서 부동 또는 "선 밖" 객체로 두 페이지에 걸쳐 분산되는 콘텐츠 생성 기능 (XSL-FO 1.1에서 가능하지만 페이지 마스터 제어 필요)
- 동일한 페이지에서 하단 부동 콘텐츠와 각주를 모두 사용하는 기능
- 임의의 곡선에 대해 텍스트를 실행하는 기능 (일부 구현에서 SVG를 지원하여 해결 가능)
- 특정 기준선 그리드에 줄을 제한하는 기능 (예: 마주보는 페이지의 줄을 정확하게 등록)
- 앵커 지점에 면한 페이지에 항상 그림이 나타나는지 확인하는 등 페이지를 인식하는 레이아웃
이러한 아키텍처적 제한 외에도 현재 XSL-FO 구현(상용 및 오픈 소스 모두)은 QuarkXPress 또는 InDesign과 같은 고급 레이아웃 도구나 LaTeX와 같은 프로그래밍 가능한 조판 시스템에서 제공하는 것과 같은 수준의 타이포그래피 정교함을 제공하지 않는다. 예를 들어, 현재 구현에서는 마주보는 페이지의 텍스트 줄이 수직으로 정렬되도록 하는 기능을 제공하지 않는다.
XSL-FO의 또 다른 과제는 XSL-FO 처리 기능을 갖춘 소프트웨어가 적다는 것이다. XSL-FO 1.0의 공식 사양에는 매우 많은 기능이 규정되어 있어 사양에 100% 준수하는 처리 시스템은 실제로는 존재하지 않는다. 또한, XSL-FO 문서를 수작업으로 기술하는 것은 어렵고 매우 장황한 작업이 된다. XSLT를 사용하면 XSL-FO 문서를 쉽게 생성할 수 있지만, XSL-FO 자체에는 간결한 작업으로 생성한다는 관점은 고려되지 않았다.
9. XSL-FO의 대안
CSS2(페이지 미디어 모듈)가 인쇄 매체에 기본 기능을 제공하기 시작하면서 CSS 표준과 XML, HTML 표준이 밀접하게 연관되었다. W3C는 CSS Paged Media Module Level 3을 통해 문서 형식화 및 PDF 생성을 위한 통합 표준 구축을 완료하고 있으며, 2013년부터 CSS3-paged는 XSL-FO 대체를 위한 W3C 제안이다.[2]
XSL Formatting Objects 버전 2.0에 대한 설계 노트는 2009년에 처음 게시되었으며 2012년에 마지막으로 업데이트되었다.[3]
9. 1. CSS와의 비교
CSS 표준은 XML 및 HTML 표준과 밀접하게 관련되어 있는데, CSS2(페이지 미디어 모듈)가 인쇄 매체에 기본 기능을 제공하기 시작했기 때문이다. W3C는 [http://www.w3.org/TR/css3-page/ CSS 페이지 미디어 모듈 레벨 3]을 통해 문서 서식 지정 및 PDF 생성을 위한 통합 표준 구축을 완료하고 있으며, 2013년 이후 CSS3-paged는 XSL-FO를 대체하기 위한 W3C 제안이다.[2]XSL-FO는 XHTML/HTML과 CSS를 조합하여 사용하는 경우와 대조된다. XHTML/HTML은 XML/SGML을 준수하지만, CSS는 독자적인 구문으로 작성하는 언어이며 XML을 준수하지 않는다. XSL-FO에서는 XHTML과 달리 의미 기반 마크업은 수행하지 않고, 조판에 필요한 마크업만 수행한다. 또한, XSL-FO 문서 자체에 조판 대상이 되는 문서 데이터가 모두 저장된다. 반면에 CSS는 다른 XML 또는 XHTML 문서의 기본 표현을 변경하는 방법을 채택하고 있다.
10. XSL-FO와 한국
XSL-FO는 한국에서 제한적으로 사용된다.
참조
[1]
웹사이트
XSL-FO Current Status - W3C
https://www.w3.org/s[...]
2016-08-05
[2]
간행물
Re: [xsl] xsl 2.0?
http://www.biglist.c[...]
2013-11-02
[3]
웹사이트
XSL-FO 2.0 Design Notes Published - W3C
https://www.w3.org/S[...]
2018-11-09
[4]
웹인용
XSL-FO Current Status - W3C
https://www.w3.org/s[...]
2016-08-05
[5]
간행물
Re: [xsl] xsl 2.0?
http://www.biglist.c[...]
2013-11-02
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com