Кіріспе

XSL FO (XSL Formatting Objects) – PDF файлдарын жасау үшін ең көп қолданылатын XML құжаттарын форматтауға арналған таңбалау тілі. XSL FO – XML деректерін түрлендіру және форматтауға арналған W3C технологиялары жиынтығының бір бөлігі, XSL (Extensible Stylesheet Language) құрамына кіреді. XSL-дің басқа да бөліктері – XSLT және XPath. XSL FO-ның 1.1 нұсқасы 2006 жылы жарияланды. W3C XSL FO-ны толыққанды деп санайды: жұмыс үлгісіне соңғы жаңарту 2012 жылдың қаңтарында жасалды, ал жұмыс тобы 2013 жылдың қарашасында таратылды.

Негізгі білім

HTML және CSS-тің комбинациясынан өзгеше, XSL FO – бірыңғай форматтау тілі. Бұл термин HTML-де қолданылатын семантикалық белгілеуге ие емес. CSS сыртқы XML немесе HTML құжатының бастапқы форматтауын өзгертетін болса, XSL FO құжаттың барлық деректерін өзінде сақтайды. XSL FO-ны қолданудың басты идеясы – пайдаланушы құжатты FO емес, XML тілінде жазады. XHTML, DocBook және TEI – осыған мысалдар келтіруге болады. Содан кейін пайдаланушы XSLT түрлендіргішін алады, оны өзі жазады немесе сұранысқа сай құжат түрі үшін табады. Бұл XSLT түрлендіргіш XML-ді XSL FO форматына ауыстырады. XSL FO құжаты жасалғаннан кейін, ол FO процессор деп аталатын бағдарламаға жіберіледі. FO процессорлары XSL FO құжатын оқуға, басып шығаруға немесе осы екеуіне де жарамды форматқа түрлендіреді. XSL FO-ның ең көп таралған нәтижесі – PDF файлы немесе PostScript, бірақ кейбір FO процессорлары RTF файлдары сияқты басқа форматтарға немесе тіпті пайдаланушы интерфейсінде беттердің тізбегі мен олардың мазмұнын көрсететін терезеге шығара алады. XSLT тілі бастапқыда осы мақсат үшін ғана ойластырылған, бірақ қазір XML түрлендірулері үшін кеңінен қолданылады. XSL FO-да осы түрлендіру қадамы соншалықты қалыпты саналады, кейде адамдар 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-дің пайда болуымен және пайдаланушыға тікелей соңғы түрінде таратылуынан өзгеше. Форматтау тілінің кіріс (HTML/CSS немесе XSL FO) орнына түпкілікті PDF-ті тарату, бір жағынан, алушыларға форматтау тілінің интерпретаторлары арасындағы айырмашылықтардан туындайтын болжау мүмкін еместіктен зардап шекпеуін қамтамасыз етеді, ал екінші жағынан, құжатты алушының қажеттіліктеріне оңай бейімдеуге болмайды, мысалы, әртүрлі бет өлшемдеріне немесе таңдалған қаріп өлшеміне, немесе экранға, қағазға немесе дыбысқа арналған форматқа сәйкес етуге.

Тілдік ұғымдар

XSL FO тілі беттік медиа үшін жасалған; осылайша, беттер ұғымы XSL FO құрылымының ажырамас бөлігі болып табылады. FO «мазмұнға бағытталған» дизайн үшін ең жақсы жұмыс істейді. Бұл кітаптар, мақалалар, құқықтық құжаттар және т.б. үшін стандартты макет әдісі. Ол бір беттің жиектеріне енгізілген әртүрлі қайталамалы ақпаратпен біріктірілген, үзіліссіз мәтін ағынынан тұрады. Бұл газеттер мен журналдарда қолданылатын «макетқа бағытталған» дизайннан өзгеше. Егер аталған құжаттардағы мазмұн қажетті кеңістікке сыймаса, онда сыйымдылыққа дейін оның бір бөлігі қысқартылады. XSL FO журнал макеттерінің қатаң шектеулерін оңай басқара алмайды; шындығында, көп жағдайларда ол мұндай макеттердің кейбір түрлерін бейнелеу мүмкіндігінен құралмайды. Тілдің қарапайым дизайнына қарамастан, ол өте кең мүмкіндіктерге ие. Кестелер, тізімдер, қапталдағы элементтер және басқа да көптеген мүмкіндіктер қолжетімді. Бұл мүмкіндіктер CSS макеттерімен салыстыруға болады, бірақ олардың кейбіреулері XSLT арқылы құрастырылуы тиіс.

Құжаттың құрылымы

