<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE spec SYSTEM "../../xmlspec-tr.dtd" [
<!ENTITY w3c "http://www.w3.org">
<!ENTITY XML "../xml">
<!ENTITY XMLNames "../xml-names">
<!ENTITY XML11 "../xml11">
<!ENTITY XMLNames11 "../xml-names11">
<!ENTITY XMLNames "../xml-names">
<!ENTITY XPath "../xpath">
<!ENTITY XMLSTYLE "../xml-stylesheet/">
<!ENTITY XSLT.ns "http://www.w3.org/1999/XSL/Transform">
<!ENTITY XSLTA.ns "http://www.w3.org/1999/XSL/TransformAlias">
<!ENTITY XSLFO.ns "http://www.w3.org/1999/XSL/Format">
<!ENTITY XHTML.ns "http://www.w3.org/TR/xhtml1/strict">
<!ENTITY year "1999">
<!ENTITY month "Kasım">
<!ENTITY MM "11">
<!ENTITY day "16">
<!ENTITY DD "16">
<!ENTITY YYYYMMDD "&year;&MM;&DD;">
<!ENTITY LEV "REC">
<!-- DTD customizations -->
<!ATTLIST proto
  name NMTOKEN #REQUIRED
  return-type (dizge|sayı|mantıksal-değer|düğüm-kümesi|nesne) #REQUIRED
>
<!ATTLIST arg
  type (dizge|sayı|mantıksal-değer|düğüm-kümesi|nesne) #REQUIRED
  occur (opt|rep) #IMPLIED
>

<!ELEMENT xfunction (#PCDATA)>
<!ATTLIST xfunction href CDATA "&XPath;">

<!ELEMENT e:element-syntax
  (e:in-category*, e:attribute*, (e:empty|e:text|e:element|e:model|e:sequence|e:choice))
>
<!ATTLIST e:element-syntax
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
  name NMTOKEN #REQUIRED
>
<!ELEMENT e:in-category EMPTY>
<!ATTLIST
  e:in-category name NMTOKEN #REQUIRED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:attribute (e:attribute-value-template|(e:constant|e:data-type)+)>
<!ATTLIST e:attribute
  name NMTOKEN #REQUIRED
  required (yes) #IMPLIED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:attribute-value-template (e:constant|e:data-type)+>
<!ATTLIST e:attribute-value-template
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:constant EMPTY>
<!ATTLIST
  e:constant value CDATA #REQUIRED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:data-type EMPTY>
<!ATTLIST e:data-type
  name NMTOKEN #REQUIRED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:empty EMPTY>
<!ATTLIST e:empty
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:text EMPTY>
<!ATTLIST e:text
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:element EMPTY>
<!ATTLIST e:element
  name NMTOKEN #REQUIRED
  repeat (zero-or-one|zero-or-more|one-or-more) #IMPLIED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:model EMPTY>
<!ATTLIST e:model
  name NMTOKEN #REQUIRED
  repeat (zero-or-one|zero-or-more|one-or-more) #IMPLIED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:sequence (e:element|e:model|e:choice)+>
<!ATTLIST e:sequence
  repeat (zero-or-one|zero-or-more|one-or-more) #IMPLIED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:choice (e:element|e:model|e:sequence)+>
<!ATTLIST e:choice
  repeat (zero-or-one|zero-or-more|one-or-more) #IMPLIED
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ELEMENT e:element-syntax-summary EMPTY>
<!ATTLIST e:element-syntax-summary
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax"
>
<!ENTITY % local.illus.class "|e:element-syntax|e:element-syntax-summary">
<!ENTITY % local.tech.class "|xfunction">

<!ATTLIST spec
  xmlns:e CDATA #FIXED "http://www.w3.org/1999/XSL/Spec/ElementSyntax">
<!ATTLIST authlist
    translator-name     CDATA #FIXED "Nilgün Belma Bugüner"
    translator-email    CDATA #FIXED "nilgun (at) belgeler·org"
    translation-date    CDATA #FIXED "25 Haziran 2007" >
]>
<spec id="index" xmlns:e="http://www.w3.org/1999/XSL/Spec/ElementSyntax">
<header>
<title>XSL Dönüşümleri (XSLT)</title>
<version>Sürüm 1.0</version>
<w3c-designation>&LEV;-xslt-&YYYYMMDD;</w3c-designation>
<w3c-doctype>W3C Önergesi</w3c-doctype>
<pubdate><day>&day;</day><month>&month;</month><year>&year;</year></pubdate>
<publoc>
<loc href="http://www.w3.org/TR/&year;/&LEV;-xslt-&YYYYMMDD;"
          >http://www.w3.org/TR/&year;/&LEV;-xslt-&YYYYMMDD;</loc>
<loc role="available-format"
href="http://www.w3.org/TR/&year;/&LEV;-xslt-&YYYYMMDD;.xml">XML</loc>
<loc role="available-format"
href="http://www.w3.org/TR/&year;/&LEV;-xslt-&YYYYMMDD;.html">HTML</loc>
</publoc>
<latestloc>
<loc href="http://www.w3.org/TR/xslt"/>
</latestloc>
<prevlocs>
<loc href="http://www.w3.org/TR/1999/PR-xslt-19991008"/>
<loc href="http://www.w3.org/1999/08/WD-xslt-19990813"/>
<loc href="http://www.w3.org/1999/07/WD-xslt-19990709"/>
<loc href="http://www.w3.org/TR/1999/WD-xslt-19990421"/>
<loc href="http://www.w3.org/TR/1998/WD-xsl-19981216"/>
<loc href="http://www.w3.org/TR/1998/WD-xsl-19980818"/>
</prevlocs>
<authlist>
<author>
<name>James Clark</name>
<email href="mailto:jjc@jclark.com">jjc@jclark.com</email>
</author>
</authlist>

<status>

<p>Bu belge W3C üyeleri ve diğer ilgili taraflarca gözden geçirilmiş ve W3C Yönetimi tarafından bir W3C <loc href="http://www.w3.org/Consortium/Process/#RecsW3C">Önergesi</loc> olarak onaylanmıştır. Kararlı bir belge olup başka belgelerden uyulması gerekli bir kaynak olarak atıfta bulunarak veya bir başvuru malzemesi olarak kullanılabilir. W3C'nin Önergedeki rolü, belirtime dikkatleri çekmek ve geniş bir alanda kullanımını yaygınlaştırmaktır. Bu, Web'in işlevselliğini ve birlikte çalışabilirliğini arttırmaktadır.</p>

<p>Bu belgede tespit edilmiş hatalar <loc href="http://www.w3.org/&year;/&MM;/&LEV;-xslt-&YYYYMMDD;-errata"/> adresinde listelenmiştir. <kw>Bunlardan 2 Kasım 2005'e (E39'a) kadar bilinen hatalarla ilgili değişiklikler çeviriye yansıtılmıştır</kw>.</p>

<p>Bu belirtimle ilgili yorumlar <loc href="mailto:xsl-editors@w3.org">xsl-editors@w3.org</loc> adresine gönderilebilir; yorum <loc href="http://lists.w3.org/Archives/Public/xsl-editors">arşivleri</loc> de mevcuttur. XSL'nin, XSLT'yi de içererek halka açık tartışma alanı olarak <loc href="http://www.mulberrytech.com/xsl/xsl-list/index.html">XSL-List</loc> eposta listesi vardır.</p>

<p>Bu belirtimin İngilizce sürümü uyulması gerekli tek sürümdür. Bununla birlikte bu belgenin (bilgilendirici mahiyette) <loc
href="http://www.w3.org/Style/XSL/translations.html">çeviriler</loc>i de mevcuttur.</p>

<p>W3C Önergelerinin ve diğer teknik belgelerinin bir listesi <loc
href="http://www.w3.org/TR"/> adresinde bulunabilir.</p>

<p>Bu belirtim <loc href="http://www.w3.org/Style/Activity">W3C Biçem etkinliği</loc>nin bir parçası olarak üretilmiştir.</p>

</status>

<abstract>

<p>Bu belirtim, XML belgeleri başka XML belgelere dönüştürmekte kullanılan bir dil olan XSLT'nin sözdizimini ve anlamlandırmasını tanımlar.</p>

<p>XSLT, XML için bir biçembent (İng: stylesheet) dili olan XSL'nin bir parçası olarak kullanılmak üzere tasarlanmıştır. XSL, biçimleme belirtmek için XSLT'ye ilaveten bir XML söz varlığına sahiptir. XSL, bir XML belgenin, biçimleme söz varlığını kullanan başka bir XML belgeye nasıl dönüştürüleceğini açıklayan XSLT'yi kullanarak XML belgenin biçemini belirtir.</p>

<p>XSLT, ayrıca, XSL'den bağımsız olarak kullanmak için de tasarlanmışsa da bir genel amaçlı XML dönüşüm dili olarak düşünülmemiştir. Daha çok, asıl olarak XSLT XSL'nin parçası olarak kullanıldığında gereken dönüşüm çeşitleri için tasarlanmıştır.</p>

</abstract>

<langusage>
<language id="tr">Türkçe</language>
<language id="special-bnf">Special Backus-Naur Form (UTF-8 Form)</language>
</langusage>
<revisiondesc>
<slist>
<sitem>See RCS log for revision history.</sitem>
</slist>
</revisiondesc>
</header>
<body>

<div1 id="intro">
<head>Giriş</head>

<p>Bu belirtim, XSLT dilinin sözdizimini ve anlamlandırmasını tanımlar. XSLT dilinde bir dönüşüm, XSLT tarafından tanımlanmış olsun olmasın bütün elemanları içererek, <bibref ref="XMLNAMES"/> veya <bibref ref="XMLNAMES11"/> İsim-alanları Önergesine uygun ve iyi biçimlenmiş bir <bibref ref="XML"/> veya <bibref ref="XML11"/> belge olarak ifadesini bulur. Kolaylık olsun diye, XML 1.0 ve XML Adları 1.0 Önergelerine atıf yapılmıştır. Bu bakımdan, tek biçimli tanım-yeri başvuruları kullanılmışsa da uluslararası tanım-yeri başvuruları da ayrıca desteklenebilir. Bazı durumlarda XML 1.0 ve XML 1.1 tanımları tamamen aynı olabilir. <termdef id="dt-xslt-namespace" term="XSLT
İsim-alanı">XSLT tarafından tanımlanmış elemanlar belli bir XML isim-alanına karşılık olmakla diğerlerinden ayrılırlar (bkz, <specref ref="xslt-namespace"/>); bu belirtimde bu isim-alanından <term>XSLT isim-alanı</term> olarak bahsedilecektir. Bu belirtim aynı zamanda, XSLT isim-alanı sözdiziminin ve anlamlandırmasının bir tanımıdır.</termdef></p>

<p>XSLT'de ifadesini bulan bir dönüşüm, bir kaynak ağacı bir hedef ağaca dönüştürecek kuralları açıklar. Dönüşüm, örüntüler örneklerle ilişkilendirilerek elde edilir. Bir örüntü kaynak ağacındaki elemanlarla eşleşirken, bir örnek hedef ağacın elemanlarını oluşturur. Hedef ağaç, kaynak ağaçtan ayrıdır. Hedef ağacın yapısı kaynak ağacın yapısından tamamen farklı olabilir. Hedef ağaç oluşturulurken, kaynak ağaçtaki elemanlar süzülebilir, yeni bir sırayla dizilebilir ve hatta ağaca tamamen keyfi bir yapı eklenebilir.</p>

<p>XSLT'de ifadesini bulan dönüşüme <kw>biçembent</kw> (İng: stylesheet) denir. Çünkü, XSLT'nin XSL biçimleme söz varlığına dönüştüğü durumda dönüşüm bir biçembent (biçem demeti) olarak iş görür.</p>

<p>Bu belge bir XSLT biçembendinin bir XML belgesi ile nasıl ilişkilendirileceğini açıklamaz. XSL işlemcilerinin <bibref ref="XMLSTYLE"/>'te açıklanan mekanizmayı desteklemeleri önerilir. Bu veya herhangi bir başka mekanizma, bir XML belgeye aynı anda uygulanacak bir XSLT biçembent silsilesinden oluştuğunda, etkisi, silsileyi oluşturan üyeleri aynı sırayla içeren (bkz, <specref ref="import"/>) tek bir biçembendin uygulanmasına eşit olmalıdır.</p>

<p>Bir biçembent, örneklenim kurallarından oluşan bir küme içerir. Bir örneklenim kuralı iki parçadan oluşur: kaynak ağacındaki düğümlere karşılık olan bir örüntü ve hedef ağacın biçimlenecek parçasının biçimleme örneğini içeren bir örneklenim (İng: template). Bu, bir biçembendin kaynak ağaç yapıları birbirine benzeyen geniş bir belge sınıfına uygulanabilmesini mümkün kılar.</p>

<p>Bir örneklenim, hedef ağacın bir bölümünü oluşturacak belli bir kaynak eleman için bir örneklenimdir. Bir örneklenim, hedef eleman yapısını birebir belirten elemanlar içerebileceği gibi, hedef ağaç yapısını oluşturacak yönergeler olarak XSLT isim-alanındaki elemanları da içerebilir. Bir örneklenim işleme sokulduğunda, içerdiği her yönerge yorumlanır ve oluşturacağı hedef ağaç bölümüyle değiştirilir. Yönergeler astsal kaynak elemanlarını seçebilir ve işleyebilir. Bir astsal elemanın işlenmesi, uygun örneklenim kuralının bulunması ve bu kuraldaki örneklenimin işleme sokularak hedef ağacın bir bölümünün  oluşturulması anlamına gelir. Elemanların sadece bir yönergenin yorumlanmasıyla seçildikleri takdirde işleme sokulabileceğine dikkat ediniz. Hedef ağaç, kök düğümü için hazırlanmış örneklenim kuralı bulunup onun örneklenimi işleme sokularak oluşturulur.</p>

<p>Uygun örneklenim kuralını bulma işleminde, birden fazla örneklenim kuralı belirtilen elemanla eşleşen örüntüye sahip olabilir. Ancak, sadece bir örneklenim kuralı uygulanacaktır. Hangi örneklenim kuralının uygulanacağına karar verme yöntemi <specref ref="conflict"/> bölümünde açıklanmıştır.</p>

<p>Bir örneklenim tek başına oldukça güçlü sayılır: az veya çok karmaşıklıkta yapılar oluşturabilir; kaynak ağacın çeşitli yerlerindeki dizge değerlerini çekip çıkarabilir; elemanların kaynak ağaçta yer alışlarına bağlı olarak yinelenen yapılar üretebilir. Basit dönüşümler bakımından, hedef ağacın yapısı kaynak ağacın yapısından bağımsız olduğunda, bir biçembent çoğunlukla kaynak ağacın tamamı için işlem yapan tek bir örneklenimden meydana gelir. İçeriği verilerden oluşan XML belgeler üzerindeki dönüşümler çoğunlukla bu türdendir (bkz, <specref ref="data-example"/>). XSLT bu tür biçembentler için basitleştirilmiş bir sözdizimi sağlar (bkz, <specref ref="result-element-stylesheet"/>).</p>

<p>Bir örneklenim işleme sokulduğunda daima bir <termdef id="dt-current-node" term="Geçerli Düğüm"><term>geçerli düğüm</term></termdef> ve bir <termdef
id="dt-current-node-list" term="Geçerli Düğüm Listesi"><term>geçerli düğüm listesi</term></termdef> ile ilgili olarak işlem yapar. Geçerli düğüm daima geçerli düğüm listesinin bir üyesidir. XSLT'deki işlemlerin çoğu geçerli düğüme göredir. Pek az yönerge geçerli düğüm listesini veya geçerli düğümü değiştirir (bkz, <specref ref="rules"/> ve <specref ref="for-each"/>); bu yönergeler işlem yaptığı sırada, geçerli düğüm listesi yerini yeni düğüm listesine bırakır; yani yeni listenin her üyesi geçerli düğüm haline gelir; yönergenin işi bittiğinde geçerli düğüm listesi veya geçerli düğüm tekrar yönerge öncesinde geçerli olan düğüm listesi ve düğüm olur.</p>

<p>XSLT metin üretmek ve koşullu işlemler için eleman seçerken <bibref
ref="XPATH"/> tarafından tanımlanmış ifade dilini kullanır.</p>

<p>XSLT, dili genişletmek için kullanıcı tarafından değiştirilerek kullanılmak üzere iki özellik sağlar, biri örneklenimlerde kullanılan yönerge elemanları kümesini, diğeri XPath ifadelerinde kullanılan işlev kümesini genişletir. Bu özelliklerin her ikisi de XML isim-alanlarına dayandırılmıştır. XSLT'nin bu sürümü bu özellikleri gerçeklemek için bir mekanizma tanımlamamıştır (bkz, <specref ref="extension"/>).</p>

<note><p>XSL Çalışma Grubu böyle bir mekanizmayı bu belirtimin ileriki sürümlerinde veya ayrı bir belirtimde tanımlamayı düşünmektedir.</p></note>

<p>XSLT tarafından tanımlanmış elemanların sözdizimlerini belirleyen eleman sözdizimi gösterim özeti <specref ref="notation"/> bölümünde açıklanmıştır.</p>

<p>XSLT biçembentleri için MIME ortam türleri olarak <code>text/xml</code> ve
<code>application/xml</code> <bibref ref="RFC2376"/> kullanılmalıdır. Özellikle XSLT biçembentleri için kayda geçirilmiş bir ortam türü olduğunda, bu ortam türü de kullanılabilir.</p>

</div1>

<div1 id="struct">
<head>Biçembent Yapısı</head>

<div2 id="xslt-namespace">
<head>XSLT İsim-alanı</head>

<p>XSLT isim-alanı tanımı <code>&XSLT.ns;</code>adresinde bulunmaktadır.</p>

<note><p>Adresin içindeki <code>1999</code> ibaresi, bu tanım-yerinin (URI) W3C tarafından tahsis edildiği yılı belirtir. XSLT'nin kullanılmakta olan sürümünü göstermez (kullanılmakta olan XSLT sürümü özniteliklerle belirtilir (bkz, <specref ref="stylesheet-element"/> ve <specref ref="result-element-stylesheet"/>).</p></note>

