XSL Dönüşümleri (XSLT) Sürüm 1.0
ÖncekiYukarıSonraki

16 Çıktı

İçindekiler

    16.1 XML Çıktılama Yöntemi
    16.2 HTML Çıktılama Yöntemi
    16.3 Metin Çıktılama Yöntemi
    16.4 Çıktı Önceleniminin İptal Edilmesi

<!-- Grubu: tepe-seviyeden-eleman -->
<xsl:output
  method = "xml" | "html" | "text" | nitelikli-ad-ama-kısa-ad-değil
  version = ad-dizgeciği
  encoding = dizge
  omit-xml-declaration = "yes" | "no"
  standalone = "yes" | "no"
  doctype-public = dizge
  doctype-system = dizge
  cdata-section-elements = nitelikli-adlar
  indent = "yes" | "no"
  media-type = dizge />
eleman

Bir XSLT işlemci hedef ağacı bir bayt dizisi olarak çıktılayabilir (böyle olması gerekmese bile; Uyumluluk bölümüne bakınız). xsl:output elemanı biçembent yazarına hedef ağacın nasıl çıktılanmasını istediğini belirtebilme imkanı verir. Eğer bir XSLT işlemci hedef ağacı çıktılıyorsa, bu, xsl:output elemanı tarafından belirtilmiş demektir; ancak bunun böyle olması gerekli değildir.

xsl:output elemanına sadece bir tepe-seviyeden eleman olarak izin verilir.

The method özniteliğinde hedef ağacın çıktılanma yöntemi belirtilir. Değer bir NitelAd olmalıdır. Eğer bu NitelAd bir önek içermiyorsa, bu belgede belirtilmiş yöntemlerden biri olarak ele alınır ve xml, html veya text değerlerinden biri olmalıdır. Eğer bu NitelAd bir önek içeriyorsa, Nitelikli Adlar bölümünde açıklandığı gibi bir genişletilmiş isime genişletilir; genişletilmiş isim çıktılama yöhtemini belirtir; bu durumdaki davranışın ne olacağı bu belgede belirtilmemiştir.

method özniteliği için öntanımlı davranış şöyle seçilir. Eğer,

öntanımlı çıktılama yöntemi html olacaktır; aksi takdirde xml'dir. Öntanımlı çıktılama yöntemi eğer bir xsl:output elemanı belirtilmemişse veya xsl:output elemanı method özniteliksiz belirtilmişse kullanılmalıdır.

xsl:output elemanının diğer öznitelikleri çıktılama yönteminin parametreleridir. Şu özniteliklere izin verilir:

Her özniteliğin her çıktılama yöntemi için anlamı ayrı ayrı çıktılama yöntemlerinin açıklamalarında açıklanacaktır. Çıktılama yöntemi açıklamalarında yer verilmemiş öznitelikler o çıktılama yöntemi için uygulanabilir değillerdir.

Bir biçembent çık sayıda xsl:output elemanı içerebileceği gibi, ithal ettiği veya içerdiği biçembentlerin her birinde de çok sayıda xsl:output elemanı olabilir. Bir biçembentte yer alan tüm xsl:output elemanları tek bir etkin xsl:output elemanı olarak birleştirilir. cdata-section-elements özniteliği için etkili değer belirtilmiş değerlerin birleşimidir. Diğer öznitelikler için etkili değer, en yüksek ithal önceliği ile belirtilmiş olan değerdir. Bir öznitelik için böyle birden fazla değerin varlığı bir hatadır. Bir XSKLT işlemci hatalı raporlayabilir, raporlamıyorsa, biçembentte son yer alan değeri kullanarak hatadan kurtulmalıdır. Özniteliklerin öntanımlı değerleri xsl:output elemanları birleştirildikten sonra saptanır; farklı çıktılama yöntemleri için bazı özniteliklerin öntanımlı değerleri farklı olabilir.

16.1 XML Çıktılama Yöntemi

