|
|
||||||||||||
|
|
XPath İşlevleri
XPath işlevleri temelde dört sınıfa ayrılırlar:
Bu sınıflandırma, W3.Org belgelerinde de aynı şekildedir. Düğüm kümesi işlevleri genel olarak düğüm kümeleri ile çalıştıkları için bu şekilde adlandırılmışlardır. Diğerleri için de benzer durum vardır. Tüm genel XPath işlevleri 27 adettir. XPath işleyen uygulamalar için ise bunlara yenileri ilave edilebilmektedir. Fakat böyle durumlarda o uygulamaya bağımlı kalınmaktadır. Aşağıda ayrıntılı olarak açıklanan bu 27 işlev ise tüm XPath uygulamalarında geçerlidir.
TANIMLAYICI ÖZNİTELİKLER - ID İŞLEVİ - ID DEYİMİ XML belgelerinde öğelere doğrudan ulaşmayı kolaylaştıran tanımlayıcı öznitelikler oluşturulmasına izin verilir. Bunun için DTD belge türü tanımlaması kullanılır. Bu yöntem XPath ya da Dom ile çalışırken öğelere doğrudan ve kolayca ulaşılmasını sağlar. Öncelikle XML belgesi içinde öğeleri tanımlayıcı bir özniteliğin olup olmadığına bakmak gerekir. Benzersiz ve sizin tanımlama kurallarınıza uygun bir öznitelik varsa bunun tanımlayıcı öznitelik olmasına karar verebilirsiniz. Tanımlayıcı öznitelikler DTD tanımlama bölgesinde ID deyimi ile birlikte yer alırlar. Kursumuzun başında işlediğimiz DTD konusunda, hatırlayacağınız üzere ATTLIST ile öznitelik tanımlarken CDATA deyimini kullanmıştık. Tanımlayıcı öznitelikler için CDATA yerine ID kullanmak kâfidir. Tanımlayıcı öznitelik olarak seçtiğimiz KOD değerleri için öznitelik tanımlamamız aşağıdaki gibi oldu: <!ATTLIST KITAP
KOD ID #REQUIRED>
Tanımlayıcı öznitelikler, öğeleri kesinlikle işaret ettikleri için bir belgede aynı kapsamda aynı değeri taşıyan birden fazla tanımlayıcı öznitelik bulunamaz. ID ile belirtilen tanımlayıcı öznitelikler aslında girilmesi zorunlu alanlar değildirler. Yani tanımlama bölgesinde #REQUIRED yerine #IMPLIED kullanılabilir. Tanımlayıcı alanların genelde boş bırakılmaması gerekse de yalnızca birkaç öğeye doğrudan ulaşılması gereken durumlar için alanın giirlmesi zorunlu olmayacaktır. XPATH ve XSL'de ID işlevini kullanmadan önce, içinde DTD tanımlaması olan kitaplar belgemizi inceleyin. <?xml version="1.0" encoding="ISO-8859-9"?>
<!DOCTYPE KITAPLAR
[
<!ELEMENT KITAPLAR (KITAP*)>
<!ELEMENT KITAP (KITAPADI, YAZAR, YAYINEVI)>
<!ATTLIST KITAP
KOD ID #REQUIRED
SAYFA CDATA #IMPLIED>
<!ELEMENT KITAPADI (#PCDATA)>
<!ELEMENT YAZAR (#PCDATA)>
<!ELEMENT YAYINEVI (#PCDATA)>
]>
<KITAPLAR>
...
<KITAP KOD="STRITF" SAYFA="350">
<KITAPADI>Stratejik İttifak</KITAPADI>
<YAZAR>Alptekin Dursunoğlu</YAZAR>
<YAYINEVI>Anka</YAYINEVI>
</KITAP>
<KITAP KOD="KLCYAR" SAYFA="300">
<KITAPADI>Kılıç Yarası Gibi</KITAPADI>
<YAZAR>Ahmet Altan</YAZAR>
<YAYINEVI>Can</YAYINEVI>
</KITAP>
<KITAP KOD="SHRROM" SAYFA="280">
<KITAPADI>Şehir Romantiği..</KITAPADI>
<YAZAR>Buket Uzuner</YAZAR>
<YAYINEVI>Remzi</YAYINEVI>
</KITAP> ...
</KITAPLAR>
Tanımlayıcı öznitelik kullanıldığı durumlarda öğeye doğrudan erişmek ID işlevi ile mümkün oluyor. DOM bileşeninin SelectNodes işlevinde aşağıdaki deyim kullanıldığında ilgili öğeye doğrudan ulaşılabiliyor. xml.SelectNodes("id('KLCYAR')") Bu sorgu aşağıdakinden başkasını üretmeyecektir. <KITAP KOD="KLCYAR" SAYFA="300"> <KITAPADI>Kılıç Yarası Gibi</KITAPADI> <YAZAR>Ahmet Altan</YAZAR> <YAYINEVI>Can</YAYINEVI> </KITAP> Üsttekinin aynısı tabii ki XSL'deki süzme gibi işlemler için de geçerlidir. <xsl:template match="id('KLCYAR')">
ATTLIST tanımlamasında ID ile tanımlanana alanı, XPATH'in id işlevi anlayacak ve aradığı öğeyi bulacaktır. Bu işlev kullanılırken anahtar bilginin tamamının belirtilmesi gerektiğini, metnin bir kısmını belirterek arama yapılamayacağını unutmayın. Sonuçta XPATH'in id işlevi uygun öğeyi bulursa yalnızca onu getirecektir, bulamazsa herhangi bir şey getirmeyecektir.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||