<p>XSLT işlemcileri bu isim-alanındaki elemanları ve öznitelikleri tanımak için XML isim-alanları mekanizmasını <bibref ref="XMLNAMES"/> kullanmalıdır. XSLT isim-alanındaki elemanlar sadece biçembent içinde tanınırlar, kaynak belge içinde tanınmazlar. XSLT tarafından tanımlanmış elemanların tam  listesi <specref ref="element-syntax-summary"/> bölümündedir. Üreticiler XSLT isim-alanını yeni elemanlar ve öznitelikler ekleyerek genişletmemelidirler. Böyle bir genişletme yapılacaksa, bu ayrı bir isim-alanında yapılmalıdır. Ek yönerge elemanları için kullanılacak bir isim-alanı <specref ref="extension-element"/> bölümünde belirtilmiş olan eleman ekleme mekanizmasına göre tanımlanmalıdır.</p>

<p>Bu belirtimde, XSLT isim-alanındaki elemanlara atıfta bulunmak için <tt>xsl:</tt> öneki kullanılmıştır. Ancak, XSLT biçembentleri, XSLT isim-alanının tanım-yerine (URI) önek belirten bir isim-alanı bildirimi yaparak başka bir önek kullanmakta özgürdürler.</p>

<p>XSLT isim-alanındaki bir eleman XSLT isim-alanında bulunmayan bir özniteliği, boş olmayan bir isim-alanı tanım-yerine sahip öznitelik <xtermref href="&XPath;#dt-expanded-name">genişletilmiş ismi</xtermref> belirterek içerebilir. Böyle özniteliklerin varlığı, XSLT elemanlarının ve işlevlerinin bu belgede tanımlanmış davranışını değiştirmemelidir. Bu bakımdan, bir XSLT işlemci böyle öznitelikleri yoksaymakta daima özgürdür ve isim-alanı tanım-yerini bulamıyorsa bunları bir hata vermeksizin yoksaymalıdır. Bu tür özniteliklerle, örneğin, eşsiz tanıtıcılar, eniyileme ipuçları veya belgeleme içerilebilir.</p>

<p>XSLT isim-alanından bir eleman için, bu belgede o eleman için tanımlananlardan başka, boş isim-alanı tanım-yeri belirten genişletilmiş isimli özniteliklere sahip olmak bir hatadır.</p>

<note><p>XSLT eleman, öznitelik ve işlev isimleri için kullanılmakta olan uzlaşımlar şunlardır: isimler küçük harflerden oluşur, sözcükleri ayırmak için tire imleri  ve XML veya HTML gibi alakalı bir dilin sözdiziminde yeralmak kaydıyla kısaltmalar kullanılabilir.</p></note>
</div2>

<div2 id="stylesheet-element">
<head><code>stylesheet</code> Elemanı</head>

<e:element-syntax name="stylesheet">
  <e:attribute name="id">
    <e:data-type name="id"/>
  </e:attribute>
  <e:attribute name="extension-element-prefixes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:attribute name="exclude-result-prefixes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:attribute name="version" required="yes">
    <e:data-type name="sayı"/>
  </e:attribute>
  <e:sequence>
    <e:element repeat="zero-or-more" name="import"/>
    <e:model name="tepe-seviyeden-elemanlar"/>
  </e:sequence>
</e:element-syntax>

<e:element-syntax name="transform">
  <e:attribute name="id">
    <e:data-type name="id"/>
  </e:attribute>
  <e:attribute name="extension-element-prefixes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:attribute name="exclude-result-prefixes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:attribute name="version" required="yes">
    <e:data-type name="sayı"/>
  </e:attribute>
  <e:sequence>
    <e:element repeat="zero-or-more" name="import"/>
    <e:model name="tepe-seviyeden-elemanlar"/>
  </e:sequence>
</e:element-syntax>

<p>Bir biçembent, bir XML belgede bir <code>xsl:stylesheet</code> elemanı tarafından ifade edilir. <code>xsl:transform</code> elemanı <code>xsl:stylesheet</code> elemanının yerine (eşanlamlı) kullanmak içindir.</p>

<p>Bir <code>xsl:stylesheet</code> elemanı, biçembendin gerekirdiği XSLT sürümünün belirtildiği bir <code>version</code> özniteliğine sahip olmak zorundadır ve XSLT'nin bu sürümü için değeri <code>1.0</code> olmalıdır. Değer <code>1.0</code> olmadığı takdirde, ileriye uyumlu işlem kipi etkin olur (bkz, <specref ref="forwards"/>).</p>

<p><code>xsl:stylesheet</code> elemanı şu elemanları içerebilir:</p>
<slist>
<sitem><code>xsl:import</code></sitem>
<sitem><code>xsl:include</code></sitem>
<sitem><code>xsl:strip-space</code></sitem>
<sitem><code>xsl:preserve-space</code></sitem>
<sitem><code>xsl:output</code></sitem>
<sitem><code>xsl:key</code></sitem>
<sitem><code>xsl:decimal-format</code></sitem>
<sitem><code>xsl:namespace-alias</code></sitem>
<sitem><code>xsl:attribute-set</code></sitem>
<sitem><code>xsl:variable</code></sitem>
<sitem><code>xsl:param</code></sitem>
<sitem><code>xsl:template</code></sitem>
</slist>

<p><termdef id="dt-top-level" term="Tepe-seviyeden eleman">Bir <code>xsl:stylesheet </code> elemanının çocuğu olan bir elemana <term>tepe-seviyeden</term> eleman denir.</termdef></p>

<p>Bu örnekte bir biçembendin yapısı gösterilmiştir. Üç nokta imleri (<code>...</code>) içeriği veya öznitelik değerini betimler. Bu örnek olası elemanların her birinden sadece bir tane içeriyorsa da biçembentler bu elemanların birden fazlasını içerebileceği gibi hiç içermeyebilir de.</p>

<eg>&lt;xsl:stylesheet version="1.0"
                xmlns:xsl="&XSLT.ns;"><![CDATA[
  <xsl:import href="..."/>

  <xsl:include href="..."/>

  <xsl:strip-space elements="..."/>

  <xsl:preserve-space elements="..."/>

  <xsl:output method="..."/>

  <xsl:key name="..." match="..." use="..."/>

  <xsl:decimal-format name="..."/>

  <xsl:namespace-alias stylesheet-prefix="..." result-prefix="..."/>

  <xsl:attribute-set name="...">
    ...
  </xsl:attribute-set>

  <xsl:variable name="...">...</xsl:variable>

  <xsl:param name="...">...</xsl:param>

  <xsl:template match="...">
    ...
  </xsl:template>

  <xsl:template name="...">
    ...
  </xsl:template>

</xsl:stylesheet>]]></eg>

<p><code>xsl:stylesheet</code>elemanının çocuklarının yer alış sırası hata takibi ve <code>xsl:import</code> elemanları dışında önemsizdir. Kullanıcılar elemanları istedikleri sırada kullanmakta özgürdürler ve biçembent oluşturma araçları, elemanların yer alış sırası üzerinde bir denetime sahip olmamalıdır.</p>

<p>Bundan başka, <code>xsl:stylesheet</code> elemanı XSLT isim-alanında bulunmayan elemanlar (isim-alanının tanım-yerine (URI) önek belirten bir isim-alanı bildirimi yaparak ve bu öneki isminde içererek) içerebilir. Bu tür üst seviyeden elemanların varlığı, XSLT elemanlarının ve işlevlerinin bu belgede tanımlanmış davranışını değiştirmemelidir; örneğin, çelişkileri çözümlemede farklı kuralların kullanıldığı <code>xsl:apply-templates</code>'ler belirten bu türden bir üst seviyeden elemana izin verilmemelidir. Dolayısıyla, bir XSLT işlemci bu türden üst seviyeden elemanları yoksaymakta daima özgürdür ve isim-alanı tanım-yerini bulamıyorsa bunları bir hata vermeksizin yoksaymalıdır. Bu tür elemanlar şunlar için gerekebilir:</p>

<slist>
<sitem>Ek elemanlar veya ek işlevler tarafından kullanılan bilgiler (bkz, <specref ref="extension"/>),</sitem>
<sitem>hedef ağaçta yapılacaklarla ilgili bilgiler,</sitem>
<sitem>kaynak ağacın nasıl temin edileceği bilgisi,</sitem>
<sitem>biçembentle ilgili temel veriler,</sitem>
<sitem>biçembentle ilgili belgeleme.</sitem>
</slist>

</div2>

<div2 id="result-element-stylesheet">
<head>Birebir Hedef Eleman olarak Biçembent</head>
<p>Basitleştirilmiş sözdizimi, bir biçembentin kök düğüme denk gelen tek bir örneklenimle oluşturulmasını mümkün kılar. Yani, biçembentin kendisi hedef elemandan oluşabilir (bkz, <specref ref="literal-result-element"/>). Böyle bir biçembent, içeriği birebir hedef eleman olan bir örneklenim kuralını içeren <code>xsl:stylesheet</code> elemanlı bir biçembente eşdeğerdir; örneklenim kuralı <code>/</code> örüntüsü ile eşleşir. Örneğin,</p>

<eg>&lt;html xsl:version="1.0"
      xmlns:xsl="&XSLT.ns;"
      xmlns="&XHTML.ns;"><![CDATA[
  <head>
    <title>Harcama Raporu Hülâsası</title>
  </head>
  <body>
    <p>Toplam Miktar: <xsl:value-of select="harcama-raporu/toplam"/></p>
  </body>
</html>]]></eg>

<p>ile</p>

<eg>&lt;xsl:stylesheet version="1.0"
                xmlns:xsl="&XSLT.ns;"
                xmlns="&XHTML.ns;"><![CDATA[
<xsl:template match="/">
<html>
  <head>
    <title>Harcama Raporu Hülâsası</title>
  </head>
  <body>
    <p>Toplam Miktar: <xsl:value-of select="harcama-raporu/toplam"/></p>
  </body>
</html>
</xsl:template>
</xsl:stylesheet>]]></eg>

<p>eşdeğerdir.</p>

<p>Bir biçembendin belge elemanı olan bir birebir hedef eleman, biçembendin gerektirdiği XSLT sürümünü belirten bir <tt>xsl:version</tt> özniteliğine sahip olmak zorundadır. XSLT'nin bu sürümü için bu değer <code>1.0</code> olup değer bir <xnt href="&XPath;#NT-Number">Sayı</xnt> olmalıdır. Diğer birebir hedef elemanlar ayrıca birer <tt>xsl:version</tt> özniteliğine sahip olabilir. <tt>xsl:version</tt> özniteliğinin değeri <code>1.0</code> olmadığı takdirde, ileriye uyumlu işlem kipi etkin olur (bkz, <specref ref="forwards"/>).</p>

<p>Bir biçembent olarak kullanıldığında bir birebir hedef elemanın içeriği,  biçembendin içinde kullanılandakinden farklı değildir. Bu bakımdan, bir biçembent olarak kullanılmış olan bir birebir hedef eleman <termref def="dt-top-level">tepe-seviyeden</termref> elemanlar içeremez.</p>

<p>Bazı durumlarda, sistemin bir XML belgenin bir XSLT biçembendi olarak bir XSLT işlemcisi tarafından işlenmesinin gerektiğini anlamasının tek yolu XML belgenin kendisini incelemesi olabilir. Basitleştirilmiş sözdiziminin kullanılması bu süreci daha da zorlaştıracaktır.</p>

<note><p>Örneğin, başka XML dili (BXD) diye bir dilin belge elemanı üzerinde, XML belgenin bir BXD işlemcisi tarafından işlenmesi gereken bir BXD belgesi olduğunu belirten, bir <code>bxd:version</code> özniteliği kullanmış olsun. Eğer bir belge hem <code>bxd:version</code> hem de <tt>xsl:version</tt> özniteliklerine sahipse belgenin bir BXD işlemci tarafından mı yoksa bir XSLT işlemci tarafından mı işleneceği belli olmayacaktır.</p></note>

<p>Diğer taraftan, böyle bir durumda, XSLT biçembendinde basitleştirilmiş sözdiziminin kullanılmaması gerekir. Bu durum, örneğin, içeriğini işlemek için iletinin MIME ortam türüne bakan bir alıcıya, bir XSLT biçembendinin <code>text/xml</code> veya <code>application/xml</code> MIME ortam türünde bir ileti olarak aktarıldığı bir durum olarak karşımıza çıkabilir.</p>

</div2>

<div2 id="qname">
<head>Nitelikli Adlar</head>

<p>Bir dahili XSLT nesnesinin ismi, özellikle bir isimli örneklenim (<specref ref="named-templates"/>), bir kip (<specref ref="modes"/>), bir öznitelik kümesi (<specref ref="attribute-sets"/>), bir anahtar (<specref ref="key"/>), bir onluk sayı biçimi (<specref ref="format-number"/>), bir değişken veya değergeç (<specref ref="variables"/>) birer <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> olarak belirtilir. Eğer nitelikli ad bir öneke sahipse, önek bir tanım-yeri başvurusuna genişletilir; bu tanım-yerine başvurusuna genişletme işlemi, ismin yer aldığı öznitelik üzerinden etkili olan isim-alan bildirimleri kullanılarak yapılır.
<xtermref href="&XPath;#dt-expanded-name">Genişletilmiş isim</xtermref> ismin yerel kısmı ile nesne ismi olarak kullanılan ve boş olabilen bir tanım-yeri başvurusundan oluşur. Öntanımlı isim-alanı öneksiz isimler için kullanılMAZ.</p>

</div2>

<div2 id="forwards">
<head>İleriye Uyumlu İşlem</head>

<p>Bir eleman ileriye uyumlu kipi kendisi, öznitelikleri, astsalları için şunlardan birinin varlığı halinde etkinleştirir:</p>

<slist>
<sitem>Eleman, <code>version</code> özniteliği <code>1.0</code>'dan farklı bir <code>xsl:stylesheet</code> elemanıdır.</sitem>

<sitem>Eleman, <tt>xsl:version</tt> özniteliği <code>1.0</code>'dan farklı bir değerde olan bir birebir hedef elemandır.</sitem>

</slist>

<p>Değeri <code>1.0</code> olan bir <tt>xsl:version</tt> özniteliğine sahip bir birebir hedef eleman ileriye uyumlu kipi kendisi, öznitelikleri, astsalları ve astsallarının öznitelikleri için etkinleştirmeyecektir.</p>

<p>Eğer bir eleman ileriye uyumlu kipte işlem yapıyorsa:</p>

<ulist>

<item><p>Eleman, bir <termref def="dt-top-level">tepe-seviyeden</termref> elemansa ve XSLT 1.0 böyle elemanlara tepe seviyeden elemanlar olarak izin vermiyorsa, eleman içeriğiyle birlikte yoksayılmalıdır.</p></item>

<item><p>Eleman bir örneklenim içindeyse ve XSLT 1.0 böyle elemanların bir örneklenim içinde bulunmasına izin vermiyorsa,  eleman işleme sokulamadığı takdirde bir hata oluşmalı, aksi takdirde XSLT, eleman için <specref ref="fallback"/> bölümünde belirtildiği gibi bir son çareye başvurmalıdır.</p></item>

<item><p>Eleman, XSLT 1.0 tarafından bir elemanın sahip olmasına izin verilmeyen bir özniteliğe sahipse ya da XSLT 1.0 tarafından bir seçimlik özniteliğin sahip olmasına izin verilmeyen bir değere sahip bir özniteliğe sahipse, öznitelik yoksayılmalıdır.</p></item>

</ulist>

<p>Bu bakımlardan, bir XSLT işlemci aşağıdaki biçembenti, bu belirtimde tanımlanmamış bir XSLT isim-alanından elemanlar içerse bile hatasız işleyebilmelidir.</p>

<eg>&lt;xsl:stylesheet version="1.1"
                xmlns:xsl="&XSLT.ns;"><![CDATA[
  <xsl:template match="/">
    <xsl:choose>
      <xsl:when test="system-property('xsl:version') >= 1.1">
        <xsl:yeni-heyecan-verici-1.1-özelliği/>
      </xsl:when>
      <xsl:otherwise>
        <html>
        <head>
          <title>XSLT 1.1 gerekli</title>
        </head>
        <body>
          <p>Bu biçembent XSLT 1.1 gerektiriyor.</p>
        </body>
        </html>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>]]></eg>

<note><p>Eğer bir biçembent sürümü 1.0'dan sonraki bir XSLT'ye ait bir tepe seviyeden elemana son derece bağımlıysa, biçembent, XSLT'nin daha erken sürümlerini gerçekleyen XSLT işlemcilerin tepe seviyeden elemanları sessizce yoksaymayacağından emin olmak için bir <code>xsl:message</code> elemanını <code>terminate="yes"</code> özniteliği ile kullanabilir (bkz, <specref ref="message"/>). Örnek:</p>

<eg>&lt;xsl:stylesheet version="1.5"
                xmlns:xsl="&XSLT.ns;"><![CDATA[

  <xsl:etkili-yeni-1.1-bildirimi/>

  <xsl:template match="/">
    <xsl:choose>
      <xsl:when test="system-property('xsl:version') &lt; 1.1">
        <xsl:message terminate="yes">
          <xsl:text>Bu biçembent XSLT 1.1 gerektiriyor.</xsl:text>
        </xsl:message>
      </xsl:when>
      <xsl:otherwise>
        ...
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  ...
</xsl:stylesheet>]]></eg>
</note>

<p>
Eğer bir <termref def="dt-expression">ifade</termref> ileriye uyumlu kipte işlem yapan bir öznitelikte bulunuyorsa, XSLT işlemci ifadedeki bazı hatalar için şöyle davranmalıdır:</p>

<ulist>

<item><p>Eğer ifade XPath dilbilgisine göre izin verilen sözdizimine uygun değilse, ifade gerçekten değerlendirilemedikçe bir hata üretilmemelidir.</p></item>

<item><p>Eğer ifade XSLT kütüphanesinin bir parçası olmayan ve ismi öneksiz olan bir işlevi çağırıyorsa, işlev gerçekten çağrılamadıkça bir hata üretilmemelidir.</p></item>

<item><p>Eğer ifade  bir işlevi, XSLT tarafından izin verilmeyen sayıda argümanla veya XSLT tarafından izin verilmeyen türdeki argümanlarla çağırıyorsa, işlev gerçekten çağrılamadıkça bir hata üretilmemelidir.</p></item>

</ulist>


</div2>

<div2>
<head>Biçembentlerin Birleştirilmesi</head>

<p>XSLT biçembentlerin birleştirilmesi için iki mekanizmaya sahiptir:</p>

<slist>

<sitem>Anlamsallıkları değişmeksizin biçembentlerin birleştirilebilmelerini mümkün kılan içerme mekanizması ve</sitem>

<sitem>her biçembentin diğerlerinin yukarısına gelecek şekilde birleştirilmesini mümkün kılan ithal mekanizması.</sitem>

</slist>

<div3 id="include">
<head>Biçembentlerin İçerilmesi</head>

