پس از آنکه در نوشته های پیشین مفهوم ‌ چارچوب توصیف منبع (RDF) و فرمت های گوناگون آن را گفتیم، می توانیم زبان پرس و جوی SPARQL را آموزش دهیم. RDF یک فرمت برای نگهداری یا نمایش داده ها نیست، بلکه یک مدل داده (Data Model) در وب معنایی (Semantic Web) است. همانگونه که در مدل رابطه ای در پایگاه داده های رابطه ای از زبان استانداردی به نام SQL کمک می گیرد تا به داده ها و درج و تغییر و بروز رسانی آنها دسترسی داشته باشد، در وب معنایی و چارچوب توصیف منبع، زبان SPARQL نیز یک زبان استاندارد برای انجام پرس و جو بر روی فایل های RDF است.

به کمک SPARQL می توانیم داده های درون RDF را بدست آوریم (Retrive) و همچنین می توانیم این داده ها را تغییر (Manipulate) دهیم. همانگونه که گفتیم، هر فایل RDF در برگیرنده چندین سه تایی (Triple) است که این سه تایی Subject-Predict-Object هستند. اگر بخواهیم از دید یک پایگاه داده رابطه ای نگاه کنیم، RDF همسان یک جدول با سه ستون است که هر ستون آن به Subject و Predict و Object اشاره می کنند.

بخش های جداگانه SPARQL

SPARQL بدست کنسرسیوم وب جهانی (World Wide Web Consortium) یا W3C ساخته و توسعه داده می شود. بر همین پایه، W3C زبان پرس و جوی SPARQL را بر سه بخش جدا از هم پشنهاد می کنند که در دنباله آنها را نخست فهرست و سپس هر کدام را آموزش داده ایم.

۱ – SPARQL Query Language for RDF

مدل داده RDF به ریختِ (شکل) یک گراف بی جهت (Directed Graph) است که هر یال آن دارای یک برچسب (Label) که برابر با همان Predict در سه تایی RDF است. می توانیم هر چیزی در پیرامون خود مانند اطلاعات شخصی، شبکه های اجتماعی، فروشگاه ها، اطلاعات پزشکی و دیگر موارد را به کمک RDF مدل کنیم و آن را نمایش داده و با دیگران به اشتراک گذاریم و همچنین می توانیم با دیگر سیستم های دارندن مدل RDF، یکپارچه سازی داده (Data Integration) انجام دهیم.

عبارت SELECT در SPARQL

این بخش در برگیرنده عبارت هایی (دستورهایی) است که آنها را برای دسترسی، بدست آوردن و تغییر دادن داده های RDF به کار می بریم. این عبارت ها برای نمونه SELECT، DISTICT یا JOIN و دیگر عبارت ها هستند. در زیر یک نمونه کد بسیار ساده از SPARQL بر روی یک RDF فرضی انجام داده ایم. در آن به کمک عبارت SELECT می خواهیم فهرست عنوان (Title) همه کتاب ها را بدست بیاوریم.

در پرس و جوی بالا، http://example.org/book/book1 همان Object یا همان چیزی است که می خواهیم درباره آن اطلاعات بدست بیاوریم. http://purl.org/dc/elements/1.1/title همان چیزی یا اطلاعی است که می خواهیم درباره کتاب بدانیم که در سه تایی RDF همان Predict است. در پایان title? همان مقدارهای Subject یا همان مقدار عتوان های کتاب است که در فایل ها یا منابع داده RDF توصیف شده اند. توجه کنید که در واقع titile? یک مقدار یا همان رشته عنوان کتاب را در خود نگه می دارد و سپس این مقدار پیش روی عبارت SELECT، یعنی SELECT ?title نمایش داده می شود.

بنابراین عبارت SELECT و WHERE در SPARQL را می توانیم اینگونه بگوییم که، همه مقدارها را برای title? نمایش داده شود (عبارت SELECT ?title) به شرطی (عبارت WHERE) که Object برابر با http://example.org/book/book1 و Predict برابر با http://purl.org/dc/elements/1.1/title باشد. در واقع کتاب ها و رابطه میان آنها، یعنی همان Predict که در اینجا title است، درون دو منبع با URI شان توصیف شده اند. سپس هر مقداری که بدست بیاید در سومین بخش سه تایی که در اینجا title? است نگهداری شده و در پایان در پیش روی SELECT نشان داده می شود.

