اسپارکل

**اسپارکل** ، یک زبان پرسمان RDF (یک نوع زبان پرسمان معنایی) برای پایگاه‌های داده است. اسپارکل می‌تواند داده‌های ذخیره شده در فرمت چارچوب توصیف منبع (RDF) را بازیابی و دستکاری کند.

SPARQL کوته‌نوشت بازگشتی برای SPARQL Protocol and RDF Query Language می‌باشد، و به صورت اسپارکل تلفظ می‌شود.

این زبان به وسیلهٔ «کارگروه دسترسی دادهٔ آردی‌اف» کوته نوشت (DAWG) از ائتلاف وب جهان‌گستر استانداردسازی شد، و به عنوان یکی از فن آوری‌های کلیدی در وب معنایی شناخته می‌شود. در ۱۵ ژانویه سال ۲۰۰۸ زبان SPARQL 1.0 تبدیل به پیشنهاد رسمی W3C شد، سپس SPARQL 1.1 در مارس سال ۲۰۱۳ تبدیل به پیشنهاد شد.
اسپارکل به یک پرسمان اجازه می‌دهد تا شامل الگوهای سه تایی باشند: پیوستگی ، تفکیک  و الگوهای اختیاری.

پیاده‌سازی‌هایی برای چندین زبان برنامه‌نویسی موجود است. و ابزارهایی موجود است که به افراد اجازهٔ اتصال و ساخت نیمه-خودکار یک پرسمان اسپارکل را برای یک پایانه اسپارکل می‌دهد، که یک مثال آن ViziQuer است. بعلاوه ابزارهایی برای ترجمهٔ پرسمان‌های اسپارکل به دیگر زبان‌های پرسمان مثل SQL و XQuery موجود است.

## مزایا
اسپارکل به کاربران اجازه نوشتن پرسمان در برابر آنچه که دادهٔ «کلید-مقدار» نامیده می‌شود را می‌دهد، به صورت اختصاصی تر، داده‌ای که از ویژگی‌های RDF از W3C پیروی می‌کنند پرسمان می‌شوند. از این رو کل پایگاه داده مجموعه ای از سه تایی‌های «موضوع-خبر-هدف»  می‌باشد. این روش مشابه بعضی پایگاه داده‌های NoSQL است که از عبارت «سند-کلید-مقدار» استفاده می‌کنند، مثل MongoDB.

## رابطه با SQL
* به زبان پایگاه داده‌های رابطه ای SQL، دادهٔ RDF می‌تواند یک جدول با سه ستون در نظر گرفته شود- ستون موضوع، ستون گزاره یا خبر، و ستون هدف.
* موضوع در RDF مشابه یک موجودیت در یک پایگاه داده SQL است،
** در SQL: عناصر داده (یا فیلدها) در چندین ستون قرار می‌گیرد، گاهی نیز در بیش از یک جدول توزیع می‌شود، که توسط یک کلید یکتا مشخص می‌گردد.
** در عوض، در RDF: این فیلدها به صورت ردیف‌های خبر/هدف مجزا نمایش می‌یابند، که دارای یک «موضوع» مشابه اند، معمولاً «کلید یکتای» مشابه دارند، و «خبر» آنها همان نام ستون است و «هدف» مشابه «دادهٔ واقعی» است.
* بر خلاف پایگاه‌های دادهٔ رابطه ای، ستون «هدف»، ناهمگون است: در این روش، نوع داده ضمنی توسط مقدار «خبر» تعیین می‌شود (یا در آنتالوژی مشخص شده‌است).
* در نتیجه بر خلاف SQL، در RDF می‌تواند چندین ورودی برای هر خبر وجود داشته باشد. برای مثال می‌توان چندین ورودی «فرزند» برای یک «انسان» بخصوص، و می‌تواند مجموعه ای از این نوع اشیا، مثل «فرزندان» را برگرداند.

## قابلیت‌ها
اسپارکل یک مجموعهٔ کامل از عملیات پرسمان تحلیلی مثل JOIN, SORT, AGGREGATE را برای داده‌ای که که طرح‌واره ی آن به صورت ذاتی بخشی از داده‌است فراهم می‌کند، و نه آنکه نیاز به یک تعریف طرح‌واره جداگانه باشد. با این حال اطلاعات طرح‌واره (آنتالوژی) معمولاً به صورت بیرونی تهیه می‌شود، زیرا اجازه اتصال دیتاست‌های مختلف را به صورت غیر مبهم را می‌دهد. بعلاوه، اسپارکل یک نحو پیمایش گراف بخصوص برای داده‌ای که می‌تواند به صورت گراف تصور شود، تهیه می‌بیند.

## حالت‌های پرسمان
در پرسمان‌هایی که داده را از پایگاه داده می‌خوانند، زبان اسپارکل چهار نوع مختلف پرسمان، برای چهار هدف مختلف تعیین کرده‌است.

### پرسمان SELECT
برای استخراج داده‌های خام، از پایانه اسپارکل استفاده می‌شود، نتایج به صورت قالب جدولی بازگردانده می‌شوند.

### پرسمان CONSTRUCT
برای استخراج اطلاعات از پایانه اسپارکل و تبدیل نتایج به یک RDF مجاز استفاده می‌شود.

### پرسمان ASK
برای تهیه یک نتیجه درست/غلط ساده برای یک پرسمان در یک پایانه اسپارکل استفاده می‌شود.

### پرسمان DESCRIBE
برای استخراج گراف RDF از پایانهٔ اسپارکل استفاده می‌شود، محتوای آن بر عهدهٔ پایانه است، تا بر اساس آنچه که نگهدارنده اطلاعات مفید می‌پندارد تصمیم‌گیری کند.

