W3C

XML Adresleme Dili (XPath) Sürüm 1.0

W3C Önergesi 16 Kasım 1999

Bu sürüm:
http://www.w3.org/TR/1999/REC-xpath-19991116
(XML ve HTML biçimleri mevcuttur.)
Son sürüm:
http://www.w3.org/TR/xpath
Önceki Sürümler:
http://www.w3.org/TR/1999/PR-xpath-19991008
http://www.w3.org/1999/08/WD-xpath-19990813
http://www.w3.org/1999/07/WD-xpath-19990709
http://www.w3.org/TR/1999/WD-xslt-19990421
Yayına hazırlayanlar:
James Clark <[email protected]>
Steve DeRose, Inso Corp. ve Brown Üniversitesi <[email protected]>

Bu çeviri:
XML ve HTML biçimleri mevcuttur.
Çeviren:
Nilgün Belma Bugüner <>, 4 Haziran 2007

Bu çeviri de diğer belirtim çevirileri gibi bilgilendirici mahiyettedir, hiçbir bağlamda belirleyici değildir. Bu belge anadili Türkçe olan Genel ağ kullanıcılarının bu belirtim hakkında fikir edinebilmelerini sağlamak amacıyla Türkçeye çevrilmiştir. Bu belirtimin belirleyici tek sürümü W3C tarafından yayımlanan İngilizce sürümüdür.


Ö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 Önergesi olarak onaylanmıştır. Kararlı bir belge olup başka belgelerden uyulması gerekli bir kaynak olarak atıfta bulunarak veya bir başvuru malzemesi olarak kullanılabilir. W3C'nin Önergedeki rolü, belirtime dikkatleri çekmek ve geniş bir alanda kullanımını yaygınlaştırmaktır. Bu, Web'in işlevselliğini ve birlikte çalışabilirliğini arttırmaktadır.

Bu belirtimin bilinen hatalarının listesi http://www.w3.org/1999/11/REC-xpath-19991116-errata adresindedir. Bu listedeki düzeltmelerden 2 Kasım 2005'e kadar olanlar çeviriye yansıtılmıştır.

Bu belirtimle ilgili yorumlarınızı [email protected] adresine gönderebilirsiniz; Yorumların arşivleri de mevcuttur.

Bu 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 tercümeleri de mevcuttur.

Şu anki W3C yayınlarının ve bu teknik raporların en son sürümleri http://www.w3.org/TR/ adresindeki W3C teknik raporları dizininde bulunabilir.

Bu belge, W3C XML Etkinliğinin W3C Biçim Etkinlğinin bir parçası olarak XSL Çalışma Grubu ve XML İlintileme Çalışma Grubu tarafından üretilmiştir.

İçindekiler

1 Giriş
2 Konumsal Yollar
    2.1 Konumlar
    2.2 Dallar
    2.3 Düğüm Sınamaları
    2.4 Dayanaklar
    2.5 Kısaltılmış Sözdizimi
3 İfadeler
    3.1 Temel İfadeler
    3.2 İşlev Çağrıları
    3.3 Düğüm Kümeleri
    3.4 Mantıksal İfadeler
    3.5 Sayılar
    3.6 Dizgeler
    3.7 Sözdizimsel Yapı
4 Temel İşlev Kütüphanesi
    4.1 Düğüm Kümesi İşlevleri
    4.2 Dizge İşlevleri
    4.3 Mantıksal İşlevler
    4.4 Sayı İşlevleri
5 Veri Modeli
    5.1 Kök Düğüm
    5.2 Eleman düğümleri
          5.2.1 Eşsiz ID'ler
    5.3 Öznitelik Düğümleri
    5.4 İsim-alanı Düğümleri
    5.5 İşlem Yönergesi Düğümleri
    5.6 Açıklama Düğümleri
    5.7 Metin Düğümleri
6 Uyumluluk

Ekler

A Kaynakça
    A.1 Uyulması Gerekenler
    A.2 Diğer Kaynaklar
B XML Bilgi Kümesi Eşlemi (Bilgilendirici)
    B.1 Kök Düğüm
    B.2 Eleman Düğümleri
    B.3 Öznitelik Düğümleri
    B.4 Metin Düğümleri
    B.5 İşlem Yönergesi Düğümleri
    B.6 Açıklama Düğümleri
    B.7 İsim-alanı Düğümleri
    B.8 XML Bilgi Kümesi Uyumluluğu


1 Giriş

XPath, XSL Dönüşümleri [XSLT] ve XPointer [XPointer] arasında paylaşılan işlevsellik için ortak bir sözdizimi ve anlamsallık sağlama çabasının bir sonucudur. XPath'ın ana amacı, bir XML [XML] belgenin parçalarını birbirlerine adreslemektir. Bu birincil amacı desteklemek üzere, dizgeler, sayılar ve mantıksal ifadeler için temel oluşumlar sağlar. XPath, tanım-yeri (URI) başvurularında ve XML öznitelik değerlerinde XPath kullanımını kolaylaştırmak için XML-dışı, kısa ve özlü bir sözdizimi kullanır. XPath, bir XML belgenin yüzeysel sözdiziminden ziyade soyut, mantıksal yapısı üzerinde işlem yapar. XPath, bir XML belgenin orunsal yapısı boyunca gezinmek için URL'lerdeki gibi bir yol gösterimi kullanmasından dolayı bu adı almıştır.

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ı XSLTde açıklanmıştır.

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 dizgesel değeri hesaplayacak bir yöntem tanımlar. Bazı düğüm türlerinin ayrıca adları da mevcuttur. XPath, XML İsim-alanlarını [XML Adları] tamamen destekler. Bu bakımdan, bir düğüm adı, olası bir isim-alanı tanım-yeri ile bir yerel parçadan oluşan bir çift olarak modellenir; buna genişletilmiş isim adı verilir. Veri modeli Veri Modeli bölümünde ayrıntılı olarak açıklanmıştır.