<e:element-syntax name="include">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="href" required="yes">
    <e:data-type name="tanım-yeri-başvurusu"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p>Bir XSLT biçembendi başka bir XSLT biçembendini bir <code>xsl:include</code> elemanı kullanarak içerebilir. <code>xsl:include</code> elemanı, değeri içerilecek biçembendin tanım-yerine bir başvuru olan bir <code>href</code> özniteliğine sahiptir. Göreli bir tanım-yeri <code>xsl:include</code> elemanını içeren biçembendin tanım-yerine göre çözümlenir (bkz, <specref ref="base-uri"/>).</p>

<p><code>xsl:include</code> elemanına sadece <termref def="dt-top-level">tepe-seviyeden</termref> bir eleman olarak izin verilir.</p>

<p>İçerme işlemi XML ağaç seviyesinde gerçekleşir. <code>href</code> özniteliğinin değeriyle yeri belirlenen kaynak bir XML belge olarak ele alınır ve  bu belgedeki <code>xsl:stylesheet</code> elemanının çocukları <code>xsl:include</code> elemanının yerine yerleştirilirler. İçerilen örneklenim kuralları ve tanımları işlem sırasını fiilen etkilemezler.</p>

<p>İçerilen biçembent <specref ref="result-element-stylesheet"/> bölümünde açıklanan basitleştirilmiş sözdizimini kullanıyor olabilir ve böyle bir durumda biçembent eşdeğer <code>xsl:stylesheet</code> elemanı ile aynı şekilde ele alınır.</p>

<p>Bir biçembendin doğrudan veya dolaylı kendi kendini içeriyor olması bir hatadır.</p>

<note><p>Defalarca içerilen bir biçembent tanımların tekrarı sebebiyle hatalara yol açabilir. Böyle çoklu içerimler dolaylı olduklarında daha az belirgin olurlar. Örneğin, <var>B</var> ve <var>C</var> biçembendleri <var>A</var> biçembendini içeriyorsa ve <var>D</var> biçembendi de hem <var>B</var> hem de <var>C</var> biçembendini içeriyorsa, <var>A</var> biçembendi, <var>D</var> biçembendi tarafından dolaylı olarak iki kere içerilmiş olacaktır. <var>B</var>, <var>C</var> ve <var>D</var> biçembentlerinin herbiri bağımsız biçembentler olarak kullanılıyorsa, <var>B</var> biçembendindeki <var>A</var> biçembendinin içerilmesi dışındaki herşeyi bir <var>B'</var> biçembendine aktararak ve benzer bir işlemi <var>C</var> biçembendi içinde yaptıktan sonra <var>D</var> biçembendini <var>A</var>, <var>B'</var> ve <var>C'</var> biçembentlerini içerecek şekilde değiştirerek hatadan kurtulmak mümkün olabilir.</p></note>

</div3>

<div3 id="import">
<head>Biçembent İthali</head>

<e:element-syntax name="import">
  <e:attribute name="href" required="yes">
    <e:data-type name="tanım-yeri-başvurusu"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p>Bir XSLT biçembendi başka bir XSLT biçembendini bir <code>xsl:import</code> elemanı kullanarak ithal edebilir. İthal edilen biçembentteki örneklenim kurallarının ve tanımlarının ithal eden biçembenttekilerin önüne geçmesi dışında ithal işlemi içerme işlemine (bkz, <specref ref="include"/>) benzer; işlem aşağıda daha ayrıntılı olarak açıklanmıştır. <code>xsl:import</code> elemanı, değeri ithal edilecek biçembendin tanım-yerine bir başvuru olan bir <code>href</code> özniteliğine sahiptir. Göreli bir tanım-yeri <code>xsl:import</code> elemanını içeren biçembendin tanım-yerine göre çözümlenir (bkz, <specref ref="base-uri"/>).</p>

<p><code>xsl:import</code> elemanına sadece <termref def="dt-top-level">tepe-seviyeden</termref> bir eleman olarak izin verilir.</p>

<p><code>xsl:import</code> elemanının çocukları, bir <code>xsl:stylesheet</code> elemanının diğer bütün çocuklarının ve varsa <code>xsl:include</code> elemanlarının herbirinin çocuklarının öncesine geçmelidir. <code>xsl:include</code> bir biçembendi içermek üzere kullanıldığında, içerilen belgedeki <code>xsl:import</code> elemanları yine yukarıya ama, içeren belgedeki <code>xsl:import</code> elemanlarının sonrasına gider. Örnek:</p>

<eg>&lt;xsl:stylesheet version="1.0"
                xmlns:xsl="&XSLT.ns;"><![CDATA[
  <xsl:import href="article.xsl"/>
  <xsl:import href="bigfont.xsl"/>
  <xsl:attribute-set name="note-style">
    <xsl:attribute name="font-style">italic</xsl:attribute>
  </xsl:attribute-set>
</xsl:stylesheet>]]></eg>

<p><termdef id="dt-import-tree" term="İthal Ağaç"><code>xsl:import</code> elemanları içeren bir biçembentin işlenmesi sırasında karşılaşılan <code>xsl:stylesheet</code> elemanları bir <term>ithal ağaç</term> olarak ele alınır. İthal ağaçtaki her <code>xsl:stylesheet</code> elemanı, içerdiği her
<code>xsl:import</code> elemanı için bir ithal çocuğa sahip olur. <code>xsl:include</code> elemanları ithal ağaç oluşturulmadan önce çözümlenir. </termdef> <termdef id="dt-import-precedence" term="İthal Önceliği"> İthal ağaçtaki bir <code>xsl:stylesheet</code> elemanına, ithal ağacın çocuğu olarak işleme alınacak bir <code>xsl:stylesheet</code>  elemanından önce ziyaret edilmiş diğer bir <code>xsl:stylesheet</code> elemanından daha düşük bir  <term>ithal önceliği</term> tanınır. (Türkçesi, bir sülaledeki bir evlatlığın öz evlatları evlatlıklarından sonra ziyaret edilir.)</termdef>  Her tanımın ve örneklenim kuralının ithal önceliği kendini içeren <code>xsl:stylesheet</code> elemanına göre belirlenir.</p>

<p>Varsayalım,</p>

<slist>
<sitem><var>A</var> biçembendi sırasıyla <var>B</var> ve <var>C</var> biçembentlerini ithal etmiş olsun;</sitem>
<sitem><var>B</var> biçembenti <var>D</var>'yi</sitem>
<sitem><var>C</var> biçembendi de <var>E</var>'yi ithal etmiş olsun.</sitem>
</slist>

<p>İthal önceliği sırası <var>D</var>, <var>B</var>, <var>E</var>, <var>C</var>, <var>A</var> olacaktır.</p>

<note><p><code>xsl:import</code> elemanlarının herhangi bir tanım veya örneklenim kuralından önce kullanılması gerektiğinden, ithal edilen biçembentleri <code>xsl:import</code> elemanına rastlandığı noktada işleme sokan bir gerçeklenim, tanımlara ve örneklenim kurallarına artan ithal önceliğiyle rastlayacaktır.</p></note>

<p>Genel olarak, daha yüksek önceliğe sahip bir tanım veya örneklenim kuralı, daha düşük ithal önceliğine sahip bir tanım veya örneklenim kuralından öncelikli olur. Bu, her tanım veya örneklenim kuralı çeşidi için ayrı ayrı tanımlanır.</p>

<p>Bir biçembendin doğrudan veya dolaylı kendi kendini ithal ediyor olması bir hatadır. Bundan kaçınmak için, belli bir tanım-yeri ile bir biçembendin birden fazla yerde ithal edilmesi durumunda, biçembent özel olarak ele alınmaz. <termref def="dt-import-tree">İthal ağaç</termref>, ithal edildiği her noktada ayrı bir <code>xsl:stylesheet</code>'e sahip olur.</p>

<note><p>Eğer <code>xsl:apply-imports</code> kullanılmışsa (bkz, <specref
ref="apply-imports"/>), davranış, biçembendin sadece en yüksek <termref def="dt-import-precedence">ithal öncelikli</termref> yerde ithal edilmesi durumundakinden farklı olabilir.</p></note>

</div3>

</div2>

<div2>
<head>Gömülü Biçembentler</head>

<p>Normalde bir biçembent, belge elemanı <code>xsl:stylesheet</code> elemanı olan eksiksiz bir XML belgedir. Buna rağmen, bir XSLT biçembenti başka bir kaynağa da gömülebilir. İki çeşit gömülüm mümkündür:</p>

<slist>
<sitem>XSLT biçembendi XML olmayan bir kaynağa gömülebilir veya</sitem>
<sitem>XML belgenin belge elemanı <code>xsl:stylesheet</code> elemanı olmaksızın biçembent bir XML kaynağa gömülebilir.</sitem>
</slist>

<p>İkinci şeklini kolaylaştırmak için, <code>xsl:stylesheet</code> elemanının eşsiz bir betimleyici içeren bir ID özniteliğine sahip olması mümkün kılınmıştır.</p>

<note><p>Böyle bir özniteliğin XPath <xfunction>id</xfunction> işlevi ile kullanılabilmesi için gerçekten de ID türünden bir öznitelik olarak DTD'de bildirilmiş olması gerekir.</p></note>

<p>Aşağıdaki örnekte <code>xml-stylesheet</code> işlem yönergesinin <bibref ref="XMLSTYLE"/> bir belgenin kendi biçembendini içermesini mümkün kılmak için nasıl kullanılabileceği gösterilmiştir. Tanım-yeri başvurusunda <code>xsl:stylesheet</code> elemanının yeri olarak bölüm betimleyicili bir göreli tanım-yeri kullanılmıştır:</p>

<eg><![CDATA[<?xml-stylesheet type="text/xml" href="#style1"?>
<!DOCTYPE doc SYSTEM "doc.dtd">
<doc>
<head>

<xsl:stylesheet id="style1"
                version="1.0"]]>
                xmlns:xsl="&XSLT.ns;"
                xmlns:fo="&XSLFO.ns;"><![CDATA[

<xsl:import href="doc.xsl"/>

<xsl:template match="id('foo')">
  <fo:block font-weight="bold">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="xsl:stylesheet">
  <!-- ignore -->
</xsl:template>

</xsl:stylesheet>

</head>
<body>
<para id="foo">
...
</para>
</body>
</doc>
]]></eg>

<note><p>Bir biçembent, ister uygulansın, ister içerilsin, ister ithal edilsin bir belgeye gömüldüğü takdirde yoksayılacak bir <code>xsl:stylesheet</code> elemanı belirtilmiş bir örneklenim kuralının varlığını gerektirir.</p></note>

</div2>

</div1>

<div1 id="data-model">
<head>Veri Modeli</head>

<p>XSLT tarafından kullanılan veri modeli, bu bölümdeki açıklananlar dışında <xspecref href="&XPath;#data-model">XPath veri modeli</xspecref> ile aynıdır. XSLT aynı veri modelini kullanan kaynak, hedef ve biçembent belgeleri üzerinde işlem yapar. Aynı ağaca sahip herhangi iki XML belge XSLT'ye göre aynı belgedir.</p>

<p>Biçembentteki işlem yönergeleri ve açıklamalar yoksayılır: biçembent, ağacında ne işlem yönergesi (İng: processing instruction) ne de açıklama varmış gibi ele alınır.</p>

<div2 id="root-node-children">
<head>Kök Düğümün Çocukları</head>

<p>Kök düğümün çocukları üzerindeki normal kısıtlamalar hedef ağaç için esnetilir.  Hedef ağacın çocukları bir eleman düğümü için olası herhangi bir sırada olabilir. Özellikle, metin düğümü çocuklara sahip olabileceği gibi istenen sayıda eleman düğümü çocuğa sahip olabilir. <code>xsl:output</code> yöntemi (bkz, <specref ref="output"/>) XML çıktı için kullanıldığında hedef ağacın iyi biçimlenmiş bir XML belgesi olması gerekmeyebilir; yine de, çıktı daima iyi biçimlenmiş haricen çözümlenebilir bir öğe olacaktır.</p>

<p>Kaynak ağacı iyi biçimlenmiş bir XML belge çözümlenerek oluşturulduğunda, kaynak ağacın kök düğümü, bir metin düğümüne sahip olmamak ve tek bir çocuk elemana sahip olmak gibi normal kısıtlamaları kendiliğinden yerine getirecektir. Kaynak ağacı, DOM kullanımı gibi başka bir yöntemle oluşturulduğunda geçerli kısıtlamalar kaynak ağaç için hedef ağaçtaki kadar esnektir.</p>

</div2>

<div2 id="base-uri">
<head>Temel Tanım-yeri</head>

<p>Her düğümün kendisiyle ilişkili tanım-yerine o düğümün <kw>temel tanım-yeri</kw> denir ve göreli tanım-yerlerini mutlak tanım-yerleri haline getirmek için öznitelik değerlerini çözümlemekte kullanılır. Eğer bir eleman veya işlem yönergesi harici bir öğe içinde yer alıyorsa, bu elemanın veya işlem yönergesinin temel tanım-yeri harici öğenin tanım-yeri olur; aksi takdirde, temel tanım-yeri, belgenin tanım-yeridir. Belge düğümünün temel tanım-yeri belge öğesinin tanım-yeridir. Bir metin, açıklama, öznitelik veya bir isim-alanı düğümümünün temel tanım-yeri ise, ebeveyn düğümün temel tanım-yeridir.</p>

</div2>

<div2 id="unparsed-entities">
<head>Çözümlenmemiş Öğeler</head>

<p>Kök düğüm, belgenin DTD'sinde bildirilmiş her çözümlenmemiş öğe için tanım-yeri veren bir eşleme sahiptir. Tanım-yeri, <xspecref href="&XML;#sec-external-ent">öğe bildiriminde</xspecref> belirtilen <xtermref href="&XML;#dt-sysid">sistem betimleyici</xtermref> ve <xtermref href="&XML;#dt-pubid">genel betimleyiciden</xtermref> üretilir. XSLT işlemci, tanım-yerini üretmek için sistem betimleyicide belirtilen tanım-yerini bırakıp genel betimleyiciyi kullanabilir. Eğer XSLT işlemci tanım-yerini üretmek için genel betimleyiciyi kullanmıyorsa, sistem betimleyiciyi kullanmalıdır; eğer sistem betimleyici bir göreli tanım-yeri ise, temel tanım-yeri <bibref ref="RFC2396"/> olarak öğe bildirimini içeren kaynağın tanım-yerini kullanarak onu bir mutlak tanım-yeri olarak çözümlemelidir.</p>

</div2>

<div2 id="strip">
<head>Boşluk Ayıklama</head>

<p>Kaynak belge veya biçembent belgesi için ağaç oluşturulup, XSLT tarafından bir şekilde işleme sokulmadan önce bazı metin düğümleri ayıklanabilir. Bir metin düğümü salt boşluk karakterlerini içeriyor olmadıkça asla ayıklanamaz. Metin düğümünün ayıklanması metin düğümünü ağaçtan siler. Ayıklama işleminde boşlukları korunması gereken elemanların isimlerinden oluşan bir küme girdi olarak alınır. Ayıklama işlemi biçembentlerin ve kaynak belgelerin her ikisine de uygulanır, ancak boşlukları korunması gereken elemanlar saptanırken uygulama farklı olur.</p>

<p>Aşağıdakilerin herhangi biri uygulanabiliyorsa bir metin düğümü korunur:</p>

<ulist>

<item><p>Metin düğümünün <xtermref href="&XPath;#axis-parent">ebeveyn</xtermref>inin eleman ismi boşlukları korunması gereken eleman isimleri arasındadır.</p></item>

<item><p>Metin düğümü en azından bir tane boşluk olmayan karakter içeriyordur. XML'deki gibi, bir boşluk karakteri <code>#x20</code>, <code>#x9</code>, <code>#xD</code> veya <code>#xA</code> olabilir.</p></item>

<item><p>Metin düğümünün bir <xtermref href="&XPath;#axis-ancestor">üstsel</xtermref> elemanı <code>preserve</code> değerli bir <code>xml:space</code> özniteliğine sahiptir ve üstsel elemanları arasında <code>default</code> değerli <code>xml:space</code> özniteliğine sahip eleman hiç yoktur.</p></item>

</ulist>

<p>Aksi takdirde, metin düğümü ayıklanır.</p>

<p><code>xml:space</code> öznitelikleri ağaçtan ayıklanmaz.</p>

<note><p>Eğer bir birebir hedef elemanda bir <code>xml:space</code> özniteliği belirtilmişse, bu uygulanır ve sonuç özniteliği içerir.</p></note>

<p>Biçembentler bakımından, boşlukları korunması gereken eleman isimleri kümesi sadece <code>xsl:text</code> içerir.</p>

<e:element-syntax name="strip-space">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="elements" required="yes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<e:element-syntax name="preserve-space">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="elements" required="yes">
    <e:data-type name="dizgecikler"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p>Kaynak belgeler için, boşlukları korunması gereken eleman isimleri <termref
def="dt-top-level">tepe-seviyeden</termref> elemanlar olan <code>xsl:strip-space</code> ve <code>xsl:preserve-space</code> ile belirtilir.
Bir eleman isminin boşlukları korunması gereken isimler arasında bulunup bulunmadığı en iyi <code>xsl:strip-space</code> veya <code>xsl:preserve-space</code> elemanlarında belirtilmiş isimlerden saptanır. Bir eleman isminin boşlukları korunması gereken isimler arasında bulunması için gerek ve yeter koşul, bir <code>xsl:preserve-space</code> elemanında belirtilen isimlerden biri ile bir eşleşmenin varlığıdır. <code>xsl:strip-space</code> ve <code>xsl:preserve-space</code> elemanların ikisi de değeri boşluk ayraçlı <xnt href="&XPath;#NT-NameTest">AdSınaması</xnt> listesi olan birer <code>elements</code> özniteliğine sahiptir; Bir elemanın bir <code>xsl:strip-space</code> veya <code>xsl:preserve-space</code> ile eşleşmesi <xnt href="&XPath;#NT-NameTest">AdSınamaları</xnt>ndan biri ile eşleşmesi demektir. Bir elemanın bir <xnt href="&XPath;#NT-NameTest">AdSınaması</xnt> ile eşleşmesi için gerek ve yeter koşul, <xnt href="&XPath;#NT-NameTest">AdSınaması</xnt>nın bir <xtermref href="&XPath;#dt-node-test">XPath düğüm sınaması</xtermref> olarak eleman için doğru olmasıdır. Birden fazla <code>xsl:strip-space</code> ve <code>xsl:preserve-space</code> elemanı ile eşleşme olduğu takdirde, en iyi eşleşen eleman, en iyi eşleşen <xnt href="&XPath;#NT-NameTest">AdSınaması</xnt> saptanarak bulunur. Bu saptama örneklenim kurallarındaki yöntemle aynıdır:</p>