XSL FO құжаттары XML құжаттары болып табылады, бірақ олар кез келген DTD немесе схемаға сәйкес болуы міндетті емес. Керісінше, олар XSL FO спецификациясында анықталған синтаксиске сәйкес келеді. XSL FO құжаттарында екі қажетті бөлім бар. Бірінші бөлімде атаулы беттік макеттердің тізімі егжей-тегжейлі сипатталады. Екінші бөлім – әртүрлі беттік макеттерді пайдаланып, құжат деректерінің мазмұны әртүрлі беттерді қалай толтыруды анықтайтын, белгілермен бірге құжат деректерінің тізімі. Беттік макеттер беттің қасиеттерін анықтайды. Олар мәтін ағынының бағытын белгілей алады, осылайша тілдің конвенцияларына сәйкес келеді. Олар беттің мөлшерін, сондай-ақ оның жиектерін анықтайды. Ең маңыздысы, олар жұп және тақ беттер әртүрлі көрінетін эффекттерді жасауға мүмкіндік беретін беттер тізбегін анықтай алады. Мысалы, кітапты тіркеу үшін жиекке көбірек орын беруге мүмкіндік беретін, баспаға арналған ішкі жиектерге қосымша кеңістік беретін беттік макет тізбегін анықтауға болады. Құжат деректері бөлігі ағындар тізбегіне бөлінеді, әрбір ағын беттік макетке тіркеледі. Ағындарда мәтіндік деректердің, жолға орналасқан белгілер элементтерінің немесе олардың комбинациясы бар блоктардың тізімі болады. Бет нөмірлері, тарау тақырыптары сияқты мазмұнды құжаттың жиектеріне қосуға болады. Блоктар мен жолға орналасқан элементтер CSS-тегідей жұмыс істейді, бірақ FO мен CSS арасында толтыру мен жиектерге қатысты кейбір ережелер өзгеше. Блоктар мен жолға орналасқан элементтердің беттік бағытқа қатысты бағытын толыққанды анықтауға болады, осылайша FO құжаттары ағылшын тілінен өзге тілдерде де жұмыс істей алады. FO спецификациясының тілі, CSS 2.1 тілінен айырмашылығы, осы бағыттарды сипаттағанда сол және оң сияқты бағытты бейтарап емес терминдерді пайдаланудың орнына бастау және соң сияқты бағытты бейтарап терминдерді қолданады. XSL FO негізгі мазмұн белгілері CSS-тен және оның каскадтық ережелерінен алынған. Сондықтан, XSL FO-дағы көптеген атрибуттар, егер олар нақты түрде жаңартылмаса, бағынышты элементтерге таралады.

XSL-FO v1.0 мүмкіндіктері

XSL FO мәтіндік ресімдеудің кең мүмкіндіктерін ұсынады. Жоғарыда айтылғаннан басқа, XSL FO тілі келесілерді белгілеуге рұқсат береді.

Бірнеше баған

Бір беттің бірнеше бағаны болуы мүмкін. Мұндай жағдайда, блоктар әдепкі бойынша бір бағаннан келесі бағанға ағылады. Жеке блоктарды барлық бағандарды қамтуға орнатуға болады, бұл бетте мәтіндік үзіліс жасайды. Бұл үзілістің жоғарысындағы бағандар бір-бірімен бірігіп ағылады, ал үзілістің төменіндегі бағандар да солай. Бірақ жоғарыдағы бөлімнен төменгі бөлімге мәтін ағуына рұқсат етілмейді. XSL FO бет спецификациясының ерекшелігіне байланысты, бірнеше бетте бағандардың саны мен ені әртүрлі болуы мүмкін. Сондықтан мәтін 3 бағандық беттен 5 бағандық, содан кейін 1 бағандық бетке оңай ағып өтуі мүмкін. Барлық FO мүмкіндіктері көп бағанды беттің шектеулерінде жұмыс істейді. Біз екі атрибутты, яғни span және padding-after арқылы бірнеше бағанды қамтуға боламыз.

Тізімдер

XSL FO тізімі, негізінен, қатар қойылған екі блоктан тұрады. Кіріс – "сол жақтағы", яғни бастапқы қатар бағытындағы блоктан, және "оң жақтағы", яғни соңғы қатар бағытындағы блок тізбегінен құралады. Сол жақтағы блок түсіндірілуінше, тізімдегі сан немесе белгіше болады. Дегенмен, ол сөздікте кездесетіндей, мәтін жолынан да тұруы мүмкін. Оң жақтағы блок күтілгендей жұмыс істейді. Бұл екі блок та блок контейнерлері болуы мүмкін, немесе бір тізімде бірнеше блоктан тұруы мүмкін. XSL FO тізімдерін нөмірлеу, егер нөмірленген болса, XSL FO құжатын жасаған XSLT немесе басқа да процесс арқылы жүзеге асырылуы керек. Сондықтан, XSL FO-да нөмірленген тізімдер нақты түрде нөмірленуі тиіс.