xml çıktılama yöntemi, hedef ağacı bir iyi biçimli XML harici genel çözümlü öğe olarak çıktılar. Eğer hedef ağcın kök düğümü tek bir çocuk elemana sahipse ve hiç metin düğümü çocuğu yoksa, öğenin ayrıca iyi biçimli XML belge öğesi olması gerekir. Şunun gibi sıradan bir XML belge sarmalayıcı içindeki bir öğeye atıfta bulunurken,

<?xml version="xml-sürümü"?>
<!DOCTYPE doc [
<!ENTITY e SYSTEM "öğenin-yeri">
]>
<doc>&e;</doc>

öğenin-yeri ile öğenin dosya sistemindeki yeri, xml-sürümü ile de öğenin XML sürümü belirtiliyorsa, atıfta bulunulan elemanın bir bütün olarak [XML Adları] veya [XML Adları 1.1] ile uyumlu bir iyi biçimli XML belge olması gerekir. Ek olarak, yeni ağaç, öğenin Veri Modeli bölümünde belirtildiği gibi bir XML belge olarak çözümlenmesiyle oluşmuşsa, belge elemanı kaldırıldıktan sonra, onun çocuklarını kök düğümün çocukları yaparak oluşturulan yeni ağaç aşağıdaki olasılıkların dışında hedef ağaçla aynı olacaktır:

Eğer XSLT işlemci, doctype-system özniteliği sebebiyle bir belge türü bildirimli veya standalone özniteliği sebebiyle tekbaşına belge bildirimli çıktılama yapıyorsa, çıktının bir iyi biçimli XML belge olması ve yukarıdaki gereksinimlerin, herhangi bir sarmalayıcı olmaksızın, DTD'yi işleme sokmayan bir XML işlemci kullanılarak belgenin doğrudan çözümlenmesiyle oluşturulan ağaca uygulanması gerekir.

Not:
DTD'nin işlenmesi, öznitelik öntanımlaması sebebiyle, ağaçta ek özniteliklerin yer almasına sebep olabilir.

version özniteliği hedef ağacı çıktılarken kullanılacak XML sürümünü belirtmek için kullanılır. Eğer XSLT işlemci bu XML sürümünü desteklemiyorsa, desteklediği XMl sürümünü kullanmalıdır. Eğer çıktı xML bildirimini içerecekse, bu bildirimde XSLT işlemcinin desteklediği sürüm numarasına karşı düşen çıktılama yapılmalıdır. Öntanımlı değer 1.0'dır. Eğer değer 1.1 ise ve XSLT işlemci XML 1.1 ve XML 1.1 için İsim-alanlarını destekliyorsa, çıktıya aşağıdaki kısıtlamalar uygulanır:

encoding özniteliğiyle hedef ağacı çıktılamakta kullanılacak karakter kodlaması tercihi belirtilir. XSLT işlemcilerinin UTF-8 ve UTF-16 değerlerini kabul etmeleri gerekir. Diğer değerler için, eğer XSLT işlemci bunları desteklemiyorsa bunu hata olarak raporlayabiyir, raporlamıyorsa, UTF-8 veya UTF-16 kodlanmış çıktılama yapmalıdır. XSLT işlemci, [XML] ve [XML 1.1] önergelerinin KodlamaAdı sözdizimi ile eşleşmeyen kodlama isimlerini kullanmaması gerekir. encoding özniteliği kullanılmamışsa, XSLT işlemcinin UTF-8 veya UTF-16 kodlanmış çıktılama yapması gerekir.

Hedef ağacın, XSLT işlemcinin çıktılama için kullandığı kodlamada bulunmayan bir karakteri içermesi olasıdır. Bu durumda, eğer karakter XML'in karakter gönderimlerini tanıdığı bir bağlamda yer alıyorsa (örn, bir öznitelik değerinde veya bir metin düğümünde), karakterin bir karakter gönderimi olarak çıktılanması gerekir; aksi takdirde (örn, karakter bir eleman isminde yer alıyorsa), XSLT işlemci hatayı raporlamalıdır.

