Özet
XPath, bir XML belgenin parçalarını adreslemek için XSLT ve XPointer tarafından kullanılmak üzere tasarlanmış bir dildir.
Belgenin Durumu
Bu belge W3C üyeleri ve diğer ilgili taraflarca gözden geçirilmiş ve W3C Yönetimi tarafından bir W3C
Bu belirtimin bilinen hatalarının listesi
Bu belirtimle ilgili yorumlarınızı
adresine gönderebilirsiniz; YorumlarınBu belirtimin fiilen geçerli (İng: normative) tek sürümü İngilizce sürümü olmakla birlikte bilgilendirici (İng: non-normative) mahiyette olarak bu belgenin başka dillere
Şu anki W3C yayınlarının ve bu teknik raporların en son sürümleri http://www.w3.org/TR/ adresindeki
Bu belge,
İçindekiler
Ekler
1 Giriş
XPath, XSL Dönüşümleri [
Adresleme için kullanımına ek olarak, eşleştirme işlemlerinde (bir düğümün bir örüntüyle eşleşip eşleşmediğinin sınanması gibi) kullanılabilen doğal bir altkümeye sahip olacak şekilde tasarlanmıştır. XPath'ın bu kullanımı
XPath bir XML belgeyi düğümlerden oluşan bir ağaç olarak modeller. Eleman düğümleri, öznitelik düğümleri ve metin düğümleri gibi farklı düğüm türleri vardır. XPath her düğüm türü için bir
XPath'ta başat sözdizimsel oluşum ifadedir. Bir ifade,
İfade- düğüm-kümesi (yinelenmemiş düğümlerden oluşan sırasız düğüm kolleksiyonu)
- mantıksal ifade (doğru veya yanlış)
- sayı (bir gerçel sayı)
- dizge (UCS karakterleri dizisi)
İfade, bağlamla ilişkili olarak değerlendirilir. XSLT ve XPointer, kendileri tarafından kullanılan XPath ifadeleri için bağlamın nasıl saptanacağını kendileri belirtirler. Bağlam şunlardan oluşur:
- bir düğüm (bağlamsal düğüm)
- sıfırdan farklı ve pozitif bir tamsayı çifti (bağlamsal sıra ve bağlamsal boyut)
- bir değişken bağıntıları kümesi
- bir işlev kütüphanesi
- ifadenin etki alanı içindeki isim-alanı bildirimleri kümesi
Bağlamsal konum daima bağlamsal boyuttan küçük veya ona eşittir.
Değişken bağıntıları, değişken isimleri değişken değerlerine eşlenerek oluşur. Bir değişkenin değeri bir nesne olup, bu nesne, bir ifade için olası türlerden biri olabileceği gibi burada belirtilmemiş ilave türlerden biri de olabilir.
İşlev kütüphanesi işlev isimleri işlevlere eşlenerek oluşur. Her işlev sıfır veya daha fazla argüman alır ve tek bir sonuçla döner. Bu belirtim, tüm XPath gerçeklenimlerinin desteklemesi gereken temel bir işlev kütüphanesi tanımlar (bkz,
İsim-alanı bildirimleri, önekler isim-alanı tanım-yerlerine eşlenerek oluşur.
Bir alt ifadeyi değerlendirmekte kullanılan değişken bağıntıları, işlev kütüphanesi ve isim-alanı bildirimleri, daima bu ifadeyi içeren ifadeyi değerlendirmekte kullanılanlarla aynıdır. Bir alt ifadeyi değerlendirmekte kullanılan bağlamsal düğüm, bağlamsal konum ve bağlamsal boyut bazan bu ifadeyi içeren ifadeyi değerlendirmekte kullanılanlardan farklıdır. Bazı ifade çeşitleri bağlamsal düğümü değiştirir; bağlamsal konumu ve bağlamsal boyutu sadece dayanaklar değiştirir (bkz,
XPath ifadeleri çoğunlukla XML özniteliklerinde görülür. Bu bölümde belirtilen dilbilgisi öznitelik değerine XML normalleştirmesinden sonra uygulanır. Örneğin, dilbilgisi < karakterini kullanıyorsa, bunun XML belgede < olarak gözükmemesi, XML 1.0 kurallarına göre öncelenmesi gerekir (< olarak verilmesi gerekir). İfadelerin içinde, dizgesel sabitler, öznitelik değerleri için yapıldığı gibi, tek veya çift tırnak içine alınırlar. XML işlemcinin ifadedeki tırnak karakterlerini öznitelik değerini sonlandıran tırnak karakteri olarak algılamaması için ifade içindeki tırnak karakterleri karakter gönderimleri olarak girilmelidir (" veya ' gibi). Başka bir yöntem de, XML özniteliğin değeri çift tırnak içine alınmışsa, ifade içinde tek tırnak kullanmak veya değer tek tırnak içine alınmışsa, ifade içinde çift tırnak kullanmaktır.
Önemli ifade çeşitlerinden biri konumsal yoldur. Bir konumsal yol bağlamsal düğüme göreli olarak bir düğüm kümesini seçer. İfadenin konumsal yol olduğu durumda değerlendirme sonucu, konumsal yol tarafından seçilen düğümleri içeren düğüm kümesidir. Konumsal yollar düğüm kümelerini süzmekte kullanılan ifadeleri dönüşümlü olarak içerebilir. Konumsal yollar
KonumsalYolAşağıdaki sözdizimi tanımları içindeki
NitelAdKısaAd tanım terimleri [B ise [İfadeler çözümlenirken, önce karakter dizgelerine bölünür, bunlar dizgecikler halinde çözümlendikten sonra da dizgecikler çözümlenir. Dizgecikler arasında boşluk karakterleri özgürce kullanılabilir. Dizgeciklere ayırma işlemi
Ek olarak, XML 1.0 ve XML Adları 1.0 gönderimleri daima kolaylık olsun diyedir. Bununla birlikte, bir gerçeklenim [
2 Konumsal Yollar
Konumsal yollar dildeki en genel sözdizimsel oluşum olmasa da, en önemli oluşumlardan olması nedeniyle öncelikle açıklanacaktır (bir
KonumsalYolİfadeHer konumsal yol düz mantıkla fakat oldukça ayrıntılı bir sözdizimi kullanılarak ifade edilebilir. Ayrıca, ortak durumların kısa ve özlü olarak ifade edilebilmesini mümkün kılan bazı sözdizimsel kısaltmalar da mevcuttur. Bu bölümde konumsal yolların anlamları, kısaltılmış sözdizimi kullanılmaksızın açıklanacaktır. Kısaltılmış sözdizimi daha sonra kısaltılmamış sözdizimine nasıl genişletileceği gösterilerek açıklanacaktır (bkz,
Kısaltılmamış sözdizimi kullanılan konumsal yol örnekleri:
child::parabağlamsal düğümünparaelemanlarından oluşan çocuklarını seçerchild::*bağlamsal düğümün bütün elemanlarından oluşan çocuklarını seçerchild::text()bağlamsal düğümün bütün metin düğümlerinden oluşan çocuklarını seçerchild::node()düğüm türleri ne olursa olsun bağlamsal düğümün bütün çocuklarını seçerattribute::namebağlamsal düğümünnameözniteliğini seçerattribute::*bağlamsal düğümün özniteliklerinin hepsini seçerdescendant::parabağlamsal düğümünparaelemanlarından oluşan astsallarını seçerancestor::divbağlamsal düğümün bütündivelemanlarından oluşan üstsellerini seçerancestor-or-self::divbağlamsal düğümün bütündivüstsellerinden başka eğer bağlamsal düğümün kendisi de birdivelemanı ise kendisini de seçerdescendant-or-self::parabağlamsal düğümün bütünparaastsallarından başka eğer bağlamsal düğümün kendisi de birparaelemanı ise kendisini de seçerself::parabağlamsal düğümün kendisi birparaelemanı ise kendisini seçer, yoksa hiçbir şey seçilirchild::chapter/descendant::parabağlamsal düğümünchapterçocuklarınınparaastsallarını seçerchild::*/child::parabağlamsal düğümün tümparatorunlarını seçer/belge kökünü seçer (daima belge elemanının ebeveynidir)/descendant::parabağlamsal düğümün yer aldığı belgenin tümparaelemanlarını seçer/descendant::olist/child::itembağlamsal düğümün yer aldığı belgenin tümolistelemanlarının tümitemçocuklarını seçer; başka bir deyişle belgenin ebeveynleriolistolan tümitemelemanlarını seçerchild::para[position()=1]bağlamsal düğümün ilkparaçocuğunu seçerchild::para[position()=last()]bağlamsal düğümün sonparaçocuğunu seçerchild::para[position()=last()-1]bağlamsal düğümün sondan bir öncekiparaçocuğunu seçerchild::para[position()>1]bağlamsal düğümün ilki hariç diğer bütünparaçocuklarını seçerfollowing-sibling::chapter[position()=1]bağlamsal düğümün sonraki ilkchapterkardeşini seçerpreceding-sibling::chapter[position()=1]bağlamsal düğümün önceki ilkchapterkardeşini seçer/descendant::figure[position()=42]belgenin 42.figureelemanını seçer/child::doc/child::chapter[position()=5]/child::section[position()=2]docbelge elemanının 5.chapterçocuğunun 2.sectionçocuğunu seçer (belgenin 5. kısmının 2. bölümünü seçer)child::para[attribute::type="warning"]bağlamsal düğümünparaçocuklarındantypeözniteliğinin değeriwarningolanları seçerchild::para[attribute::type='warning'][position()=5]bağlamsal düğümünparaçocuklarındantypeözniteliğinin değeriwarningolanların 5.sini seçerchild::para[position()=5][attribute::type="warning"]bağlamsal düğümün 5.paraçocuğunu eğertypeözniteliğinin değeriwarningise seçerchild::chapter[child::title='Introduction']bağlamsal düğümünchapterçocuklarındantitleçocuğunundizgesel değeriIntroductionolanlarını seçerchild::chapter[child::title]bağlamsal düğümünchapterçocuklarındantitleçocuğu olanları seçerchild::*[self::chapter or self::appendix]bağlamsal düğümünchapterveappendixçocuklarını seçerchild::*[self::chapter or self::appendix][position()=last()]bağlamsal düğümün sonchapterveyaappendixçocuğunu seçer
İki çeşit konumsal yol vardır: göreli konumsal yollar ve mutlak konumsal yollar.
Bir göreli konumsal yol, / imleriyle birbirlerinden ayrılmış bir veya daha fazla konumdan oluşur. Göreli konumsal yoldaki bu konumlar soldan sağa birlikte bir bütün oluştururlar. Her konumda bağlamsal düğüme göreli bir düğüm kümesi seçilir ve kümedeki her düğüm sonraki konumun bağlamsal düğümü olur. Örneğin, child::div/child::para yolu bağlamsal düğümün div elemanlarından oluşan çocuklarının para elemanlarından oluşan çocuklarını seçer, başka bir deyişle, bağlamsal düğümün ebeveynleri div olan para torunları seçilir.
Bir mutlak konumsal yol / iminden sonra gelen bir göreli konumsal yoldan oluşur. Tek başına / imi, bağlamsal düğümü içeren belgenin kök düğümünü seçer. Kök düğüm, bu imden sonra gelen göreli konumsal yolun ilk konumunun bağlamsal düğümü olur.
| [1] | KonumsalYol | ::= | |
| | |||
| [2] | MutlakKonumsalYol | ::= | '/' |
| | |||
| [3] | GöreliKonumsalYol | ::= | |
| | |||
| |
2.1 Konumlar
Bir konum üç parçadan oluşur:
konum ve bağlamsal düğüm tarafından seçilen düğümler arasındaki ilişkiyi belirten dallar,
konum tarafından seçilen düğümlerin
genişletilmiş isminive düğüm türünü belirten bir düğüm sınaması vekonum tarafından seçilen düğüm kümesini sadeleştirecek keyfi ifadelerin kullanıldığı sıfır veya daha çok sayıda dayanak.
Bir konumun sözdizimi, bir çift ikinokta imi ile ayrılmış bir dal ismi ve düğüm sınamasından sonra gelebilen sıfır veya daha çok sayıda köşeli ayraç içine alınmış ifadeden ibarettir. Örneğin, child::para[position()=1] konumunda, child dalın ismi, para sınanan düğüm ve [position()=1] ise dayanaktır.
Konum tarafından seçilen düğüm kümesi, daldaki düğüm sınamasının ilk düğüm kümesinden dayanaklardaki koşulları sağlayanların oluşturduğu düğüm kümesidir.
Düğümleri oluşturan ilk düğüm kümesi, dal tarafından belirtilen bağlamsal düğümle ilişkilidir ve sınanan düğüm tarafından belirtilen
descendant::para konumu, bağlamsal düğümün para elemanlarından oluşan tüm astsallarını seçer: descendant, ilk düğüm kümesindeki her düğümün, bağlamın astsalı olması gerektiğini belirtirken; para, ilk düğüm kümesindeki her düğümün, para isimli bir eleman olması gerektiğini belirtir. Olası dal çeşitleri ilk düğüm kümesi, yeni düğüm kümesini üretecek ilk dayanak tarafından süzülür; bu yeni düğüm kümesi de ikinci dayanak tarafından süzülür ve böyle devam eder. Elde edilen düğüm kümesi konum tarafından seçilen düğüm kümesi olur. Dal, her dayanağın değerlendirilişine etki eder, dolayısıyla bir dayanağın anlamı ait olduğu dala göre tanımlanır. Daha fazla bilgi için
| [4] | Konum | ::= | |
| | |||
| [5] | DalBelirteci | ::= | |
| |
2.2 Dallar
- Çevirmenin notu:
- Bu bölümdeki resimler bu belirtimin Almanca çevirisinden alıntıdırve açıklamaları şekillerle pekiştirmek için kullanılmışlardır.
Olası dallar:
childdalı, bağlamsal düğümün çocuklarını içerir.
descendantdalı, bağlamsal düğümün astsallarını içerir; bir astsal, bir çocuk veya bu çocuğun çocuğu veya benzeri olabilir. Bu bakımdan bir bağlamsal düğümün astsal düğümleri hiçbir zaman öznitelik veya başka isim-alanından düğümler içermez.
parentdalı, bağlamsal düğümünebeveynini içerir (varsa).
ancestordalı, bağlamsal düğümün üstsellerini içerir; bağlamsal düğümün üstselleri, bağlamsal düğümünebeveyni ve bu ebeveynin ebeveyni ve benzerlerinden oluşur; bu durumda üstsel dal, bağlamsal düğümün kendisi bir kök düğüm olmadıkça, daima kök düğümü içerecektir.
following-siblingdalı, bağlamsal düğümün tüm küçük kardeşlerini içerir; eğer bağlamsal düğüm bir öznitelik düğümü veya bir isim-alanı düğümü ise,following-siblingdalı boştur.
preceding-siblingdalı, bağlamsal düğümün tüm büyük kardeşlerini içerir;eğer bağlamsal düğüm bir öznitelik düğümü veya bir isim-alanı düğümü ise,preceding-siblingdalı boştur.
followingdalı, bağlamsal düğümün astsalları, öznitelik düğümleri ve isim-alanı düğümleri hariç, belgedeki sırasına göre bağlamsal düğümden sonra gelen tüm düğümleri içerir.
precedingdalı, bağlamsal düğümün üstselleri, öznitelik düğümleri ve isim-alanı düğümleri hariç, belgedeki sırasına göre bağlamsal düğümden önce gelen tüm düğümleri içerir.
attributedalı, bağlamsal düğümün özniteliklerini içerir; bağlamsal düğüm bir eleman olmadığı takdirde dal boş olacaktır.namespacedalı, bağlamsal düğümün isim-alanı düğümlerini içerir; bağlamsal düğüm bir eleman olmadığı takdirde dal boş olacaktır.selfdalı, sadece bağlamsal düğümün kendini içerir.
descendant-or-selfdalı, bağlamsal düğümün kendini ve astsallarını içerir.
ancestor-or-selfdalı, bağlamsal düğümün kendini ve üstsellerini içerir; bu durumda kök düğümü daima içerecektir.
- Not:
ancestor,descendant,following,precedingveselfdalları belgeyi bölümlere ayırır (öznitelik ve isim-alanı düğümleri hariç): Birbirlerini içermeksizin birlikte belgedeki tüm düğümleri içerirler.
| [6] | DalAdı | ::= | 'ancestor' |
| 'ancestor-or-self' | |||
| 'attribute' | |||
| 'child' | |||
| 'descendant' | |||
| 'descendant-or-self' | |||
| 'following' | |||
| 'following-sibling' | |||
| 'namespace' | |||
| 'parent' | |||
| 'preceding' | |||
| 'preceding-sibling' | |||
| 'self' |
2.3 Düğüm Sınamaları
Her dalın bir başat düğüm türü vardır. Eğer bir dal eleman içeriyorsa, başat düğüm türü elemandır; aksi takdirde, dalı içeren düğümün türüdür. Dolayısıyla,- Öznitelik dalı için başat düğüm türü özniteliktir.
- İsim-alanı dalı için başat düğüm türü isim-alanıdır.
- Diğer dallar için başat düğüm türü elemandır.
Bir
NitelAdNitelAd tarafından belirtilen child::para bağlamsal düğümün para elemanlarından oluşan çocuklarını seçer; eğer bağlamsal düğümün hiç para çocuğu yoksa bir boş düğüm kümesi seçecektir. attribute::href bağlamsal düğümün href özniteliğini seçer; eğer bağlamsal düğümün hiç href özniteliği yoksa bir boş düğüm kümesi seçecektir.Düğüm sınamasındaki bir
NitelAdxmlns ile bildirilen öntanımlı isim-alanının kullanılmaması dışında başlangıç ve bitiş etiketlerindeki eleman türü adları için yapılan genişletme ile aynıdır; eğer NitelAd bir öneke sahip değilse, isim-alanı tanım-yeri (URI) boş demektir (bu, öznitelik adlarını genişletme yöntemiyle aynıdır). NitelAd'ın bir öneki olup da ifade bağlamında hiç isim-alanı bildirimi olmaması bir hatadır.* düğüm sınaması başat düğüm türü ne olursa olsun doğru sonucunu verecektir. Örneğin, child::* konumu bağlamsal düğümün bütün eleman çocuklarını, attribute::* konumu ise bağlamsal düğümün bütün özniteliklerini içerecektir.
Bir düğüm sınaması
KısaAd:* biçiminde olabilir. Bu durumda, önek, bağlamsal isim-alanı bildirimi kullanılarak bir NitelAd nasıl genişletiliyorsa öyle genişletilecektir. Önek için ifade bağlamında hiç isim-alanı bildiriminin olmayışı bir hatadır. text() düğüm sınaması herhangi bir metin düğümü için doğru sonucunu verecektir. Örneğin, child::text() konumu bağlamsal düğümün metin düğümü çocuklarını içerecektir. Benzer şekilde, comment() düğüm sınaması herhangi bir açıklama düğümü için ve processing-instruction() düğüm sınaması herhangi bir işlem yönergesi düğümü için doğru sonucunu verecektir. processing-instruction() sınaması bir
DizgeselSabitDizgeselSabitnode() düğüm sınaması düğüm türü ne olursa olsun doğru sonucunu verecektir.
| [7] | DüğümSınaması | ::= | |
| | |||
| 'processing-instruction' '(' |
2.4 Dayanaklar
Bir dal ya ileri doğrudur ya da geriye doğrudur. Bir dal,
ancestor, ancestor-or-self, preceding ve preceding-sibling dalları geriye doğru, diğer tüm dallar ileri doğrudur. self dalı daima en fazla bir düğüm içerdiğinden dalın yönüyle ilgili bir fark oluşturmaz. Bir düğüm kümesi üyesinin bir dala göre yakınlık derecesi, düğümün düğüm kümesi içinde belgedeki sırasına göre kaçıncı kardeş olduğunu belirtir; eğer dal ileriye doğru ise sıralama ileri yönde, geriye doğru ise sıralama geriye doğrudur. İlk derece 1'dir.Bir dayanak yeni bir düğüm kümesi üretmek üzere bir düğüm kümesini bir dala göre filtreler. Düğüm kümesindeki filtrelenecek her düğüm için,
DayanakİfadesiDayanakİfadesiBir
Dayanakİfadesiİfadebooleanpara[3] konumsal yolu para[position()=3] konumsal yoluna eşdeğer olur.Dayanaklar| [8] | Dayanak | ::= | '[' |
| [9] | Dayanakİfadesi | ::= | |
2.5 Kısaltılmış Sözdizimi
Kısaltılmış sözdizimi kullanılan konumsal yol örnekleri:
parabağlamsal düğümünparaeleman çocuğunu seçer.*bağlamsal düğümün tüm eleman çocuklarını seçer.text()bağlamsal düğümün tüm metin düğümü çocuklarını seçer.@namebağlamsal düğümünnameözniteliğini seçer.@*bağlamsal düğümün tüm özniteliklerini seçer.para[1]bağlamsal düğümün ilkparaçocuğunu seçer.para[last()]bağlamsal düğümün sonparaçocuğunu seçer.*/parabağlamsal düğümün tümparatorunlarını seçer./doc/chapter[5]/section[2]bağlamsal yoludoc'un 5.chapter'ının 2.section'ını seçer.chapter//parabağlamsal düğümünchaptereleman çocuklarınınparaeleman astsallarını seçer.//parabelge kökününparaastsallarını, dolayısıyla bağlamsal düğümü içeren belgede bulunan tümparaelemanlarını seçer.//olist/itembağlamsal düğümü içeren belgede bulunan ve ebeveynleriolistolan tümitemelemanlarını seçer..bağlamsal düğümün kendisini seçer..//parabağlamsal düğümünparaeleman astsallarını seçer...bağlamsal düğümün ebeveynini seçer.../@langbağlamsal düğümün ebeveynininlangözniteliğini seçer.para[@type="warning"]bağlamsal düğümün,typeözniteliğinin değeriwarningolan tümparaçocuklarını seçer.para[@type="warning"][5]bağlamsal düğümün,typeözniteliğinin değeriwarningolan 5.paraçocuğunu seçer.para[5][@type="warning"]bağlamsal düğümün 5.paraçocuğununtypeözniteliğinin değeriwarningise buparaçocuğu seçer.chapter[title="Introduction"]bağlamsal düğümünchapterçocuklarındandizgesel değeriIntroduction'a eşittitleçocukları olanları seçer.chapter[title]bağlamsal düğümünchapterçocuklarından en azından birtitleçocuğu olanları seçer.employee[@secretary and @assistant]bağlamsal düğümünemployeeçocuklarından hemsecretaryhem deassistantözniteliklerine sahip olanları seçer.
En önemli kısaltma bir konumda child:: kullanmak zorunda kalmamaktır. Bunun için child öntanımlı dal olarak ele alınmıştır. Örneğin, div/para konumsal yolu child::div/child::para konumsal yolunun kısaltılmışıdır.
Ayrıca, öznitelikler için de bir kısaltma mevcuttur: attribute:: öneki yerine @ kullanılabilir. Örneğin, para[@type="warning"] konumsal yolu, child::para[attribute::type="warning"] yolunun kısaltılmışı olup bağlamsal düğümün para çocuklarından type özniteliğinin değeri warning olanlarını seçer.
// konumu, /descendant-or-self::node()/ konumunun kısaltmasıdır. Örneğin, //para konumu /descendant-or-self::node()/child::para konumunun kısaltılmışı olup belgedeki tüm para elemanlarını seçer (hatta para belge elemanı bile olsa seçilecektir, çünkü belge elemanı belge kökünün çocuğudur); div//para konumsal yolu child::div/descendant-or-self::node()/child::para yolunun kısaltılmışı olup bağlamsal düğümün div çocuklarının tüm para astsallarını seçer.
- Not:
//para[1]konumsal yolu ile/descendant::para[1]aynı sonucu vermez. İkincisiparaastsallarının ilkini seçerken, birincisi ebeveynlerinin ilkparaçocukları olan tümparaelemanlarını seçer.
. konumu self::node() konumunun kısaltmasıdır. Bu özellikle // ile birlikte kullanışlıdır. Örneğin, .//para konumsal yolu
self::node()/descendant-or-self::node()/child::para
konumsal yolunun kısaltılmışı olup bağlamsal düğümün tüm para eleman astsallarını seçer.
Benzer şekilde, .. konumu parent::node() konumunun kısaltmasıdır. Örneğin, ../title konumsal yolu parent::node()/child::title konumsal yolunun kısaltması olup bağlamsal düğümün ebeveyninin title çocuklarını seçer.
| [10] | KısaltılmışMutlakKonumsalYol | ::= | '//' |
| [11] | KısaltılmışGöreliKonumsalYol | ::= | |
| [12] | KısaKonum | ::= | '.' |
| '..' | |||
| [13] | KısaKonumBelirteci | ::= | '@'? |
3 İfadeler
3.1 Temel İfadeler
Bir
DeğişkenGönderimiParantezler ifadeleri gruplamak için kullanılabilir.
| [14] | İfade | ::= | |
| [15] | Başatİfade | ::= | |
| '(' | |||
| | |||
| | |||
| |
3.2 İşlev Çağrıları
Bir
İşlevÇağrısıİşlevAdıArgümanİşlevÇağrısıBir argüman, dizge türüne bir
stringnumberboolean| [16] | İşlevÇağrısı | ::= | |
| [17] | Argüman | ::= | |
3.3 Düğüm Kümeleri
Bir konumsal yol bir ifade olarak kullanılabilir. İfade, yol tarafından seçilen düğüm kümesini döndürür.
| işleci, terimlerinin düğüm kümeleri olmasını gerektirir ve terimlerinin birleşimini hesaplar.
DayanakDayanak- Not:
- Bir kendisine uygulanan dalla ilişkili olarak anlamlandırılır. Örneğin,
Dayanakpreceding::foo[1]konumu belgede geriye doğru ilkfooelemanını seçer, çünkü[1]dayanağına uygulanan dal öncekiler dalıdır;(preceding::foo)[1]konumu ise tersine belgede ileriye doğru ilkfooelemanını seçer, çünkü[1]dayanağına uygulanan dal çocuk daldır.
/ ve // işleçleri bir ifade ve bir göreli konumsal yol oluştururlar. İfadenin bir düğüm kümesi ile sonuçlanmaması bir hatadır. / işleci, bir konumsal yolda kullanılan / ile aynı anlama gelir. Bir konumsal yoldaki gibi // ifadesi de /descendant-or-self::node()/ konumunun kısaltmasıdır.
Düğüm kümelerine dönüştürülebilen hiçbir nesne türü yoktur.
| [18] | Birleşimİfadesi | ::= | |
| | |||
| [19] | Yolİfadesi | ::= | |
| | |||
| | |||
| | |||
| [20] | Filtreİfadesi | ::= | |
| |
3.4 Mantıksal İfadeler
Mantıksal türdeki bir nesnenin değeri ya 'doğru' ya da 'yanlış' olabilir.
Bir or ifadesi, her terimi
booleanBir and ifadesi, her terimi
booleanBir
EşitlikİfadesiİlişkiselİfadeİlişkiselİfadeToplamİfadesi=, !=, <=, <, >= ve > için hep aynı tarzdadır. İkincide, = ve != için düğüm kümelerinin katılmadığı karşılaştırmalar tanımlanmıştır. Üçüncüde, <=, <, >= ve > için düğüm kümelerinin katılmadığı karşılaştırmalar tanımlanmıştır.Düğüm kümelerin katıldığı karşılaştırmaların tanımları:
Eğer karşılaştırılan nesneler düğüm kümeleriyse, karşılaştırmanın doğru olabilmesi için gerek ve yeter koşul, her iki kümeden birer düğümün
dizgesel değerlerinin karşılaştırmasının doğru olmasıdır.Eğer karşılaştırılan nesnelerden biri bir düğüm kümesi ve diğeri bir sayıysa, karşılaştırmanın doğru olabilmesi için gerek ve yeter koşul, düğüm kümesinden bir düğümünün
dizgesel değerininişlevini kullanarak bir sayıya dönüştürüldükten sonra diğer nesnedeki sayıyla karşılaştırma sonucunun doğru olmasıdır.numberEğer karşılaştırılan nesnelerden biri bir düğüm kümesi ve diğeri bir dizgeyse, karşılaştırmanın doğru olabilmesi için gerek ve yeter koşul, düğüm kümesinden bir düğümün
dizgesel değerinin diğer nesnedeki dizgeyle karşılaştırma sonucunun doğru olmasıdır.Eğer karşılaştırılan nesnelerden biri bir düğüm kümesi ve diğeri bir mantıksal ifadeyse, karşılaştırmanın doğru olabilmesi için gerek ve yeter koşul, düğüm kümesinden bir düğümün
dizgesel değerininişlevini kullanarak mantıksal bir değere dönüştürüldükten sonra diğer nesnenin mantıksal değeriyle karşılaştırma sonucunun doğru olmasıdır.boolean
Karşılaştırılan nesnelerin ikisi de düğüm kümesi olmadığı takdirde, işleç de
=veya!=olduğunda, nesneler aşağıdaki gibi ortak bir türe dönüştürüldükten sonra karşılaştırılırlar:Eğer karşılaştırılan nesnelerden en az biri mantıksal ifade ise nesneler
işlevi uygulanmış gibi birer mantıksal değere dönüştürüldükten sonra karşılaştırılırlar.booleanAksi takdirde, karşılaştırılan nesnelerden en az biri bir sayıysa, nesneler
işlevi uygulanmış gibi birer sayıya dönüştürüldükten sonra karşılaştırılırlar.numberAksi takdirde, karşılaştırılan nesnelerden en az biri bir dizgeyse, nesneler
işlevi uygulanmış gibi birer dizgeye dönüştürüldükten sonra karşılaştırılırlar.string
=karşılaştırmasının sonucu sadece ve sadece nesneler birbirine eşitse doğru olacaktır. Sayılar IEEE 754'e [IEEE 754] göre karşılaştırılırlar. İki mantıksal ifadenin her ikisinin de sonucu doğruysa veya her ikisinin de sonucu yanlışsa eşitlik doğru olacaktır. İki dizgenin eşit olması için ikisininde aynı UCS karakter dizisine sahip olması gerekli ve yeterlidir.- Not:
- Eğer
$xbir düğüm kümesini ifade ediyorsa,$x="foo"ilenot($x!="foo")aynı anlama gelmeyecektir: Birincisi sadece ve sadece$x'teki bir düğümfoodizgesel değerine sahipse doğru olacaktır; ikincisi ise sadece ve sadece$x'teki bütün düğümlerfoodizgesel değerine sahipse doğru olacaktır.
Karşılaştırılan nesnelerin ikisi de düğüm kümesi olmadığı takdirde, işleç de
<=,<,>=veya>olduğunda, nesnelerin ikisi de sayıya dönüştürüldükten sonra bu sayılar IEEE 754'e göre karşılaştırılırlar.<karşılaştırması sadece ve sadece ilk sayı ikinciden küçükse doğru olacaktır.<=karşılaştırması sadece ve sadece ilk sayı ikinciden küçük veya ona eşitse doğru olacaktır.>karşılaştırması sadece ve sadece ilk sayı ikinciden büyükse doğru olacaktır.>=karşılaştırması sadece ve sadece ilk sayı ikinciden büyük veya ona eşitse doğru olacaktır.
- Not:
- Bir XPath ifadesi bir XML belgede yer aldığı takdirde,
<ve<=işleçleri XML 1.0 kuralları gereğince örneğin,<ve<=olarak öncelenmiş değerleriyle kullanılmalıdır. Aşağıdaki örnekte,testözniteliğinin değeri bir XPath ifadesidir:<xsl:if test="@value < 10">...</xsl:if>
| [21] | Veyaİfadesi | ::= | |
| | |||
| [22] | Veİfadesi | ::= | |
| | |||
| [23] | Eşitlikİfadesi | ::= | |
| | |||
| | |||
| [24] | İlişkiselİfade | ::= | |
| | |||
| | |||
| | |||
| |
- Not:
- Yukarıdaki sözdizimi şu öncelik sırasıyla etki eder (ilkinin önceliği en düşük olmak üzere):
orand=,!=<=,<,>=,>
İşleçlerin hepsinde işlemler soldan sağa doğru uygulanır.
Örneğin,
3 > 2 > 1ifadesi(3 > 2) > 1ifadesine eşdeğer olup ifade yanlış değeriyle sonuçlanır.
3.5 Sayılar
Bir sayı bir gerçel sayı olarak ifade edilir ve çift hassasiyetli 64 bitlik bir IEEE 754 değeri [
Aritmetik işleçler terimlerini
number+ işleci terimlerini toplar.
İki terimli - işleci çıkarma yaparken tek terimli - işleci terimini olumsuzlar. -0'ın sıfırın eksi işaretlisi olarak değerlendirileceğine dikkat ediniz.
- Not:
- XML
-imine isimlerde de izin verdiğinden-iminin işleç olarak algılanması için önüne bir boşluk karakteri konması gerekir. Örneğin,foo-barifadesifoo-barisimli çocuk elemanları içeren bir düğüm kümesi olarak ele alınacaktır. Halbuki,foo - barifadesifoovebarçocuk elemanlarının sayıya dönüştürülendizgesel değerlerinin farkı olarak ele alınacaktır.
* işleci IEEE 754'e uygun olarak gerçel sayı çarpma işlemi yapar. Eğer sonuç bir NaN değilse, sonucun pozitif olması için gerek ve yeter koşul her iki terimin işaretlerinin aynı olmasıdır.
div işleci IEEE 754'e uygun olarak gerçel sayı bölme işlemi yapar. Eğer sonuç bir NaN değilse, sonucun pozitif olması için gerek ve yeter koşul her iki terimin işaretlerinin aynı olmasıdır.
mod işleci aşağı yuvarlayan tamsayı bölme işleminde kalanı verir. Örneğin,
5 mod 2işlemi1ile sonuçlanır.5 mod -2işlemi1ile sonuçlanır.-5 mod 2işlemi-1ile sonuçlanır.-5 mod -2işlemi-1ile sonuçlanır.
- Not:
%işleci Java ve ECMAScript dillerindeki ile aynı işlemi yapar.
- Not:
- Bu işlem, IEEE 754 kalan işlemi ile aynı değildir. IEEE 754 kalan işleminde sonuç yukarı yuvarlayan bölme işleminde kalandır.
| [25] | Toplamİfadesi | ::= | |
| | |||
| | |||
| [26] | Çarpımİfadesi | ::= | |
| | |||
| | |||
| | |||
| [27] | TekTerimliİfade | ::= | |
| '-' |
3.6 Dizgeler
Dizgeler sıfır veya daha çok karakterden oluşan karakter dizileridir. Burada karakter, XML belirtimindeki
- Not:
- Unicode'da iki dizge, iki ayrı Unicode soyut karakter dizisinden oluşsa bile bunların aynı olarak ele alınması olasıdır. Örneğin bazı aksanlı karakterler birleşik tek bir karakterle gösterilebileceği gibi, birden fazla karakterle de ifade edilebilir. Bundan dolayı, XPath ifadesinde ve XML belgede aynı karakterin aynı gösterimle ifade edilmemesi durumunda XPath ifadeleri beklenmedik sonuçlar üretebilir. Bak, [Karakter Modeli].
3.7 Sözdizimsel Yapı
Dizgeciklere ayırma işleminde daima olası en uzun dizgecik döner.
Okunabilirlik açısından, sözdizimi tarafından açıkça izin verilmese bile boşluk karakterleri kullanılabilir: bir ifade içinde herhangi bir
İfadeDizgeciğiİfadeBoşluklarıİfadeDizgeciğiEğer dizgeciğin öncesinde bir dizgecik varsa ve bu dizgecik
@ :: ( [ ,dizgeciklerinden biri veya birdeğilse, birİşleç*birolarak ve birÇarpmaİşlecibirKısaAdolarak ele alınmalıdır.İşleçAdıEğer dizgeciğin ardından gelen karakter (araya girmesi olası
temizlendikten sonra) birİfadeBoşlukları(karakteri ise, dizgecik ya birya da birDüğümTürüolarak ele alınmalıdır.İşlevAdıEğer dizgeciğin ardından gelen iki karakter (araya girmesi olası
temizlendikten sonra)İfadeBoşlukları::ise, dizgecik birolarak ele alınmalıdır.DalAdıAksi takdirde, dizgecik, bir
,Çarpmaİşleci,İşleçAdı,DüğümTürüveya birİşlevAdıolarak ele alınmalıdır.DalAdı
| [28] | İfadeDizgeciği | ::= | '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::' |
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| | |||
| [29] | DizgeselSabit | ::= | '"' [^"]* '"' |
| "'" [^']* "'" | |||
| [30] | Sayı | ::= | |
| '.' | |||
| [31] | Rakamlar | ::= | [0-9]+ |
| [32] | İşleç | ::= | |
| | |||
| '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>=' | |||
| [33] | İşleçAdı | ::= | 'and' | 'or' | 'mod' | 'div' |
| [34] | Çarpmaİşleci | ::= | '*' |
| [35] | İşlevAdı | ::= | |
| [36] | DeğişkenGönderimi | ::= | '$' |
| [37] | AdSınaması | ::= | '*' |
| | |||
| | |||
| [38] | DüğümTürü | ::= | 'comment' |
| 'text' | |||
| 'processing-instruction' | |||
| 'node' | |||
| [39] | İfadeBoşlukları | ::= | |
Bir taşıyıcı dil [
4 Temel İşlev Kütüphanesi
Bu bölümde XPath gerçeklenimlerinin ifadeleri değerlendirebilmek için daima içermesi gereken işlev kütüphanesi açıklanmıştır.
İşlev kütüphanesindeki her işlev, dönüş türü, işlev ismi ve argüman türlerini içeren bir işlev prototipi kullanılarak belirtilmiştir. Eğer argüman türünden sonra bir soru imi geliyorsa argümanın belirtilmesi isteğe bağlıdır, aksi takdirde argüman zorunludur.
4.1 Düğüm Kümesi İşlevleri
sayı last() | İşlev |
lastsayı position() | İşlev |
positionsayı count(düğüm-kümesi) | İşlev |
countdüğüm-kümesi id(nesne) | İşlev |
ididididstringB sözdizimiyle eşleşen karakterler) ayraçlı bir dizgecik listesine dönüştürülür; işlev, eşsiz ID'si bu listedeki dizgeciklerden biri olan bağlamsal düğüme sahip belgenin elemanlarını içeren bir düğüm kümesi ile döner.id("foo")ifadesi, eşsiz ID'sifooolan elemanı seçer.id("foo")/child::para[position()=5]ifadesi, eşsiz ID'sifooolan elemanın 5.paraçocuğunu seçer.
dizge local-name(düğüm-kümesi?) | İşlev |
local-namedizge namespace-uri(düğüm-kümesi?) | İşlev |
namespace-uri- Not:
- işlevi, eleman ve öznitelik düğümleri haricinde bir argüman için bir boş dizge ile dönecektir.
namespace-uri
dizge name(düğüm-kümesi?) | İşlev |
nameNitelAdı içeren bir dizge ile döner. NitelAd, NitelAd olacaktır. Bu, aynı isim-alanlı çok sayıda önekle ilişkili bir düğüm üzerinde etkili isim-alanı bildirimlerinin olmadığı durumda gerekir. Bununla birlikte, bir gerçeklenim özgün önek hakkında bilgi içerebilir; bu durumda, bir gerçeklenim dönen dizgenin XML kaynakta kullanılan NitelAd ile daima aynı olacağından emin olabilir. Eğer belirtilen düğüm-kümesi boşsa veya ilk düğümün - Not:
- işlevinden dönen dizge, eleman ve öznitelik düğümleri haricinde bir argüman için
nameişlevinden dönen dizgeyle aynı olacaktır.local-name
4.2 Dizge İşlevleri
dizge string(nesne?) | İşlev |
stringBir düğüm kümesini bir dizgeye dönüştürmek için,
belgedeki sıraya göreilk düğümündizgesel değeri döndürülür. Eğer düğüm kümesi boşsa boş bir dizge döner.Bir sayıyı bir dizgeye şöyle dönüştürülür:
Bir NaN
NaNdizgesine dönüştürülür.Artı sıfır
0dizgesine dönüştürülür.Eksi sıfır
0dizgesine dönüştürülür.Artı sonsuz,
Infinitydizgesine dönüştürülür.Eksi sonsuz,
-Infinitydizgesine dönüştürülür.Bir tamsayı, bir ondalık nokta ve ondalık kısım olmaksızın onluk biçimde bir
olarak, negatifse önüne tire imi (Sayı-) getirilerek gösterilir.Aksi takdirde, sayı, öncesinde ve sonrasında en az birer rakam bulunan bir ondalık nokta içeren bir
olarak, eğer sayı negatifse önüne bir tire imi (Sayı-) konarak gösterilir. Ondalık sayının ondalık noktanın solunda kalan kısmı, birden küçük sayılarda gerekli olan tek sıfır hariç sıfırla başlamamalı; ondalık sayının sağında en fazla, zorunlu olan tek rakam hariç, sayının IEEE 754'teki diğer sayılardan ayırd edilmesini sağlayacak kadar sayıda rakam olmalıdır.
Mantıksal yanlış değeri
falsedizgesine, mantıksal doğru değeri isetruedizgesine dönüştürülür.Dört temel türden birinden olmayan bir nesne o türe özgü bir yöntemle dizgeye dönüştürülür.
Eğer bir argüman belirtilmezse, argümanın öntanımlı değeri işlev ifadesinin üyesi olduğu ifade bağlamıdır.
- Not:
stringişlevi, kullanıcılara sunum amacıyla sayıları dizgelere dönüştürmek için tasarlanmamıştır. Bu işlevselliği sağlamak için [XSLT]'dekixsl:numberelemanı veyaformat-numberişlevi kullanılabilir.
dizge concat(dizge, dizge, dizge*) | İşlev |
concatmantıksal-tür starts-with(dizge, dizge) | İşlev |
starts-withmantıksal-tür contains(dizge, dizge) | İşlev |
containsdizge substring-before(dizge, dizge) | İşlev |
substring-beforesubstring-before("1999/04/01","/") ifadesi 1999 dizgesini döndürecektir.dizge substring-after(dizge, dizge) | İşlev |
substring-aftersubstring-after("1999/04/01","/") ifadesi 04/01 dizgesi ile ve substring-after("1999/04/01","19") ifadesi 99/04/01 dizgesi ile döner.dizge substring(dizge, sayı, sayı?) | İşlev |
substringsubstring("12345",2,3) ifadesi "234" dizgesi ile döner. Eğer üçüncü argüman belirtilmezse, ikinci argümanda belirtilen sıradaki karakterden başlayan alt dizgenin tamamıyla döner. Örneğin, substring("12345",2) ifadesi "2345" dizgesi ile döner.Daha kesin bir ifadeyle, dizge (bkz,
- Not:
- Bu, Java ve ECMAScript'teki ilk karakter konumunun 0 kabul edildiği
String.substringyönteminden farklıdır.
Üretilen karakter altdizisinde bulunan karakterler, konum değeri ikinci argümanın yuvarlanmış değerinden büyük veya eşit veya eğer üçüncü bir argüman da varsa ikinci argümanın yuvarlanmış değeri ile üçüncü argümanın yuvarlanmış değerinin toplamından küçük olan karakterlerdir. Burada kullanılan karşılaştırma ve toplama işlemleri IEEE 754 standardındaki kurallara göre yürütülür; yuvarlama işlemi ise
roundsubstring("12345", 1.5, 2.6)ifadesi"234"ile döner.substring("12345", 0, 3)ifadesi"12"ile döner.substring("12345", 0 div 0, 3)ifadesi""ile döner.substring("12345", 1, 0 div 0)ifadesi""ile döner.substring("12345", -42, 1 div 0)ifadesi"12345"ile döner.substring("12345", -1 div 0, 1 div 0)ifadesi""ile döner.
sayı string-length(dizge?) | İşlev |
string-lengthdizge normalize-space(dizge?) | İşlev |
normalize-spaceB sözdizimiyle eşleşmelidir. Eğer bir argüman belirtilmezse, öntanımlı dizge bağlamsal düğümün dizge translate(dizge, dizge, dizge) | İşlev |
translatetranslate("bar","abc","ABC") ifadesi BAr dizgesiyle döner. Eğer üçüncü dizgedeki karakter sayısı ikinci dizgedeki karakter sayısından azsa, ikinci dizgedeki karakterlerden üçüncü dizgede karşılığı olmayanlar birinci dizgeden silinir. Örneğin, translate("--aaa--","abc-","ABC") ifadesi "AAA" dizgesiyle döner. Eğer ikinci dizgede bir karakterden birden fazla varsa, sonucu belirleyen birincisidir, diğerleri yoksayılır. Eğer üçüncü dizge ikinci dizgeden uzunsa, üçüncü dizgedeki fazlalıklar yoksayılır.- Not:
- işlevi tüm dillerdeki harf büyüklüğü dönüşüm işlemleri için yeterli değildir. XPath'ın gelecek sürümü harf büyüklüğü dönüşümü için ek işlevler içerebilir.
translate
4.3 Mantıksal İşlevler
mantıksal-tür boolean(nesne) | İşlev |
booleanBir sayının doğru olması için gerek ve yeter koşul, ne artı veya eksi sıfır ne de NaN olmasıdır.
Bir düğüm kümesinin doğru olması için gerek ve yeter koşul, boş olmamasıdır.
Bir dizgenin doğru olması için gerek ve yeter koşul, uzunluğunun sıfır olmamasıdır.
Dört temel türden birinden olmayan bir nesnenin bir mantıksal değere dönüştürülmesinin yolu bu türe bağlıdır.
mantıksal-tür not(mantıksal-tür) | İşlev |
notmantıksal-tür true() | İşlev |
truemantıksal-tür false() | İşlev |
falsemantıksal-tür lang(dizge) | İşlev |
langxml:lang özniteliğinde belirtilen dil, argüman olarak belirtilen dil ile aynı veya belirtilen dilin bir altdili olup olmamasına bağlı olarak doğru veya yanlış ile döner. Bağlamsal düğümün dili, bağlamsal düğümün varsa xml:lang özniteliğinin değerine göre, yoksa bağlamsal düğümün xml:lang özniteliğine sahip en yakın üstselinin xml:lang özniteliğinin değerine göre belirlenir. Böyle bir öznitelik yoksa lang- imiyle başlayan bir sonek içeriyorsa, ve bu sonek olmaksızın değeri işlevin argümanındaki değeriyle harf büyüklüğüne duyarsız olarak aynıysa langlang("en") ifadesi, bağlamsal düğüm şu beş elemandan biri ise doğru değeriyle dönecektir:<para xml:lang="en"/> <div xml:lang="en"><para/></div> <para xml:lang="EN"/> <para xml:lang="en-us"/>
4.4 Sayı İşlevleri
sayı number(nesne?) | İşlev |
numberSırayla, isteğe bağlı bir boşluk karakteri, isteğe bağlı bir tire işareti, zorunlu bir
ve zorunlu bir boşluk karakterinden oluşan bir dizge kendine en yakın (IEEE 754 en yakın değere yuvarlama kuralına göre) matematiksel değere sahip IEEE 754 sayıya çevrilir; diğer dizge oluşumları NaN'a çevrilir.SayıMantıksal doğru 1'e, yanlış 0'a çevrilir.
Bir düğüm kümesi önce
işlevi çağrılmış gibi bir dizgeye dönüştürüldükten sonra dizgeleri sayıya dönüştürmekte kullanılan yöntemle bir sayıya dönüştürülür.stringDört temel türden birinden olmayan bir nesne, kendi türüne özgü bir yöntemle sayıya çevrilir.
Eğer bir argüman belirtilmemişse, öntanımlı argüman bağlamsal düğümdür.
- Not:
- Bir sayısal veri bir XML belgedeki bir eleman tarafından dilden bağımsız biçimde (normalde dile özgü biçime kullanıcıya göstermek için dönüştürülür) ifade edilmiş olmadıkça, işlevi sayısal veri dönüşümü için kullanılmamalıdır. Ek olarak, eleman tarafından kullanılan dilden bağımsız biçim, XPath
numbersözdizimiyle eşleşmedikçeSayıişlevi kullanılamaz.number
sayı sum(düğüm-kümesi) | İşlev |
sumsayı floor(sayı) | İşlev |
floorfloor(-0.6) -> -1 floor(0.6) -> 0 floor(-0.4) -> -1 floor(0.4) -> 0
sayı ceiling(sayı) | İşlev |
ceilingceiling(-0.6) -> 0 ceiling(0.6) -> 1 ceiling(-0.4) -> 0 ceiling(0.4) -> 1
sayı round(sayı) | İşlev |
roundround(-0.6) -> -1 round(0.6) -> 1 round(-0.4) -> 0 round(0.4) -> 0
- Not:
- ve
roundişlevleri -1 ile 0 arasındaki değerler için farklı davranırlar.floorişlevinin sonucuyla, aynı sayıya 0.5 eklendikten sonra yapılan birroundçağrısından dönen sonuç aynı olmayacaktır.floor
5 Veri Modeli
XPath bir XML belgeyi bir ağaç olarak işler. Bu bölümde bir XML belge ağacındaki XPath veri modelleri açıklanmıştır. Bu veri modeli kavramsal niteliktedir, bir gerçeklenim için kural koyucu değildir. Bu model ile XML Bilgi Kümesi [
XML belgeler üzerinde XPath tarafından yapılan işlemler XML İsim-alanları Önergesine [
Ağaç düğümlerden oluşur. Yedi düğüm türü vardır:
kök düğümler
eleman düğümleri
metin düğümleri
öznitelik düğümleri
isim-alanı düğümleri
işlem yönergesi düğümleri
açıklama düğümleri
- Not:
- Eleman düğümleri ve kök düğümler için bir düğümün dizgesel değeri DOM
nodeValueyönteminden (bkz, [DOM]) dönen dizge ile aynı değildir.
Kök düğümler ve eleman düğümleri çocuk düğümleri sıralı bir liste halinde içerir. Düğümler çocuklarını asla paylaşmazlar: eğer bir düğüm başka bir düğümle aynı değilse, bir düğümün çocuklarının hiçbiri başka bir düğümün çocukları ile aynı olmayacaktır.
Kök düğüm hariç, belge içindeki her düğümü içeren bir düğüm vardır ve bu düğüme ebeveyn düğüm denir. Bir kök düğüm veya bir eleman düğümü kendi çocuklarının her birinin ebeveynidir. Bir düğümün astsalı o düğümün çocukları ile onların astsallarından oluşur.5.1 Kök Düğüm
Kök düğüm, ağacın köküdür. Bir kök düğüm, ağacın kökü olmak dışında başka bir yerde yer almaz. Belge elemanının eleman düğümü kök düğümün çocuğudur. Kök düğümün ayrıca, işlem yönergeleri ve açıklamalar için belge elemanının başından önce veya sonundan sonra yer alan işlem yönergesi ve açıklama düğümlerinden oluşan çocukları da vardır.
Kök düğümün
Kök düğümün bir
5.2 Eleman düğümleri
Belgedeki her eleman için bir eleman düğümü vardır. Bir eleman düğümü, XML İsim-alanları Önergesi [
NitelAdı genişletilerek elde edilen bir NitelAdının bir öneki ve uygulanabilir bir öntanımlı isim-alanı yoksa, - Not:
- [XML Adları] önergesinin düzeltmeler öncesi sürümününA.3. ek bölümündeki gösterimde,genişletilmiş isminyerel kısmı,
ExpETypeelemanınıntypeözniteliğine karşı düşmektedir;genişletilmiş isminisim-alanı tanım-yeri,ExpETypeelemanınınnsözniteliğine karşı düşmekte olup eğer bu öznitelik belirtilmezse değeri null olacaktır.
Bir eleman düğümünün çocukları eleman düğümleri, açıklama düğümleri, işlem yönergesi düğümleri ve içeriği olarak metin düğümleridir. Dahili ve harici öğelere gönderimlerin her ikisi de yorumlanır. Karakter gönderimleri çözümlenir.
Bir eleman düğümünün
5.2.1 Eşsiz ID'ler
Bir eleman düğümü bir eşsiz betimleyiciye (ID) sahip olabilir. Bu, DTD'de ID türünde bildirilmiş özniteliğin değeridir. Bir belgede birden fazla eleman aynı ID'ye sahip olamaz. Eğer XML işlemci bir belgenin birden fazla elemanının aynı ID'ye sahip olduğunu bildiriyorsa (bu durumda belge geçersizdir), belgedeki sıraya göre birinci ID'den sonrakiler yoksayılır.
- Not:
- Eğer belge bir DTD'ye sahip değilse, belgedeki hiçbir eleman eşsiz ID'ye sahip olmayacaktır.
5.3 Öznitelik Düğümleri
Her eleman düğümü kendisiyle ilişkili bir öznitelik düğümü kümesine sahiptir; eleman bu öznitelik düğümlerinin her birinin
- Not:
- Bu, DOM'dakinden farklıdır. DOM, elemanı özniteliğin ebeveyni olarak ele almaz (bkz, [DOM]).
Eleman düğümleri, öznitelik düğümlerini asla paylaşmazlar: eğer bir eleman başka bir elemanla aynı değilse, bir elemanın öznitelik düğümlerinin hiçbiri başka bir elemanın öznitelik düğümleri ile aynı olmayacaktır.
- Not:
=işleci, iki düğümün aynı değere sahip olup olmadıklarını sınar, değerlerin aynı düğüme ait olup olmadıklarını değil. Bu bakımdan, iki farklı elemanın öznitelikleri, aynı düğüme ait olmasalar bile=işleci kullanılarak karşılaştırılabilir.
Bir öntanımlı öznitelik belirtilmiş bir öznitelik gibi ele alınır. Eğer bir öznitelik DTD içinde eleman türü için bildirilmişse, öntanımlı değer #IMPLIED olarak bildirilmiş ve öznitelik elemanda belirtilmemişse, elemanın öznitelik kümesi bu öznitelik için bir düğüm içermez.
xml:lang ve xml:space gibi bazı öznitelikler, özniteliğin ebeveyni olan elemanın astsalları olan tüm elemanlarda, başka bir astsal eleman tarafından aynı öznitelikle değer değiştirilmedikçe, aynı anlama sahiptirler. Bununla birlikte bu, ağaçta yer aldıkları öznitelik düğümleri üzerinde etkili değildir: bir elemanın sahip olduğu öznitelikler sadece, elemanın başlangıç etiketi veya boş eleman etiketinde açıkça belirtilenlerle DTD'de doğrudan bir öntanımlı değerle bildirilenlerdir.
Bir öznitelik düğümü bir
NitelAdı genişletilerek elde edilir. Özniteliğin, eğer NitelAdının bir öneki yoksa, isim-alanı tanım-yeri boş olacaktır.- Not:
- [XML Adları] önergesinin düzeltmeler öncesi sürümününA.3. ek bölümündeki gösterimde,genişletilmiş isminyerel kısmı,
ExpANameelemanınınnameözniteliğine karşı düşmektedir;genişletilmiş isminisim-alanı tanım-yeri,ExpANameelemanınınnsözniteliğine karşı düşmekte olup eğer bu öznitelik belirtilmezse değeri null olacaktır.
Bir öznitelik düğümü bir
- Not:
- Öntanımlı özniteliklerin bir harici DTD veya bir harici parametre öğesinde bildirilmesi olasıdır. XML Önergesi, geçerlilik sınaması yapan türde olmadıkça bir XML işlemcinin, bir harici DTD veya bir harici parametre öğesini okumasını gerektirmez. Bir biçembent veya bir başka oluşumun, bir harici DTD veya bir harici parametre öğesinde bildirilmiş öntanımlı değer içeren bir XPath ağacının geçerlik sınaması yapmayan bir XML işlemciyle çalışmayabileceğini baştan kabul etmesi gerekir.
İsim-alanların bildiren özniteliklere karşı düşen bir öznitelik düğümü yoktur (bkz, [
5.4 İsim-alanı Düğümleri
Her eleman düğümü kendisiyle ilişkili bir isim-alanı düğümü kümesine sahiptir; isim-alanı düğümü kümesindeki her düğüm elemanın etki alanı içindeki ayrı bir öneke (bu öneklere XML İsim-alanı Önergesi [
xml öneki dahildir) ve bir düğüm elemanın etki alanının içinde olduğu öntanımlı isim-alanına aittir. Eleman, bu isim-alanı düğümlerinin her birinin eleman tarafından veya ismi
xmlns:ile başlayan ve elemanın kendisi veya daha yakın üstselleri tarafından yeniden boş değerli bir önek bildirilmedikçe, en yakın üstsel elemanın değeri boş olmayan her özniteliği için;- Not:
- bildirimsiz önekler sadece [XML Adları 1.1]'e uyumlu belgelerde yer alabilir.
eğer eleman veya bazı üstsel elemanlar bir
xmlnsözniteliğine sahipse ve en yakın böyle bir elemanınxmlnsözniteliğinin değeri boş değilse,xmlnsözniteliği için;- Not:
xmlns=""şeklinde bir öznitelik, belirtildiği elemanın etki alanında öntanımlı isim-alanını "geçersiz kılar" (bkz, [XML Adları]).
Bir isim-alanı düğümü bir
Bir isim-alanı düğümünün
5.5 İşlem Yönergesi Düğümleri
DTD içinde yer almadıkça, her işlem yönergesi (PI - processing instruction) için, bir işlem yönergesi düğümü vardır.
Bir işlem yönergesi bir
?> dizgesi dizgesel değere dahil değildir.- Not:
- XML bildirimi bir işlem yönergesi değildir. Dolayısıyla, XML bildirimine karşı düşen bir işlem yönergesi düğümü yoktur.
5.6 Açıklama Düğümleri
DTD içinde yer almadıkça, her açıklama için, bir açıklama düğümü vardır.
Açıklama düğümünün
<!--) ve kapanış (-->) dizgelerini içermez.Bir açıklama düğümünün bir
5.7 Metin Düğümleri
Karakter verisi metin düğümleri halinde gruplanır. Her metin düğümünde mümkün olduğunca çok karakter verisi gruplanır: bir metin düğümünün asla komşu düğümü olarak kardeş metin düğümleri yoktur. Bir metin düğümünün
Bir CDATA bölümündeki her karakter, karakter verisi olarak ele alınır. Bu bakımdan, kaynak belgedeki <![CDATA[<]]> dizgesi < ile aynı olarak ele alınacaktır. Her ikisi de ağaçtaki bir metin düğümünde tek bir < karakteriyle sonuçlanacaktır. Sonuç olarak, CDATA bölümü, <![CDATA[ ve ]]> bölümü silinmiş ve içerikte yer alan her < ve & karakterleri sırayla < ve & ile değiştirilmiş gibi ele alınır.
- Not:
- Bir
<karakteri içeren bir metin düğümü XML olarak yazılmak istendiği takdirde,<karakteri ya<örneğindeki gibi öncelenmeli ya da bir CDATA bölümü içine alınmalıdır.
Açıklamalar, işlem yönergeleri ve öznitelik değerleri içindeki karakterler metin düğümleri üretmezler. Harici öğelerdeki satırsonları XML Önergesinde [
Bir metin düğümünün bir
6 Uyumluluk
XPath aslında diğer belirtimler tarafından bir bileşen olarak kullanılmak üzere tasarlanmıştır. Diğer yandan, XPath'ın gerçeklenimi ve uyumluluk için koşul belirtme ve XPath'ın bağımsız gerçeklenimleri için herhangi bir uyumluluk kuralı tanımlamamak konularında XPath, kendini kullanan belirtimlere ([
A Kaynakça
A.1 Uyulması Gerekenler
- IEEE 754
- Elektrik ve Elektronik Mühendisleri Enstitüsü. İkilik Kayan Noktalı Aritmetik için IEEE Standardı. ANSI/IEEE Std 754-1985.
- RFC2396
- T. Berners-Lee, R. Fielding ve L. Masinter. Tek Biçimli Özkaynak Betimleyici (URI): Soysal Sözdizimi. IETF RFC 2396.
- XML
- World Wide Web Consortium. Genişletilebilir İmlenim Dili (XML) 1.0. W3C Önergesi. Uyulması zorunlu İngilizce sürümühttp://www.w3.org/TR/xmladresindedir.
- XML Adları
- World Wide Web Consortium. XML 1.0'da İsim-alanları. W3C Önergesi. Uyulması zorunlu İngilizce sürümühttp://www.w3.org/TR/xml-namesadresindedir.
- XML 1.1
- World Wide Web Consortium. Genişletilebilir İmlenim Dili (XML) 1.1. W3C Önergesi. Uyulması zorunlu İngilizce sürümühttp://www.w3.org/TR/xml11/adresindedir.
- XML Adları 1.1
- World Wide Web Consortium. XML 1.1'de İsim-alanları. W3C Önergesi. Uyulması zorunlu İngilizce sürümühttp://www.w3.org/TR/xml-names11/adresindedir.
A.2 Diğer Kaynaklar
- Karakter Modeli
- World Wide Web Consortium. WWW için Karakter Modeli. W3C Çalışma Taslağı.
- DOM
- World Wide Web Consortium. Belge Nesne Modeli (DOM - Document Object Model) 1. seviye Belirtimi.W3C Önergesi.
- JLS
- J. Gosling, B. Joy, and G. Steele. Java Dil Belirtimi.
- ISO/IEC 10646
- ISO (Uluslararası Standartlaşım Örgütü). ISO/IEC 10646-1:1993, Bilgi teknolojileri —Evrensel Çok Sekizli Kodlanmış Karakter Kümesi (UCS) — 1. Kısım: Mimari ve Temel Çokdilli Düzey. Uluslararası Standart.
- TEI
- C.M. Sperberg-McQueen, L. Burnard Elektronik Metin Kodlaması ve Değişimi için Kılavuzlar.
- Unicode
- Unicode Konsorsiyumu. Unicode Standardı.
- XML BilgiKümesi
- World Wide Web Consortium. XML Bilgi Kümesi.W3C Önergesi.
- XPointer
- World Wide Web Consortium. XML Gösterici Dili (XPointer).W3C Çalışma Taslağı.
- XQL
- J. Robie, J. Lapp, D. Schach. XML Sorgu dili (XQL).
- XSLT
- World Wide Web Consortium. XSL Dönüşümleri (XSLT).W3C Önergesi. Uyulması zorunlu İngilizce sürümühttp://www.w3.org/TR/xsltadresindedir.
B XML Bilgi Kümesi Eşlemi (Bilgilendirici)
XPath veri modelindeki düğümler XML Bilgi Kümesi [
B.1 Kök Düğüm
XPath Veri Modelinin bir örneği, tam olarak, bir XML Bilgi Kümesindeki eşsiz belge bilgi kalemine karşılık olan, bir kök düğüm içerir.
Kök düğümün çocukları, çocuklar donatısında bulunan bilgi kalemlerinin (belge türü bildirimi bilgi kalemleri atlanarak) karşılığı olan düğümlerdir.
B.2 Eleman Düğümleri
Bir eleman düğümü bir eleman bilgi kalemine karşılıktır..
Eleman düğümünün çocukları, çocuklar donatısında yer alan bilgi kalemlerinin karşılığı olan düğümlerdir. Bu karşılıklılık bire bir değildir, karakter bilgi kalemi çocukları ardışık olarak tek bir metin düğümü oluşturmak üzere birleşirler. XPath veri modeli tüm genel öğelerin yorumlanmasını gerektirdiğinden, yorumlanmamış öğe gönderimi bilgi kalemi çocukları asla olmayacaktır.
Eleman düğümünün öznitelikleri, öznitelikler donatısında yer alan öznitelik bilgi kalemlerinin karşılığı olan düğümlerdir.
Eleman düğümünün isim-alanları, etki alanındaki isim-alanları donatısında yer alan isim-alanı bilgi kalemlerinin karşılığı olan düğümlerdir.
Eleman düğümünün
genişletilmiş isminin yerel kısmı, yerel ad donatısının karşılığıdır. Eleman düğümününgenişletilmiş isminin isim-alanı tanım-yeri isim-alanı yeri donatısına karşılıktır.Eleman düğümünün eşsiz ID'si, öznitelikler donatısındaki öznitelik bilgi kaleminin normalleştirilmiş değer donatısının karşılığıdır; öznitelikler donatısı ID için bir öznitelik türü donatısına sahiptir ve ID için bir öznitelik varsa bu donatı mevcuttur aksi takdirde öznitelik tanımsızdır.
Eleman düğümünün
ebeveyni, ebeveyn donatısına karşılıktır.
B.3 Öznitelik Düğümleri
Bir öznitelik düğümü, öznitelik bilgi kalemine karşı düşer. İsim-alanı bildirimleri, öznitelikler olarak modellenmemiştir.
Öznitelik düğümünün
genişletilmiş isminin yerel kısmı, yerel ad donatısının karşılığıdır. Öznitelik düğümününgenişletilmiş isminin isim-alanı tanım-yeri isim-alanı yeri donatısına karşı düşer.Öznitelik düğümünün
dizgesel değeri, normalleştirilmiş değer donatısının karşılığıdır.Öznitelik düğümünün
ebeveyni, iye eleman donatısına karşılıktır.
B.4 Metin Düğümleri
Bir metin düğümü bir veya daha fazla ardışık karakter bilgi kalemine karşılıktır.
Metin düğümünün
dizgesel değeri, karakter bilgi kalemlerinin her birinin karakter kodu donatısının peşpeşe eklenmişine karşılıktır.Metin düğümünün
ebeveyni, ardışık karakter bilgi kalemlerinden birinin ebeveyn donatısına karşılıktır (ardışık karakterler daima aynı ebeveyne sahiptir).
B.5 İşlem Yönergesi Düğümleri
Bir işlem yönergesi düğümü işlem yönergesi bilgi kalemine karşılıktır. Bir belge türü bildirimi bilgi kaleminin çocukları olan işlem yönergelerinin işlem yönergesi düğümleri olmaz.
İşlem yönergesi düğümünün
genişletilmiş isminin yerel kısmı, hedef donatısının karşılığıdır. İşlem yönergesi düğümününgenişletilmiş isminin isim-alanı tanım-yeri boştur.İşlem yönergesi düğümünün
dizgesel değeri, içerik donatısının karşılığıdır.İşlem yönergesi düğümünün
ebeveyni, ebeveyn donatısına karşılıktır.
B.6 Açıklama Düğümleri
Açıklama düğümü, açıklama bilgi kaleminin karşılığıdır.
Açıklama düğümünün
dizgesel değeri, içerik donatısının karşılığıdır.Açıklama düğümünün
ebeveyni, açıklama bilgi kaleminin ebeveyn donatısına karşılıktır.
B.7 İsim-alanı Düğümleri
İsim-alanı düğümü isim-alanı bilgi kaleminin karşılığıdır.
İsim-alanı düğümünün
genişletilmiş isminin yerel kısmı, önek donatısının karşılığıdır. İşlem yönergesi düğümününgenişletilmiş isminin isim-alanı tanım-yeri boştur.İsim-alanı düğümünün
dizgesel değeri, isim-alanı yeri donatısının karşılığıdır.İsim-alanı düğümünün
ebeveyni bu düğümün içinde yer aldığı isim-alanı kümesinin eleman düğümüdür.
B.8 XML Bilgi Kümesi Uyumluluğu
Bu belirtim XML Bilgi Kümesi [
çocuklar donatılarıyla Belge Bilgi Kalemi
çocuklar, öznitelikler, etki alanındaki isim-alanları, yerel ad, isim-alanı yeri ve ebeveyn donatılarıyla Eleman Bilgi Kalemleri.
isim-alanı yeri, yerel ad, normalleştirilmiş değer, iye eleman ve öznitelik türü donatılarıyla Öznitelik Bilgi Kalemleri
karakter kodu ve ebeveyn donatılarıyla Karakter Bilgi Kalemleri.
hedef, içerik ve ebeveyn donatılarıyla İşlem Yönergesi Bilgi Kalemleri.
içerik ve ebeveyn donatılarıyla Açıklama Bilgi Kalemleri.
önek ve isim-alanı yeri donatılarıyla İsim-alanı Bilgi Kalemleri
Bilgikümesi işlemcisi tarafından elverişli kılınan bütün diğer bilgi kalemleri ve donatılar yoksayılır.