Беттеуді басқару

Пайдаланушы блоктар үшін немесе ағынның өзі үшін "жесір" және "жетім" опцияларын қоса алады, сондай-ақ атрибуттардың бағынышты блоктарға таралуына мүмкіндік береді. Бұдан өзге, блоктарды бір бетте бірге ұстауға болады. Мысалы, кескін блогы мен оның сипаттамасы ешқашан бөлінбеуі мүмкін. FO процессоры осы талаптарды орындауға бар күшін салады, тіпті бұл үшін бетте көп бос орын қалдыру қажет болса да.

Түсініктемелер

Пайдаланушы беттің төменгі жағында пайда болатын түсіндірмелерді (footnote) құра алады. Түсіндірме FO құжатында, оған сілтеме жасалған жерде, қалыпты мәтін ағынында жазылады. Сілтеме желілік анықтама түрінде көрсетілуі мүмкін, бірақ бұл міндетті емес. Түсіндірменің мәтіні – FO процессорымен беттің төменгі бөлігіне орналастырылатын бір немесе бірнеше блоктан тұрады. FO процессоры сілтеме қай жерде болса да, сол сілтеме арқылы шақырылған түсіндірме сол беттен басталатынын кепілдік береді. Бұл үшін қажет болса, бетке қосымша бос орын да жасалуы мүмкін.

Кестелер

FO кестесі HTML/CSS кестесі сияқты жұмыс істейді. Пайдаланушы әрбір жеке ұяшық үшін деректер қатарын көрсетеді. Пайдаланушы сондай-ақ әр баған үшін стильдік ақпаратты, мысалы, фон түсін анықтай алады. Бұдан өзге, пайдаланушы бірінші қатарды кесте тақырыбы ретінде, оған арнайы стильдік форматтауды қолданып белгілей алады. FO процессорына әр бағанға қанша кеңістік беру керектігін нақты көрсетуге болады, немесе кестедегі мәтінді автоматты түрде сыйдыруға рұқсат етуге болады.

Мәтін бағдарлауды басқару

FO мәтін блоктарын бағдарлау үшін кең мүмкіндіктерге ие. Бір беттің ортасында мәтін блогын басқа бағытта орналастыруға болады. Мұндай бағытталған блоктар құжаттағы басқа мәтіннен өзгеше бағытта жазылған тілдер үшін немесе жай ғана макеттік талаптарға сәйкес мәтінді бағыттау үшін қолданылады. Бұл блоктарға кестелерден, тізімдерден бастап, тіпті басқа бағытталған мәтін блоктарына дейін кез келген мазмұн енгізілуі мүмкін.

Әр түрлі

Бет нөміріне сілтемелер. Арнайы белгісі бар бет мәтінде көрсетілуі мүмкін, ал FO процессоры осы белгі пайда болған нақты бет нөмірін автоматты түрде қояды. Блок шекаралары, түрлі стильдерде. Фондық түстер мен суреттер. CSS-тегідей қаріптерді басқару және қалыңдық. Ептің жанында орналасқан элементтер. Әртүрлі кірістірілген элементтер.

XSL-FO v1.1 мүмкіндіктері

XSL FO 1.1 нұсқасы 1.0 нұсқасына көптеген жаңа мүмкіндіктерді қосады.

Көптік ағымдар және ағымды карталау

XSL FO 1.0 бір беттің қай аймақтарына қандай мәтін орналастырылуына қатысты тым қатаң шектеулер қойды. 1.1 нұсқасы бұл шектеулерді едәуір жеңілдетеді, нәтижесінде ағын мәтінді бір беттің бірнеше нақты аймақтарына орналастыруға болады. Бұл газеттерге ұқсас мәтін жинауға мүмкіндік береді.

Бетбелгілер

XSL FO процессорлары үшін көптеген шығыс форматтары, әсіресе PDF, кітапшалар мүмкіндігіне ие. Бұл мүмкіндік форматқа пайдаланушы таңдауына болатын жеке терезеде мәтіндік жол көрсетуге мүмкіндік береді. Таңдалғанда, құжат терезесі дереу құжаттың белгілі бір бөліміне жылжиды. XSL FO v1.1 енді XSL FO ішінде аталатын кітапшаларды жасау мүмкіндігін ұсынады, осылайша процессор оны қолдайтын шығыс форматына жіберуге болады.

Индекстеу

XSL FO 1.1 кітаптың соңында болатын анықтамалық тізімді жасауға мүмкіндік беретін мүмкіндіктерге ие. Бұл FO құжатында дұрыс белгіленген элементтерге сілтеме беру арқылы іске асырылады.

Соңғы беттің сілтемесі