Eğer indent özniteliği yes değeri ile kullanılmışsa, xml çıktılama yöntemi, sonucun göze hoş görünecek şekilde girintilenmesi için hedef ağaçta mevcut boşluk karakterlerine ek olarak (muhtemelen biçembent ve kaynak belgedeki boşluk ayıklamaya uygun olarak), ek boşluklar çıktılayabilir; eğer özniteliğin değeri olarak no belirtilmişse, ilave bir boşluk çıktılanmayacaktır. Öntanımlı değer no'dur. xml çıktılama yöntemi ek boşlukları çıktılamak için bir algoritma kullanmalıdır; bu algoritma, boşluklar çıktıdan ayıklanırken, sadece xsl:text elemanlarından oluşan boşlukları korunacak elemanlar listesiyle Boşluk Ayıklama bölümünde açıklandığı gibi ayıklanıyorsa, ek boşlukların çıktılanması ile çıktılanmaması arasında bir fark olmayacak şekilde çıktılamayı sağlamalıdır.

Not:
Karışık içerikli eleman türleri içeren belge türleri için indent="yes" kullanmak iyi sonuç vermeyecektir.

cdata-section-elements özniteliği boşluk ayraçlı olarak NitelAdlardan oluşan bir liste içerebilir. Her NitelAd yer aldığı xsl:output elemanında etkili olan isim-alanı bildirimleri kullanılarak bir genişletilmiş isme genişletilir; eğer bir öntanımlı isim-alanı varsa, öneksiz NitelAdlar kullanılır. Genişletme işlemi çok sayıda xsl:output elemanı tek bir xsl:output elemanı olarak birleştirilmeden önce yapılır. Eğer bir metin düğümünün ebeveyninin genişletilmiş ismi bu listenin bir üyesiyse, metin düğümü bir CDATA bölümü olarak çıktılanacaktır. Örneğin,

<xsl:output cdata-section-elements="example"/>

yönergesi, biçembentte

<example>&lt;foo></example>

veya

<example><![CDATA[<foo>]]></example>

olarak yer alan bir birebir hedef elemanının şöyle çıktılanmasına sebep olacaktır:

<example><![CDATA[<foo>]]></example>

Eğer metin düğümü ]]> dizgesini içeriyorsa, açık olan CDATA bölümü ]] karakterlerinden sonra kapanır ve > karakterinden önce yenisi açılır. Örneğin, bir birebir hedef elemanı biçembentte şöyle yer alıyor olsun:

<example>]]&gt;</example>

Bunun çıktısı şöyle olurdu:

<example><![CDATA[]]]]><![CDATA[>]]></example>

Eğer metin düğümü hedef ağacı çıktılamakta kullanılan karakter kodlaması ile gösterilemeyecek bir karakter içeriyorsa, açık olan CDATA bölümü bu karakterden önce kapatılmalı, karakter bir karakter veya öğe gönderimi olarak çıktılandıktan sonra metnin kalanı için yeni bir CDATA bölümü açılmalıdır.

CDATA bölümleri, cdata-section-elements özniteliğinde açıkça CDATA bölümü olarak çıktılanmak üzere belirtilmiş olan metin düğümleri haricinde kullanılmamalıdır.

xml çıktılama yönteminin, omit-xml-declaration özniteliği yes değeri ile kullanılmış olmadıkça bir XML bildirimi çıktılaması gereklidir. XML bildirimi hem hem sürüm bilgisi hem de karakter kodlaması belirtimini içermelidir. Eğer standalone özniteliği belirtilmişse, bir tekbaşına belge bildiriminin de standalone özniteliğinde belirtilen değerle XML bildiriminde yer alması gerekir. Aksi takdirde, XML bildirimi bir tekbaşına belge bildirimi içermemelidir. Bu kural, hem XML bildirimine (bir belge öğesinin başında bulunur) hem de metin bildirimine (bir harici genel çözümlü öğenin başında bulunur) uygulanır.

