این توابع در گروه های زیر طبقه بندی شده اند :

 

کلمه fn در اینجا یعنی کلمات بعدیش اسم تابع هستند

توابع گروه Accessor
  •  fn:node-name(node)
 نام نودی که در پرانتز مشخص شده بر می گرداند
  •  fn:nilled(node)
 اگر ارگومان مورد نظر از نود برابر صفر باشد یا نه  مقدار بولین را بر می گرداند
  •  fn:data(item.item,...)
 تعدادی ار گومان می گیرد و سپس رشته ای از  موارد تجزیه ناپذیر بر می گرداند
  •  fn:base-uri()
  • fn:base-uri(node)
 مسیر نود مشخص شده  یا  نود جاری را بر می گرداند
  •  fn:document-uri(node)
 ادرس url سندی که مربوط به نود مشخص شده است بر می گرداند
توابه گروه Error and Trace

 

 fn:error()


fn:error(error)


fn:error(error,description)


fn:error(error,description,error-object)


 مثال :

Example: error(fn:QName('http://example.com/test', 'err:toohigh'), 'Error: Price is too high')

 نتیجه :

http://example.com/test#toohigh   و رشته  "Error: Price is too high" را به پردازشگر خارجی  بر می گرداند

 

 

 fn:trace(value,label)


 از این تابع برای دیباگ کردن کوئری ها استفاده می شود
توابع numeric
 اینها توابع عددی هستند

 

 fn:number(arg)

 

 مقدار عددی ارگومان مشخص شده را بر می گرداند

ارگومان این تابع می تواند مقداری  بولین یا رشته ای یا نوود باشد

 

 مثلا رشته 100 را به او می دهیم عدد ریاضی 100 را می دهد

number('100')

 اگر مقدار بولین که درونش می نویسیم true باشد عدد 1 می دهد و اگر false باشد عدد صفر می دهد

 

 fn:abs(num)

 قدر مطلق عدد درون پرانتزش را بر می گرداند

مثلا

abs(-100)

می شود 100

و

abs(100)

می شود خود 100

چون قدر مطلق یعنی مثبت عدد را بر می گرداند

قدر مطلق عدد صفر هم که خود صفر هست

 

fn:ceiling(num)

کوچکترین عدد صحیح که از عدد مشخص شده در پرانتز بزرگتر باشد را می دهد البته به شرطی که عدد درون پرانتز اعشاری باشد اگر صحیح باشد خودش جواب است

 مثال

ceiling(3.14)

می شود عدد 4

 

 fn:floor(num)

 بزرگترین عدد صحیح که کوچکتر از عدد اعشاری درون پرانتز باشد را می دهد

مثلا

floor(3.14)

می شود عدد 3

 

 fn:round(num)

 عدد اعشاری درون پرانتز را به نزدیکترین عدد صحیح اش گرد می کند

 مثال

round(3.14)

می شود عدد 3

و

round(3.64)

می شود عدد 4

 

round(2.5)

می شود عدد 3

 

 

 fn:round-half-to-even()

 اگر قسمت اعشاری نیم بود عدد اعشاری را به عدد زوج گرد کند

مثال

round-half-to-even(0.5)

می شود عدد صفر

 

round-half-to-even(1.5)

می شود عدد 2

 

round-half-to-even(2.5)

می شود عدد 2

 
 
توابع string
 اینها توابع رشته ای هستند

 

 fn:string(arg)

 ارگومانی از نوع عدد یا بولین یا مجموعه ای از نوودها می گیرد و یک رشته بر می گرداند

یعنی هر چیزی درون پرانتزش را به رشته تبدیل می کند

 مثال

string(314)

می شود رشته

"314"

 

 fn:codepoints-to-string(int,int,...)

 کد اسکی حروف مورد نظر را گرفته رشته انها را که شامل کاراکترهای ان کدهای اسکی است  بر می گرداند

 مثال

codepoints-to-string(84, 104, 233, 114, 232, 115, 101)

می شود رشته

'Thérèse'

 

 fn:string-to-codepoints(string)

 کدهای اسکی کاراکترهای رشته درون پرانتزش را بر می گرداند

 مثال

