در نوشته نخستین گام در زبان پرس و جوی SPARQL – عبارت SELECT گفتیم که می توانیم عبارت SELECT را بر پایه چندین شرط یا بهتر است بگوییم چندین تطابق (Multimatch) انجام دهیم به گونه ای که درون آکولادهای پس از WHERE چندین سه تایی RDF نوشته می شوند. توجه کنید منظور از شرط یا تطابق (تطبیق)، این است که کدام بخش از گراف RDF، باید با توجه به سه تایی RDF پس از WHERE برگزیده (انتخاب) شوند.

شناساندن (تعریف) متغیر در پرس و جو SPARQL

پیش از آنکه چگونگی شناساندن (تعریف) متغیرها را در SPARQL بگوییم، برای فهمیدن کارکرد SELECT و WHERE، بهتر است دوباره به این شکل نگاه کنید. در واقع WHERE تعیین می کند که کدام داده ها از گراف RDF باید برداشته شوند و عبارت SELECT تعیین می کند کدام داده باید نمایش داده شوند.

شناساندن (تعریف) متغیرها بسیار ساده است، نام متغیر با کاراکتر ? یا $ آغاز می شود. توجه کنید که کاراکترهای ? و $ بخشی از نام متغیر نیستند، بلکه در SPARQL نشان می دهند که یک متغیر شناسانده شده است. در نوشته پیشین، title? یک متغیر است که می توانیم آن را به گونه title$ نیز بنویسیم، پس هر دو title? و title$ هر دو یک متغیر و همسان هستند.

  • نام متغیر نمی تواند با شماره آغاز شود.
  • نام متغیر شامل حرف های A..Z a..z و شماره ها و کارکتر زیر خط (Under Line) است.
  • در نام متغیر و هر کجایی تنها کارکتر زیر خط می تواند باشد ولی دیگر کاراکترها مانند $ # ^ نمی توان به کار برد.

عبارت SELECT چند تطبیقی

کد زیر بخشی از یک فایل RDF است که در آن داده های گوناگون مانند نام و نام خانوادگی، شماره تلفن و نشانی رایانامه سه نفر توصیف شده است. در بالای فایل دو عبارت PREFIX نوشته شده است که دو نام جایگزین ab به نشانی http://learningsparql.com/ns/addressbook و d به نشانی http://learningsparql.com/ns/data را می سازند. اگر دفت کنید، می بینید Predict ها یا همان رابطه میان Subject و Object ها درون نشانی http://learningsparql.com/ns/addressbook، توصیف شده اند، بنابراین، پیش از چهار Predict زیر، نام جایگزین ab نوشته شده است.

  • firstName
  • lastName
  • homeTel
  • email

پرس و جو زیر به دنبال نشانی رایانامه نفری به نام Carig هستیم. در پرس و چوی زیر، دو سه تایی RDF برای بررسی تطابق هست. همچنین در فایل RDF نیز، تنها یک نفر با نام Carig هست، پس تنها یک خروجی برای یک نفر برگشت داده می شود. توجه کنید، در سه تایی نخست (کد زیر)، به دنبال بخشی از گراف RDF هستیم که تطابق در آن این است که نام Carig باشد، پس در سه تایی نخست، Object برابر با رشته Carig است که به دنبال داده ای درباره او هستیم و Predict نیز firstName است.

سه تایی های پرس و جو بالا، یک متغیر به نام person? در Subject نوشته شده است، بنابراین با توجه به پرس و جوی ما برای کاربر Carig، مقدار ab:i8301 به متغیر person? مقید (یا Bind) می شود. در اینجا چون پرس و جو به گونه چند تطابقی اس، بنابراین پس از درستی تطابق الگوی سه تایی نخست (زیر)، پردازش گر پرس و جوی SPARQL به سراغ الگوی دیگر می رود. در اینجا در الگوی سه تایی دوم، Predict برابر با نشانی رایانامه یا email است و همچنان متغیر person? به ab:i8301 اشاره دارد، بنابراین الگو آشکار است: نشانی نفری را بدست آور که Subject آن برابر با i8301 باشد و سپس رشته نشانی رایانامه را در متغیر carigEmail? نگهداری شود. توجه کنید که چون می خواهیم نشانی رایانامه را در خروجی نشان دهیم، پس نام متغیر carigEmail? پیش روی عبارت SELECT نوشته شده است.

مثال – نشانی رایانامه نفری به نام Carig با نام خانوادگی Ellis را پیدا کنید.

مثال – نام و نام خانوادگی نفری را پیدا کنید که شماره تلفن آن 276-5135 (229) باشد.