Eğer doctype-system özniteliği belirtilmişse, xml çıktılama yöntemi, ilk elemandan hemen önce bir belge türü bildirimi çıktılayacaktır. <!DOCTYPE'i takibeden isim ilk elemanın ismiyle aynı olmak zorundudır. Bir de doctype-public özniteliği belirtilmişse, xml çıktılama yöntemi, bir PUBLIC ile bunu izleyen bir genel betimleyici ve bir sistem betimleyicisi çıktılayacaktır; aksi takdirde, bir SYSTEM ile bunu izleyen bir sistem betimleyicisi çıktılayacaktır. Dahili altküme boş olmalıdır. doctype-system özniteliği belirtilmiş olmadığı takdirde, doctype-public özniteliği yok sayılmalıdır.

media-type özniteliği xml çıktılama yöntemi için uygulanabilir olup öntanımlı değeri text/xml'dir.

16.2 HTML Çıktılama Yöntemi

html çıktılama yöntemi hedef ağacı HTML olarak çıktılar; örnek:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:template match="/">
  <html>
   <xsl:apply-templates/>
  </html>
</xsl:template>

...

</xsl:stylesheet>

version özniteliği ile HTML sürümü belirtilir ve öntanımlı değeri 4.0 olup, çıktının HTML 4.0 [HTML] önergesi ile uyumlu olacağını belirtir.

html çıktılama yöntemi, genişletilmiş ismi tanımsız bir isim-alanı tanım-yerine sahip olmadıkça bir elemanı xml çıktılama yönteminden farklı bir biçimde çıktılamamalıdır; genişletilmiş ismi tanımlı bir isim-alanı tanım-yerine sahip bir eleman XML olarak çıktılanmalıdır. Eğer bir elemanın genişletilmiş ismi tanımsız isim-alanı tanım-yerine sahipse, ancak genişletilmiş ismin yerel kısmı bir HTML eleman olarak tanınmıyorsa, span gibi bir satıriçi eleman olarak boş olmayacak şekilde çıktılanmalıdır.

html çıktılama yöntemi, boş elemanlar için bir bitiş etiketi çıktılamamalıdır. HTML 4.0 için boş elemanlar, area, base, basefont, br, col, frame, hr, img, input, isindex, link, meta ve param elemanlarıdır. Örneğin bir eleman biçembette <br/> veya <br></br> biçiminde yazılmışsa, çıktı <br> olacaktır.

html çıktılama yöntemi, HTML elemanlarının isimlerini harf büyüklüğüne duyarsız biçimde algılamalıdır. Örneğin, br, BR veya Br HTML için br elemanı olup bitiş elemanı olmaksızın çıktılanmalıdır.

html çıktılama yöntemi, script ve style elemanlarının içeriği için önceleme uygulamamalıdır. Örneğen bir biçembentte bir birebir hedef eleman şöyle yer alıyor olsun:

<script>if (a &lt; b) foo()</script>

veya

<script><![CDATA[if (a < b) foo()]]></script>

için çıktı şöyle olacaktır:

<script>if (a < b) foo()</script>

html çıktılama yöntemi, öznitelik değerlerinde yer alan < karakterlerini öncelememelidir.

Eğer indent özniteliğini değeri yes ise, html çıktılama yöntemi, HTML tarayıcısının çıktıyı oluşturma yöntemini değiştirmediği sürece hedef ağaca çıktılanan boşluk karakterlerine ekleme yapabileceği gibi bunları silebilir de.

html çıktılama yöntemi, HTML 4.0 Önergesinin B 2.1 ek bölümünde önerilen yöntemi kullanarak tanım-yeri (URI) öznitelik değerlerindeki ASCII olmayan karakterleri öncelemelidir.

html çıktılama yöntemi, bir karakteri, eğer çıktılama yönteminde kullanılan HTML sürümünde tanımlıysa, bir karakter öğesi gönderimi kullanarak çıktılayabilir.

html çıktılama yöntemi, işlem yönergelerini ?> ile değil, > ile sonlandırmalıdır.