هر کدام از این فرم‌های پرسمان یک بلاک WHERE برای محدودسازی پرسمان می‌گیرد، اگرچه در حالت پرسمان DESCRIBE قسمت WHERE اختیاری است.

اسپارکل ۱٫۱ یک زبان برای به روزرسانی پایگاه داده به کمک چندین فرم پرسمان جدید تعیین نموده‌است.

این پرسمان‌ها می‌توانند به چندین پایانه اسپارکل (سرویس‌های که پرسمان اسپارکل را می‌پذیرند، و نتایج را برمی‌گردانند) توزیع شوند، محاسبه شوند، و نتایج جمع‌آوری گردد، این فرایند به عنوان پرسمان متحد  شناخته می‌شود.

چه در حالت پرسمان متحد یا پرسمان محلی، تعاریف سه تایی‌های اضافه در پرسمان باید اجازهٔ اتصال به انواع موضوع مختلف را بدهد، مثلاً خودرو، تا به پرسمان‌های ساده، اجازه بازگرداندن لیستی از نام‌ها و ایمیل‌ها را برای هر انسانی که «خودروهایی با راندمان سوخت بالا» را بدهد.

## مثال اول
مثال زیر یک پرسمان ساده را نشان می‌دهد که از تعریف آنتالوژی fof بهره می‌گیرد ("friend of a friend").

پرسمانی که در ادامه آمده‌است، نام‌ها و ایمیل‌های هر انسان موجود در دیتاست را برمی‌گرداند:
```sparql
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name
       ?email
WHERE
  {
    ?person  a          foaf:Person .
    ?person  foaf:name  ?name .
    ?person  foaf:mbox  ?email .
  }
```
این پرسمان همهٔ سه تایی‌هایی را که موضوع منطبق دارند را به هم متصل می‌کند، که در آن نوع خبر "a" یک انسان است (foaf:Person)، و آن انسان یک یا بیشتر نام (foaf:name) و صندوق پستی (foaf:mbox) دارد.

نویسندهٔ این پرسمان برای ارجاع به موضوع از نام متغیر «?person» استفاده کرده‌است، تا وضوح خواندن افزایش یابد. به دلیل آنکه عنصر اول برای سه تایی همیشه موضوع است، نویسنده می‌تواند به سادگی هر نام متغیری را به استفاده کند، مثل "؟subj" یا "?x". هر نامی که انتخاب شود، باید در همهٔ خطوط پرسمان مشابه باشد، تا نشان بدهد که موتور پرسمان باید سه تایی‌های با موضوع مشابه را متصل کند.

نتیجهٔ این پرسمان مجموعه ای از ردیف‌ها می‌باشد- person، ?name، ?email?. این پرسمان؟name و؟email را برمی‌گرداند، زیرا؟person معمولاً یک URI پیچیده‌است، تا آنکه یک رشته انسان-خواندنی باشد. توجه کنید که هر؟person می‌تواند چندین ایمیل داشته باشد، بنابراین در مجموعه بازگشت شده، یک ردیف؟name می‌تواند چندین بار ظاهر شود، برای هر ایمیل یک بار.

## مثال دوم
یک مثال دیگر از پرسمان SPARQL که سؤال «پایتخت‌های همهٔ کشورهای در آفریقا کدامند؟» را برمی‌گرداند:
```sparql
PREFIX ex: <http://example.com/exampleOntology#>
SELECT ?capital
       ?country
WHERE
  {
    ?x  ex:cityname       ?capital   ;
        ex:isCapitalOf    ?y         .
    ?y  ex:countryname    ?country   ;
        ex:isInContinent  ex:Africa  .
  }
```
در اینجا متغیرها به وسیلهٔ یک پیشوند؟ یا $ مشخص می‌شوند. اتصالات به؟capital و؟country برگردانده می‌شود. وقتیکه یک سه تایی به وسیله یک سمیکالن تمام می‌شود، موضوع از این سه تایی به صورت ضمنی جفت بعدی را پر می‌کند، و این موضوع تا انتهای سه تایی ادامه می‌یابد؛ بنابراین، برای مثال ex:isCapitalOf ?y یک خلاصه برای؟x ex:isCapitalOf ?y می‌باشد.

پردازشگر پرسمان اسپارکل به دنبال مجموعه‌های سه تایی می‌گردد که با این چهار الگوی سه تایی منطبق می‌باشند، و متغیرهای موجود در پرسمان را با قسمت‌های متناظر هر سه تایی متصل می‌کند. آنچه که در اینجا باید توجه کرد، «جهت‌گیری ویژگی» است، (یک کلاس فقط از طریق هدایت‌های ویژگی‌های کلاس، منطبق می‌شود، تایپ‌دهی اردکی را ببینید).

برای مختصر کردن پرسمان‌ها، اسپارکل به ما اجازه تعریف پیشوند، و URI‌های مبنی را، به یک روش مشابه Turtle می‌دهد. در این پرسمان، پیشوند ex برای “ استفاده شده‌است.

## پیاده‌سازی‌ها
پیاده‌سازی‌های اسپارکل متن باز مرجع
* RDF4J, formerly Sesame (framework) from Eclipse Foundation
* Jena (framework) from Apache Software Foundation
* OpenLink Virtuoso

## منابع


رده:آردی‌اف
رده:استانداردهای وب
رده:اس‌کیوال
رده:پایگاه داده‌ها
رده:خدمات وب
رده:زبان‌های برنامه‌نویسی اعلانی
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۲۰۰۸ (میلادی)
رده:زبان‌های پرس و جو
رده:زبان‌های پرسش
رده:زبان‌های رایانه‌ای
رده:زبان‌های مدل‌سازی داده
رده:استانداردهای ائتلاف وب جهان‌گستر