Соңғы бетті құжат ішінде нақты тірекке тікелей сілтеме бермей-ақ жасауға болады. "Соңғы бет" анықтамасы белгілі бір беттер топтамасымен немесе бүкіл құжатпен шектелуі мүмкін. Бұл пайдаланушыға, мысалы, "15 беттің 2-сі" деп көрсетуге мүмкіндік береді, онда 15-ші бет – соңғы бет анықтамасының нөмірі болып табылады.

Кестелік белгілер

Кесте белгілері пайдаланушыға кесте тақырыптары мен қорытындыларында динамикалық мазмұн жасауға мүмкіндік береді, мысалы, кестедегі әрбір беттің төменгі жағында жиынды қосындыларды көрсету немесе "кесте жалғасып келеді" деген белгілерді орнату.

Ішкі/сыртқы жүзу

XSL FO 1.1 жаңғыртылған "ішкі" және "сыртқы" кілт сөздерін қосады, осы арқылы беттердің сыртқы немесе ішкі жиектерінде орналасқан маргиналиялармен беттерді құру мүмкін болады. "Ішкі" дегеніміз – кітаптың мұқабасына қараған бет жағы, ал "сыртқы" – кітаптың мұқабасынан алыс жатқан бет жағы.

Графикалық өлшемін өзгерту

XSL FO 1.1 графиктің көлемін реттеу функционалдығын жетілдіреді, оның ішінде кішірейте беруге (бірақ үлкейте беруге емес) және нақты масштабтау сатыларын анықтау мүмкіндігі бар. Бұдан өзге, алынған масштабтау коэффициентін көрсету үшін пайдалануға болады (мысалы, суреттің түсіндірмесінде "сурет нақты көлемінің 50% мөлшерінде көрсетілген" деп жазу үшін).

Артықшылықтар

XML тілі – XML тілі болғандықтан, кез келген XML тілінен XSL FO кодын жасау үшін тек XSLT түрлендіруі (және XSLT процессоры) қажет. TEI немесе DocBook форматында құжатты оңай жазып, оны вебте көру үшін HTML немесе басып шығару үшін PDF (FO процессоры арқылы) форматына түрлендіруге болады. Шындығында, осы екі мақсатқа арналған көптеген TEI және DocBook XSLT түрлендіргіштері бар. Қолданудың қарапайымдығы – XSL FO-ның тағы бір артықшылығы – қолданудың салыстырмалы қарапайымдығы. Тілдің көптеген мүмкіндіктері CSS негізінде құрылған, сондықтан CSS-ті білетін адам таңбалау атрибуттарының негіздерімен таныс болады. FO құжатының нақты бір бөлімі қалай көрінетінін түсіну әдетте өте оңай. Төмен құн – Коммерциялық беттік жинақ және макеттік өнімдермен салыстырғанда, XSL FO типографиялық және макеттік талаптарға сай келген жағдайда әлдеқайда арзан шешім ұсына алады (төменде қараңыз). Бастапқы құны төмен (Apache FOP және xmlroff сияқты тегін нұсқалары сіздің талаптарыңызға сай келсе, тіпті нөлдік), әсіресе коммерциялық жинақ құралдарымен салыстырғанда. Қажетті біліктер (негізінен XSLT бағдарламалау) кеңінен қол жетімді. XSL FO туралы көптеген жақсы кітаптар, онлайн ресурстар және белсенді пайдаланушылар қауымдастығы бар. Көп тілділік – XSL FO барлық жазбаша адам тілдерінде жұмыс істеу үшін жасалған және нұсқалары негізінен осы мақсатқа жеткен. Бұл XSL FO-ны көптеген ұлттық тілдерге аударылған құжаттарды құрастыру үшін өте ыңғайлы етеді, онда құжаттардың барлық тілдік нұсқаларын құрастыра алатын бір құрал жиынтығы қажет. Бұл тұтынушылық электроника сияқты техникалық құжаттама үшін ерекше маңызды, онда Азия және Таяу Шығыс тілдері маңызды, өйткені әлемнің осы бөліктері ұялы телефондар мен компьютерлік перифериялық құрылғылар сияқты үлкен нарықтарды білдіреді. Дамыған стандарт – XSL FO 1.1 нұсқасының жариялануымен XSL FO көптеген коммерциялық және коммерциялық емес нұсқалары бар дамыған стандарт екенін дәлелдеді. Беттік жинаққа қатысты басқа даComparable стандарт жоқ.

Ауыстыру

XML және HTML стандарттары, CSS стандартымен бірге, CSS2 (беттік медиа модулі) баспаға арналған медиаға негізгі мүмкіндіктерді ұсына бастағаннан бері. CSS Беттік Медиа Модулі 3-де W3C құжат пішімдеу және PDF файлдарын жасау үшін біріктірілген стандартты дамытуты аяқтап жатыр. Осылайша, 2013 жылдан бері,