<ulist>

<item><p>Önce, diğer eşleşmeden daha düşük <termref
def="dt-import-precedence">ithal önceliğine</termref> sahip eşleşmeler yoksayılır.</p></item>

<item><p>Sonra, diğer eşleşmenin <termref def="dt-default-priority">öntanımlı önceliğinden</termref> düşük <termref def="dt-default-priority">öntanımlı öncelikli </termref> eşleşmeler yoksayılır.</p></item>

</ulist>

<p>Eğer bu yöntemle geriye birden fazla eşleşme kalırsa bu bir hatadır. Bir XSLT işlemci hatayı bildirebilir; eğer bildirmiyorsa, kalan eşleşmeler arasından biçembentte sona doğru yer alanını seçerek hatayı ortadan kaldırmalıdır.</p>

</div2>

<div2 id="E38">
<head>XML Sürümü</head>
<p>Veri modeli, bir XML 1.0 belgeyi (<bibref ref="XML"/> ve <bibref ref="XMLNAMES"/> ile uyumlu) veya bir XML 1.1 belgeyi (<bibref ref="XML11"/> ve <bibref ref="XMLNAMES11"/> ile uyumlu) ifade edebilecek ve ikisi arasında bir ayrım yapmayacak yetenektedir. Bu bakımdan, ilke olarak, XSLT 1.0 bu XML sürümlerinden biri ile kullanılabilir; farklılık sadece, dönüşüme özel sınırların dışında, ya veri modeli metinsel XML'den (çözümlenerek) oluşturulurken ya da metinsel XML veri modelinden üretilirken (sırayla denk düşürerek) ortaya çıkar.</p>

<p>Veri modelinin oluşturulması bu belirtimin kapsamı dışındadır, dolayısıyla bir XSLT işlemcinin girdiyi bir XML 1.0 veya XML 1.1 belgeden ya da her ikisinden de kabul etmesi ile ilgili bir gereksinim yer almaz. Bu belge XML 1.0 veya XML 1.1 belgeleri çıktılama yeteneğini tanımlar. Ve yine, bir XSLT işlemcinin XML sürümlerinden birini veya ikisini de desteklemesi ile ilgili bir gereksinim yer almaz.</p>

<p>Kaynak belge ister XML 1.0 ister XML 1.1 olsun veri modeli aynı olduğundan, XSLT işleminin anlambilgisi kaynak belgenin XML sürümüne bağlı değildir. İlke olarak, tek bir dönüşümde kullanılan tüm girdi ve çıktı belgelerinin aynı XML sürümüne uygun olmasını gerektiren bir sebep yoktur.</p>

</div2>

</div1>

<div1 id="expr">
<head>İfadeler</head>

<p>XSLT, XPath <bibref ref="XPATH"/> tarafından tanımlanmış ifade dilini kullanır. XSLT'de ifadeler aşağıdaki amaçlar dahil çeşitli amaçlarla kullanılırlar:</p>

<slist>
<sitem>İşlem için düğümlerin seçimi;</sitem>
<sitem>bir düğümü farklı yollarla işlemek için koşulların belirtilmesi;</sitem>
<sitem>hedef ağaca yerleştirilecek metnin üretilmesi.</sitem>
</slist>

<p><termdef id="dt-expression" term="İfade">Bir <term>ifade</term> bir XPath <xnt href="&XPath;#NT-Expr">İfade</xnt> sözdizimi ile eşleşmelidir.</termdef></p>

<p>İfadeler, XSLT tarafından tanımlanmış elemanların belirli özniteliklerinin değerlerinde ve <termref
def="dt-attribute-value-template">öznitelik değeri örneklenimleri</termref>nde kaşlı ayraçların arasında karşımıza çıkarlar.</p>

<p>XSLT'de bağımsız (başka bir ifadenin parçası olmayan) bir ifadenin bağlamı şöyle oluşur:</p>

<ulist>

<item><p>Bağlam düğümü <termref def="dt-current-node">geçerli düğümden</termref> gelir.</p></item>

<item><p>Bağlam konumu, <termref def="dt-current-node-list">geçerli düğüm listesi</termref>ndeki <termref
def="dt-current-node">geçerli düğüm</termref>ün konumundan gelir ve ilk konum 1'dir.</p></item>

<item><p>Bağlam boyu, <termref def="dt-current-node-list">geçerli düğüm listesinin</termref> boyutundan gelir.</p></item>

<item><p>Değişken bağıntıları, ifadeyi içeren özniteliğe sahip elemanın etki alanındaki bağıntılardır (bkz, <specref ref="variables"/>).</p></item>

<item><p>İsim-alanı bildirimleri kümesi, ifadeyi içeren özniteliğe sahip elemanın etki alanındaki bildirimlerdir; bu, XML İsim-alanları Önergesi'nce <bibref ref="XMLNAMES"/> gereken <code>xml</code> önekinin örtük bildirimini de içerir; öntanımlı isim-alanı (<code>xmlns</code> tarafından bildirilmiş olarak) bu kümenin bir parçası değildir.</p></item>

<item><p>İşlev kütüphanesi,  <xspecref href="&XPath;#corelib">temel işlev kütüphanesi</xspecref>ne ek olarak  <specref
ref="add-func"/> bölümünde tanımlanmış işlevler ile  <specref
ref="extension"/> bölümünde açıklanan ek işlevlerden oluşur; bir ifadeden bunlar dışında bir işleve çağrı bir hatadır.</p></item>

</ulist>

</div1>

<div1 id="rules">
<head>Örneklenim Kuralları</head>

<div2>
<head>İşlem Modeli</head>

<p>Bir kaynak düğümleri listesi işlendiğinde hedef ağacın bir bölümü oluşturulmuş olur. Hedef ağacı oluşturmak için kök düğümü içeren ana listeyi işlemek gerekir. Bir kaynak düğümleri listesi, ana listenin her üyesi sırayla işlenerek oluşturulan hedef ağaç yapısına eklenerek işlenir. Bir düğüm ise, düğümle eşleşen örüntülere sahip tüm örneklenim kuralları bulunarak ve bunların en uygunu seçilerek işlenir; seçilen kuralın örneklenimi, kaynak düğüm <termref def="dt-current-node">geçerli düğüm</termref> olarak, kaynak düğüm listesi <termref def="dt-current-node-list">geçerli düğüm listesi</termref> olarak ele alınarak örneklenir. Bir örneklenim genelde, işlem için ek kaynak düğümü listesini seçmekte kullanılan yönergelerden oluşur. Eşleştirme, örnekleme ve seçim işlemleri işlem için seçilecek kaynak düğümü kalmayıncaya kadar ardışık olarak sürer.</p>

<p>Gerçeklenimler, kaynak belgeyi, bu işlem modeli kullanılarak elde edilen sonucun aynısını üretecek şekilde işleyecek yöntemi seçmekte özgürdürler.</p>

</div2>

<div2 id="patterns">
<head>Örüntüler</head>

<p><termdef id="dt-pattern" term="Örüntü">Örneklenim kuralları düğümlerle bir <term>örüntü</term> aracılığıyla özdeşleşir. Örüntüler, örneklenim kurallarından başka, numaralama (<specref ref="number"/>) ve anahtar bildirimi (<specref ref="key"/>) için de kullanılırlar. Bir örüntü, bir düğüme uygulanacak koşul kümesini belirtir. Bu koşulları yerine getiren bir düğüm örüntüyle eşleşir; yerine getirmiyorsa eşleşmez. Örüntü sözdizimi, ifade sözdiziminin bir alt kümesidir. Özellikle, belli şartları sağladığı takdirde bir <xspecref href="&XPath;#location-paths">konumsal yol</xspecref> örüntü olarak kullanılabilir. Bir ifade ayrıca, daima düğüm kümesi türünde bir nesne olarak değerlendirilen bir örüntüdür. Bir düğüm, bir örüntünün belli bir bağlamla ilgili bir ifade olarak değerlendirilmesinin sonucunda elde edilen düğüm kümesinin bir üyesiyse, düğüm örüntüyle eşleşir; sözkonusu bağlam, <xtermref href="&XPath;#axis-ancestor-or-self">bu düğüm veya üstsellerinden birinin</xtermref> eşleştiği bağlamsal düğümlerdir.</termdef></p>

<p>Bazı örüntü örnekleri:</p>

<ulist>

<item><p><code>para</code> örüntüsü herhangi bir <code>para</code> elemanıyla eşleşir</p></item>

<item><p><code>*</code> örüntüsü herhangi bir elemanla eşleşir</p></item>

<item><p><code>chapter|appendix</code> örüntüsü herhangi bir <code>chapter</code> veya <code>appendix</code> elemanıyla eşleşir</p></item>

<item><p><code>olist/item</code> örüntüsü <xtermref href="&XPath;#axis-parent">ebeveyni</xtermref> <code> olist</code> olan herhangi bir <code>item</code> elemanıyla eşleşir</p></item>

<item><p><code>appendix//para</code> örüntüsü <xtermref href="&XPath;#axis-ancestor">üstseli</xtermref> <code> appendix</code> olan herhangi bir <code>para</code> elemanıyla ile eşleşir</p></item>

<item><p><code>/</code> örüntüsü sadece <xspecref href="&XPath;#root-node">kök düğümle</xspecref> eşleşir</p></item>

<item><p><code>text()</code> örüntüsü herhangi bir <xspecref href="&XPath;#text-nodes"> metin düğümü</xspecref> ile eşleşir</p></item>

<item><p><code>processing-instruction()</code> örüntüsü herhangi bir işlem yönergesi ile eşleşir</p></item>

<item><p><code>node()</code> örüntüsü bir <xspecref href="&XPath;#attr-nodes"> öznitelik düğümü</xspecref> veya kök düğüm olmayan herhangi bir düğümle eşleşir</p></item>

<item><p><code>id("W11")</code> örüntüsü <xspecref href="&XPath;#unique-id">eşsiz ID</xspecref>'si <code>W11</code> olan elemanla eşleşir</p></item>

<item><p><code>para[1]</code> örüntüsü ilk <code>para</code> çocukla eşleşir</p></item>

<item><p><code>*[position()=1 and self::para]</code> örüntüsü çocuklardan <code>para</code> türündekilerin ilkiyle eşleşir</p></item>

<item><p><code>para[last()=1]</code> örüntüsü sonuncu <code>para</code> çocukla eşleşir</p></item>

<item><p><code>items/item[position()>1]</code> örüntüsü ebeveynleri <code>items</code> olan <code>item</code> elemanlarından ilki hariç hepsiyle eşleşir</p></item>

<item><p><code>item[position() mod 2 = 1]</code> örüntüsü çift numaralı <code>item</code> çocuklarla eşleşir</p></item>

<item><p><code>div[@class="appendix"]//p</code> örüntüsü <code>appendix</code> değerli bir <code>class</code> özniteliğine sahip <code>div</code> üstseli olan herhangi bir <code>p</code> elemanıyla eşleşir</p></item>

<item><p><code>@*</code> örüntüsü herhangi bir öznitelikle eşleşir</p></item>

<item><p><code>@class</code> örüntüsü herhangi bir <code>class</code> özniteliği ile eşleşir</p></item>

<item><p><code>*[@class]</code> örüntüsü <code>class</code> özniteliğine sahip herhangi bir elemanla eşleşir</p></item>

