XSL Dönüşümleri (XSLT) Sürüm 1.0 | ||
---|---|---|
Önceki | Yukarı | Sonraki |
Bu bölümde hedef ağaç üzerinde düğümleri doğrudan oluşturan yönergeler açıklanmaktadır.
Bir örneklenimde, XSLT isim-alanına ait olmadığı gibi bir ek eleman da (bkz, Eklenti Elemanlar) olmayan bir eleman aynı genişletilmiş isimle 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.
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 (http://www.w3.org/1999/XSL/Transform
), eklenti isim-alanı olarak bildirilmiş bir isim-alanı tanım-yeri (bkz, Eklenti Elemanlar) 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, xsl:stylesheet elemanının exclude-result-prefixes
özniteliği veya birebir hedef elemanın xsl:exclude-result-prefixes ö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. exclude-result-prefixes
veya xsl:exclude-result-prefixes ö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 #default
dizgesi dahil edilerek dışlanmış bir isim-alanı olarak belirtilebilir. Bir isim-alanının dışlanmış bir isim-alanı olarak atanması, exclude-result-prefixes
veya xsl:exclude-result-prefixes özniteliğini taşıyan eleman biçembendin kök düğümü olmak üzere, biçembentin alt ağacı içinde etkilidir; kökü bir xsl:stylesheet elemanı olan bir alt ağaç, xsl:stylesheet elemanının çocukları tarafından içerilmiş veya ithal edilmiş bir biçembent içermez.
exclude-result-prefixes
özniteliğinde belirtilmesi hedef ağaçta gereksiz isim-alanı bildirimlerini ortadan kaldıracaktır.Bir birebir hedef elemanın bir özniteliğinin değeri bir öznitelik değeri örneklenimi olarak yorumlanır: kaşlı ayraçlar ({}
) içinde belirtilmiş ifadeler içerir.
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 birebir isim-alanı tanım-yeri denir. Bu şunlara uygulanır:
biçembentte bir birebir hedef elemanın genişletilmiş isminde bir isim-alanı tanım-yerine,
biçembentte bir birebir hedef elemanında belirtilen bir özniteliğin genişletilmiş isminde bir isim-alanı tanım-yerine,
biçembentte bir birebir hedef elemanındaki bir isim-alanı düğümünün dizgesel değerine.
<!-- Grubu: tepe-seviyeden-eleman --> <xsl:namespace-alias stylesheet-prefix = önek | "#default" result-prefix = önek | "#default" /> | eleman |
Bir biçembent xsl:namespace-alias elemanını başka bir isim-alanı tanım-yeri için takma ad olan bir isim-alanı tanım yerini bildirmek için kullanabilir. Bir birebir isim-alanı tanım-yeri 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. xsl:namespace-alias elemanı, result-prefix
özniteliği tarafından belirtilen öneke bağlı isim-alanı tanım-yeri için bir takma ad olan stylesheet-prefix
özniteliği tarafından belirtilen öneke bağlı isim-alanı tanım-yerini bildirir. Bu bakımdan, stylesheet-prefix
özniteliği biçembentte görünecek isim-alanı tanım-yerini, result-prefix
ö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ı (xmlns
ile bildirilen) bir önek yerine #default
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 ithal önceliği 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.
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,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"> <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>
biçembendi aşağıdaki biçimdeki bir belgeden bir biçembent üretecektir:
<elements> <block>p</block> <block>h1</block> <block>h2</block> <block>h3</block> <block>h4</block> </elements>
<!-- Grubu: yönerge --> <xsl:element name = { nitelikli-ad } | eleman |
xsl:element elemanı hesaplanmış bir isimle bir eleman oluşturmayı mümkün kılar. Oluşturulacak elemanın genişletilmiş ismi, zorunlu olan name
ile seçimlik olan namespace
öznitelikleri ile belirtilir. xsl:element elemanının içeriği oluşturulan elemanın çocukları ve öznitelikleri için bir örneklenimdir.
name
özniteliği bir öznitelik değeri örneklenimi olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizgenin bir NitelAd
olmaması bir hatadır. Bir XSLT işlemci hatayı raporlayabilir; raporlamıyorsa, xsl:element elemanının nesnelleştirilmesinin sonucunu, baştaki öznitelik düğümleri hariç, xsl:element elemanının içeriğinin nesnelleştirilmesiyle oluşturulan düğüm silsilesi yaparak hatayı ortadan kaldırmalıdır. namespace
özniteliği kullanılmamışsa, NitelAd
, xsl:element elemanı için etkili olan isim-alanı bildirimleri (öntanımlı isim-alanı bildirimi dahil) kullanılarak bir genişletilmiş isme genişletilir.
Eğer namespace
özniteliği kullanılmışsa, o da ayrıca bir öznitelik değeri örneklenimi 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. NitelAd
'ın yerel kısmı, oluşturulan elemanın genişletilmiş isminin yerel kısmı olarak kullanılan name
özniteliği tarafından belirtilir.
XSLT işlemciler, oluşturulan elemanın XML olarak çıktılanması için kullanılan öneki seçerken, name
özniteliğinde belirtilen NitelAd
ın önekini kullanılır yapabilirler; yine de,bunun böyle olması gerekli değildir.
<!-- Grubu: yönerge -->
<xsl:attribute
name = { nitelikli-ad }
| eleman |
xsl:attribute elemanı biçembentteki birebir hedef elemanlar veya xsl:element gibi yönergeler tarafından oluşturulan hedef elemanlara öznitelikler eklemek için kullanılır. Özniteliğin genişletilmiş ismi belirtilmesi zorunlu name
özniteliği ile seçimlik namespace
özniteliği tarafından oluşturulur. Bir xsl:attribute elemanının nesnelleştirilmesi, hedef eleman düğümüne bir öznitelik düğümü ekler. xsl:attribute elemanının içeriği oluşturulan özniteliğin değeri için bir örneklenimdir.
name
özniteliği bir öznitelik değeri örneklenimi olarak yorumlanır. Öznitelik değeri örnekleniminin nesnelleştirilmesinin sonucu olan dizgenin bir NitelAd
olmaması veya xmlns
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. namespace
özniteliği kullanılmamışsa, NitelAd
, xsl:attribute elemanı için etkili olan isim-alanı bildirimleri (öntanımlı isim-alanı bildirimi hariç) kullanılarak bir genişletilmiş isme genişletilir.
Eğer namespace
özniteliği kullanılmışsa, o da ayrıca bir öznitelik değeri örneklenimi 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. NitelAd
'ın yerel kısmı, oluşturulan özniteliğin genişletilmiş isminin yerel kısmı olarak kullanılan name
özniteliği tarafından belirtilir.
XSLT işlemciler, oluşturulan özniteliğin XML olarak çıktılanması için kullanılan öneki seçerken, name
özniteliğinde belirtilen NitelAd
ın önekini kullanılır yapabilirler; yine de,bunun böyle olması gerekli değildir. Bu bakımdan,
<xsl:attribute name="xmlns:xsl" namespace="herneyse"> http://www.w3.org/1999/XSL/Transform </xsl:attribute>
hatalı olmasa da, bu işlem çıktıda bir isim-alanı bildirimi ile sonuçlanmayacaktır.
Bir özniteliğin bir elemana eklenmesi elemanın mevcut özniteliklerinden genişletilmiş ismi aynı olanını değiştirir.
Aşağıdakilerin hepsi hata ile sonuçlanır:
Bir elemana çocukları eklendikten sonra bir özniteliğin eklenmesi; gerçeklenimler bu hatayı bildirebilir ya da özniteliği yoksayabilirler.
Bir özniteliğin bir eleman olmayan bir düğüme eklenmesi; gerçeklenimler bu hatayı bildirebilir ya da özniteliği yoksayabilirler.
xsl:attribute 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.
<xsl:attribute name="a">x y</xsl:attribute>
kodu şu çıktıyı üretecektir:
a="x
y"
(veya eşdeğeri bir karakter gönderimi ile). XML çıktı asla şöyle olamaz:
a="x y"
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.
<!-- Grubu: tepe-seviyeden-eleman -->
<xsl:attribute-set
name = nitelikli-ad
| eleman |
xsl:attribute-set elemanı bir isimli öznitelik kümesi tanımlar. name
özniteliği öznitelik kümesinin ismini belirtir. name
özniteliğinin değeri bir NitelAd
olup Nitelikli Adlar bölümünde açıklandığı gibi yorumlanır. xsl:attribute-set elemanının içeriği kümedeki öznitelikleri belirten sıfır veya daha fazla sayıda xsl:attribute elemanından oluşur.
Öznitelik kümeleri, bir xsl:element, xsl:copy (bkz, Kopyalama) veya xsl:attribute-set elemanının use-attribute-sets
özniteliğinde belirtilerek kullanılırlar. use-attribute-sets
özniteliğinin değeri öznitelik kümesi isimlerinin boşluk ayraçlı listesidir. Belirtilen her isim, Nitelikli Adlar bölümünde açıklandığı gibi yorumlanan birer NitelAd
olarak belirtilir. Bir use-attribute-sets
ö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 (use-attribute-sets
özniteliğinde belirtilen öznitelik isimleriyle aynı sırada) bir xsl:attribute elemanı belirtilmesine eşdeğerdir. use-attribute-sets
özniteliklerinin xsl:attribute-set elemanlarında doğrudan veya dolaylı olarak kendilerini öznitelik kümesi olarak kullanmaları bir hatadır.
Öznitelik kümeleri ayrıca bir birebir hedef elemanda da bir xsl:use-attribute-sets özniteliği belirterek kullanılabilir. xsl:use-attribute-sets özniteliğinin değeri öznitelik kümesi isimlerinin boşluk ayraçlı bir listesidir. xsl:use-attribute-sets özniteliği tarafından belirtilen xsl:attribute elemanlarından sonra ama asıl xsl:attribute elemanlarından önce yer alan xsl:attribute elemanları tarafından belirtilmiş gibi ele alınan birebir hedef elemanın kendi üzerindeki öznitelikler tarafından belirtilen ek kurallarla birlikte xsl:element üzerindeki use-attribute-sets
özniteliği ile xsl:use-attribute-sets özniteliği aynı etkiye sahiptir. Bu bakımdan, bir birebir hedef eleman için, bir xsl:use-attribute-sets ö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, xsl:attribute 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.
Bir xsl:attribute-set elemanınındaki xsl:attribute 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 use-attribute-sets
veya xsl:use-attribute-sets ö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, Değişkenler ve Değergeçler) olduğunu belirleyen use-attribute-sets
veya xsl:use-attribute-sets özniteliğini taşıyan elemandan ziyade biçembentteki xsl:attribute elemanının konumudur; bu bakımdan, sadece tepe-seviyeden xsl:variable ve
xsl:param elemanları ile bildirilen değişken ve değergeçler görünürdür.
Aşağıdaki örnekte title-style
isimli bir öznitelik kümesi oluşturulmakta ve bir örneklenim kuralında kullanılmaktadır:
<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>
Bir özniteliğin aynı genişletilmiş isimle çok sayıda tanımı varsa bunlar birleştirilir. Yüksek ithal önceliğine sahip bir öznitelik, düşük ithal önceliğindeki 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 ithal öncelikli 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 xsl:attribute-set elemanının use-attribute-sets
özniteliğinde yer alan her öznitelik kümesi ismi için, aynı isimdeki bir öznitelik kümesinin bütün tanımlarının, use-attribute-sets
özniteliği, eşdeğeri olan xsl:attribute çocuk elemanlarıyla değiştirilmeden önce birleştirilmesi gerekir. Bir xsl:attribute-set elemanının use-attribute-sets
özniteliğinin eşdeğeri olan xsl:attribute çocuk elemanlarıyla, bu xsl:attribute-set elemanı, aynı genişletilmiş isimli başka bir xsl:attribute-set elemanı ile birleştirilmeden önce değiştirilmesi gerekir. xsl:attribute-set elemanları aynı genişletilmiş isimli olanlarla birleştirildiğinde, bir use-attribute-sets
özniteliğine değiştirilmek için eklenen her xsl:attribute çocuk elemanı, biçembentte gerçekten bir çocuk eleman olarak belirtilmiş gibi ele alınır.
Bir örneklenim ayrıca metin düğümleri de içerebilir. Bir örneklenimdeki her metin düğümünün boşluk karakterleri Boşluk Ayıklama 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.
Metnin ağaç seviyesinde işlendiğine dikkat ediniz. Bu bakımdan, bir örneklenimdeki <
imlenimi biçembent ağacında <
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 (<
imlenimi -veya eşdeğeri karakter gönderimi- ile gösterilecek olan) <
karakterini içeren bir metin düğümü oluşturacaktır (Çıktı Önceleniminin İptal Edilmesi bölümünde belirtildiği gibi çıktı öncelenimi iptal edilmiş olmadıkça).
<!-- Grubu: yönerge -->
<xsl:text
| eleman |
Dizgesel sabit veri karakterleri bir xsl:text elemanında satır katlamaya konu olabilir. Satır katlama, boşluk karakterleri ayıklanarak (bkz, Boşluk Ayıklama) değiştirilebilir fakat karakterlerin XSLT işlemci tarafından sonradan nasıl elde edileceğine bir etkisi yoktur.
xml:lang
ve xml:space
öznitelikleri XSLT tarafından özel olarak ele alınmaz. Özellikle,xml:lang
veya xml:space
özniteliklerinin üretmesi gerekeni belirtmek doğrudan doğruya biçembent yazarının sorumluluğundadır;xml:lang
veya xml:space
özniteliğinin belirtilmesi bu özniteliklerin hedefte de yer almasına sebep olmayacaktır.<!-- Grubu: yönerge --> <xsl:processing-instruction name = { kısa-ad } > <!-- İçeriği: örneklenim --> </xsl:processing-instruction> | eleman |
xsl:processing-instruction elemanı, bir işlem yönergesi düğümü oluşturmak için nesnelleştirilir. xsl:processing-instruction elemanının içeriği işlem yönergesi düğümünün dizgesel değeri için bir örneklenimdir. xsl:processing-instruction elemanının, işlem yönergesi düğümünün ismini belirtmek için kullanımı zorunlu olan bir name
özniteliği vardır. name
özniteliğinin değeri bir öznitelik değeri örneklenimi olarak yorumlanır.
Örneğin, bu:
<xsl:processing-instruction name="xml-stylesheet"> href="book.css" type="text/css" </xsl:processing-instruction>
şu işlem yönergesini oluşturacaktır:
<?xml-stylesheet href="book.css" type="text/css"?>
name
özniteliğinin nesnelleştirilmesinin sonucu olan dizgenin hem bir KısaAd
hem de bir PIHedefi
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.
xsl:processing-instruction 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.
xsl:processing-instruction içeriğinin nesnelleştirilme sonucunun ?>
dizgesini içermesi bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, ?
karakteri ile >
karakteri arasına bir boşluk yerleştirerek hatayı ortadan kaldırabilir.
<!-- Grubu: yönerge --> <xsl:comment> <!-- İçeriği: örneklenim --> </xsl:comment> | eleman |
xsl:comment elemanı hedef ağaçta bir açıklama oluşturmak için nesnelleştirilir. xsl:comment elemanının içeriği, açıklama düğümünün dizgesel değeri için bir örneklenimdir.
Örneğin, bu:
<xsl:comment>This file is automatically generated. Do not edit!</xsl:comment>
şu açıklamayı üretecektir:
<!--This file is automatically generated. Do not edit!-->
xsl:comment 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.
xsl:comment içeriğinin nesnelleştirilme sonucunun --
dizgesini içermesi bir hatadır. Bir XSLT işlemci bu hatayı raporlayabilir; raporlamıyorsa, -
karakterlerinin arasına bir boşluk yerleştirerek hatayı ortadan kaldırabilir.
<!-- Grubu: yönerge -->
<xsl:copy
| eleman |
xsl:copy elemanı, geçerli düğümün kopyalanmasını kolaylaştıran bir yol sağlar. xsl:copy 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. xsl:copy 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).
xsl:copy elemanı bir use-attribute-sets
özniteliğine sahip olabilir (bkz, İsimli Öznitelik Kümeleri). Bu sadece eleman düğümleri kopyalanırken kullanılır.
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, xsl:copy bir kök düğüm oluşturmayacak, sadece içerik örneklenimini kullanacaktır.
Örneğin, özdeşlik dönüşümü xsl:copy kullanılarak şöyle yazılabilir:
<xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template>
Geçerli düğüm bir öznitelik olduğunda, geçerli düğümle aynı isimde bir öznitelik oluşturmak için xsl:attribute kullanmak bir hata olsaydı, xsl:copy kullanmak da bir hata olurdu (bkz, Özniteliklerin xsl:attribute ile Oluşturulması).
Aşağıdaki örnekte, xml:lang
özniteliklerinin nasıl kolayca kaynaktan hedefe kopyalanabileceği gösterilmiştir. Bir biçembent şöyle bir isimli örneklenim tanımlasaydı:
<xsl:template name="apply-templates-copy-lang"> <xsl:for-each select="@xml:lang"> <xsl:copy/> </xsl:for-each> <xsl:apply-templates/> </xsl:template>
xml:lang
özniteliği kopyalanmak istendiği takdirde, bunun yerine:
<xsl:apply-templates/>
bu daha basit olurdu:
<xsl:call-template name="apply-templates-copy-lang"/>
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ı dizgesel değere 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.
Bir örneklenim içinde, xsl:value-of 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. xsl:value-of elemanı bunu, select
özniteliğine değer olarak belirtilen bir ifade ile yapar. İfadeler ayrıca, birebir hedef elemanların öznitelikleri içinde kaşlı ayraçlarla ({}
) sarmalanarak kullanılabilir.
<!-- Grubu: yönerge -->
<xsl:value-of
select = dizgesel-ifade
| eleman |
xsl:value-of elemanı hedef ağaçta bir metin düğümü oluşturmak için nesnelleştirilir. Belirtilmesi zorunlu olan select
özniteliği bir ifade olup değerlendirilmesiyle elde edilen nesne string
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.
xsl:copy-of 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 Değişken ve Değergeçlerin Değerlerinin xsl:copy-of ile Kullanımı bölümüne bakınız.
Aşağıdaki örnekte, adı
ve soyadı
özniteliklerine sahip kişi
elemanından bir HTML paragrafı oluşturulmaktadır. Paragraf geçerli düğümün adı
ve soyadı
özniteliklerinin değerleri arasında bir boşluk karakteri içerecektir.
<xsl:template match="kişi"> <p> <xsl:value-of select="@adı"/> <xsl:text> </xsl:text> <xsl:value-of select="@soyadı"/> </p> </xsl:template>
Başka bir örnek olarak aşağıda aynı paragraf kişi
elemanının adı
ve soyadı
çocuk elemanlarının dizgesel değerleri ile oluşturulmaktadır.
<xsl:template match="kişi"> <p> <xsl:value-of select="adı"/> <xsl:text> </xsl:text> <xsl:value-of select="soyadı"/> </p> </xsl:template>
Aşağıdaki örnekte, her işlem
elemanı için metnin başına işlemin güvenlik seviyesini belirten bir paragraf yerleştirilmektedir. Burada, işleme uygulanacak güvenlik seviyesinin işlem
elemanının kendisindeki veya bir üstselindeki güvenlik
özniteliğinden elde edildiği kabul edilmektedir. Eğer birden fazla güvenlik
özniteliği belirtilmişse işleme en yakın elemanın güvenlik
özniteliğinin değeri kullanılmaktadır.
<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>
Bir öznitelik değeri örneklenimi olarak yorumlanan bir öznitelik değerinde, örneğin, bir birebir hedef elemanın bir özniteliğinin değeri olarak, bir ifade kaşlı ayraçlar ({}
) arasında kullanılabilir. Öznitelik değeri örneklenimi, kaşlı ayraçlarla birlikte ifadenin yerine, ifadenin değerlendirilme sonucunun string
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.
xmlns
öznitelikleri de öznitelik değeri örneklenimi olarak yorumlanmaz; çünkü yorumlansaydı XML İsim-alanları Önergesi ile uyumluluk sağlanamazdı.Aşağıdaki örnekte, kaynak içeriğindeki photograph
elemanından bir img
hedef elemanı oluşturulmaktadır; img
elemanının src
özniteliğinin değeri image-dir
değişkeninin değerinden ve photograph
elemanının href
çocuğunun dizgesel değerinden hesaplanmakta; width
özniteliğinin değeri ise, photograph
elemanının size
çocuğunun width
özniteliğinin değerinden hesaplanmaktadır:
<xsl:variable name="image-dir">/images</xsl:variable> <xsl:template match="photograph"> <img src="{$image-dir}/{href}" width="{size/@width}"/> </xsl:template>
biçembendi ile
<photograph> <href>headquarters.jpg</href> <size width="300"/> </photograph>
kaynak içeriğinden hedef ağaçta
<img src="/images/headquarters.jpg" width="300"/>
düğümü elde edilmektedir.
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 DizgeselSabit
içinde yer alan bir kapatan kaşlı ayraç ifadeyi sonlandıran kaşlı ayraç olarak ele alınmaz.
İfadelerin içindeki kaşlı ayraçlar tanınmazlar. Örneğin, buna
<a href="#{id({@ref})/title}">
izin verilmez. Yerine bunu kullanın:
<a href="#{id(@ref)/title}">
<!-- Grubu: yönerge --> <xsl:number | eleman |
xsl:number elemanı hedef ağaca biçimli bir numara yerleştirmek için kullanılır. Yerleştirilecek numara bir ifade tarafından belirtilir. Bu ifadeyi value
özniteliği içerir. İfadenin değerlendirilmesinin sonucu olan nesne number
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ı string
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 Sayıdan Dizgeye Dönüşüm Öznitelikleri 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 öznitelik değeri örneklenimi 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:
<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>
Eğer value
özniteliği belirtilmezse, xsl:number 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:
level
özniteliğinde kaynak ağacın hangi seviyelerde ele alınacağı belirtilir; değer olarak single
, multiple
veya any
belirtilebilir. single
değeri öntanımlı değerdir.
count
özniteliğinin değeri, bu seviyelerdeki hangi düğümlerin sayılacağını belirten bir örüntüdür. count
ö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.
from
özniteliğinin değeri, sayımın nereden başlatılacağını belirten bir örüntüdür.
Ek olarak, Sayıdan Dizgeye Dönüşüm Öznitelikleri bölümünde belirtilen öznitelikler, value
özniteliğinin belirtilmesi halinde sayıyı dizgeye dönüştürmek için kullanılırlar.
xsl:number elemanı önce level
, count
ve from
özniteliklerini kullanarak bir liste oluşturur:
level="single"
olduğu takdirde, count
örüntüsü ile eşleşen ancestor-or-self
dalındaki ilk düğüme gidilir ve count
ö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 from
özniteliği belirtilmişse, sadece, from
ö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, preceding-sibling
dalı kastedilmektedir.
level="multiple"
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 count
örüntüsü ile eşleşen düğümler seçilir; ardından, listenin her düğümüne, count
örüntüsü ile eşleşen düğümün büyük kardeşinin numarası artı bir değeri eşlenir. Eğer from
özniteliği belirtilmişse, sadece, from
ö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, preceding-sibling
dalı kastedilmektedir.
level="any"
olduğu takdirde, geçerli düğümü içeren kümeye ait olan düğümler artı count
ö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, preceding
ve ancestor-or-self
dallarının üyelerinin hepsi). Hiç eşleşen düğüm yoksa, boş liste oluşur. from
özniteliği belirtilmişse, sadece geçerli düğümden önceki ilk düğümden sonraki düğümlerin from
örüntüsü ile eşleştiği varsayılır.
Bundan sonra, numara listesi Sayıdan Dizgeye Dönüşüm Öznitelikleri 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 öznitelik değeri örneklenimi olarak yorumlanır. Dönüşümden sonra, elde edilen dizge hedef ağaca yerleştirilir.
Aşağıda numaralı bir listenin üyeleri numaralanmaktadır:
<xsl:template match="ol/item"> <fo:block> <xsl:number/><xsl:text>. </xsl:text><xsl:apply-templates/> </fo:block> <xsl:template>
Aşağıdaki iki kural başlık
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.
<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>
Aşağıdaki örnekte bir anabölüm içindeki notlar numaralanmaktadır:
<xsl:template match="not"> <fo:block> <xsl:number level="any" from="anabölüm" format="(1) "/> <xsl:apply-templates/> </fo:block> </xsl:template>
Aşağıdaki örnekte HTML'deki H4
elemanları üç parçalı bir madde başlığı ile numaralanmaktadır:
<xsl:template match="H4"> <fo:block> <xsl:number level="any" from="H1" count="H2"/> <xsl:text>.</xsl:text> <xsl:number level="any" from="H2" count="H3"/> <xsl:text>.</xsl:text> <xsl:number level="any" from="H3" count="H4"/> <xsl:text> </xsl:text> <xsl:apply-templates/> </fo:block> </xsl:template>
Aşağıdaki öznitelikler bir numara listesinin dizgeye dönüşümünü denetlemekte kullanılırlar. Numaralar sıfırdan büyük tamsayılardır. Özniteliklerin hepsi isteğe bağlıdır.
Ana öznitelik format
olup öntanımlı değeri 1
'dir. format
özniteliği bir dizgecik dizisine bölünmüştür; buradaki her dizgecik ya olası en çok sayıda abecesayısal karakterden ya da olası en çok sayıda abecesayısal olmayan karakterden oluşur. Abecesayısal, Unicode kategorileri Nd, Nl, No, Lu, Ll, Lt, Lm veya Lo olan karakterler anlamındadır. Abecesayısal dizgecikler (biçim dizgecikleri) listedeki her numara için kullanılacak biçimi belirtirler. Eğer ilk dizgecik bir abecesayısal olmayan dizgecikse, oluşturulacak dizge bu dizgecikle başlar; eğer son dizgecik bir abecesayısal olmayan dizgecikse, oluşturulacak dizge bu dizgecikle biter. İki biçim dizgesi arasında yer alan abecesayısal olmayan dizgecikler, listedeki numaraları birbirine bağlamakta kullanılan ayraçlardır. n'inci biçim dizgesi listedeki n'inci numarayı biçimlemekte kullanılır. Eğer biçim dizgeciklerinden daha fazla numara varsa, son biçim dizgeciği kalan numaraları biçimlemekte kullanılır. Hiç biçim dizgeciği yoksa, bütün numaraları biçimlemek için biçim dizgeciği olarak 1
kullanılır. Biçim dizgeciği 1 sayısını göstermekte kullanılacak dizgeciği belirtir. İlkinden sonraki her numara, önceki numaradan ayraç dizgeciği ile ayrılır. Bir ayraç dizgeciği yoksa . (nokta) kullanılır.
Biçim dizgecikleri, HTML 4.0'daki OL
elemanının type
özniteliği için izin verilen değerlerin bir üstkümesidir ve şöyle yorumlanır:
Eğer bir biçim dizgeciğinin son karakterinin onluk rakam değeri 1 (Unicode karakter varlığı veritabanında belirtildiği gibi) ise ve sondan önceki karakterlerin Unicode değeri son karakterin Unicode değerinden 1 azsa o zaman bu dizgeciğe göre biçimlenen herhangi bir sayının onluk gösterimi en az biçim dizgeciği uzunluğundadır. Bu bakımdan, 1
biçim dizgeciği 1 2 ... 10 11 12 ...
dizisini üretirken, 01
biçim dizgeciği 01 02 ... 09 10 11 12 ... 99 100 101
dizisini üretecektir.
A
biçim dizgeciği A B C ... Z AA AB AC...
dizisini üretir.
a
biçim dizgeciği a b c ... z aa ab ac...
dizisini üretir.
i
biçim dizgeciği i ii iii iv v vi vii viii ix x ...
dizisini üretir.
I
biçim dizgeciği I II III IV V VI VII VIII IX X ...
dizisini üretir.
Bunlar dışında herhangi bir biçim dizgeciği o dizgecikle başlayan bir dizi üretir. Bu numaralama dizisini desteklemeyen gerçeklenimler 1
biçim dizgeciğini kullanmalıdır.
Bir abecesayısal dizi numaralanırken, lang
özniteliği hangi dilin elifbasının kullanılacağını belirtir; xml:lang
[XML] ile aynı aralıktaki değerler kullanılır; hiç lang
değeri belirtilmemişse, dil, sistem ortamından saptanır. Gerçeklenimciler hangi dili desteklediklerini belgelemelidirler.
letter-value
özniteliği, harflerin kullanıldığı numaralama dizileri arasındaki belirsizliği ortadan kaldırır. Çoğu dilde, harflerin kullanıldığı numaralama dizileri başlıca iki çeşittir. Birinde, harflere abecesel sıraya göre sayısal değer atanırken, diğerinde sayısal değerler dildeki geleneksel anlamlandırmaya göre atanırlar. İngilizce'de bu iki çeşide ait biçim dizgecikleri a
ve i
'dir. Bazı dillerde dizilerin ilk üyesi aynıdır ve dolayısıyla biçim dizgeciği tek başına belirleyici olmaz. alphabetic
değeri abecesel sıralamayı, traditional
değeri ise diğer sıralamayı belirtir. Eğer letter-value
özniteliği belirtilmemişse, belirsizliğin nasıl çözümleneceği gerçeklenime bağlıdır.
grouping-separator
özniteliği onluk numaralama dizilerinde gruplama ayracı (binler ayracı gibi) olarak kullanılacak bir ayraç belirtilebilmesini ve isteğe bağlı olan grouping-size
özniteliği ise ile gruplama miktarının (normalde 3'tür) belirtilebilmesini mümkün kılar. Örneğin, grouping-separator=","
ve grouping-size="3"
belirtimi 1,000,000
biçiminde bir sayı üretecektir. Bu ikisinden biri tek başına kullanılırsa yoksayılır.
Bazı dönüşüm belirtimi örnekleri:
format="ア"
Katakana numaralaması belirtir
format="イ"
Katakana numaralamasını "iroha" sıralamasıyla belirtir
format="๑"
Tay rakamlı numaralama belirtir
format="א" letter-value="traditional"
İbranice "geleneksel" numaralama belirtir
format="ა" letter-value="traditional"
Gürcü tarzı numaralama belirtir
format="α" letter-value="traditional"
"klasik" Yunan numaralaması belirtir
format="а" letter-value="traditional"
eski Slav tarzı numaralama belirtir
Önceki | Yukarı | Sonraki |
İsimli Örneklenimler | Bir Linux Kitaplığı Sayfası | Yineleme |