string-to-codepoints("Thérèse")

می شود اعداد یا کدهای اسکی زیر

84, 104, 233, 114, 232, 115, 101

 

fn:codepoint-equal(comp1,comp2

fn:compare(comp1,comp2,collation)

 مقدار دو رشته ای که به جای ارگومانهای comp1 , comp2 می نویسید را با هم مقایسه می کند البته مقدار ارگومان collation روش مقایسه است یعنی ایا حروف کوچک و بزرگ با هم فرق داشته باشند یا نه اگر مقدار collation صفر باشد یا استفاده نشود بین حروف کوچک و بزرگ فرق می گذارد و اگر 1 باشد فرق نمی گذارد

 

در جدول کدهای اسکی همیشه حروف بزرگ از حروف کوچک کوچکترند

می دانید که دو رشته بصورت حرف به حرف با هم مقایسه می شوند و بلافاصله با رسیدن به یک اختلاف نتیجه بدست امد بصورت کلی بیان می شود و این کدهای اسکی حروف هستند که با هم مقایسه می شوند

اگر دو رشته با هم مساوی باشند عدد صفر را بر می گرداند

اگر رشته اولی از دومی بزرگتر بود عدد 1 را بر می گرداند

اگر رشته اولی از دومی کوچکتر بود عدد -1 را بر می گرداند

 مثال

compare('ghi', 'ghi')

می شود عدد صفر

 

 

compare('Ghi', 'ghi')

چون کد اسکی  حرف G از g کوچکتر است  پس به اولین اختلاف رسیدیم و مقایسه را ادامه نمی دهیم و همین جا نتیجه می گیریم رشته اول از رشته دوم کوچکتر است

 

 fn:concat(string,string,...)

 رشته های دورن پرانتزش را به هم چسبانده و یک رشته بزرگ تر درست می کند

 مثال

concat('XPath ','is ','FUN!')

می شود رشته

'XPath is FUN!'

 

fn:string-join((string,string,...),sep)

رشته های مشخص شده در پرانتز را به هم وصل می کند اما بین انها چه می گذارد  کاراکتری که ما در ارگومان sep مشخص کرده ایم

 مثال

string-join(('We', 'are', 'having', 'fun!'), ' ')

می شود

' We are having fun! '

 

string-join(('We', 'are', 'having', 'fun!'))

می شود

'Wearehavingfun!'

 

string-join((), 'sep')

می شود

''

 

fn:substring(string,start,len)
fn:substring(string,start)

از  رشته مشخص شده در پارامتر اول

از محل مشخص شده در پارامتر دوم

به تعدادی که در پارامتر سوم مشخص شده

کاراکتر بر می گرداند

اگر مثل تابع دومی ، تعداد کاراکترهای مورد نظر را مشخص نکنیم ، از محل شروع تا اخر رشته را بر می گرداند

 توجه داشته باشید شماره گذاری کاراکترهای  رشته از یک شروع می شود

 مثال

substring('Beatles',1,4)

می شود رشته

'Beat'

 

مثال

substring('Beatles',2)

می شود رشته

'eatles'

 

 fn:string-length(string)


fn:string-length()

 تعداد کاراکترهای رشته دورن پرانتز را بر می گرداند

اگر درون پرانتز هیچ رشته ای را ننویسید مثل تابع دومی ، ان وقت تعداد کاراکترهای محتوای نوود جاری را بر می گرداند

 مثال

string-length('Beatles')

می شود

7

 

fn:normalize-space(string)


fn:normalize-space()

از اول و آخر رشته دورن پرانتز ، تمام جاهای خالی را حذف می کند

و اگر چند جای خالی کنار هم بین کاراکترهای رشته باشد فقط یکی را نگه می دارد و بقیه را حذف می کند

اما اگر هیچ رشته ای دورن پرانتز مشخص نشود ، این تابع همین کار را روی نوود جاری انجام می دهد

مثال

normalize-space(' The   XML ')

نتیجه

'The XML'

fn:upper-case(string)

 رشته دورن پرانتز را به حرف بزرگ تبدیل می کند

مثال

upper-case('The XML')

نتیجه

'THE XML'

fn:lower-case(string)

 رشته دورن پرانتز را به حرف کوچک تبدیل می کند

مثال

lower-case('The XML')

جواب

'the xml'

fn:translate(string1,string2,string3)

در رشته اولی ، تمام زیر رشته هایی که در پارامتر دوم می باشند را پیدا کرده و به جای انها رشته سومی را قرار می دهد

ولی روش کار یه کمی عجیب و غریبه

 

مثال

translate('12:30','30','45')

نتیجه

'12:45'

روش کار :

رشته 30 با رشته 45 کارکتر به کاراکتر نظیر به نظیر می شن

یعنی به جای 3 کاراکتر 4 و به جای 0 کاراکتر 5 قرار می گیره

مثال

translate('12:30','03','54)

نتیجه

'12:45'

رشته 30 با رشته 45 کارکتر به کاراکتر نظیر به نظیر می شن

یعنی به جای 0 کاراکتر5 و به جای 43 کاراکتر 4 قرار می گیره

حالا ما در رشته اولی ، 30 داریم پس کاراکترهای جایگزین به جای کاراکترهای نظیر به نظیسر خودشون می شینن

 

مثال

translate('12:30','0123','abcd')

نتیجه

'bc:da'

fn:escape-uri(stringURI,esc-res)

با دقت به مثالها متوجه کار این تابع خواهید شد

اگر مقدار پارامتر esc-res برابر true باشد ، انگاه به جای کاراکترهای /  در ادرس ، مقدار حرفی را قرار می دهد

و اگر false باشد هیچ تغییری در ادرس نمی دهد

مثال

escape-uri("http://example.com/test#car", true())

جواب

"http%3A%2F%2Fexample.com%2Ftest#car"

مثال

escape-uri("http://example.com/test#car", false())

جواب

"http://example.com/test#car"

مثال

escape-uri ("http://example.com/~bébé", false())

جواب

"http://example.com/~b%C3%A9b%C3%A9"

fn:contains(string1,string2)

اگر رشته پارامتر دوم در رشته پارامتر اولی بود ، مقدار true و در غیر این صورت مقدار false را بر می گرداند

مثال

contains('XML','XM')

جواب

true

fn:starts-with(string1,string2)

اگر رشته پارامتر اول با رشته ای که در پارامتر دوم مشخص شده ، شروع شده باشد مقدار true و در غیر این صورت مقدار false را بر می گرداند

مثال

starts-with('XML','X')

جواب

true

fn:ends-with(string1,string2)

اگر رشته پارامتر اول با رشته ای که در پارامتر دوم مشخص شده ، تمام  شده باشد مقدار true و در غیر این صورت مقدار false را بر می گرداند

مثال

ends-with('XML','X')

جواب

true

fn:substring-before(string1,string2)

تمام کاراکترهایی در رشته اول که قبل از موقعیت رشته دوم هستند را بر می گرداند

مثال

substring-before('12/10','/')

جواب

'12'

fn:substring-after(string1,string2)

تمام کاراکترهایی در رشته اول که بعد از موقعیت رشته دوم هستند را بر می گرداند

مثال

substring-after('12/10','/')

جواب

'10'

fn:matches(string,pattern)

اگر رشته دومی به همان ترتیب کاراکترها در رشته اولی بود این تابع مقدار true و در غیر این صورت مقدار false می دهد

مثال

matches("Merano", "ran")

جواب

true

fn:replace(string,pattern,replace)

در رشه اول ، دقیقا به جای رشته دوم مقدار رشته سوم را جایگزین می کند

ترتیب کاراکترها بسیار مهم است مثلا اگر می خواهید به جای ra عبارت ds قرار دهید دقیقا باید ra در رشته اول باشد و انگاه دقیقا با ds جایگزین می شود

اما ar دیگر قابل قبول نیست

مثال

replace("Bella Italia", "l", "*")

جواب

'Be**a Ita*ia'

مثال

replace("Bella Italia", "l", "")

جواب

'Bea Itaia'

fn:tokenize(string,pattern)

با  موارد زیر اشنا شوید :( برای مشاهده منبع جدول زیر اینجا کلیک کنید )

\n

 یعنی کراکتر خط بعد
 .  هر کاراکتر دیگری به جز کاراکتر خط بعد
 [a-f]  یک کاراکتر که حرف کوچک بوده می تواند a تا f باشد

 

 \d

یک  کاراکتر رقمی از صفر تا 9

 

\s

 یک کاراکتر جای خالی یا یک فاصله tab

 

*

 اگر کنار گزینه های بالا بیاید یعنی صفر یا هر تعدادی از ان نوع کاراکتر که کنار هم باشند

 

+

  اگر کنار گزینه های بالا بیاید یعنی حداقل یک یا هر تعدادی از ان نوع کاراکتر که کنار هم باشند

 

?

   اگر کنار گزینه های بالا بیاید یعنی صفر یا یک کاراکتر  از ان نوع کاراکتر که کنار هم باشند
 {4}    اگر کنار گزینه های بالا بیاید ییعنی 4 تا کاراکتر از نوع کاراکتری که مشخص شده و کنار هم باشند

 

\+

 علامت اسلش قبل از بعلاوه یعنی پردازنده با بعلاوه مثل انچیزی که در بالا تعریف کردیم رفتار نکند بلکه این یعنی فقط یک کاراکتر بعلاوه

 

 .*

 یعنی هیچ یا هر چند تا کاراکتر که کنار هم هستند به جز کاراکتر خط بعد

 

\$

 علامت دلار به تنهایی دارای معنا می باشد و ان مشخص کردن انتهای یک عبارت است اگر منظور شما یک  کاراکتر دلار در جمله است یک علامت اسلش قبلش بگذارید تا معنی کاراکتر معمولی دلار را بدهد

 

\d+

 یعنی یک یا چند تا رقم کنار هم

 

\.

 این هم یعنی دقیقایک  کاراکنر نقطه در جمله

 

\d{2}

 دقیقا دو رقم نه کمتر نه بیشتر

 

.*

 یعنی هیچ یا هر چند تا کاراکتر

 

 

 
   
   
   

 

این تابع رشته ای را به تعدادی زیر رشته تبدیل می کند

البته اینجوری که جدا کننده کلمات از هم دیگر ان چیزی خواهد بود که در پارامتر دوم یعنی pattern ذکر شده است

خود کاراکترهایی که بعنوان جدا کننده زیر رشته ها یا کلمات ذکر شده دیگر در خروجی دیده نخواهند شد

 

مثال

tokenize("XPath is fun", "\s+")

جواب

\s+

یعنی جداکننده زیر رشته ها از هم کاراکتر جای خالی باشه

("XPath", "is", "fun")

 

 

مثال

fn:tokenize("abracadabra", "(ab)|(a  ) " )
علامت | یعنی یا
نتیجه

("", "r", "c", "d", "r", "")


مثال
tokenize("The cat sat on the mat", "\s+")

نتیجه
("The", "cat", "sat", "on", "the", "mat")



مثال

tokenize("1, 15, 24, 50", ",\s*")

یعنی جداکننده ها یک کاراکتر ویرگول و بعد از ان هیچ یا هر چند تا جای خالی هستند
نتیجه
("1", "15", "24", "50")

 

مثالهای بیشتر

توابع برای مقادیر بولین

fn:boolean(arg)

به ازای مقدار عددی رشته ای یا نوود که دورن پرانتزش است مقدار بولین بر می گرداند

اگر مقداری که دورن پرانتز است صرف نظر از نوع ان ، صفر منفی یا صفر مثبت یا non نباشد مقدار true در غیر این صورت مقدار false می دهد

اگر رشته نوودهای ذکر شده در پرانتز این تابع تهی نباشد مقدار true می دهد

اگر رشته غیر تهی درون پرانتزش باشد مقدار true می دهد

 

مثال

not(true())

می شود

false

 

 fn:not(arg)

 درون پرانتزش باید مقدار از نوع بولین باشد اگر این مقدار true بود جواب این تابع false است و بر عکس

 

 fn:true()

 فقط مقدار بولین true می دهد

مثال

true()

می شود

true

 

 fn:false()

  فقط مقدار بولین true می دهد

مثال

false()

می شود

false

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

باین صفحه حالا حالاها کار داره که کامل بشه