XPath'ta başat sözdizimsel oluşum ifadedir. Bir ifade, İfade sözdizimi tanımıyla eşleşir. Bir ifade, aşağıdaki dört temel türden biri olarak bir nesneyle sonuçlanmak üzere değerlendirilir:

İ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:

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, Temel İşlev Kütüphanesi). Temel işlev kütüphanesindeki bir işlev için argümanlar ve sonuçlar dört temel türde olabilir. XSLT ve XPointer, ek işlevler tanımlayarak XPath'ı genişletir; bu işlevlerin bazıları dört temel türde işlem yapar; bazıları da XSLT ve XPointer tarafından tanımlanmış veri türleri üzerinde işlem yapar.

İ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, Dayanaklar). Bir ifade çeşidinin değerlendirimi açıklanırken, daima doğrudan doğruya, alt ifadelerin değerlendirimi için bağlamsal düğüm, bağlamsal konum ve bağlamsal boyutun değişmesine göre durumlanır; eğer bağlamsal düğüm, bağlamsal konum ve bağlamsal boyut hakkında hiçbir şey söylenemiyorsa, ifade çeşidinin alt ifadelerinin değerlendirimi için bunlar değişmeden kalır.

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 (&lt; 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 (&quot; veya &apos; 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 KonumsalYol sözdizimi tanımıyla eşleşirler.

Aşağıdaki sözdizimi tanımları içindeki NitelAd ve KısaAd tanım terimleri [XML Adları]'ında, B ise [XML]'de tanımlanmıştır. Sözdizimi için kullanılan gösterim [XML]'de kullanılan BNF gösterimi ile aynıdır (tanım terimlerinin baş harflerinde büyük harf kullanılması dışında).

İ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 Sözdizimsel Yapı bölümünde açıklanmıştır.

Ek olarak, XML 1.0 ve XML Adları 1.0 gönderimleri daima kolaylık olsun diyedir. Bununla birlikte, bir gerçeklenim [XML] ve [XML Adları] veya [XML 1.1] ve [XML Adları 1.1] sözdizimsel belirtimlerini desteklemeyi tercih edebilir. Bu bakımdan, uluslararası tanım-yeri (IRI) ayrıca destekleniyor olsa da tanım-yeri (URI) başvuruları ayrıca kullanılmıştır. Bazı durumlarda XML 1.0 ve XML 1.1 tanımları tamamen aynı olabilir.

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, İfade'nin özel bir durumudur).

Her 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ılmış Sözdizimi).

Kısaltılmamış sözdizimi kullanılan konumsal yol örnekleri:

İ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.

Konumsal Yollar
[1]   KonumsalYol   ::=   GöreliKonumsalYol
| MutlakKonumsalYol
[2]   MutlakKonumsalYol   ::=   '/' GöreliKonumsalYol?
| KısaltılmışMutlakKonumsalYol
[3]   GöreliKonumsalYol   ::=   Konum
| GöreliKonumsalYol '/' Konum
| Kısaltılmış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ş ismini ve düğüm türünü belirten bir düğüm sınaması ve

  • konum 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 genişletilmiş isme ve düğüm türüne sahiptir. Örneğin, 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 Dallar bölümüne açıklanmıştır. Olası düğüm sınamaları ise Düğüm Sınamaları bölümünde açıklanmıştır. Bazı düğüm sınamalarının anlamları dala bağlıdır.

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 Dayanaklar bölümüne bakınız.

Konumlar
[4]   Konum   ::=   DalBelirteci DüğümSınaması Dayanak*
| KısaKonum
[5]   DalBelirteci   ::=   DalAdı '::'
| KısaKonumBelirteci

2.2 Dallar

Çevirmenin notu:
Bu bölümdeki resimler bu belirtimin Almanca çevirisinden alıntıdır ve açıklamaları şekillerle pekiştirmek için kullanılmışlardır.

Olası dallar:

  • child dalı, bağlamsal düğümün çocuklarını içerir.

    çocuklar
  • descendant dalı, 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.

    astsallar
  • parent dalı, bağlamsal düğümün ebeveynini içerir (varsa).

    ebeveyn
  • ancestor dalı, bağlamsal düğümün üstsellerini içerir; bağlamsal düğümün üstselleri, bağlamsal düğümün ebeveyni 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.

    üstseller
  • following-sibling dalı, 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-sibling dalı boştur.

    küçük kardeşler
  • preceding-sibling dalı, 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-sibling dalı boştur.

    büyük kardeşler
  • following dalı, 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.

    sonrakiler
  • preceding dalı, 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.

    öncekiler
  • attribute dalı, bağlamsal düğümün özniteliklerini içerir; bağlamsal düğüm bir eleman olmadığı takdirde dal boş olacaktır.

  • namespace dalı, bağlamsal düğümün isim-alanı düğümlerini içerir; bağlamsal düğüm bir eleman olmadığı takdirde dal boş olacaktır.

  • self dalı, sadece bağlamsal düğümün kendini içerir.

    kendisi
  • descendant-or-self dalı, bağlamsal düğümün kendini ve astsallarını içerir.

    kendisi veya astsalları
  • ancestor-or-self dalı, bağlamsal düğümün kendini ve üstsellerini içerir; bu durumda kök düğümü daima içerecektir.

    kendisi veya üstselleri

Not:
ancestor, descendant, following, preceding ve self dalları 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.

Dallar
[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 NitelAd için düğüm sınaması sadece ve sadece, düğüm türü başat düğüm türüyse ve NitelAd tarafından belirtilen genişletilmiş isim ile aynı genişletilmiş isme sahipse, doğru sonucunu verir. Örneğin, 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 NitelAd, ifade bağlamındaki isim-alanı bildirimleri kullanılarak bir genişletilmiş isme genişletilir. Bu, xmlns 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. Genişletilmiş ismi, ismin yerel kısmından bağımsız olarak önekin genişletileceği bir isim-alanı tanım-yerine sahip başat türdeki her düğüm için düğüm sınaması doğru sonucunu verecektir.

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 DizgeselSabit argümana sahip olabilir; bu durumda DizgeselSabit değeriyle aynı isme sahip bir işlem yönergesi için sınama doğru sonucunu verecektir.

node() düğüm sınaması düğüm türü ne olursa olsun doğru sonucunu verecektir.

[7]   DüğümSınaması   ::=   AdSınaması
| DüğümTürü '(' ')'
| 'processing-instruction' '(' DizgeselSabit ')'

2.4 Dayanaklar

Bir dal ya ileri doğrudur ya da geriye doğrudur. Bir dal, belgedeki sıraya göre sadece bağlamsal düğümden sonraki bağlamsal düğümü veya düğümleri içeriyorsa dal ileri doğrudur. Bir dal, belgedeki sıraya göre sadece bağlamsal düğümden önceki bağlamsal düğümü veya düğümleri içeriyorsa dal geriye doğrudur. Bu bakımdan, 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İfadesinde bağlamsal düğüm olarak bu düğüm, bağlamsal boyut olarak düğüm kümesindeki düğüm sayısı, bağlamsal konum olarak düğüm kümesindeki düğümün dala göre yakınlık derecesi alınarak değerlendirilir. Eğer Dayanakİfadesi bu düğüm için doğru sonucunu veriyorsa, bu düğüm yeni düğüm kümesinde yer alır, yoksa yer almaz.

Bir Dayanakİfadesi, İfade değerlendirilerek ve sonuç bir mantıksal türe dönüştürülerek değerlendirilir. Sonuç bir sayı ise ve sayı bağlamsal konuma eşitse sonuç doğruya, değilse yanlışa dönüştürülür. Sonuç bir sayı değilse, sonuç boolean işlevi çağrılarak mantıksal türe dönüştürülür. Bu bakımdan, para[3] konumsal yolu para[position()=3] konumsal yoluna eşdeğer olur.

Dayanaklar
[8]   Dayanak   ::=   '[' Dayanakİfadesi ']'
[9]   Dayanakİfadesi   ::=   İfade

2.5 Kısaltılmış Sözdizimi

Kısaltılmış sözdizimi kullanılan konumsal yol örnekleri:

  • para bağlamsal düğümün para eleman ç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.

  • @name bağlamsal düğümün name özniteliğini seçer.

  • @* bağlamsal düğümün tüm özniteliklerini seçer.

  • para[1] bağlamsal düğümün ilk para çocuğunu seçer.

  • para[last()] bağlamsal düğümün son para çocuğunu seçer.

  • */para bağlamsal düğümün tüm para torunlarını seçer.

  • /doc/chapter[5]/section[2] bağlamsal yolu doc'un 5. chapter'ının 2. section'ını seçer.

  • chapter//para bağlamsal düğümün chapter eleman çocuklarının para eleman astsallarını seçer.

  • //para belge kökünün para astsallarını, dolayısıyla bağlamsal düğümü içeren belgede bulunan tüm para elemanlarını seçer.

  • //olist/item bağlamsal düğümü içeren belgede bulunan ve ebeveynleri olist olan tüm item elemanlarını seçer.

  • . bağlamsal düğümün kendisini seçer.

  • .//para bağlamsal düğümün para eleman astsallarını seçer.

  • .. bağlamsal düğümün ebeveynini seçer.

  • ../@lang bağlamsal düğümün ebeveyninin lang özniteliğini seçer.

  • para[@type="warning"] bağlamsal düğümün, type özniteliğinin değeri warning olan tüm para çocuklarını seçer.

  • para[@type="warning"][5] bağlamsal düğümün, type özniteliğinin değeri warning olan 5. para çocuğunu seçer.

  • para[5][@type="warning"] bağlamsal düğümün 5. para çocuğunun type özniteliğinin değeri warning ise bu para çocuğu seçer.

  • chapter[title="Introduction"] bağlamsal düğümün chapter çocuklarından dizgesel değeri Introduction'a eşit title çocukları olanları seçer.

  • chapter[title] bağlamsal düğümün chapter çocuklarından en azından bir title çocuğu olanları seçer.

  • employee[@secretary and @assistant] bağlamsal düğümün employee çocuklarından hem secretary hem de assistant ö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. İkincisi para astsallarının ilkini seçerken, birincisi ebeveynlerinin ilk para çocukları olan tüm para elemanları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.

Kısaltmalar
[10]   KısaltılmışMutlakKonumsalYol   ::=   '//' GöreliKonumsalYol
[11]   KısaltılmışGöreliKonumsalYol   ::=   GöreliKonumsalYol '//' Konum
[12]   KısaKonum   ::=   '.'
| '..'
[13]   KısaKonumBelirteci   ::=   '@'?

3 İfadeler

3.1 Temel İfadeler

Bir DeğişkenGönderimi, bağlamdaki değişken bağıntıları arasından belirtilen isme sahip değişkenin değeri olarak değerlendirilir. İfade bağlamında değişken bağıntıları içinde değişken ismine bir değerin atanmamış olması bir hatadır.

Parantezler ifadeleri gruplamak için kullanılabilir.

[14]   İfade   ::=   Veyaİfadesi
[15]   Başatİfade   ::=   DeğişkenGönderimi
| '(' İfade ')'
| DizgeselSabit
| Sayı
| İşlevÇağrısı

3.2 İşlev Çağrıları

Bir İşlevÇağrısı ifadesi, işlev kütüphanesinin ifade değerlendirme bağlamı işlevlerinden birini betimleyen İşlevAdı kullanılarak ve Argümanlarının her biri, işleve gerekli türe dönüştürüldükten sonra işleve aktarılarak yapılan bir işlev çağrısı olarak değerlendirilir. Argüman sayısının yanlış belirtilmesi veya bir argümanın gerekli türe dönüştürülememesi bir hatadır. İşlevÇağrısı ifadesinin sonucu işlevden dönen sonuçtur.

Bir argüman, dizge türüne bir string işlevi çağrısındaki gibi dönüştürülür, sayı türüne number işlevindeki gibi ve mantıksal türe de boolean işlevindeki gibi dönüştürülür. Düğüm kümesi türünde olmayan bir argüman düğüm kümesine dönüştürülemez.

[16]   İşlevÇağrısı   ::=   İşlevAdı '(' ( Argüman ( ',' Argüman )* )? ')'
[17]   Argüman   ::=   İfade

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.

Dayanaklar konumsal yollarda kullanılan yöntemle ifadeleri filtrelemekte kullanılır. İfadenin sonucunun bir düğüm kümesi olmaması bir hatadır. Dayanak düğüm kümesini dala göre filtreler.

Not:
Bir Dayanak kendisine uygulanan dalla ilişkili olarak anlamlandırılır. Örneğin, preceding::foo[1] konumu belgede geriye doğru ilk foo elemanını seçer, çünkü [1] dayanağına uygulanan dal öncekiler dalıdır; (preceding::foo)[1] konumu ise tersine belgede ileriye doğru ilk foo elemanı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   ::=   Yolİfadesi
| Birleşimİfadesi '|' Yolİfadesi
[19]   Yolİfadesi   ::=   KonumsalYol
| Filtreİfadesi
| Filtreİfadesi '/' GöreliKonumsalYol
| Filtreİfadesi '//' GöreliKonumsalYol
[20]   Filtreİfadesi   ::=   Başatİfade
| Filtreİfadesi Dayanak

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 boolean işlevi çağrısındaki gibi bir mantıksal değere dönüştürüldükten sonra değerlendirilir. Terimlerinin hepsi yanlış ise sonuç yanlış, herhangi biri doğru ise sonuç doğrudur. Soldaki terim doğru ise sağdaki terim değerlendirilmez.

Bir and ifadesi, her terimi boolean işlevi çağrısındaki gibi bir mantıksal değere dönüştürüldükten sonra değerlendirilir. Terimlerinin hepsi doğru ise sonuç doğru, herhangi biri yanlış ise sonuç yanlıştır. Soldaki terim yanlış ise sağdaki terim değerlendirilmez.

Bir Eşitlikİfadesi (bir İlişkiselİfade olmayan) veya bir İlişkiselİfade (bir Toplamİfadesi olmayan) iki terimin değerlendirilmesinden elde edilen nesneler karşılaştırılarak değerlendirilir. Elde edilen nesnelerin karşılaştırması aşağıdaki üç madde altında tanımlanmıştır. İlkinde, düğüm kümelerinin katıldığı karşılaştırmalar, düğüm kümelerinin katılmadığı karşılaştırma kurallarıyla tanımlanmıştır; bu =, !=, <=, <, >= 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.

  1. 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ğerinin number iş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.

    • Eğ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ğerinin boolean iş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.

  2. 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 boolean işlevi uygulanmış gibi birer mantıksal değere dönüştürüldükten sonra karşılaştırılırlar.

    • Aksi takdirde, karşılaştırılan nesnelerden en az biri bir sayıysa, nesneler number işlevi uygulanmış gibi birer sayıya dönüştürüldükten sonra karşılaştırılırlar.

    • Aksi takdirde, karşılaştırılan nesnelerden en az biri bir dizgeyse, nesneler string işlevi uygulanmış gibi birer dizgeye dönüştürüldükten sonra karşılaştırılırlar.

    = 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 $x bir düğüm kümesini ifade ediyorsa, $x="foo" ile not($x!="foo") aynı anlama gelmeyecektir: Birincisi sadece ve sadece $x'teki bir düğüm foo dizgesel değerine sahipse doğru olacaktır; ikincisi ise sadece ve sadece $x'teki bütün düğümler foo dizgesel değerine sahipse doğru olacaktır.

  3. 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, &lt; ve &lt;= olarak öncelenmiş değerleriyle kullanılmalıdır. Aşağıdaki örnekte, test özniteliğinin değeri bir XPath ifadesidir:

    <xsl:if test="@value &lt; 10">...</xsl:if>

[21]   Veyaİfadesi   ::=   Veİfadesi
| Veyaİfadesi 'or' Veİfadesi
[22]   Veİfadesi   ::=   Eşitlikİfadesi
| Veİfadesi 'and' Eşitlikİfadesi
[23]   Eşitlikİfadesi   ::=   İlişkiselİfade
| Eşitlikİfadesi '=' İlişkiselİfade
| Eşitlikİfadesi '!=' İlişkiselİfade
[24]   İlişkiselİfade   ::=   Toplamİfadesi
| İlişkiselİfade '<' Toplamİfadesi
| İlişkiselİfade '>' Toplamİfadesi
| İlişkiselİfade '<=' Toplamİfadesi
| İlişkiselİfade '>=' Toplamİfadesi
Not:
Yukarıdaki sözdizimi şu öncelik sırasıyla etki eder (ilkinin önceliği en düşük olmak üzere):

  • or

  • and

  • =, !=

  • <=, <, >=, >

İşleçlerin hepsinde işlemler soldan sağa doğru uygulanır.

Örneğin, 3 > 2 > 1 ifadesi (3 > 2) > 1 ifadesine 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 [IEEE 754] olabilir. Özel "Not-a-Number" (NaN) (Bir-Sayı-değil) değeri, artı ve eksi sonsuz, artı ve eksi sıfır değerleri de bu sayılara dahildir. IEEE 754 standardının ana kurallarının özeti için [JLS]'nin 4.2.3. bölümüne bakınız.

Aritmetik işleçler terimlerini number işlevi çağrılmışçasına sayıya çevirirler.

+ 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-bar ifadesi foo-bar isimli çocuk elemanları içeren bir düğüm kümesi olarak ele alınacaktır. Halbuki, foo - bar ifadesi foo ve bar çocuk elemanlarının sayıya dönüştürülen dizgesel 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 2 işlemi 1 ile sonuçlanır.

  • 5 mod -2 işlemi 1 ile sonuçlanır.

  • -5 mod 2 işlemi -1 ile sonuçlanır.

  • -5 mod -2 işlemi -1 ile 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.

Sayısal İfadeler
[25]   Toplamİfadesi   ::=   Çarpımİfadesi
| Toplamİfadesi '+' Çarpımİfadesi
| Toplamİfadesi '-' Çarpımİfadesi
[26]   Çarpımİfadesi   ::=   TekTerimliİfade
| Çarpımİfadesi Çarpmaİşleci TekTerimliİfade
| Çarpımİfadesi 'div' TekTerimliİfade
| Çarpımİfadesi 'mod' TekTerimliİfade
[27]   TekTerimliİfade   ::=   Birleşimİfadesi
| '-' TekTerimliİfade

3.6 Dizgeler

Dizgeler sıfır veya daha çok karakterden oluşan karakter dizileridir. Burada karakter, XML belirtimindeki Kark sözdizimi ile eşleşmelidir. Bu durumda XPath'taki tek bir karakter, Unicode'da tek bir sabit değere tekabül eden tek bir Unicode soyut karakterine karşı düşer (bkz, [Unicode]); bu, bir 16 bitlik Unicode değerle aynı şey değildir: Unicode sabit değeri U+FFFF'ten büyük olan bir soyut karakterin Unicode kodlu karakter gösterimi bir 16 bitlik Unicode kod değeri çiftidir (bir vekil çift). Çoğu yazılım dilinde bir dizge 16 bitlik Unicode değerleri dizisi olarak ifade edilir; XPath'ın böyle dillerle gerçekleniminde bir vekil çiftin tek bir XPath karakteri olarak gerektiği gibi ele alındığından emin olunması gerekir.

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ğinden önce veya sonra özgürce istenen sayıda ve çeşitte İfadeBoşlukları karakteri eklenebilir.

İfadeDizgeciği sözdizimindeki belirsizlikleri giderme sırasında aşağıdaki özel dizgeciklere ayırma kuralları uygulanmalıdır:

İfade Sözdizimi
[28]   İfadeDizgeciği   ::=   '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'
| AdSınaması
| DüğümTürü
| İşleç
| İşlevAdı
| DalAdı
| DizgeselSabit
| Sayı
| DeğişkenGönderimi
[29]   DizgeselSabit   ::=   '"' [^"]* '"'
| "'" [^']* "'"
[30]   Sayı   ::=   Rakamlar ('.' Rakamlar?)?
| '.' Rakamlar
[31]   Rakamlar   ::=   [0-9]+
[32]   İşleç   ::=   İşleçAdı
| Çarpmaİşleci
| '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>='
[33]   İşleçAdı   ::=   'and' | 'or' | 'mod' | 'div'
[34]   Çarpmaİşleci   ::=   '*'
[35]   İşlevAdı   ::=    NitelAd - DüğümTürü
[36]   DeğişkenGönderimi   ::=   '$' NitelAd
[37]   AdSınaması   ::=   '*'
| KısaAd ':' '*'
| NitelAd
[38]   DüğümTürü   ::=   'comment'
| 'text'
| 'processing-instruction'
| 'node'
[39]   İfadeBoşlukları   ::=   B

Bir taşıyıcı dil [XML] sözdizimi kurallarına mı yoksa [XML Adları]'ındakilere mi uyacağına ya da [XML 1.1] sözdizimi kurallarına mı yoksa [XML Adları 1.1]'ındakilere mi uyacağına kendi karar verebilir.

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

last işlevi, ifade değerlendirme bağlamındaki bağlamsal boyuta eşit bir sayı ile döner.

sayı position()
İşlev

position işlevi, ifade değerlendirme bağlamındaki bağlamsal sıraya eşit bir sayı ile döner.

sayı count(düğüm-kümesi)
İşlev

count işlevi, düğüm-kümesi argümanındaki düğümlerin sayısı ile döner.

düğüm-kümesi id(nesne)
İşlev

id işlevi, elemanları eşsiz ID'lerine göre seçer (bkz, Eşsiz ID'ler). id işlevinin argümanı düğüm-kümesi olduğu takdirde, işlevin dönen değeri, bu düğüm kümesindeki düğümlerin her birinin dizgesel değerine uygulanan id sonuçlarının birleşimidir. id işlevinin argümanı düğüm-kümesi olmadığı takdirde, argüman string işlevi çağrılmış gibi bir dizgeye dönüştürülür; bu dizge boşluk (B 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'si foo olan elemanı seçer.

  • id("foo")/child::para[position()=5] ifadesi, eşsiz ID'si foo olan elemanın 5. para çocuğunu seçer.

dizge local-name(düğüm-kümesi?)
İşlev

local-name işlevi, belirtilen düğüm-kümesi içinde belgedeki sıraya göre ilk düğümün genişletilmiş isminin yerel kısmı ile döner. Eğer belirtilen düğüm-kümesi boşsa veya ilk düğümün genişletilmiş ismi yoksa, bir boş dizge döner. Eğer bir argüman belirtilmezse, argümanın öntanımlı değeri işlev ifadesinin üyesi olduğu ifade bağlamıdır.

dizge namespace-uri(düğüm-kümesi?)
İşlev

namespace-uri işlevi, belirtilen düğüm-kümesi içinde belgedeki sıraya göre ilk düğümün genişletilmiş isminin isim-alanı tanım-yeri (URI) ile döner. Eğer belirtilen düğüm-kümesi boşsa veya ilk düğümün genişletilmiş ismi yoksa ya da genişletilmiş ismin isim-alanı tanım-yeri boşsa, bir boş dizge döner. 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:
namespace-uri işlevi, eleman ve öznitelik düğümleri haricinde bir argüman için bir boş dizge ile dönecektir.

dizge name(düğüm-kümesi?)
İşlev

name işlevi, belirtilen düğüm-kümesi içinde belgedeki sıraya göre ilk düğümün genişletilmiş ismini ifade eden NitelAdı içeren bir dizge ile döner. NitelAd, genişletilmiş ismi ait olduğu düğümde etkili isim-alanı bildirimlerine göre ifade etmelidir. Normalde, bu, XML kaynakta yer alan 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 genişletilmiş ismi yoksa, bir boş dizge döner. 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:
name işlevinden dönen dizge, eleman ve öznitelik düğümleri haricinde bir argüman için local-name işlevinden dönen dizgeyle aynı olacaktır.

4.2 Dizge İşlevleri

dizge string(nesne?)
İşlev

string işlevi belirtilen nesneyi bir dizgeye şöyle dönüştürür:

  • Bir düğüm kümesini bir dizgeye dönüştürmek için, belgedeki sıraya göre ilk düğümün dizgesel 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 NaN dizgesine dönüştürülür.

    • Artı sıfır 0 dizgesine dönüştürülür.

    • Eksi sıfır 0 dizgesine dönüştürülür.

    • Artı sonsuz, Infinity dizgesine dönüştürülür.

    • Eksi sonsuz, -Infinity dizgesine 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 Sayı olarak, negatifse önüne tire imi (-) getirilerek gösterilir.

    • Aksi takdirde, sayı, öncesinde ve sonrasında en az birer rakam bulunan bir ondalık nokta içeren bir Sayı olarak, eğer sayı negatifse önüne bir tire imi (-) 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 false dizgesine, mantıksal doğru değeri ise true dizgesine 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:
string iş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]'deki xsl:number elemanı veya format-number işlevi kullanılabilir.

dizge concat(dizge, dizge, dizge*)
İşlev

concat işlevi, argümanlarını birbirine ulayarak oluşturduğu dizgeyi döndürür.

mantıksal-tür starts-with(dizge, dizge)
İşlev

starts-with işlevi, eğer birinci dizge, ikinci dizge ile başlıyorsa doğru, aksi takdirde yanlış döndürür. Eğer ikinci dizge boşsa doğru döndürür.

mantıksal-tür contains(dizge, dizge)
İşlev

contains işlevi, eğer birinci dizge, ikinci dizgeyi içeriyorsa doğru, aksi takdirde yanlış döndürür. Eğer ikinci dizge boşsa doğru döndürür.

dizge substring-before(dizge, dizge)
İşlev

substring-before işlevi, birinci dizgenin başlangıcından ikinci dizgenin ilk bulunduğu yere kadar olan alt dizgeyi döndürür. Eğer birinci dizge ikinci dizgeyi içermiyorsa veya ikinci dizge boşsa boş bir dizge döner. Örneğin, substring-before("1999/04/01","/") ifadesi 1999 dizgesini döndürecektir.

dizge substring-after(dizge, dizge)
İşlev

substring-after işlevi, birinci dizgenin içinde ikinci dizgenin ilk bulunduğu konumda, ikinci dizgenin bitiminden birinci dizgenin sonuna kadar olan alt dizge ile döner. Eğer birinci dizge ikinci dizgeyi içermiyorsa veya ikinci dizge boşsa boş bir dizge döner. Örneğin, substring-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

substring işlevi, birinci argümanda belirtilen dizgenin başından itibaren ikinci argümanda belirtilen sıradaki karakterden başlayan ve üçüncü argümanda belirtilen sayıda karakter içeren dizgeyle döner. Örneğin, substring("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, Dizgeler) içindeki her karakterin sayısal konumu şöyle belirlenir: ilk karakterin sıra numarası 1'dir, ikinci karakterinki 2, ve böyle gider.

Not:
Bu, Java ve ECMAScript'teki ilk karakter konumunun 0 kabul edildiği String.substring yö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 round işlevi çağrısındaki gibidir. Aşağıdaki örnekler yararsız durumları göstermektedir:

  • substring("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-length işlevi, belirtilen dizge içindeki karakter sayısı ile döner (bkz, Dizgeler). Eğer bir argüman belirtilmezse, öntanımlı dizge, bir dizgeye dönüştürülmüş olarak bağlamsal düğümdür; başka bir deyişle, öntanımlı dizge bağlamsal düğümün dizgesel değeridir.

dizge normalize-space(dizge?)
İşlev

normalize-space işlevi belirtilen dizgenin başındaki ve sonundaki boşluk karakterleri atıldıktan sonra kalan dizgenin içindeki boşluk dizgecikleri birer boşluk karakteri ile değiştirilerek elde edilen dizgeyi döndürür. Boşluk karakterleri XML belirtimindeki B sözdizimiyle eşleşmelidir. Eğer bir argüman belirtilmezse, öntanımlı dizge bağlamsal düğümün dizgesel değeridir.

dizge translate(dizge, dizge, dizge)
İşlev

translate işlevi birinci dizgenin içindeki karakterlerden ikinci dizgede belirtilenlerin yerlerine üçüncü dizgede belirtilenlerden ikincidekiyle aynı konumda olanları yerleştirerek elde edilen dizgeyi döndürür. Örneğin, translate("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:
translate 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.

4.3 Mantıksal İşlevler

mantıksal-tür boolean(nesne)
İşlev

boolean işlevi argümanını bir mantıksal değere şöyle dönüştürür:

  • Bir 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

not işlevi, argümanı yanlışsa doğru, doğruysa yanlış ile döner.

mantıksal-tür true()
İşlev

true işlevi doğru ile döner.

mantıksal-tür false()
İşlev

false işlevi yanlış ile döner.

mantıksal-tür lang(dizge)
İşlev

lang işlevi, bağlamsal düğümün dili olarak xml: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 işlevi yanlış değeriyle döner. Böyle bir öznitelik varsa ve değeri işlevin argümanındaki değeriyle harf büyüklüğüne duyarsız olarak aynıysa veya öznitelik - 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 lang işlevi doğru değeriyle döner. Örneğin, lang("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

number işlevi argümanını bir sayıya şöyle çevirir:

  • Sırayla, isteğe bağlı bir boşluk karakteri, isteğe bağlı bir tire işareti, zorunlu bir Sayı 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.

  • Mantıksal doğru 1'e, yanlış 0'a çevrilir.

  • Bir düğüm kümesi önce string 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.

  • Dö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, number 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 Sayı sözdizimiyle eşleşmedikçe number işlevi kullanılamaz.

sayı sum(düğüm-kümesi)
İşlev

sum işlevi düğüm kümesi içindeki düğümlerin birer sayıya dönüştürülen dizgesel değerlerinin toplamı ile döner.

sayı floor(sayı)
İşlev

floor işlevi belirtilen sayıyı en yakın küçük tamsayıya yuvarlar. Eğer argüman bir NaN ise NaN, artı sonsuzsa artı sonsuz, eksi sonsuzsa eksi sonsuz, artı sıfırsa artı sıfır, eksi sıfırsa eksi sıfır döner. Örnek:

floor(-0.6) -> -1       floor(0.6) ->  0
floor(-0.4) -> -1       floor(0.4) ->  0

sayı ceiling(sayı)
İşlev

ceiling işlevi belirtilen sayıyı en yakın büyük tamsayıya yuvarlar. Eğer argüman bir NaN ise NaN, artı sonsuzsa artı sonsuz, eksi sonsuzsa eksi sonsuz, artı sıfırsa artı sıfır, eksi sıfırsa eksi sıfır döner. Örnek:

ceiling(-0.6) -> 0        ceiling(0.6) -> 1
ceiling(-0.4) -> 0        ceiling(0.4) -> 1

sayı round(sayı)
İşlev

round işlevi belirtilen sayıyı en yakın tamsayıya yuvarlar. Eğer argüman bir NaN ise NaN, artı sonsuzsa artı sonsuz, eksi sonsuzsa eksi sonsuz, artı sıfırsa artı sıfır, eksi sıfırsa eksi sıfır döner. Örnek:

round(-0.6) -> -1       round(0.6) ->  1
round(-0.4) ->  0       round(0.4) ->  0

Not:
round ve floor işlevleri -1 ile 0 arasındaki değerler için farklı davranırlar. round işlevinin sonucuyla, aynı sayıya 0.5 eklendikten sonra yapılan bir floor çağrısından dönen sonuç aynı olmayacaktır.

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 BilgiKümesi] arasındaki ilişki XML Bilgi Kümesi Eşlemi bölümünde açıklanmıştır.

XML belgeler üzerinde XPath tarafından yapılan işlemler XML İsim-alanları Önergesine [XML Adları] uygun olmalıdır.

Ağaç düğümlerden oluşur. Yedi düğüm türü vardır:

Her düğüm türü için o türe özgü bir dizgesel değer belirleme yöntemi vardır. Bazı düğüm türleri için dizgesel değer düğümün bir parçası iken bazıları için de, astsal düğümlerinin dizgesel değerlerinden hesaplanır.

Not:
Eleman düğümleri ve kök düğümler için bir düğümün dizgesel değeri DOM nodeValue yönteminden (bkz, [DOM]) dönen dizge ile aynı değildir.

Bazı düğüm türlerinin ayrıca birer genişletilmiş ismi vardır ve bu isim bir isim-alanı tanım-yeri ile bir yerel kısımdan oluşur. Yerel kısım bir dizgedir. İsim-alanı tanım-yeri bir dizge olabileceği gibi bir null değer de olabilir. Bir XML belgenin bir isim-alanı bildiriminde belirtilmiş bir isim-alanı yeri, [RFC2396]'de tanımlandığı gibi bir tanım-yeri (URI) başvurusudur; bu onun bir bölüm belirteci olabileceği ve göreli olabileceği anlamına gelir. Bir genişletilmiş ismin isim-alanı tanım-yeri bileşeni, eğer genişletilmiş isim öneki isim-alanı yeri bir göreli tanım-yeri (bir bölüm belirteci olsun/olmasın) olan bir isim-alanı bildirimi tarafından bildirilmiş bir NitelAddan elde edilmişse, gerçeklenime bağlıdır. Böyle, genişletilmiş isimlerin isim-alanı tanım-yeri değerine bağlı olduğu bir XPath ifadesi birlikte çalışabilir değildir. İki genişletilmiş isim, yerel kısımları aynıysa ve her ikiside boş isim-alanına sahipse veya her ikiside aynı isim-alanı tanım-yerine sahipse, bunlar eşittir.

Belgedeki sıra denilen, belgedeki tüm düğümler üzerinde tanımlı ve genel öğeler yorumlandıktan sonra belgenin XML gösteriminde yer alan her düğümün XML gösteriminin ilk karakterindeki sıraya karşı düşen bir sıralama mevcuttur. Bu bakımdan, kök düğüm ilk düğüm olur. Eleman düğümleri çocuklarından önce yer alır. Sonuç olarak, belgedeki sıra, (öğeler yorumlandıktan sonra) eleman düğümlerinin başlangıç etiketlerinin belgede yer alış sırasıdır. Bir elemanın öznitelik ve isim-alanı düğümleri elemanın çocuklarından önce yer alır. İsim-alanı düğümleri, öznitelik düğümlerinden önce yer alacak şekilde tanımlanır. İsim-alanı düğümlerinin göreli sırası gerçeklenime bağlıdır. Öznitelik düğümlerinin göreli sırası gerçeklenime bağlıdır. Belgedeki ters sıra, belgedeki sıranın tersidir.

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 dizgesel değeri, kök düğümün belgedeki sıraya göre tüm metin düğümü astsallarının dizgesel değerlerinin birleşimidir.

Kök düğümün bir genişletilmiş ismi yoktur.

5.2 Eleman düğümleri

Belgedeki her eleman için bir eleman düğümü vardır. Bir eleman düğümü, XML İsim-alanları Önergesi [XML Adları] gereğince, etikette belirtilen elemanın NitelAdı genişletilerek elde edilen bir genişletilmiş isme sahiptir. Elemanın, eğer NitelAdının bir öneki ve uygulanabilir bir öntanımlı isim-alanı yoksa, genişletilmiş isminin isim-alanı tanım-yeri boş olacaktır.

Not:
[XML Adları] önergesinin düzeltmeler öncesi sürümünün A.3. ek bölümündeki gösterimde, genişletilmiş ismin yerel kısmı, ExpEType elemanının type özniteliğine karşı düşmektedir; genişletilmiş ismin isim-alanı tanım-yeri, ExpEType elemanının ns ö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 dizgesel değeri elemanın belgedeki sıraya göre tüm metin astsallarının dizgesel değerlerinin birleşimidir.

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 ebeveynidir; bununla birlikte, bir öznitelik düğümü kendi ebeveyn elemanının bir çocuğu değildir.

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 genişletilmiş isme ve bir dizgesel değere sahiptir. genişletilmiş isim, XML İsim-alanları Önergesi [XML Adları] gereğince, etikette belirtilen elemanın 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ün A.3. ek bölümündeki gösterimde, genişletilmiş ismin yerel kısmı, ExpAName elemanının name özniteliğine karşı düşmektedir; genişletilmiş ismin isim-alanı tanım-yeri, ExpAName elemanının ns özniteliğine karşı düşmekte olup eğer bu öznitelik belirtilmezse değeri null olacaktır.

Bir öznitelik düğümü bir dizgesel değere sahiptir. Bir dizgesel değer XML Önergesinde [XML] belirtildiği gibi normalleştirilir. Normalleştirilmiş değeri, sıfır uzunlukta bir dizge olan bir öznitelik özel olarak ele alınmaz: dizgesel değeri sıfır uzunluktaki bir dizge olan bir öznitelik düğümüyle sonuçlanır.

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, [XML Adları]).

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 Adları] tarafından örtük olarak bildirilen 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 ebeveynidir; bununla birlikte, bir isim-alanı düğümü ebeveyninin çocuğu değildir. Elemanlar, isim-alanı düğümlerini asla paylaşmazlar: eğer bir eleman başka bir elemanla aynı değilse, bir elemanın isim-alanı düğümlerinin hiçbiri başka bir elemanın isim-alanı düğümleri ile aynı olmayacaktır. Yani, bir eleman şu durumlarda bir isim-alanı düğümüne sahip olacaktır:

  • 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ın xmlns ö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 genişletilmiş isme sahiptir: yerel kısım isim-alanı önekidir (isim-alanı öntanımlı isim-alanıysa bu boş olacaktır); isim-alanı tanım-yeri daima tanımsız olacaktır.

Bir isim-alanı düğümünün dizgesel değeri isim-alanı önekine bağlı isim-alanı tanım-yeridir; eğer XML belge içindeki isim-alanı bildiriminde yer alan isim-alanı yeri bir göreli tanım-yeri (bir bölüm betimleyici olsun/olmasın) ise dizgesel değer gerçeklenim bağımlıdır. Böyle bir isim-alanı düğümünün dizgesel değerine bağlı bir XPath ifadesi birlikte çalışılabilir olmayacaktır.

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 genişletilmiş isme sahiptir: yerel kısım işlem yönergesinin hedefidir; isim-alanı tanım-yeri tanımsızdır. Bir işlem yönergesi düğümünün dizgesel değeri işlem yönergesinden sonra gelen hedef ve bir miktar boşluk karakteridir. Sonlandırıcı ?> 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 dizgesel değeri açıklama açılış (<!--) ve kapanış (-->) dizgelerini içermez.

Bir açıklama düğümünün bir genişletilmiş ismi yoktur.

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 dizgesel değeri karakter verisidir. Bir metin düğümü daima en azından bir veri karakteri içerir.

Bir CDATA bölümündeki her karakter, karakter verisi olarak ele alınır. Bu bakımdan, kaynak belgedeki <![CDATA[<]]> dizgesi &lt; 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 &lt; ve &amp; 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 &lt; ö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 [XML] belirtildiği gibi sadece #xA içerecek şekilde normalleştirilir. Belge elemanının dışında kalan boşluk karakterleri metin düğümleri üretmezler.

Bir metin düğümünün bir genişletilmiş ismi yoktur.

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 ([XPointer] ve [XSLT] gibi) güvenir.

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/xml adresindedir.
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-names adresindedir.
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/xslt adresindedir.

B XML Bilgi Kümesi Eşlemi (Bilgilendirici)

XPath veri modelindeki düğümler XML Bilgi Kümesi [XML BilgiKümesi] tarafından sağlanmış bilgi kalemlerinden şöyle elde edilebilir

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ün geniş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ün geniş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ün geniş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ün geniş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 [XML BilgiKümesi] ile uyumludur. Aşağıdaki bilgi kalemleri, veri modelinin bir örneğini oluşturacak bilgi kümesi üreticileri tarafından gerçeklenmelidir:

  • ç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.