XSL Dönüşümleri (XSLT) Sürüm 1.0 | ||
---|---|---|
Önceki | Yukarı | Sonraki |
<!-- Grubu: tepe-seviyeden-eleman -->
<!-- Grubu: yönerge -->
<xsl:variable
name = nitelikli-ad
| eleman |
<!-- Grubu: tepe-seviyeden-eleman -->
<xsl:param
name = nitelikli-ad
| eleman |
Bir değişken bir değere atanmış bir isimdir. Bir değişken atanmış bir değer ifadelerden elde edilen herhangi bir türde nesne olabilir. Değişken atamakta kullanılabilen iki eleman vardır: xsl:variable ve xsl:param. Farkları, xsl:param elemanının değişkene sadece bir öntanımlı değer atamasıdır; xsl:param elemanının yer aldığı örneklenim veya biçembent çağrıldığında değergeçler kullanıldıkları yerlere öntanımlı değer geçirirler.
xsl:variable ve xsl:param elemanlarının ikisinin de değişkenin ismi olarak kullanıldığından belirtilmesi zorunlu birer name
özniteliği vardır. name
özniteliğinin değeri Nitelikli Adlar bölümünde açıklandığı gibi bir NitelAd
a genişletilir.
Bu değişken atama elemanlarından herhangi biri için, içinde atamanın görünür olduğu bir biçembent ağacı bölümü mevcuttur. Bir ifadenin etki alanındaki değişken atamaları, bu ifadenin yer aldığı biçembentte değişkenin görünür olduğu yerdeki atamalardan oluşur.
Değişkenler ifade diline yeni bir veri türü ekler.
Bu yeni türe hedef ağaç bölümü adı verilir. Bir değişken dört temel XPath türünden (dizge, sayı, mantıksal değer ve düğüm kümesi) başka bir hedef ağaç bölümü türünde de atanabilir. Bir hedef ağaç bölümü, hedef ağacın bir bölümü olarak ifade edilir ve tek bir kök düğüm içeren bir düğüm kümesine eşdeğer tarzda ele alınır. Bununla birlikte, bir hedef ağaç bölümünde izin verilen işlemler bir düğüm kümesinde izin verilen işlemlerin bir altkümesidir. Böyle bir işleme sadece bir dizge üzerinde izin verilen bir işlemse izin verilir (dizge üzerindeki ilk işlem, dizgeyi bir mantıksal değere veya sayıya dönüştürme işlemi olabilir). Özellikle, hedef ağaç bölümü üzerinde /
, //
ve []
işleçlerinin kullanımına izin verilmez. Bir hedef ağaç bölümünde izin verilen işlemlerden biri her uygulanışında, eşdeğeri bir düğüm kümesinde uygulandığı gibi uygulanır.
Bir hedef ağaç bölümü hedef ağaca kopyalanırken (bkz, Değişken ve Değergeçlerin Değerlerinin xsl:copy-of ile Kullanımı), eşdeğer düğüm kümesinde kök düğümün çocukları olan tüm düğümler hedef ağaca aynı sırayla kopyalanırlar.
İfadeler, hedef ağaç bölümü türündeki değerleri sadece, hedef ağaç bölümü türündeki değişkenlere atıfta bulunarak veya bir hedef ağaç bölümü döndüren bir eklenti işlevini çağırarak ya da değeri bir hedef ağaç bölümü olan bir sistem gerecini getirerek döndürürler.
Bir değişken atama elemanı bir değişken değerini üç yoldan biriyle belirtebilir.
Değişken atama elemanı bir select
özniteliğine sahipse, bu özniteliğin değeri, değerlendirilmesinin sonucunda değişkenin değeri haline gelecek olan bir nesnenin elde edileceği bir ifade olmalıdır. Bu durumda, değişken atama elemanının içeriği boş olmalıdır.
Değişken atama elemanı bir select
özniteliğine sahip değilse ve eleman boş olmayan bir içeriğe sahipse (yani, değişken atama elemanı bir veya daha fazla sayıda çocuk elemana sahipse), değeri değişken atama elemanının içeriği belirler. Değişken atama elemanının içeriği, değişkenin değerini vermek üzere nesnelleştirilecek olan örneklenimdir. Değeri, çocukları örneklenimin nesnelleştirilmesiyle üretilen düğümlerden oluşan tek bir kök düğüm içeren bir düğüm kümesine eşdeğer bir hedef ağaç bölümüdür. Hedef ağaç bölümündeki düğümlerin temel tanım-yeri (URI), değişken atama elemanının temel tanım-yeridir.
Örneklenim nesnelleştirilerek elde edilen düğümlerin bir üyesinin bir öznitelik düğümü veya bir isim-alanı düğümü olması, bir kök düğüm böyle bir çocuk düğüme sahip olamayacağından, bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, öznitelik veya isim-alanı düğümünü hedef ağaca eklemeyerek hatayı ortadan kaldırabilir.
Değişken atama elemanı boş bir içeriğe sahipse ve bir select
özniteliği de belirtilmemişse, değişkenin değeri bir boş dizge olacaktır. Bu bakımdan,
<xsl:variable name="x"/>
buna eşdeğerdir:
<xsl:variable name="x" select="''"/>
<xsl:variable name="n">2</xsl:variable> ... <xsl:value-of select="item[$n]"/>
Bu örneklenim, ilk item elemanının değerini çıktılayacaktır. Sebebi, n
değişkeninin bir sayıya değil bir hedef ağaç bölümüne atanmış olmasıdır. Şöyle,
<xsl:variable name="n" select="2"/> ... <xsl:value-of select="item[$n]"/>
veya şöyle yapılabilirdi:
<xsl:variable name="n">2</xsl:variable> ... <xsl:value-of select="item[position()=$n]"/>
<xsl:param name="x" select="/.."/>
<!-- Grubu: yönerge --> <xsl:copy-of select = ifade /> | eleman |
xsl:copy-of elemanı hedef ağaca bir hedef ağaç bölümü yerleştirmekte kullanılabilir ve bunu yapmak için xsl:value-of elemanının yaptığı gibi (bkz, Metnin xsl:value-of ile Üretilmesi) önce bir dizgeye dönüşüm gerekmez. Bir ifade içeren bir select
özniteliğinin belirtilmesi zorunludur. İfadenin değerlendirme sonucunun bir hedef ağaç bölümü olması durumunda, bölümün tümü hedef ağaca kopyalanır. Sonucun bir düğüm kümesi olması durumunda ise, kümenin düğümleri belgedeki sıralarına göre hedef ağaca kopyalanırlar; bir eleman düğümünün kopyalanması, elemanın kendinden başka, isim-alanı düğümlerinin, öznitelik düğümlerinin ve elemanın çocuk düğümlerinin de kopyalanmasına sebep olur; bir kök düğüm ise, çocuklarının kopyalanmasıyla kopyalanmış olur. Bir öznitelik veya isim-alanının kopyalanmasında, xsl:copy ile kopyalamada geçerli olan kurallar burada da aynen geçerlidir (bkz, Kopyalama). Sonucun ne bir düğüm kümesi ne de hedef ağaç bölümü olması durumunda, tıpkı xsl:value-of elemanının yaptığı gibi, sonuç bir dizgeye dönüştürüldükten sonra hedef ağaca yerleştirilir.
xsl:variable ve xsl:param elemanlarının her ikisi de tepe-seviyeden elemanlar olabilir. Bir tepe-seviyeden değişken atama elemanı, her yerde (başka bir atama tarafından geçersiz kılınmadıkça) görünür olan bir genel değişken bildirir. Bir tepe-seviyeden xsl:param elemanı biçembende bir değergeç bildirir; XSLT, biçembente değergeç aktarımı ile ilgili bir mekanizma tanımlamaz. Bir biçembent aynı isme sahip birden fazla değişken ataması içeriyorsa, ithal önceliği en yüksek atama kullanılır. Bir biçembendin aynı ithal önceliği ile aynı isme atama yapan birden fazla değişken ataması içermesi bir hatadır. Tepe seviyede, değişken değeri belirten bir ifade veya örneklenim, kaynak belgenin kök düğümünü işlemekte kullanılan bağlama eşdeğer bir bağlamla değerlendirilir: geçerli düğüm kaynak belgenin kök düğümü olup geçerli düğüm kümesi kaynak belgenin sadece kök düğümünü içeren bir listedir. Eğer bir örneklenim veya ifade bir y genel değişkenine atıf yapan bir x genel değişkeni belirtiyorsa, y değişkeninin değerinin x değişkeninin değerinden önce hesaplanması gerekir. Tüm genel değişken tanımları açısından bunun olması olanaksızsa bu bir hatadır; başka bir deyişle, atamanın bitmeyen bir döngüye yol açabilecek şekilde hesaplanması bir hatadır.
Burada, bir öznitelik değeri örnekleniminden atıfta bulunulan para-font-size
isimli bir genel değişken bildirilmektedir:
<xsl:variable name="para-font-size">12pt</xsl:variable> <xsl:template match="para"> <fo:block font-size="{$para-font-size}"> <xsl:apply-templates/> </fo:block> </xsl:template>
xsl:variable ve xsl:param elemanlarına tepe seviyede izin verildiği gibi örneklenimlerin içinde de izin verilir. xsl:variable elemanına, bir örneklenimin içinde bir yönergeye izin verilen her yerde izin verilir. Bu durumda, atama, xsl:fallback yönergeleri hariç tüm küçük kardeşlerin astsallarına görünür olacaktır. Atamanın xsl:variable elemanının kendisi için görünür olmayacağına dikkat ediniz.
xsl:param elemanına bir xsl:template elemanının başlangıcında bir çocuk olarak bulunmasına izin verilir. Bu bağlamda, atama, xsl:fallback yönergeleri hariç tüm küçük kardeşlerin astsallarına görünür olacaktır. Atamanın xsl:param elemanının kendisi için görünür olmayacağına dikkat ediniz.
Eğer bir atamanın görünür olduğu yerde başka bir atama yer alıyorsa ve bu atamalar aynı isme yapılmışsa, yeni atama o bağlamda eskisini geçersiz bırakır. Aynı örneklenim içinde xsl:variable veya xsl:param elemanlarınca yapılmış atamaların birbirlerini geçersizleştirmeleri bir hatadır. Bir örneklenim içinde, xsl:variable veya xsl:param elemanlarınca yapılmış atamaların tepe-seviyeden yapılmış atamaları geçersizleştirmeleri hata değildir. Bu durumda, bir tepe-seviyeden atama, başka bir atamanın kendisini geçersizleştirdiği bir biçembent bölümünde görünür olmayacaktır. Bu bakımdan şu bir hatadır:
<xsl:template name="foo"> <xsl:param name="x" select="1"/> <xsl:variable name="x" select="2"/> </xsl:template>
Ama, buna izin verilir:
<xsl:param name="x" select="1"/> <xsl:template name="foo"> <xsl:variable name="x" select="2"/> </xsl:template>
<xsl:variable name="x" select="'value'"/>
ile
final Object x = "value";
aynı anlambilgisine sahiptir. XSLT, böyle bir Java atama işlecinin bir eşdeğerini sağlamaz:
x = "value";
Çünkü bir belgeyi başından sonuna kadar, betik benzeri bir yöntemden başka bir yöntemle işleyen bir gerçeklenimi oluşturmak daha zor olurdu.
<xsl:with-param
name = nitelikli-ad
| eleman |
Değergeçler örneklenimlere xsl:with-param elemanı kullanılarak aktarılırlar. Belirtilmesi zorunlu olan name
özniteliği değergeçin (atamanın değerini değiştirdiği değişken) ismini belirtir. name
özniteliğinin değeri Nitelikli Adlar bölümünde belirtildiği gibi yorumlanan bir NitelAd
dır. xsl:with-param elemanına xsl:call-template ve xsl:apply-templates elemanlarının her ikisinde de izin verilir. Bir xsl:call-template veya xsl:apply-templates elemanının birden fazla aynı isimli xsl:with-param elemanı içermesi bir hatadır. Değergeç değeri xsl:variable ve xsl:param elemanlarında kullanılan yöntemle belirtilir. xsl:with-param ile belirtilen değerin hesaplanmasında kullanılan geçerli düğüm ve geçerli düğüm listesi, içinde kullanıldığı xsl:call-template veya xsl:apply-templates elemanlarınınkilerle aynıdır. x için bir xsl:param elemanına sahip olmayan bir örneklenime bir x değergecini aktarmak hata değildir; değergeç basitçe yoksayılır.
Bu örnekte, sayı biçimini denetleyen bir değergeçe sahip numbered-block
isminde bir örneklenim, değergeçine değer aktarılarak çağrılmaktadır:
<xsl:template name="numbered-block"> <xsl:param name="format">1. </xsl:param> <fo:block> <xsl:number format="{$format}"/> <xsl:apply-templates/> </fo:block> </xsl:template> <xsl:template match="ol//ol/li"> <xsl:call-template name="numbered-block"> <xsl:with-param name="format">a. </xsl:with-param> </xsl:call-template> </xsl:template>
Önceki | Yukarı | Sonraki |
Sıralama | Bir Linux Kitaplığı Sayfası | Ek İşlevler |