کد زیر الگوی عبارت SELECT … WHERE را نشان می دهد. همانگونه که می بینید نخست SELECT نوشته شده که پیش روی آن نام ستون های خروجی نوشته می شود. سپس عبارت WHERE نوشته شده و در دنبال آن، آکولادهای باز و بسته نوشته شده و در میان آن شرط ها به گونه سه تایی Subject-Predict-Object نوشته می شوند. در زیر چندین نکته درباره نوشتن پرس و جوهای SPARQL گفته شده است:

  • گفتیم که Subject و Predict باید به گونه یک URI باشند ولی Object ها می توانند URI یا مقدارهای لیترال مانند رشته ها باشند، بنابراین در پرس و جوی بالا، titile? که همان Object است مقدار لیترال است که در برگیرنده رشته نام های عنوان های کتاب ها است.
  • توجه کنید در شرط های سه تایی درون آکولادهای باز و بسته، پایان هر سه تایی یک نقطه نوشته شده است. این نقطه همیشه باید نوشته شود.
  • همانگونه که می بینید، درون آکولادهای باز و بسته پس از WHERE، می تواند چندین سه تایی RDF باشد. همانگونه که گفتیم، RDF یه گراف بی جهت است، پس میان این سه تایی ها می تواند یک رابطه نیز باشد.

در زیر بخشی از یک فایل RDF به فرمت Trutle که در برگیرنده چندین سه تایی درباره داده های نشانی است. برای نمونه این فایل این عبارت را توصیف می کند. شماره تلفن خانه richard چیست؟ یا نشانی رایانامه cindy چیست؟ در اینجا richard و cindy همان Subject یا موضوعی هستند که توصیف شده اند و به دنبال داده یا Object درباره آنها هستیم. Object چیست؟ Object در اینجا همان مقدار شماره تلفن و نشانی رایانامه است. ولی Predict چیست؟ در سه تایی Predict رابطه میان Subject و Object است و در اینجا Predict برابر با homeTel و email هستند. توجه کنید در گراف چارچوب توصیف منبع، Predict همان برچسب های روی یال میان دو گره یعنی Subject و Object هستند.

می خواهیم نشانی رایانامه cndy را بدست آوریم و سپس آن را در متغیری به نام cindyEmail? بریزیم، پس در پرس و جوی SPARQL زیر، سه تایی .ab:cindy ab:email ?cindyEmail را درون آکولادهای پس از WHRE نوشته ایم. توجه کنید پایان سه تایی یک نقطه نوشته شده است. همچنین در نوشته های پیشین گفتیم که در آغاز فایل RDF یا در اینجا پرس و جوی SPARQL می توانیم از عبارت Prefix کمک بگیریم تا یک نام جایگزین (مستعار) به یک URI بدهیم. در کد بالا و کد زیر، ab یک نام جایگزین است.

بنابراین می توانیم الگوی بالا را با افزودن عبارت های PREFIX پیش از عبارت SELECT، کامل کنیم. شکل زیر نمایی خوبی از عبارت SELECT و به دنبال آن WHERE می دهد به گونه ای که WHERE تعیین می کند که کدام داده ها از گراف RDF باید برداشته شوند و عبارت SELECT تعیین می کند کدام داده باید نمایش داده شوند.

  • در آغاز پرس و جوی SPARQL می توان عبارت PREFIX را نوشت.
  • پرس و جوی SPARQL می توانند در یک فایل و با پسوند rq. نگهداری شوند. این فایل ها برای نمونه درون کدهای زبان های دیگر مانند پایتون اتجام می شوند.
  • SPARQL به بزرگی و کوچکی حروف حساس نیست، پس میان PREFIX یا Prefix یا prefix هیچ تفاوتی نیست.
  • اگر شما برای URI نام جایگزین ندارید، پس باید خود نشانی را بنویسید، پس در کد زیر می بینید چون برای URI نام جایگزین نداریم، پس به جای نام جایگزین ab همان URI را نوشته ایم.