html çıktılama yöntemi, mantıksal değerli öznitelikleri (değerleri olarak kendi isimleri verilmiş öznitelikler) kısaltılmış biçimde çıktılamalıdır. Örneğin başlangıç etiketi,

<OPTION selected="selected">

biçiminde yazılmışsa, bunun çıktısı şöyle olurdu:

<OPTION selected>

html çıktılama yöntemi, bir öznitelik değerinde { karakterinin önünde bir & karakteri yer alıyorsa bu karakteri öncelememelidir (HTML 4.0 Önergesinin B 7.1.1 ek bölümüne bakınız). Örneğin bir biçembentte bir başlangıç etiketi şöyle yer alıyor olsun:

<BODY bgcolor='&amp;{{randomrbg}};'>

Bu örneklenim şöyle çıktılanmalıdır:

<BODY bgcolor='&{randomrbg};'>

encoding özniteliği ile tercih edilen karakter kodlaması belirtilir. Bir HEAD elemanı varsa html çıktılama yöntemi bu elemanın başlangıç etiketinin hemen ardına kullanılan karakter kodlamasının belirtildiği bir META elemanını eklemesi gerekir. Örnek:

<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
...

Hedef ağacın, XSLT işlemcinin çıktılama için kullandığı karakter kodlamasında bulunmayan bir karakteri içermesi olasıdır. Eğer bu karakter, HTML'nin karakter gönderimlerini tanıdığı bir bağlamda yer alıyorsa, karakter bir karakter öğesi gönderimi olarak veya onluk sayılı karakter gönderimi olarak çıktılanmalıdır; aksi takdirde (örneğin, bir script veya style elemanında veya bir açıklamada), XSLT işlemci durumu hata olarak bildirmelidir.

Eğer doctype-public veya doctype-system öznitelikleri belirtilmişse, html çıktılama yönteminin ilk elemandan hemen önce bir belge türü bildirimi çıktılaması gerekir. Bu bildirimde, <!DOCTYPE dizgesinden sonra gelen isim HTML veya html olmalıdır. doctype-public özniteliği belirtilmişse, öznitelik değerini (genel betimleyici) PUBLIC ibaresinden sonra eklemelidir; doctype-system özniteliği de ayrıca belirtilmişse, bunun değerinin (sistem betimleyici) de genel betimleyicinin ardından çıktılanması gerekir. Eğer doctype-system özniteliği, doctype-public olmaksızın tek başına belirtilmişse, çıktılama yöntemi bu değeri SYSTEM ibaresinin ardına ekleyerek çıktılamalıdır.

media-type özniteliği de html çıktılama yönteminde uygulanabilir olup öntanımlı değeri text/html'dir.

16.3 Metin Çıktılama Yöntemi

text çıktılama yöntemi, hedef ağacı çıktıda, hedef ağaçtaki her metin düğümünün değerini belgedeki sıraya uygun olarak ve buna herhangi bir önceleme uygulamaksızın çıktılamak suretiyle oluşturur.

media-type özniteliği text çıktılama yönteminde uygulanabilir olup öntanımlı değeri text/plain'dir..

encoding özniteliği ile text çıktılama yönteminin karakter dizilerini bayt dizilerine dönüştürürken kullanacağı karakter kodlaması belirtilir. Öntanımlı değer sisteme bağlıdır. Eğer hedef ağaç, XSLT işlemcinin çıktılama için kullandığı karakter kodlamasıyla ifade edilemeyen bir karakter içeriyorsa, XSLT işlemcinin bunu bir haka olarak bildirmesi gerekir.

16.4 Çıktı Önceleniminin İptal Edilmesi

Normalde, xml çıktılama yöntemi & ve < karakterlerini (ve olası diğer karakterleri) metin düğümlerini çıktılarken önceler. Bu, çıktının iyi biçimli XML olması için gereklidir. Bununla birlikte, bazan çıktının iyi biçimli XML olarak çıktılanmaması daha uygun olabilir; örneğin, çıktı, sonradan XML'e duyarlı olmayan bir süreç tarafından iyi biçimli XML'e dönüştürüleceği düşünülen yetersiz biçimlenmiş bölümler içerebilir. Bu amaca uygun olarak, XSLT, çıktı önceleniminin iptalini mümkün kılan bir mekanizma sağlar. xsl:value-of ve xsl:text elemanlarının disable-output-escaping diye, no öntanımlı olmak üzere değer olarak sadece yes veya no kabul eden bir öznitelikleri olabilir; eğer değer yes ise, xsl:value-of veya xsl:text ile üretilen metin düğümü herhangi bir öncelenim uygulanmaksızın çıktılanacaktır. Örnek:

<xsl:text disable-output-escaping="yes">&lt;</xsl:text>

yönergesi tek bir < karakteri üretecektir.

Bir kök düğüm, öncelenim, kök düğümünün astsalları için iptal edilmiş durumda bir xsl:copy-of elemanı kullanılarak kopyalanırken (bkz Değişken ve Değergeçlerin Değerlerinin xsl:copy-of ile Kullanımı), öncelenim, metin düğümünün çıktılanan kopyası için ayrıca iptal edilmiş olmalıdır. Örnek:

<xsl:variable name="x">
  <xsl:text disable-output-escaping="yes">&lt;</xsl:text>
</xsl:variable>
<xsl:copy-of select="$x"/>

Bu örneklenim &lt; değil < çıktılayacaktır.

Bir metin düğümü için çıktı önceleniminin iptal edilmiş oluşunun hedef ağaçta metin düğümünün çıktılanması amacının dışında kullanılması bir hatadır. Bu bakımdan, bir açıklama, işlem yönergesi veya bir öznitelik düğümünü üretmek için bir xsl:value-of veya xsl:text elemanını, çıktı öncelenimini iptal ederek kullanmak bir hatadır; ayrıca, eğer hedef ağaç bölümü öncelenimin iptal edildiği bir metin düğümü içeriyorsa, bir hedef ağaç bölümünü bir sayı veya dizgeye dönüştürmek de bir hatadır. Her iki durumda da, bir XSLT işlemci htayı raporlayabilir, raporlamıyorsa, disable-output-escaping özniteliğini yoksayarak hatadan kurtulmalıdır.

disable-output-escaping özniteliği xml çıktılama yönteminden başka html çıktılama yönteminde de kullanılabilir. text çıktılama yönteminde herhangi bir çıktı öncelenimi zaten yapılmadığından, disable-output-escaping özniteliği yoksayılır.

Bir XSLT işlemcinin çıktı öncelenimini iptal edebileceği tek durum, hedef ağacın nasıl çıktılanacağını denetleyebildiği durumdur. Yine de, bu hep böyle olmayabilir. Örneğin, hedef ağaç çıktılanmak yerine başka bir hedef ağacın çıktılanmasına kaynaklık edebilir. Bu durumda XSLT işlemcinin çıktı önceleniminin iptal edilmesini desteklemesi gerekmez. Eğer bir xsl:value-of veya xsl:text elemanı çıktı öncelenimi iptal edilerek kullanılmışsa ve XSLT işlemci de bunu desteklemiyorsa, XSLT işlemci durumu hata olarak raporlayabilir, raporlamıyorsa, çıktı öncelenimini iptal etmeyerek hatadan kurtulmalıdır.

Eğer çıktı öncelenimin iptali, XSLT işlemcinin çıktılama için kullandığı kodlama tarafından desteklenmeyen bir karakter için kullanılmışsa, XSLT işlemci durumu bir hata olarak raporlayabilir, raporlamıyorsa, çıktı öncelenimini iptal etmeyerek hatadan kurtulmalıdır.

Çıktı önceleniminin iptali bütün XSLT işlemcilerle çalışmayabileceğinden ve XML için çıktı iyi biçimli olmayabileceğinden sadece başka çare yoksa kullanılmalıdır.

ÖncekiYukarıSonraki
Son ÇareBir Linux Kitaplığı SayfasıUyumluluk