<item><p><code>code[starts-with(normalize-space(text()), 'xsl:')]</code> örüntüsü metin düğümünün <loc href="&XPath;#function-normalize-space">normalleştirilmiş değeri</loc> <code> 'xsl:'</code> dizgesi ile başlayan herhangi bir <code>code</code> elemanıyla eşleşir (Ç.N. - Bu örüntü, bu belirtimin XML belgesini XHTML'ye dönüştürmekte <loc href="../esyntax.xsl">kullanılan örneklenimlerden birinde</loc> kullanılmıştır.)</p></item>

</ulist>

<p>Bir örüntünün <nt def="NT-Pattern">Örüntü</nt> sözdizimi ile eşleşmesi gerekir. Bir <nt def="NT-Pattern">Örüntü</nt>, <code>|</code> imleriyle ayrılmış konumsal yol örüntülerinden oluşur.  Bir konumsal yol örüntüsü, <xspecref href="&XPath;#steps">konumlarının</xspecref> her birinde <code>child</code> veya <code>attribute</code> dallarının kullanıldığı bir <xspecref href="&XPath;#location-paths">konumsal yol</xspecref>dur. <code>descendant-or-self</code> dalının kullanımının gerekli olmadığı yerlerde <code>//</code> veya <code>/</code> işleci kullanılabilir. Konumsal yol örüntüleri ayrıca, bir dizgesel sabit argümana sahip <xfunction>id</xfunction> veya <function>key</function> işlev çağrıları ile başlayabilir. Bir örüntüdeki dayanaklarda da bir konumsal yoldaki <xspecref href="&XPath;#predicates">dayanaklarda</xspecref> olduğu gibi keyfî ifadeler kullanılabilir.</p>

<scrap>
<head>Örüntüler</head>
<prodgroup pcw5="1" pcw2="10">
<prod id="NT-Pattern">
  <lhs>Örüntü</lhs>
  <rhs><nt def="NT-LocationPathPattern">KonumsalYolÖrüntüsü</nt></rhs>
  <rhs>| <nt def="NT-Pattern">Örüntü</nt> '|' <nt def="NT-LocationPathPattern">KonumsalYolÖrüntüsü</nt></rhs>
</prod>
<prod id="NT-LocationPathPattern">
  <lhs>KonumsalYolÖrüntüsü</lhs>
  <rhs>'/' <nt def="NT-RelativePathPattern">GöreliYolÖrüntüsü</nt>?</rhs>
  <rhs>| <nt def="NT-IdKeyPattern">IdKeyÖrüntüsü</nt> (('/' | '//') <nt def="NT-RelativePathPattern">GöreliYolÖrüntüsü</nt>)?</rhs>
  <rhs>| '//'? <nt def="NT-RelativePathPattern">GöreliYolÖrüntüsü</nt></rhs>
</prod>
<prod id="NT-IdKeyPattern">
  <lhs>IdKeyÖrüntüsü</lhs>
  <rhs>'id' '(' <xnt href="&XPath;#NT-Literal">DizgeselSabit</xnt> ')'</rhs>
  <rhs>| 'key' '(' <xnt href="&XPath;#NT-Literal">DizgeselSabit</xnt> ',' <xnt href="&XPath;#NT-Literal">DizgeselSabit</xnt> ')'</rhs>
</prod>
<prod id="NT-RelativePathPattern">
  <lhs>GöreliYolÖrüntüsü</lhs>
  <rhs><nt def="NT-StepPattern">KonumÖrüntüsü</nt></rhs>
  <rhs>| <nt def="NT-RelativePathPattern">GöreliYolÖrüntüsü</nt> '/' <nt def="NT-StepPattern">KonumÖrüntüsü</nt></rhs>
  <rhs>| <nt def="NT-RelativePathPattern">GöreliYolÖrüntüsü</nt> '//' <nt def="NT-StepPattern">KonumÖrüntüsü</nt></rhs>
</prod>
<prod id="NT-StepPattern">
  <lhs>KonumÖrüntüsü</lhs>
  <rhs>
  <nt def="NT-ChildOrAttributeAxisSpecifier">ÇocukVeyaÖznitelikBelirteci</nt>
  <xnt href="&XPath;#NT-NodeTest">DüğümSınaması</xnt>
  <xnt href="&XPath;#NT-Predicate">Dayanak</xnt>*</rhs>
</prod>
<prod id="NT-ChildOrAttributeAxisSpecifier">
  <lhs>ÇocukVeyaÖznitelikBelirteci</lhs>
  <rhs><xnt href="&XPath;#NT-AbbreviatedAxisSpecifier">KısaKonumBelirteci</xnt></rhs>
  <rhs>| ('child' | 'attribute') '::'</rhs>
</prod>
</prodgroup>
</scrap>

<p>Bir örüntünün bir düğümle eşleşmesi için gerek ve yeter koşul, örüntünün bir ifade olarak değerlendirildiği olası bir bağlamda, düğümün bu değerlendirme sonucunda elde edilen düğüm kümesinin bir üyesi olmasıdır. Bir düğüm eşleştiği takdirde, olası bağlamlar, bu düğümün veya bir üstselinin eşleştiği bir bağlamsal düğüme ve bu bağlamsal düğümü içeren bir bağlamsal düğüm listesine sahip bağlamlar olur.</p>

<p>Örneğin, <code>p</code> örüntüsü herhangi bir <code>p</code> elemanı ile eşleşir; <code>p</code> ifadesi, bağlamsal düğüm olarak <code>p</code>'nin ebeveyni ile değerlendirilirse, elde edilen düğüm kümesi <code>p</code> elemanını üyesi olarak içerecektir.</p>

<note><p>Bu örüntü, <code>p</code> elemanı belge elemanı olsa bile elemanla eşleşir, çünkü belge elemanının ebeveyni kök düğümdür.</p></note>

<p>Örüntülerin anlambilgisi dolaylı olarak ifade değerlendirme kuralları ile belirtiliyor olsa da, bir örüntünün ne anlam geldiğini ifade değerlendirme kurallarıyla düşünmeksizin doğrudan doğruya anlamak daha kolaydır. Bir örüntüde <code>|</code> imi seçenekleri belirtir; eğer bir örüntüde bir veya daha fazla sayıda <code>|</code> imi ile ayrılmış seçenek varsa, seçeneklerden birinin eşleşmesi halinde örüntü eşleşmiş olur.</p>

<p><code>/</code> veya <code>//</code> ayraçları ile ayrılmış çok sayıda <nt def="NT-StepPattern">KonumÖrüntüsü</nt>den oluşmuş bir örüntü sağdan sola doğru eşleşir. Örüntünün eşleşmesi için en sağdaki <nt def="NT-StepPattern">KonumÖrüntüsü</nt>nün düğümle eşleşip örüntünün kalanının da uygun bir elemanla eşleşmesi yeterlidir; uygun eleman, ayraç olarak <code>//</code> kullanılmışsa düğümün üstsellerden biri, <code>/</code> kullanılmışsa düğümün ebeveyni olacaktır.</p>

<p>Çocuk dal kullanan bir <nt def="NT-StepPattern">KonumÖrüntüsü</nt>, eğer <xnt href="&XPath;#NT-NodeTest">DüğümSınaması</xnt>nın sonucu düğüm için doğruysa ve düğüm bir öznitelik düğümü ise eşleşir.</p>

<p>İfade <code>[]</code> içerdiği takdirde, <nt def="NT-StepPattern">KonumÖrüntüsü</nt>ndeki ilk <xnt href="&XPath;#NT-PredicateExpr">Dayanakİfadesi</xnt> bağlamsal düğüm olarak düğümle ve eşleştirilecek düğüm bir öznitelik düğümü olmadıkça, <xnt href="&XPath;#NT-NodeTest">DüğümSınaması</xnt> bağlamsal düğüm listesi olarak bağlamsal düğümün kardeşleri ile eşleşecek şekilde değerlendirilir; eşleştirilecek düğüm bir öznitelik düğümü olduğu takdirde, bağlamsal düğüm listesi, tamamen, eşleşen öznitelikle aynı düğümde olan özniteliklerden oluşur ve bu <xnt href="&XPath;#NT-NameTest">AdSınaması</xnt> ile eşleşir.</p>

<p>Örneğin, bu ifadenin,</p>

<eg>appendix//ulist/item[position()=1]</eg>

<p>bir düğümle eşleşmesi için gerek ve yeter koşullar şunlardır:</p>

<ulist>

<item><p><code>item</code> <xnt href="&XPath;#NT-NodeTest"> DüğümSınaması</xnt> düğüm için doğru olmalı ve düğüm bir öznitelik olmamalıdır; başka bir deyişle düğüm bir <code>item</code> elemanı olmalıdır.</p></item>

<item><p><code>position()=1 </code><xnt href="&XPath;#NT-PredicateExpr"> Dayanakİfadesi</xnt>nin bağlamsal düğüm olarak düğümle ve bağlamsal düğüm listesi olarak düğümün <code>item</code> kardeşleriyle değerlendirilmesinin  sonucu doğru olmalıdır.</p></item>

<item><p>düğümün <code>appendix//ulist</code> ile eşleşen bir ebeveyni olmalıdır; ebeveyn, <code>appendix</code> üstsele sahip bir <code>ulist</code> elemanı ise bu doğru olacaktır.</p></item>

</ulist>

</div2>

<div2>
<head>Örneklenim Kurallarının Tanımlanması</head>

<e:element-syntax name="template">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="match">
    <e:data-type name="örüntü"/>
  </e:attribute>
  <e:attribute name="name">
    <e:data-type name="nitelikli-ad"/>
  </e:attribute>
  <e:attribute name="priority">
    <e:data-type name="sayı"/>
  </e:attribute>
  <e:attribute name="mode">
    <e:data-type name="nitelikli-ad"/>
  </e:attribute>
  <e:sequence>
    <e:element repeat="zero-or-more" name="param"/>
    <e:model name="örneklenim"/>
  </e:sequence>
</e:element-syntax>

<p>Bir örneklenim kuralı <code>xsl:template</code> elemanı ile belirtilir. <code>match</code> özniteliği, kuralın uygulanacağı kaynak düğüm ya da düğümleri tanımlayan bir <nt def="NT-Pattern">Örüntü</nt>dür. <code>match</code> özniteliği <code>xsl:template</code> elemanı bir <code>name</code> özniteliğine sahip olmadıkça gereklidir (<specref ref="named-templates"/> bölümüne bakınız). <code>match</code> özniteliğinin değer olarak bir <xnt href="&XPath;#NT-VariableReference">DeğişkenGönderimi</xnt> içermesi bir hatadır. <code>xsl:template</code> elemanının içeriği, örneklenim kuralı uygulandığında nesnelleşmiş olacak olan örneklenimdir.</p>

<p>Örneğin bir XML belge şunu içersin:</p>

<eg><![CDATA[Bu <emph>önemli</emph> bir noktadır.]]></eg>

<p>Aşağıdaki örneklenim kuralı <code>emph</code> elemanı ile eşleşir ve <code>font-weight</code> özniteliğinin değeri <code>bold</code> olan bir <code>fo:inline-sequence</code> biçimleme nesnesini üretir.</p>

<eg><![CDATA[<xsl:template match="emph">
  <fo:inline-sequence font-weight="bold">
    <xsl:apply-templates/>
  </fo:inline-sequence>
</xsl:template>
]]></eg>

<note><p>Bu belgedeki örneklerde, <bibref ref="XSL"/>'de tanımlanmış olan biçimleme nesnelerinin isim-alanı olan <code>&XSLFO.ns;</code> için <code>fo:</code> öneki kullanılmıştır.</p></note>

<p>Biraz sonra açıklanacağı gibi <code>xsl:apply-templates</code> elemanı kaynak elemanın çocuklarını peşpeşe işleyecektir.</p>

</div2>

<div2>
<head>Örneklenim Kurallarının Uygulanması</head>

<e:element-syntax name="apply-templates">
  <e:in-category name="yönerge"/>
  <e:attribute name="select">
    <e:data-type name="düğüm-kümesi-ifadesi"/>
  </e:attribute>
  <e:attribute name="mode">
    <e:data-type name="nitelikli-ad"/>
  </e:attribute>
  <e:choice repeat="zero-or-more">
    <e:element name="sort"/>
    <e:element name="with-param"/>
  </e:choice>
</e:element-syntax>

<p>Bu örnek bir <code>chapter</code> elemanı için bir blok oluşturup ardından çocukları işler.</p>

<eg><![CDATA[<xsl:template match="chapter">
  <fo:block>
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>]]></eg>

<p><code>select</code> özniteliğinin yokluğunda <code>xsl:apply-templates</code> yönergesi geçerli düğümün tüm çocuklarını, metin düğümleri de dahil olmak üzere işler. Bununla birlikte, <specref ref="strip"/> bölümünde belirtildiği gibi ayıklanan metin düğümleri işlenmeyecektir. Eğer bir eleman için boşluk düğümlerinin ayıklanması etkin kılınmamışsa, eleman içeriğindeki bütün boşluk karakterleri metin olarak işlenecektir ve bu bakımdan <xfunction>position</xfunction> işlevi tarafından döndürülen bir çocuk elemanın yakınlık derecesi saptanırken, çocuk elemanların arasındaki boşluklar da sayılacaktır.</p>

<p><code>select</code> özniteliğinde belirtilecek bir ifadeyle, tüm çocukların değil de sadece seçilen çocukların işlenmesi sağlanabilir. <code>select</code> özniteliğinin değeri bir <termref def="dt-expression">ifade</termref>dir. İfade bir düğüm kümesiyle sonuçlanacak şekilde değerlendirilmelidir. Seçilen düğüm kümesi, bir sıralama (<specref ref="sorting"/>) belirtilmemişse  belgedeki sıraya göre işlenecektir. Aşağıdaki örnekte, <code>yazar-grubu</code>'nun tüm <code>yazar</code> çocukları işlenmektedir:</p>

<eg><![CDATA[<xsl:template match="yazar-grubu">
  <fo:inline-sequence>
    <xsl:apply-templates select="yazar"/>
  </fo:inline-sequence>
</xsl:template>]]></eg>

<p>Aşağıdaki örnekte ise, <code>yazar-grubu</code>'nun <code>yazar</code> çocuklarının tüm <code>verilen-ad</code>'ları işlenmektedir:</p>

<eg><![CDATA[<xsl:template match="yazar-grubu">
  <fo:inline-sequence>
    <xsl:apply-templates select="yazar/verilen-ad"/>
  </fo:inline-sequence>
</xsl:template>]]></eg>

<p>Bu örnekte, <code>book</code>  elemanının tüm <code>heading</code> astsalları işlenir:</p>

<eg><![CDATA[<xsl:template match="book">
  <fo:block>
    <xsl:apply-templates select=".//heading"/>
  </fo:block>
</xsl:template>]]></eg>

<p>Ayrıca, geçerli düğümün astsalı olmayan elemanları da işlemek mümkündür. Bu örnekte <code>ekip</code> çocuklara ve <code>personel</code> torunlara sahip bir <code>bölüm</code> ele alınmaktadır. Bir personelin bölümü bulunmakta ve <code>bölüm</code>'ün <code>ekip</code> çocukları işleme sokulmaktadır:</p>

<eg><![CDATA[<xsl:template match="personel">
  <fo:block>
    <xsl:apply-templates select="name"/> ismindeki çalışanımız
    <xsl:apply-templates select="ancestor::bölüm/ekip"/> ekibindedir.
  </fo:block>
</xsl:template>]]></eg>

<p>Basit bir baştan sıralama yapmak için tek bir örüntünün içinde çok sayıda <code>xsl:apply-templates</code> elemanı kullanılabilir. Aşağıdaki örnekte iki HTML tablosu oluşturulmaktadır. İlk tablo yurtiçi satışlarla, ikinci tablo yurtdışı satışlarla doldurulmaktadır.</p>

<eg><![CDATA[<xsl:template match="ürün">
  <table>
    <xsl:apply-templates select="satışlar/yurtiçi"/>
  </table>
  <table>
    <xsl:apply-templates select="satışlar/yurtdışı"/>
  </table>
</xsl:template>]]></eg>

<note>

<p>Biri diğerinin astsalı olan iki astsalla eşleşim mümkündür. Bu özel bir durum olarak ele alınmaz: her iki astsal normal olarak işlenir. Şöyle bir kaynak belgemiz olsun:</p>

<eg><![CDATA[<doc><div><div></div></div></doc>]]></eg>

<p>Bu kuralla,</p>

<eg><![CDATA[<xsl:template match="doc">
  <xsl:apply-templates select=".//div"/>
</xsl:template>]]></eg>

<p>hem dış <code>div</code> hem de iç <code>div</code> işlenecektir.</p>

</note>

<note><p>Genellikle, <code>xsl:apply-templates</code> sadece geçerli düğümün astsal düğümlerini işlemekte kullanılır. <code>xsl:apply-templates</code>'in böyle kullanımı bitmeyen işlem döngüleriyle sonuçlanamaz. Bununla birlikte, <code>xsl:apply-templates</code> geçerli düğümün astsalları olmayan elemanları işlemek için kullanıldığında bitmeyen döngülere yol açılması olasıdır. Örnek:</p>

<eg role="error"><![CDATA[<xsl:template match="foo">
  <xsl:apply-templates select="."/>
</xsl:template>]]></eg>

<p>Gerçeklenimler böyle döngüleri bazı durumlarda saptayabilir, fakat bir biçembentin bir gerçeklenimin saptayamadığı bitmeyen döngülere girme olasılığı mevcuttur. Bu bir hizmet reddi şeklinde bir güvenlik açığını yol açabilir.</p></note>

</div2>

<div2 id="conflict">
<head>Şablon Kuralları için Uyuşmazlıkların Çözümlenmesi</head>

<p>Bir kaynak düğümün birden fazla örneklenim kuralı ile eşleşmesi olasıdır.Kullanılacak örneklenim kuralı şöyle belirlenir:</p>

<olist>

<item><p>Önce tüm eşleşen kurallardan düşük <termref def="dt-import-precedence">ithal önceliği</termref>ne sahip olanlar elenir.</p></item>

<item><p>Sonra, kalan eşleşen kurallardan düşük işlem önceliğine sahip olanlar elenir. Bir örneklenim kuralının işlem önceliği o örneklenim kuralı üzerinde <code>priority</code> özniteliği ile belirtilir. Değeri bir gerçel sayı (pozitif veya negatif) olmalı ve isteğe bağlı bir eksi imi (<code>-</code>) ile öncelenmiş olarak <xnt href="&XPath;#NT-Number">Sayı</xnt> sözdizimi ile eşleşmelidir. <termdef
id="dt-default-priority" term="Öntanımlı İşlem Önceliği"><term>Öntanımlı işlem önceliği</term> şöyle hesaplanır:</termdef></p>

<ulist>

<item><p>Eğer bir örüntü <code>|</code> imleri le birbirlerinden ayrılmış çok sayıda seçenek içeriyorsa, bunların her birinin işlem önceliği bir diğerine denk ele alınır.</p></item>

<item><p>Eğer bir örüntü önüne bir <nt def="NT-ChildOrAttributeAxisSpecifier">ÇocukVeyaÖznitelikBelirteci</nt> getirilmiş bir <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> ya da önüne bir <nt def="NT-ChildOrAttributeAxisSpecifier">ÇocukVeyaÖznitelikBelirteci</nt> getirilmiş <code>processing-instruction(</code><xnt href="&XPath;#NT-Literal" >DizgeselSabit</xnt><code>)</code> biçiminde ise işlem önceliği 0'dır.</p></item>

<item><p>Eğer bir örüntü önüne bir <nt def="NT-ChildOrAttributeAxisSpecifier">ÇocukVeyaÖznitelikBelirteci</nt> getirilmiş bir <xnt href="&XMLNames;#NT-NCName">KısaAd</xnt><code>:*</code> biçiminde ise işlem önceliği -0.25'tir.</p></item>

<item><p>Aksi takdirde, eğer bir örüntü önüne bir <nt def="NT-ChildOrAttributeAxisSpecifier">ÇocukVeyaÖznitelikBelirteci</nt> getirilmiş bir <xnt href="&XPath;#NT-NodeTest">DüğümSınaması</xnt> biçimindeyse işlem önceliği -0.5'tir.</p></item>

<item><p>Aksi takdirde, işlem önceliği 0.5'tir.</p></item>

</ulist>

<p>Bu bakımdan, en bilinen örüntü çeşidinin (bir düğümü belli bir tür veya  genişletilmiş isimle sınayan) işlem önceliği 0'dır. Sonraki en özel örüntü çeşidinin (bir düğümü belli bir isim-alanındaki belli bir tür veya genişletilmiş isimle sınayan) işlem önceliği -0.25'tir. Bundan daha az özel (düğümleri sadece belli bir türle sınayan) örüntülerin işlem önceliği -0.5'tir. En bilinen örüntü çeşidinden daha özel örüntülerin işlem önceliği ise 0.5'tir.</p>

</item>

</olist>

<p>Eğer bu elemeden geriye birden fazla eşleşmiş örneklenim kuralı kalıyorsa bu bir hatadır. Bir XSLT işlemci hatayı raporlayabilir; eğer raporlamıyorsa, kalanlardan biçembentte daha sonlarda yer alan örneklenim kuralını seçerek hatadan kurtulmalıdır.</p>

</div2>

<div2 id="apply-imports">
<head>Örneklenim Kurallarının Geçerli Kılınması</head>

<e:element-syntax name="apply-imports">
  <e:in-category name="yönerge"/>
  <e:empty/>
</e:element-syntax>

<p>İthal edilmiş bir biçembentteki bir örneklenim kuralını geçersiz kılmak için kullanılmış bir örneklenim kuralı (bkz, <specref ref="conflict"/>) geçersiz kılınan örneklenim kuralını <code>xsl:apply-imports</code> elemanını kullanarak çağırabilir.</p>

<p><termdef id="dt-current-template-rule" term="Geçerli Örneklenim Kuralı">Bir biçembentin işlenmesi sırasında, herhangi bir anda tek bir <term>geçerli örneklenim kuralı</term> vardır. Bir örneklenim kuralı örüntü eşleştirerek her seçilişinde, kuralın örnekleniminin nesnelleştirilmesi için geçerli örneklenim kuralı haline gelir. Bir <code>xsl:for-each</code> elemanı işleme sokulduğunda geçerli örneklenim kuralı <code>xsl:for-each</code> elemanının içeriğinin nesnelleştirilmesi için tanımsız hale gelir.</termdef></p>

<p><code>xsl:apply-imports</code> elemanı sadece, geçerli örneklenim kuralını içeren biçembente ithal edilmiş olan örneklenim kuralının kullanılarak geçerli düğümün işlenmesini sağlar; düğüm geçerli örneklenim kuralının kipinde işlenir. Geçerli örneklenim kuralı tanımsızken <code>xsl:apply-imports</code> nesnelleştirme için kullanılmaya çalışılırsa bu bir hatadır.</p>

<p>Örneğin, <code>doc.xsl</code> biçembenti <code>example</code> elemanları için şöyle bir örneklenim kuralı içeriyor olsun:</p>

<eg><![CDATA[<xsl:template match="example">
  <pre><xsl:apply-templates/></pre>
</xsl:template>]]></eg>

<p>Başka bir biçembent de <code>doc.xsl</code>'i ithal edip <code>example</code> elemanını şöyle ele alıyor olsun:</p>

<eg><![CDATA[<xsl:import href="doc.xsl"/>

<xsl:template match="example">
  <div style="border: solid red">
     <xsl:apply-imports/>
  </div>
</xsl:template>]]></eg>

<p>Dönüşümün birleşik etkisi bir <code>example</code> elemanını şu biçime getirir:</p>

<eg><![CDATA[<div style="border: solid red"><pre>...</pre></div>]]></eg>

</div2>

<div2 id="modes">
<head>Kipler</head>

<p>Kipler bir elemanın her seferinde farklı bir sonuç üretmek üzere defalarca işlenmesini mümkün kılar.</p>

<p><code>xsl:template</code> ve <code>xsl:apply-templates</code> elemanlarının ikisi de isteğe bağlı bir <code>mode</code> özniteliğine sahiptir. <code>mode</code> özniteliğinin değeri bir <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> olup <specref ref="qname"/> bölümünde açıklandığı gibi yorumlanır. Eğer bir <code>xsl:template</code> elemanı bir <code>match</code> özniteliğine sahip değilse bir <code>mode</code> özniteliğine sahip olmamalıdır. Eğer bir <code>xsl:apply-templates</code> elemanı bir <code>mode</code> özniteliğine sahipse sadece kendi <code>mode</code> özniteliğinin değeriyle aynı <code>mode</code> özniteliğine sahip <code>xsl:template</code> elemanlarındaki örneklenim kuralları uygulanır; eğer bir <code>xsl:apply-templates</code> elemanı bir <code>mode</code> özniteliğine sahip değilse sadece <code>mode</code> özniteliğine sahip olmayan <code>xsl:template</code> elemanlarındaki örneklenim kuralları uygulanır.</p>

</div2>

<div2 id="built-in-rule">
<head>Yerleşik Örneklenim Kuralları</head>

<p>Biçembentte örtük bir örneklenim kuralıyla eşleşen başarılı bir örüntünün yokluğunda işlemlerin ardışık olarak sürmesini sağlayan bir yerleşik örneklenim kuralı vardır. Bu örneklenim kuralı hem eleman düğümlerine hem de kök düğüme uygulanır. Yerleşik örneklenim kuralının eşdeğeri şöyle birşey olurdu:</p>

<eg><![CDATA[<xsl:template match="*|/">
  <xsl:apply-templates/>
</xsl:template>]]></eg>

<p>Ayrıca, her kip için de benzer şekilde, biçembentte örtük bir örneklenim kuralıyla eşleşen başarılı bir örüntünün yokluğunda işlemlerin ardışık olarak sürmesini sağlayan bir yerleşik örneklenim kuralı vardır. Bu örneklenim kuralı hem eleman düğümlerine hem de kök düğüme uygulanır. Örneğin, <var>m</var> kipi için yerleşik örneklenim kuralının eşdeğeri şöyle birşey olurdu:</p>

<eg>&lt;xsl:template match="*|/" mode="<var>m</var>">
  &lt;xsl:apply-templates mode="<var>m</var>"/>
&lt;/xsl:template></eg>

<p>Ayrıca, metin ve öznitelik düğümleri için metinlerin kopyalanmasını sağlayan bir yerleşik örneklenim kuralı vardır:</p>

<eg><![CDATA[<xsl:template match="text()|@*">
  <xsl:value-of select="."/>
</xsl:template>]]></eg>

<p>İşlem yönergeleri ve açıklamalar için olan yerleşik örneklenim kuralı hiçbir şey yapmaz:</p>

<eg><![CDATA[<xsl:template match="processing-instruction()|comment()"/>]]></eg>

<p>İsim-alanı düğümleri için olan yerleşik örneklenim kuralı da hiçbir şey yapmaz. Bir isim-alanı düğümüyle eşleşen bir örüntü olmayacağı için isim-alanı düğümlerine uygulanan yegane örneklenim kuralı bu yerleşik örneklenim kuralıdır.</p>

<p>Yerleşik örneklenim kuralları biçembentten önce örtük olarak ithal edilmişler gibi ele alınırlar, dolayısıyla tüm diğer örneklenim kurallarından daha düşük <termref def="dt-import-precedence">ithal önceliği</termref>ne sahip olurlar. Bu bakımdan biçembent yazarları bir yerleşik örneklenim kuralını biçimbente açıkça bir örneklenim kuralı ekleyerek geçersiz kılabilirler.</p>

</div2>


</div1>

<div1 id="named-templates">
<head>İsimli Örneklenimler</head>

<e:element-syntax name="call-template">
  <e:in-category name="yönerge"/>
  <e:attribute name="name" required="yes">
    <e:data-type name="nitelikli-ad"/>
  </e:attribute>
  <e:element repeat="zero-or-more" name="with-param"/>
</e:element-syntax>

<p>Örneklenimler isimleriyle çağrılabilirler. Bir <code>xsl:template</code> elemanı bir <code>name</code> özniteliği ile birlikte bir isimli örneklenim belirtir. <code>name</code> özniteliğinin değeri bir <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> olup <specref ref="qname"/> bölümünde açıklandığı gibi yorumlanır. Bir <code>xsl:template</code> elemanının <code>name</code> özniteliğine ek olarak bir de <code>match</code> özniteliği  olabilir ama bu gerekli değildir. <code>xsl:call-template</code> elemanı bir  örneklenimi ismiyle çağırmak için kullanılır; çağrılacak örneklenimi belirtmek için <code>name</code> özniteliğinin kullanımı zorunludur. <code>xsl:apply-templates</code> elemanının aksine, <code>xsl:call-template</code> geçerli düğümü veya geçerli düğüm listesini değiştirmez.</p>

<p>Bir <code>xsl:call-template</code> elemanı tarafından çağrıldığında <code>match</code>, <code>mode</code> ve <code>priority</code> özniteliklerinin <code>xsl:template</code> üzerinde bir etkisi yoktur. Benzer şekilde, <code>xsl:template</code> elemanı <code>xsl:apply-templates</code> elemanı tarafından çağrıldığında <code>name</code> özniteliğinin bir önemi yoktur.</p>

<p>Bir biçembentin aynı <termref def="dt-import-precedence">ithal önceliği</termref>ne sahip birden fazla aynı isimde örneklenime sahip olması bir hatadır.</p>

</div1>


<div1 id="rtree">
<head>Hedef Ağacın Oluşturulması</head>

<p>Bu bölümde hedef ağaç üzerinde düğümleri doğrudan oluşturan yönergeler açıklanmaktadır.</p>

<div2>
<head>Elemanların ve Özniteliklerin Oluşturulması</head>

<div3 id="literal-result-element">
<head>Birebir Hedef Elemanlar</head>

<p>Bir örneklenimde, XSLT isim-alanına ait olmadığı gibi bir ek eleman da (bkz, <specref ref="extension-element"/>) olmayan bir eleman aynı <xtermref href="&XPath;#dt-expanded-name">genişletilmiş isim</xtermref>le bir eleman düğümü oluşturmak üzere nesnelleştirilir. Elemanın içeriği, oluşturulan eleman düğümünün içeriğini vermek için nesnelleştiren bir örneklenimdir. Oluşturulan eleman düğümü, biçembent ağacındaki eleman düğümünde mevcut ancak isimleri XSLT isim-alanından olmayan öznitelik düğümlerine sahip olacaktır.</p>

<p>Oluşturulan eleman düğümü, ayrıca biçembent ağacındaki eleman düğümünde mevcut olan isim-alanı düğümlerinin bir kopyasına sahip olacaktır; kopyanın içinde, dizgesel değeri XSLT isim-alanı tanım-yeri (<code>&XSLT.ns;</code>), eklenti isim-alanı olarak bildirilmiş bir isim-alanı tanım-yeri (bkz, <specref ref="extension-element"/>) veya dışlanmış bir isim-alanı olarak belirtilmiş bir isim-alanı tanım-yeri olan isim-alanı düğümleri olmayacaktır. Bir isim-alanı tanım-yeri, <code>xsl:stylesheet</code> elemanının <code>exclude-result-prefixes</code> özniteliği veya birebir hedef elemanın <tt>xsl:exclude-result-prefixes</tt> özniteliği kullanılarak, dışlanmış bir isim-alanı olarak belirtilir. Bu özniteliklerin ikisinin de değeri boş karakter ayraçlı isim-alanı önekleri listesidir. Öneklerin her birine bağlı isim-alanları birer dışlanmış isim-alanı olarak belirtilmiş olur. <code>exclude-result-prefixes</code> veya <tt>xsl:exclude-result-prefixes</tt> özniteliğini taşıyan eleman üzerinde öneke bağlı bir isim-alanının olmayışı bir hatadır. Öntanımlı isim-alanı, isim-alanı önekleri listesine <code>#default</code> dizgesi dahil edilerek dışlanmış bir isim-alanı olarak belirtilebilir. Bir isim-alanının dışlanmış bir isim-alanı olarak atanması, <code>exclude-result-prefixes</code> veya <tt>xsl:exclude-result-prefixes</tt> özniteliğini taşıyan eleman biçembendin kök düğümü olmak üzere, biçembentin alt ağacı içinde etkilidir; kökü bir <code>xsl:stylesheet</code> elemanı olan bir alt ağaç, <code>xsl:stylesheet</code> elemanının çocukları tarafından içerilmiş veya ithal edilmiş bir biçembent içermez.</p>

<note><p>Bir biçembent, bir isim-alanı bildirimini sadece kaynak ağacını adreslemek amacıyla kullandığı zaman, önekin <code>exclude-result-prefixes</code> özniteliğinde belirtilmesi hedef ağaçta gereksiz isim-alanı bildirimlerini ortadan kaldıracaktır.</p></note>

<p>Bir birebir hedef elemanın bir özniteliğinin değeri bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır: kaşlı ayraçlar (<code>{}</code>) içinde belirtilmiş ifadeler içerir.</p>

<p><termdef id="dt-literal-namespace-uri" term="Birebir İsim-alanı Tanım-yeri">Biçembent ağacında, hedef ağaçta bir isim-alanı tanım-yeri belirtmek için kullanılan bir isim-alanı tanım-yerine <term>birebir isim-alanı tanım-yeri</term> denir.</termdef> Bu şunlara uygulanır:</p>

<ulist>

<item><p>biçembentte bir birebir hedef elemanın genişletilmiş isminde bir isim-alanı tanım-yerine,</p></item>

<item><p>biçembentte bir birebir hedef elemanında belirtilen bir özniteliğin genişletilmiş isminde bir isim-alanı tanım-yerine,</p></item>

<item><p>biçembentte bir birebir hedef elemanındaki bir isim-alanı düğümünün dizgesel değerine.</p></item>

</ulist>

<e:element-syntax name="namespace-alias">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="stylesheet-prefix" required="yes">
    <e:data-type name="önek"/>
    <e:constant value="#default"/>
  </e:attribute>
  <e:attribute name="result-prefix" required="yes">
    <e:data-type name="önek"/>
    <e:constant value="#default"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p><termdef id="dt-alias" term="Takma ad">Bir biçembent <code>xsl:namespace-alias</code> elemanını başka bir isim-alanı tanım-yeri için <term>takma ad</term> olan bir isim-alanı tanım yerini bildirmek için kullanabilir</termdef>. Bir <termref def="dt-literal-namespace-uri">birebir isim-alanı tanım-yeri</termref> başka bir isim-alanı tanım-yeri için bir takma ad olarak bildirildiğinde, hedef ağaçtaki isim-alanı tanım-yeri, birebir isim-alanı tanım-yerinin kendisi için değil onun için bir takma ad olacağı isim-alanı tanım-yeri olacaktır. <code>xsl:namespace-alias</code> elemanı, <code>result-prefix</code> özniteliği tarafından belirtilen öneke bağlı isim-alanı tanım-yeri için bir takma ad olan <code>stylesheet-prefix</code> özniteliği tarafından belirtilen öneke bağlı isim-alanı tanım-yerini bildirir. Bu bakımdan, <code>stylesheet-prefix</code> özniteliği biçembentte görünecek isim-alanı tanım-yerini, <code>result-prefix</code> özniteliği ise hedef ağaçta görünecek diğerinin karşılığı olan isim-alanı tanım-yerini belirtir. Öntanımlı isim-alanı (<code>xmlns</code> ile bildirilen) bir önek yerine <code>#default</code> kullanılarak belirtilebilir. Eğer bir isim-alanı tanım-yeri çok sayıda isim-alanı tanım-yeri için bir takma ad olarak bildirilmişse <termref def="dt-import-precedence">ithal önceliği</termref> en yüksek bildirim kullanılır. Birden fazla böyle bildirim olması bir hatadır. Bir XSLT işlemci hatayı bildirebilir; eğer bildirmiyorsa, en yüksek ithal öncelikli bildirimler arasından biçembendin sonlarına doğru yer alan birini seçerek hatadan kurtulmalıdır.</p>

<p>Birebir hedef elemanlar XSLT isim-alanı tanım-yerini kullanan eleman, öznitelik veya isim-alanı düğümleri oluşturmak için kullanıldıklarında, biçembendin bir takma ad kullanması gerekir. Örneğin,</p>

<eg>&lt;xsl:stylesheet
  version="1.0"
  xmlns:xsl="&XSLT.ns;"
  xmlns:fo="&XSLFO.ns;"
  xmlns:axsl="&XSLTA.ns;"><![CDATA[

<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>

<xsl:template match="/">
  <axsl:stylesheet>
    <xsl:apply-templates/>
  </axsl:stylesheet>
</xsl:template>

<xsl:template match="block">
  <axsl:template match="{.}">
     <fo:block><axsl:apply-templates/></fo:block>
  </axsl:template>
</xsl:template>

</xsl:stylesheet>]]></eg>

<p>biçembendi aşağıdaki biçimdeki bir belgeden bir biçembent üretecektir:</p>

<eg><![CDATA[<elements>
<block>p</block>
<block>h1</block>
<block>h2</block>
<block>h3</block>
<block>h4</block>
</elements>]]></eg>

<note><p>XSLT isim-alanı tanım-yerinden başka isim-alanları için de takma adlar kullanmak gerekli olabilir. Örneğin, sayısal imzalarla iş yapılan bir isim-alanına ait olan birebir sonuç elemanlar, XSLT biçembentlerinin genel amaçlı güvenlik yazılımları tarafından kötü kullanımına sebep olabilir; isim-alanı için bir takma ad kullanımı böyle bir kötü kullanım olasılığını ortadan kaldıracaktır.</p></note>

</div3>

<div3>
<head>Elemanların <code>xsl:element</code> ile Oluşturulması</head>

<e:element-syntax name="element">
  <e:in-category name="yönerge"/>
  <e:attribute name="name" required="yes">
    <e:attribute-value-template>
      <e:data-type name="nitelikli-ad"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="namespace">
    <e:attribute-value-template>
      <e:data-type name="tanım-yeri-başvurusu"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="use-attribute-sets">
    <e:data-type name="nitelikli-adlar"/>
  </e:attribute>
  <e:model name="örneklenim"/>
</e:element-syntax>

<p><code>xsl:element</code> elemanı hesaplanmış bir isimle bir eleman oluşturmayı mümkün kılar. Oluşturulacak elemanın <xtermref href="&XPath;#dt-expanded-name">genişletilmiş ismi</xtermref>, zorunlu olan <code>name</code> ile seçimlik olan <code>namespace</code> öznitelikleri ile belirtilir. <code>xsl:element</code> elemanının içeriği oluşturulan elemanın çocukları ve öznitelikleri için bir örneklenimdir.</p>

<p><code>name</code> özniteliği bir <termref def="dt-attribute-value-template" >öznitelik değeri örneklenimi</termref> olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizgenin bir <xnt href="&XMLNames;#NT-QName" >NitelAd</xnt> olmaması bir hatadır.  Bir XSLT işlemci hatayı raporlayabilir; raporlamıyorsa, <code>xsl:element</code> elemanının nesnelleştirilmesinin sonucunu, baştaki öznitelik düğümleri hariç, <code>xsl:element</code> elemanının içeriğinin nesnelleştirilmesiyle oluşturulan düğüm silsilesi yaparak hatayı ortadan kaldırmalıdır. <code>namespace</code> özniteliği kullanılmamışsa, <xnt href="&XMLNames;#NT-QName">NitelAd</xnt>, <code>xsl:element</code> elemanı için etkili olan isim-alanı bildirimleri (öntanımlı isim-alanı bildirimi dahil) kullanılarak bir genişletilmiş isme genişletilir.</p>

<p>Eğer <code>namespace</code> özniteliği kullanılmışsa, o da ayrıca bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizge bir tanım-yeri başvurusu olmalıdır. Dizgenin sözdizimsel olarak geçerli bir tanım-yeri başvurusu olmaması bir hata değildir. Eğer dizge boşsa, elemanın genişletilmiş ismi tanımsız isim-alanı tanım-yerine sahip olur. Aksi takdirde, dizge, oluşturulan elemanın genişletilmiş isminin isim-alanı tanım-yeri olarak kullanılır. <xnt href="&XMLNames;#NT-QName">NitelAd</xnt>'ın yerel kısmı, oluşturulan elemanın genişletilmiş isminin yerel kısmı olarak kullanılan <code>name</code> özniteliği tarafından belirtilir.</p>

<p>XSLT işlemciler, oluşturulan elemanın XML olarak çıktılanması için kullanılan öneki seçerken, <code>name</code> özniteliğinde belirtilen <xnt
href="&XMLNames;#NT-QName">NitelAd</xnt>ın önekini kullanılır yapabilirler; yine de,bunun böyle olması gerekli değildir.</p>

</div3>

<div3 id="creating-attributes">
<head>Özniteliklerin <code>xsl:attribute</code> ile Oluşturulması</head>

<e:element-syntax name="attribute">
  <e:in-category name="yönerge"/>
  <e:attribute name="name" required="yes">
    <e:attribute-value-template>
      <e:data-type name="nitelikli-ad"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="namespace">
    <e:attribute-value-template>
      <e:data-type name="tanım-yeri-başvurusu"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:model name="örneklenim"/>
</e:element-syntax>

<p><code>xsl:attribute</code> elemanı biçembentteki birebir hedef elemanlar veya <code>xsl:element</code> gibi yönergeler tarafından oluşturulan hedef elemanlara öznitelikler eklemek için kullanılır. Özniteliğin <xtermref href="&XPath;#dt-expanded-name">genişletilmiş ismi</xtermref> belirtilmesi zorunlu <code>name</code> özniteliği ile seçimlik <code>namespace</code> özniteliği tarafından oluşturulur. Bir <code>xsl:attribute</code> elemanının nesnelleştirilmesi, hedef eleman düğümüne bir öznitelik düğümü ekler. <code>xsl:attribute</code> elemanının içeriği oluşturulan özniteliğin değeri için bir örneklenimdir.</p>

<p><code>name</code> özniteliği bir <termref def="dt-attribute-value-template" >öznitelik değeri örneklenimi</termref> olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizgenin bir <xnt href="&XMLNames;#NT-QName" >NitelAd</xnt> olmaması veya <code>xmlns</code> dizgesi olması bir hatadır. Bir XSLT işlemci hatayı raporlayabilir; raporlamıyorsa, özniteliği hedef ağaca eklemeyerek hatayı ortadan kaldırmalıdır. <code>namespace</code> özniteliği kullanılmamışsa, <xnt href="&XMLNames;#NT-QName">NitelAd</xnt>, <code>xsl:attribute</code> elemanı için etkili olan isim-alanı bildirimleri (öntanımlı isim-alanı bildirimi hariç) kullanılarak bir genişletilmiş isme genişletilir.</p>

<p>Eğer <code>namespace</code> özniteliği kullanılmışsa, o da ayrıca bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizge bir tanım-yeri başvurusu olmalıdır. Dizgenin sözdizimsel olarak geçerli bir tanım-yeri başvurusu olmaması bir hata değildir. Eğer dizge boşsa, özniteliğin genişletilmiş ismi tanımsız isim-alanı tanım-yerine sahip olur. Aksi takdirde, dizge, oluşturulan özniteliğin genişletilmiş isminin isim-alanı tanım-yeri olarak kullanılır. <xnt href="&XMLNames;#NT-QName">NitelAd</xnt>'ın yerel kısmı, oluşturulan özniteliğin genişletilmiş isminin yerel kısmı olarak kullanılan <code>name</code> özniteliği tarafından belirtilir.</p>

<p>XSLT işlemciler, oluşturulan özniteliğin XML olarak çıktılanması için kullanılan öneki seçerken, <code>name</code> özniteliğinde belirtilen <xnt
href="&XMLNames;#NT-QName">NitelAd</xnt>ın önekini kullanılır yapabilirler; yine de,bunun böyle olması gerekli değildir. Bu bakımdan,</p>

<eg>&lt;xsl:attribute name="xmlns:xsl" namespace="herneyse">
  &XSLT.ns;
&lt;/xsl:attribute></eg>

<p>hatalı olmasa da, bu işlem çıktıda bir isim-alanı bildirimi ile sonuçlanmayacaktır.</p>

<p>Bir özniteliğin bir elemana eklenmesi elemanın mevcut özniteliklerinden  genişletilmiş ismi aynı olanını değiştirir.</p>

<p>Aşağıdakilerin hepsi hata ile sonuçlanır:</p>

<ulist>

<item><p>Bir elemana çocukları eklendikten sonra bir özniteliğin eklenmesi; gerçeklenimler bu hatayı bildirebilir ya da özniteliği yoksayabilirler.</p></item>

<item><p>Bir özniteliğin bir eleman olmayan bir düğüme eklenmesi; gerçeklenimler bu hatayı bildirebilir ya da özniteliği yoksayabilirler.</p></item>

<item><p><code>xsl:attribute</code> elemanının nesnelleştirilmesi sırasında metin düğümlerinden farklı düğümlerin oluşturulması; gerçeklenimler bu hatayı bildirebilir ya da hatalı düğümleri içerikleriyle birlikte yoksayabilirler.</p></item>

</ulist>

<note><p>Bir <code>xsl:attribute</code> elemanı satırsonu içeren bir metin düğümü içeriyorsa, XML çıktının bir karakter gönderimi içermesi gerekir. Örneğin,</p>

<eg><![CDATA[<xsl:attribute name="a">x
y</xsl:attribute>]]></eg>

<p>kodu şu çıktıyı üretecektir:</p>

<eg><![CDATA[a="x&#xA;y"]]></eg>

<p>(veya eşdeğeri bir karakter gönderimi ile). XML çıktı asla şöyle olamaz:</p>

<eg><![CDATA[a="x
y"]]></eg>

<p>XML 1.0'ın öznitelik değerlerindeki satırsonu karakterlerini boşluk olarak normalleştirmesi fakat satır sonu karakterlerine yapılan gönderimleri normalleştirmemesi sebebiyle bu böyledir. Veri modelindeki öznitelik değerleri normalleştirme sonrası öznitelik değerleri olarak gösterilir. Eğer bir satırsonu karakteri çıktılanan ağaçtaki bir öznitelik değerinde bir karakter gönderimi olarak değilde kendisi olarak yer alıyorsa, ağaçtaki öznitelik değeri bir satırsonu değil de bir boşluk içerecek şekilde XML'in yeniden çözümlenerek ağacın doğru olarak çıktılanması gerekir.</p></note>

</div3>

<div3 id="attribute-sets">

<head>İsimli Öznitelik Kümeleri</head>

<e:element-syntax name="attribute-set">
  <e:in-category name="tepe-seviyeden-eleman"/>
  <e:attribute name="name" required="yes">
    <e:data-type name="nitelikli-ad"/>
  </e:attribute>
  <e:attribute name="use-attribute-sets">
    <e:data-type name="nitelikli-adlar"/>
  </e:attribute>
  <e:element repeat="zero-or-more" name="attribute"/>
</e:element-syntax>

<p><code>xsl:attribute-set</code> elemanı bir isimli öznitelik kümesi tanımlar. <code>name</code> özniteliği öznitelik kümesinin ismini belirtir. <code>name</code> özniteliğinin değeri bir <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> olup <specref ref="qname"/> bölümünde açıklandığı gibi yorumlanır. <code>xsl:attribute-set</code> elemanının içeriği kümedeki öznitelikleri belirten sıfır veya daha fazla sayıda <code>xsl:attribute</code> elemanından oluşur.</p>

<p>Öznitelik kümeleri, bir <code>xsl:element</code>, <code>xsl:copy</code> (bkz, <specref ref="copying"/>) veya <code>xsl:attribute-set</code> elemanının <code>use-attribute-sets</code> özniteliğinde belirtilerek kullanılırlar. <code>use-attribute-sets</code> özniteliğinin değeri öznitelik kümesi isimlerinin boşluk ayraçlı listesidir. Belirtilen her isim, <specref ref="qname"/> bölümünde açıklandığı gibi yorumlanan birer <xnt href="&XMLNames;#NT-QName">NitelAd</xnt> olarak belirtilir. Bir <code>use-attribute-sets</code> özniteliğinin belirtilmesi, özniteliğe sahip elemanın içeriğinin başlangıcında isimli öznitelik kümelerinin her birindeki özniteliklerin her biri için (<code>use-attribute-sets</code> özniteliğinde belirtilen öznitelik isimleriyle aynı sırada) bir <code>xsl:attribute</code> elemanı belirtilmesine eşdeğerdir. <code>use-attribute-sets</code> özniteliklerinin <code>xsl:attribute-set</code> elemanlarında doğrudan veya dolaylı olarak kendilerini öznitelik kümesi olarak kullanmaları bir hatadır.</p>

<p>Öznitelik kümeleri ayrıca bir birebir hedef elemanda da bir <tt>xsl:use-attribute-sets</tt> özniteliği belirterek kullanılabilir. <tt>xsl:use-attribute-sets</tt> özniteliğinin değeri öznitelik kümesi isimlerinin boşluk ayraçlı bir listesidir. <tt>xsl:use-attribute-sets</tt> özniteliği tarafından belirtilen <code>xsl:attribute</code> elemanlarından sonra ama asıl <code>xsl:attribute</code> elemanlarından önce yer alan <code>xsl:attribute</code> elemanları tarafından belirtilmiş gibi ele alınan birebir hedef elemanın kendi üzerindeki öznitelikler tarafından belirtilen ek kurallarla birlikte <code>xsl:element</code> üzerindeki <code>use-attribute-sets</code> özniteliği ile <tt>xsl:use-attribute-sets</tt> özniteliği aynı etkiye sahiptir. Bu bakımdan, bir birebir hedef eleman için, bir <tt>xsl:use-attribute-sets</tt> özniteliğinde isimleri bulunan öznitelik kümelerindeki öznitelikler önce (ama kümelerin listede yer alış sırasına uygun olarak) eklenecektir; ardından birebir hedef elemanda belirtilen öznitelikler eklenecek; son olarak da, <code>xsl:attribute</code> elemanları tarafından belirtilen öznitelikler eklenecektir. Bir özniteliğin bir elemana eklenmesi, bu elemanın aynı isimdeki mevcut özniteliğini değiştirdiğinden, bu, öznitelik kümelerinde belirtilen öznitelikler, birebir hedef elemanın kendisinde belirtilen öznitelikler tarafından geçersiz kılınabilirler anlamına gelir.</p>

<p>Bir <code>xsl:attribute-set</code> elemanınındaki  <code>xsl:attribute</code> elemanlarının her birindeki örneklenimler, öznitelik kümesinin her kullanılışında yeniden nesnelleştirilir; nesnelleştirme, aynı geçerli düğüm ve geçerli düğüm listesi kullanılarak, nesnelleştirme için <code>use-attribute-sets</code> veya <tt>xsl:use-attribute-sets</tt> özniteliğini taşıyan eleman kullanılıyormuş gibi yapılır. Bununla birlikte, hangi değişken bağıntısının görünür (bkz, <specref ref="variables"/>) olduğunu belirleyen <code>use-attribute-sets</code> veya <tt>xsl:use-attribute-sets</tt> özniteliğini taşıyan elemandan ziyade biçembentteki <code>xsl:attribute</code> elemanının konumudur; bu bakımdan, sadece <termref
def="dt-top-level">tepe-seviyeden</termref> <code>xsl:variable</code> ve
<code>xsl:param</code> elemanları ile bildirilen değişken ve değergeçler görünürdür.</p>

<p>Aşağıdaki örnekte <code>title-style</code> isimli bir öznitelik kümesi oluşturulmakta ve bir örneklenim kuralında kullanılmaktadır:</p>

<eg><![CDATA[<xsl:template match="chapter/heading">
  <fo:block quadding="start" xsl:use-attribute-sets="title-style">
    <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:attribute-set name="title-style">
  <xsl:attribute name="font-size">12pt</xsl:attribute>
  <xsl:attribute name="font-weight">bold</xsl:attribute>
</xsl:attribute-set>]]></eg>

<p>Bir özniteliğin aynı genişletilmiş isimle çok sayıda tanımı varsa bunlar birleştirilir. Yüksek <termref def="dt-import-precedence">ithal önceliği</termref>ne sahip bir öznitelik, düşük <termref def="dt-import-precedence">ithal önceliği</termref>ndeki bir özniteliğe göre önceliklidir. Aynı genişletilmiş isimle aynı özniteliği içeren iki öznitelik kümesinin, aynı genişletilmiş isim ve aynı öznitelikle daha yüksek <termref def="dt-import-precedence">ithal öncelikli</termref> bir üçüncünün yokluğunda aynı ithal önceliğine sahip olması bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, biçembentin sonuna doğru yer alan tanımlar arasından daha yüksek işlem önceliğine sahip olanını seçerek hatayı ortadan kaldırabilir. Bir öznitelik kümesinde belirtilen özniteliklerin yeri kümedeki öznitelikler bir birleşmeye konu olduklarında önem kazanır; öznitelik kümeleri kullanılırken bunun bir önemi yoktur. Bir <code>xsl:attribute-set</code> elemanının <code>use-attribute-sets</code> özniteliğinde yer alan her öznitelik kümesi ismi için, aynı isimdeki bir öznitelik kümesinin bütün tanımlarının, <code>use-attribute-sets</code> özniteliği, eşdeğeri olan <code>xsl:attribute</code> çocuk elemanlarıyla değiştirilmeden önce birleştirilmesi gerekir. Bir <code>xsl:attribute-set</code> elemanının <code>use-attribute-sets</code> özniteliğinin eşdeğeri olan <code>xsl:attribute</code> çocuk elemanlarıyla, bu <code>xsl:attribute-set</code> elemanı, aynı genişletilmiş isimli başka bir <code>xsl:attribute-set</code> elemanı ile birleştirilmeden önce değiştirilmesi gerekir. <code>xsl:attribute-set</code>  elemanları aynı genişletilmiş isimli olanlarla birleştirildiğinde, bir <code>use-attribute-sets</code> özniteliğine değiştirilmek için eklenen her <code>xsl:attribute</code> çocuk elemanı, biçembentte gerçekten bir çocuk eleman olarak belirtilmiş gibi ele alınır.</p>

</div3>

</div2>

<div2>

<head>Metin Oluşturma</head>

<p>Bir örneklenim ayrıca metin düğümleri de içerebilir. Bir örneklenimdeki her metin düğümünün boşluk karakterleri <specref ref="strip"/> bölümünde belirtildiği gibi ayıklandıktan sonra kalan dizgeyle hedef ağaçtaki metin düğümü oluşturulur. Bitişik metin düğümleri hedef ağaçta kendiliğinden birleşir.</p>

<p>Metnin ağaç seviyesinde işlendiğine dikkat ediniz. Bu bakımdan, bir örneklenimdeki <code>&amp;lt;</code> imlenimi biçembent ağacında <code>&lt;</code> karakterini içeren bir metin düğümüyle gösterilecektir. Bu, hedef ağaç bir XML belge olarak çıktılandığında,  hedef ağaçta (<code>&amp;lt;</code> imlenimi -veya eşdeğeri karakter gönderimi- ile gösterilecek olan) <code>&lt;</code> karakterini içeren bir metin düğümü oluşturacaktır (<specref ref="disable-output-escaping"/> bölümünde belirtildiği gibi çıktı öncelenimi iptal edilmiş olmadıkça).</p>

<e:element-syntax name="text">
  <e:in-category name="yönerge"/>
  <e:attribute name="disable-output-escaping">
    <e:constant value="yes"/>
    <e:constant value="no"/>
  </e:attribute>
  <e:text/>
</e:element-syntax>

<p>Dizgesel sabit veri karakterleri bir <code>xsl:text</code> elemanında satır katlamaya konu olabilir. Satır katlama, boşluk karakterleri ayıklanarak (bkz, <specref ref="strip"/>) değiştirilebilir fakat karakterlerin XSLT işlemci tarafından sonradan nasıl elde edileceğine bir etkisi yoktur.</p>

<note><p><code>xml:lang</code> ve <code>xml:space</code> öznitelikleri XSLT tarafından özel olarak ele alınmaz. Özellikle,</p>

<ulist>
<item><p>hedefte, <code>xml:lang</code> veya <code>xml:space</code> özniteliklerinin üretmesi gerekeni belirtmek doğrudan doğruya biçembent yazarının sorumluluğundadır;</p></item>

<item><p>XSLT isim-alanındaki bir elemanda <code>xml:lang</code> veya <code>xml:space</code> özniteliğinin belirtilmesi bu özniteliklerin hedefte de yer almasına sebep olmayacaktır.</p></item>
</ulist>
</note>

</div2>


<div2>
<head>İşlem Yönergelerinin Oluşturulması</head>


<e:element-syntax name="processing-instruction">
  <e:in-category name="yönerge"/>
  <e:attribute name="name" required="yes">
    <e:attribute-value-template>
      <e:data-type name="kısa-ad"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:model name="örneklenim"/>
</e:element-syntax>

<p><code>xsl:processing-instruction</code> elemanı, bir işlem yönergesi düğümü oluşturmak için nesnelleştirilir. <code>xsl:processing-instruction</code> elemanının içeriği işlem yönergesi düğümünün dizgesel değeri için bir örneklenimdir. <code>xsl:processing-instruction</code> elemanının, işlem yönergesi düğümünün ismini belirtmek için kullanımı zorunlu olan bir <code>name</code> özniteliği vardır. <code>name</code> özniteliğinin değeri bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır.</p>

<p>Örneğin, bu:</p>

<eg><![CDATA[<xsl:processing-instruction name="xml-stylesheet">
  href="book.css" type="text/css"
</xsl:processing-instruction>]]></eg>

<p>şu işlem yönergesini oluşturacaktır:</p>

<eg><![CDATA[<?xml-stylesheet href="book.css" type="text/css"?>]]></eg>

<p><code>name</code> özniteliğinin nesnelleştirilmesinin sonucu olan dizgenin hem bir <xnt href="&XMLNames;#NT-NCName">KısaAd</xnt> hem de bir <xnt href="&XML;#NT-PITarget">PIHedefi</xnt> olmaması bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, işlem yönergesini hedef ağaca ekleyerek hatayı ortadan kaldırabilir.</p>

<note><p>Bu, <code>xsl:processing-instruction</code> elemanının bir XML bildirimi çıktılamakta kullanılamaması demektir. Yerine <code>xsl:output</code> elemanı kullanılmalıdır (bkz, <specref
ref="output"/>).</p></note>

<p><code>xsl:processing-instruction</code> içeriğinin nesnelleştirilmesinin metin düğümünden farklı bir düğüm oluşturması bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, hatalı düğümleri içerikleriyle birlikte yoksayarak hatayı ortadan kaldırabilir.</p>

<p><code>xsl:processing-instruction</code> içeriğinin nesnelleştirilme sonucunun <code>?&gt;</code> dizgesini içermesi bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, <code>?</code> karakteri ile <code>&gt;</code> karakteri arasına bir boşluk yerleştirerek hatayı ortadan kaldırabilir.</p>

</div2>

<div2>
<head>Açıklamaların Oluşturulması</head>

<e:element-syntax name="comment">
  <e:in-category name="yönerge"/>
  <e:model name="örneklenim"/>
</e:element-syntax>

<p><code>xsl:comment</code> elemanı hedef ağaçta bir açıklama oluşturmak için nesnelleştirilir. <code>xsl:comment</code> elemanının içeriği, açıklama düğümünün dizgesel değeri için bir örneklenimdir.</p>

<p>Örneğin, bu:</p>

<eg><![CDATA[<xsl:comment>This file is automatically generated. Do not edit!</xsl:comment>]]></eg>

<p>şu açıklamayı üretecektir:</p>

<eg><![CDATA[<!--This file is automatically generated. Do not edit!-->]]></eg>

<p><code>xsl:comment</code> içeriğinin nesnelleştirilmesinin metin düğümünden farklı bir düğüm oluşturması bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, hatalı düğümleri içerikleriyle birlikte yoksayarak hatayı ortadan kaldırabilir.</p>

<p><code>xsl:comment</code> içeriğinin nesnelleştirilme sonucunun <code>--</code> dizgesini içermesi bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, <code>-</code> karakterlerinin arasına bir boşluk yerleştirerek hatayı ortadan kaldırabilir.</p>

</div2>

<div2 id="copying">
<head>Kopyalama</head>

<e:element-syntax name="copy">
  <e:in-category name="yönerge"/>
  <e:attribute name="use-attribute-sets">
    <e:data-type name="nitelikli-adlar"/>
  </e:attribute>
  <e:model name="örneklenim"/>
</e:element-syntax>

<p><code>xsl:copy</code> elemanı, geçerli düğümün kopyalanmasını kolaylaştıran bir yol sağlar. <code>xsl:copy</code> elemanının nesnelleştirilmesi, geçerli düğümün bir kopyasını oluşturur. Geçerli düğümün isim-alanı düğümleri de kendiliğinden kopyalanır, fakat öznitelikler ve düğümün çocukları kendiliklerinden kopyalanmazlar. <code>xsl:copy</code> elemanının içeriği, oluşturulan düğümün öznitelikleri ve çocukları için bir örneklenimdir; içerik sadece özniteliklerin ve çocukların sahip olabileceği türdeki düğümler için nesnelleştirilir (örn, kök düğüm ve eleman düğümleri için).</p>

<p><code>xsl:copy</code> elemanı bir <code>use-attribute-sets</code> özniteliğine sahip olabilir (bkz, <specref
ref="attribute-sets"/>). Bu sadece eleman düğümleri kopyalanırken kullanılır.</p>

<p>Kök düğüm özel olarak ele alınır, çünkü hedef ağacın kök düğümü örtük olarak oluşturulur. Geçerli düğüm, kök düğüm olduğu takdirde, <code>xsl:copy</code> bir kök düğüm oluşturmayacak, sadece içerik örneklenimini kullanacaktır.</p>

<p>Örneğin, özdeşlik dönüşümü <code>xsl:copy</code> kullanılarak şöyle yazılabilir:</p>

<eg><![CDATA[<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>]]></eg>

<p>Geçerli düğüm bir öznitelik olduğunda, geçerli düğümle aynı isimde bir öznitelik oluşturmak için <code>xsl:attribute</code> kullanmak bir hata olsaydı, <code>xsl:copy</code> kullanmak da bir hata olurdu  (bkz, <specref ref="creating-attributes"/>).</p>

<p>Aşağıdaki örnekte, <code>xml:lang</code> özniteliklerinin nasıl kolayca kaynaktan hedefe kopyalanabileceği gösterilmiştir. Bir biçembent şöyle bir isimli örneklenim tanımlasaydı:</p>

<eg><![CDATA[<xsl:template name="apply-templates-copy-lang">
 <xsl:for-each select="@xml:lang">
   <xsl:copy/>
 </xsl:for-each>
 <xsl:apply-templates/>
</xsl:template>]]></eg>

<p><code>xml:lang</code> özniteliği kopyalanmak istendiği takdirde, bunun yerine:</p>

<eg><![CDATA[<xsl:apply-templates/>]]></eg>

<p>bu daha basit olurdu:</p>

<eg><![CDATA[<xsl:call-template name="apply-templates-copy-lang"/>]]></eg>

<p>Geçerli düğüm bir isim-alanı düğümü olduğu takdirde, kopyalama işlemi, hedef ağaçta içerilen düğüme bir isim-alanı düğümü ekler. Bunun içerildiği düğümün bir eleman olmaması bir hatadır; gerçeklenimler hatayı raporlayabilir veya isim-alanı düğümünü yoksayabilir. Bir isim-alanı düğümünü bir elemana çocuklarını veya özniteliklerini eklendikten sonra eklemek bir hatadır; gerçeklenimler hatayı raporlayabilir veya isim-alanı düğümünü yoksayabilir. Bir isim-alanı düğümünü, aynı isimde bir isim-alanına zaten sahip olan bir elemana eklemek, her iki isim-alanı düğümü aynı <xtermref href="&XPath;#dt-string-value">dizgesel değer</xtermref>e sahip olmadıkça (bu durumda yineleme yok sayılır), bir hatadır. Bir isim-alanı düğümünü bir elemana eklemek, eğer isim-alanı düğümünün ismi tanımsızsa ve eleman bir tanımsız isim-alanı tanım-yerine sahipse, bir hatadır.</p>

</div2>

<div2>
<head>Üretilen Metnin Hesaplanması</head>

<p>Bir örneklenim içinde, <code>xsl:value-of</code> elemanı üretilen metni hesaplamakta kullanılabilir; örneğin, metni kaynak ağaçtan çekip çıkarmak veya bir değişkene bir değer yerleştirmek için kullanılabilir. <code>xsl:value-of</code> elemanı bunu, <code>select</code> özniteliğine değer olarak belirtilen bir <termref def="dt-expression">ifade</termref> ile yapar. İfadeler ayrıca, birebir hedef elemanların öznitelikleri içinde kaşlı ayraçlarla (<code>{}</code>) sarmalanarak kullanılabilir.</p>

<div3 id="value-of">
<head>Metnin <code>xsl:value-of</code> ile Üretilmesi</head>

<e:element-syntax name="value-of">
  <e:in-category name="yönerge"/>
  <e:attribute name="select" required="yes">
    <e:data-type name="dizgesel-ifade"/>
  </e:attribute>
  <e:attribute name="disable-output-escaping">
    <e:constant value="yes"/>
    <e:constant value="no"/>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p><code>xsl:value-of</code> elemanı hedef ağaçta bir metin düğümü oluşturmak için nesnelleştirilir. Belirtilmesi zorunlu olan <code>select</code> özniteliği bir ifade olup değerlendirilmesiyle elde edilen nesne <xfunction>string</xfunction> işlevi çağrılmış gibi bir dizgeye dönüştürülür. Bu dizge oluşturulan metin düğümünün dizgesel değerini belirtir. Dizge boşsa bir metin düğümü oluşturulmaz. Oluşturulan metin düğümü bitişik metin düğümü komşuları ile birleşir.</p>

<p><code>xsl:copy-of</code> elemanı bir düğüm kümesini bir dizgeye dönüştürmeksizin hedef ağaca kopyalamak için kullanılabilir. Daha fazla bilgi için <specref ref="copy-of"/> bölümüne bakınız.</p>

<p>Aşağıdaki örnekte, <code>adı</code> ve <code>soyadı</code> özniteliklerine sahip <code>kişi</code> elemanından bir HTML paragrafı oluşturulmaktadır. Paragraf geçerli düğümün <code>adı</code> ve <code>soyadı</code> özniteliklerinin değerleri arasında bir boşluk karakteri içerecektir.</p>

<eg><![CDATA[<xsl:template match="kişi">
  <p>
   <xsl:value-of select="@adı"/>
   <xsl:text> </xsl:text>
   <xsl:value-of select="@soyadı"/>
  </p>
</xsl:template>]]></eg>

<p>Başka bir örnek olarak aşağıda aynı paragraf <code>kişi</code> elemanının <code>adı</code> ve <code>soyadı</code> çocuk elemanlarının dizgesel değerleri ile oluşturulmaktadır.</p>

<eg><![CDATA[<xsl:template match="kişi">
  <p>
   <xsl:value-of select="adı"/>
   <xsl:text> </xsl:text>
   <xsl:value-of select="soyadı"/>
  </p>
</xsl:template>]]></eg>

<p>Aşağıdaki örnekte, her <code>işlem</code> elemanı için metnin başına işlemin güvenlik seviyesini belirten bir paragraf yerleştirilmektedir. Burada, işleme uygulanacak güvenlik seviyesinin <code>işlem</code> elemanının kendisindeki veya bir üstselindeki <code>güvenlik</code> özniteliğinden elde edildiği kabul edilmektedir. Eğer birden fazla <code>güvenlik</code> özniteliği belirtilmişse işleme en yakın elemanın <code>güvenlik</code> özniteliğinin değeri kullanılmaktadır.</p>

<eg><![CDATA[<xsl:template match="işlem">
  <fo:block>
    <xsl:value-of select="ancestor-or-self::*[@güvenlik][1]/@güvenlik"/>
  </fo:block>
  <xsl:apply-templates/>
</xsl:template>]]></eg>

</div3>

<div3 id="attribute-value-templates">
<head>Öznitelik Değeri Örneklenimleri</head>

<p><termdef id="dt-attribute-value-template" term="Öznitelik Değeri Örneklenimi">Bir <term>öznitelik değeri örneklenimi</term> olarak yorumlanan bir öznitelik değerinde, örneğin, bir birebir hedef elemanın bir özniteliğinin değeri olarak, bir <termref def="dt-expression">ifade</termref> kaşlı ayraçlar (<code>{}</code>) arasında kullanılabilir</termdef>. Öznitelik değeri örneklenimi, kaşlı ayraçlarla birlikte ifadenin yerine, ifadenin değerlendirilme sonucunun <xfunction>string</xfunction> işlevi çağrılmış gibi bir dizgeye dönüştürülmesiyle elde edilen dizge yerleştirilerek nesnelleştirilir. Bir XSLT biçembendinde bir öznitelik değerindeki kaşlı ayraçların, öznitelik özellikle, bir öznitelik değeri örneklenimi olarak yorumlanan bir öznitelik olmadıkça özel bir anlamı yoktur; eleman sözdizimi özetinde, böyle özniteliklerin değeri kaşlı ayraçlarla sarmalanır.</p>

<note><p>Tüm öznitelikler birer öznitelik değeri örneklenimi olarak yorumlanmaz. Değeri bir ifade veya örüntü olan öznitelikler, <termref def="dt-top-level">tepe-seviyeden</termref> elemanların öznitelikleri ve isimli XSLT nesnelerine atıfta bulunan öznitelikler öznitelik değeri örneklenimi olarak yorumlanmaz. Ek olarak, <code>xmlns</code> öznitelikleri de öznitelik değeri örneklenimi olarak yorumlanmaz;  çünkü yorumlansaydı XML İsim-alanları Önergesi ile uyumluluk sağlanamazdı.</p></note>

<p>Aşağıdaki örnekte, kaynak içeriğindeki  <code>photograph</code> elemanından bir <code>img</code> hedef elemanı oluşturulmaktadır; <code>img</code> elemanının <code>src</code> özniteliğinin değeri <code>image-dir</code> değişkeninin değerinden ve <code>photograph</code> elemanının <code>href</code> çocuğunun dizgesel değerinden hesaplanmakta; <code>width</code> özniteliğinin değeri ise, <code>photograph</code> elemanının <code>size</code> çocuğunun <code>width</code> özniteliğinin değerinden hesaplanmaktadır:</p>

<eg><![CDATA[<xsl:variable name="image-dir">/images</xsl:variable>

<xsl:template match="photograph">
<img src="{$image-dir}/{href}" width="{size/@width}"/>
</xsl:template>]]></eg>

<p>biçembendi ile</p>

<eg><![CDATA[<photograph>
  <href>headquarters.jpg</href>
  <size width="300"/>
</photograph>]]></eg>

<p>kaynak içeriğinden hedef ağaçta</p>

<eg><![CDATA[<img src="/images/headquarters.jpg" width="300"/>]]></eg>

<p>düğümü elde edilmektedir.</p>
<p>Bir öznitelik değeri örneklenimi nesnelleştirildiğinde, ifadeyi sarmalayan kaşlı ayraçlar çifter çifter ise bunlar birer kaşlı ayraç olarak ele alınır. Bir öznitelik değeri örnekleniminin ifadesi içinde bir kapatan kaşlı ayracın yer alıp, ifadenin dışında kapatan kaşlı ayracın bulunmaması bir hatadır. Bir ifadedeki bir <xnt href="&XPath;#NT-Literal">DizgeselSabit</xnt> içinde yer alan bir kapatan kaşlı ayraç ifadeyi sonlandıran kaşlı ayraç olarak ele alınmaz.</p>

<p>İfadelerin içindeki kaşlı ayraçlar tanınmazlar. Örneğin, buna</p>

<eg role="error"><![CDATA[<a href="#{id({@ref})/title}">]]></eg>

<p>izin verilmez. Yerine bunu kullanın:</p>

<eg><![CDATA[<a href="#{id(@ref)/title}">]]></eg>

</div3>

</div2>

<div2 id="number">
<head>Numaralama</head>

<e:element-syntax name="number">
  <e:in-category name="yönerge"/>
  <e:attribute name="level">
    <e:constant value="single"/>
    <e:constant value="multiple"/>
    <e:constant value="any"/>
  </e:attribute>
  <e:attribute name="count">
    <e:data-type name="örüntü"/>
  </e:attribute>
  <e:attribute name="from">
    <e:data-type name="örüntü"/>
  </e:attribute>
  <e:attribute name="value">
    <e:data-type name="sayısal-ifade"/>
  </e:attribute>
  <e:attribute name="format">
    <e:attribute-value-template>
      <e:data-type name="dizge"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="lang">
    <e:attribute-value-template>
      <e:data-type name="ad-dizgeciği"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="letter-value">
    <e:attribute-value-template>
      <e:constant value="alphabetic"/>
      <e:constant value="traditional"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="grouping-separator">
    <e:attribute-value-template>
      <e:data-type name="karakter"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:attribute name="grouping-size">
    <e:attribute-value-template>
      <e:data-type name="sayı"/>
    </e:attribute-value-template>
  </e:attribute>
  <e:empty/>
</e:element-syntax>

<p><code>xsl:number</code> elemanı hedef ağaca biçimli bir numara yerleştirmek için kullanılır. Yerleştirilecek numara bir ifade tarafından belirtilir. Bu <termref def="dt-expression">ifade</termref>yi <code>value</code> özniteliği içerir. İfadenin değerlendirilmesinin sonucu olan nesne <xfunction>number</xfunction> işlevi çağrılmış gibi bir sayıya dönüştürülür. Sayının NaN, sonsuz veya 0.5'ten küçük olması bir hatadır; bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, sayıyı <xfunction>string</xfunction> işlevi çağrılmış gibi dizgeye dönüştürüp hedef ağaca yerleştirerek hatayı ortadan kaldırmalıdır. Aksi takdirde, sayı bir tamsayıya yuvarlanır ve <specref ref="convert"/> bölümünde belirtilen öznitelikler kullanılarak bir dizgeye dönüştürülür; bu bağlamda, bu özniteliklerin her birinin değeri, bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır. Dönüşümden sonra, elde edilen dizge hedef ağaca yerleştirilir. Örneğin, aşağıda sıralı bir listenin üyeleri numaralanmaktadır:</p>

<eg><![CDATA[<xsl:template match="items">
  <xsl:for-each select="item">
    <xsl:sort select="."/>
    <p>
      <xsl:number value="position()" format="1. "/>
      <xsl:value-of select="."/>
    </p>
  </xsl:for-each>
</xsl:template>]]></eg>

<p>Eğer <code>value</code> özniteliği belirtilmezse, <code>xsl:number</code> elemanı geçerli düğümün kaynak ağacındaki konumuna karşılık gelen sayıyı bir numara olarak hedef ağaca yerleştirir. Aşağıdaki öznitelikler geçerli düğümün nasıl numaralanacağını denetler:</p>

<ulist>

<item><p><code>level</code> özniteliğinde kaynak ağacın hangi seviyelerde ele alınacağı belirtilir; değer olarak <code>single</code>, <code>multiple</code> veya <code>any</code> belirtilebilir. <code>single</code> değeri öntanımlı değerdir.</p></item>

<item><p><code>count</code> özniteliğinin değeri, bu seviyelerdeki hangi düğümlerin sayılacağını belirten bir örüntüdür. <code>count</code> özniteliği belirtilmezse, geçerli düğümle aynı türdeki düğümle eşleşen örüntü öntanımlı değerdir; eğer geçerli düğüm bir genişletilmiş isme sahipse, öntanımlı örüntü geçerli düğümle aynı genişletilmiş isme sahip düğümle eşleşecektir.</p></item>

<item><p><code>from</code> özniteliğinin değeri, sayımın nereden başlatılacağını belirten bir örüntüdür.</p></item>

</ulist>

<p>Ek olarak, <specref ref="convert"/> bölümünde belirtilen öznitelikler, <code>value</code> özniteliğinin belirtilmesi halinde sayıyı dizgeye dönüştürmek için kullanılırlar.</p>

<p><code>xsl:number</code> elemanı önce <code>level</code>, <code>count</code> ve <code>from</code> özniteliklerini kullanarak bir liste oluşturur:</p>

<ulist>

<item><p><code>level="single"</code> olduğu takdirde, <code>count</code>  örüntüsü ile eşleşen <xtermref href="&XPath;#axis-ancestor-or-self"><code>ancestor-or-self</code></xtermref> dalındaki ilk düğüme gidilir ve <code>count</code> örüntüsü ile eşleşen üstselin büyük kardeşinin numarası artı bir değerini içeren tek üyeli bir liste oluşturulur. Eğer böyle bir üstsel yoksa, boş liste oluşur. Eğer <code>from</code> özniteliği belirtilmişse, sadece, <code>from</code> örüntüsüyle eşleşen en yakın üstselin astsalları olan üstseller araştırılır. Burada büyük kardeşlerle, <xtermref href="&XPath;#axis-preceding-sibling"><code>preceding-sibling</code></xtermref> dalı kastedilmektedir.</p></item>

<item><p><code>level="multiple"</code> olduğu takdirde, geçerli düğümün, sırada kendisinin de bulunduğu, tüm üstsellerinin belge sırasına göre bir listesi oluşturulur; sonra, bu listeden <code>count</code> örüntüsü ile eşleşen düğümler seçilir; ardından, listenin her düğümüne, <code>count</code> örüntüsü ile eşleşen düğümün büyük kardeşinin numarası artı bir değeri eşlenir. Eğer <code>from</code> özniteliği belirtilmişse, sadece, <code>from</code> örüntüsüyle eşleşen en yakın üstselin astsalları olan üstseller araştırılır. Burada büyük kardeşlerle, <xtermref href="&XPath;#axis-preceding-sibling"><code>preceding-sibling</code></xtermref> dalı kastedilmektedir.</p></item>

<item><p><code>level="any"</code> olduğu takdirde, geçerli düğümü içeren kümeye ait olan düğümler artı <code>count</code> örüntüsü ile eşleşen düğümler artı belgedeki sıraya göre geçerli düğümden önce yer alan her seviyeden (isim-alanı ve öznitelik düğümleri hariç) tüm düğümlerin sayısı toplamını  içeren tek üyeli bir liste oluşturulur (başka bir deyişle, <xtermref href="&XPath;#axis-preceding"><code>preceding</code></xtermref> ve <xtermref href="&XPath;#axis-ancestor-or-self"><code>ancestor-or-self</code></xtermref> dallarının üyelerinin hepsi). Hiç eşleşen düğüm yoksa, boş liste oluşur. <code>from</code> özniteliği belirtilmişse, sadece geçerli düğümden önceki ilk düğümden sonraki düğümlerin <code>from</code> örüntüsü ile eşleştiği varsayılır.</p></item>

</ulist>

<p>Bundan sonra, numara listesi <specref ref="convert"/> bölümünde belirtilen öznitelikler kullanılarak bir dizgeye dönüştürülür; bu bağlamda, bu özniteliklerin her birinin değeri, bir <termref def="dt-attribute-value-template">öznitelik değeri örneklenimi</termref> olarak yorumlanır. Dönüşümden sonra, elde edilen dizge hedef ağaca yerleştirilir.</p>

<p>Aşağıda numaralı bir listenin üyeleri numaralanmaktadır:</p>

<eg><![CDATA[<xsl:template match="ol/item">
  <fo:block>
    <xsl:number/><xsl:text>. </xsl:text><xsl:apply-templates/>
  </fo:block>
<xsl:template>]]></eg>

<p>Aşağıdaki iki kural <code>başlık</code> elemanlarını numaralayacaktır. Anabölüm ve ekbölümlerden oluşan bir belgede, anabölümlerin ve ekbölümlerin bölümlere, bu bölümlerinde altbölümlere sahip olduğu düşünülerek, anabölümler 1, 2, 3; ekbölümler A, B, C; anabölüm bölümleri 1.1, 1.2, 1.3; ve ekbölüm bölümlerinin de A.1, A.2, A.3 biçiminde numaralanacakları düşünülmüştür.</p>

<eg><![CDATA[<xsl:template match="başlık">
  <fo:block>
     <xsl:number level="multiple"
                 count="anabölüm|bölüm|altbölüm"
                 format="1.1 "/>
     <xsl:apply-templates/>
  </fo:block>
</xsl:template>

<xsl:template match="ekbölüm//başlık" priority="1">
  <fo:block>
     <xsl:number level="multiple"
                 count="ekbölüm|bölüm|altbölüm"
                 format="A.1 "/>
     <xsl:apply-templates/>
  </fo:block>
</xsl:template>]]></eg>

<p>Aşağıdaki örnekte bir an