SPARQLkepatuhan standar di Amazon Neptunus - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

SPARQLkepatuhan standar di Amazon Neptunus

Setelah mencantumkan SPARQL standar yang berlaku, bagian berikut memberikan rincian spesifik tentang bagaimana SPARQL implementasi Neptunus meluas atau menyimpang dari standar tersebut.

Amazon Neptunus mematuhi standar berikut dalam menerapkan SPARQL bahasa kueri grafik.

Standar yang Berlaku untuk SPARQL

Awalan Namespace Default di Neptunus SPARQL

Neptunus mendefinisikan awalan berikut secara default untuk digunakan dalam kueri. SPARQL Untuk informasi selengkapnya, lihat Nama Awalan dalam SPARQL spesifikasi.

  • rdf  – http://www.w3.org/1999/02/22-rdf-syntax-ns#

  • rdfs – http://www.w3.org/2000/01/rdf-schema#

  • owl  – http://www.w3.org/2002/07/owl#

  • xsd  – http://www.w3.org/2001/XMLSchema#

SPARQLGrafik Default dan Grafik Bernama

Amazon Neptune mengasosiasikan setiap tripel dengan grafik bernama. Grafik default ditetapkan sebagai gabungan dari semua grafik bernama.

Grafik Default untuk Query

Jika Anda mengirimkan SPARQL kueri tanpa secara eksplisit menentukan grafik melalui GRAPH kata kunci atau konstruksi seperti, FROM NAMED Neptunus selalu mempertimbangkan semua tiga kali lipat dalam instance DB Anda. Misalnya, kueri berikut mengembalikan semua tiga kali lipat dari titik akhir Neptunus: SPARQL

SELECT * WHERE { ?s ?p ?o }

Tripel yang muncul di lebih dari satu grafik dikembalikan hanya sekali.

Untuk informasi tentang spesifikasi grafik default, lihat bagian RDFDataset dari spesifikasi Bahasa Kueri SPARQL 1.1.

Menentukan grafik bernama untuk Loading, menyisipkan, atau update

Jika Anda tidak menentukan grafik bernama saat memuat, menyisipkan, atau memperbarui tiga kali lipat, Neptunus menggunakan grafik bernama fallback yang ditentukan oleh grafik. URI http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph

Saat Anda mengeluarkan permintaan Load Neptune menggunakan format berbasis triple, Anda dapat menentukan grafik bernama untuk menggunakan untuk semua triple dengan menggunakan parameter parserConfiguration: namedGraphUri. Untuk informasi tentang menggunakan sintaks perintah Load, lihat Perintah Loader Neptune.

penting

Jika Anda tidak menggunakan parameter ini, dan Anda tidak menentukan grafik bernama, fallback URI digunakan:. http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph

Grafik bernama mundur ini juga digunakan jika Anda memuat triple melalui SPARQL UPDATE tanpa secara eksplisit memberikan target grafik bernama.

Anda dapat menggunakan format berbasis paha depan N-Quads untuk menentukan grafik bernama untuk setiap triple dalam database.

catatan

Menggunakan N-Quads memungkinkan Anda untuk meninggalkan grafik bernama kosong. Dalam kasus ini, http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph digunakan.

Anda dapat mengganti grafik bernama default untuk N-Quads menggunakan opsi konfigurasi parser namedGraphUri.

SPARQLXPathFungsi Konstruktor Didukung oleh Neptunus

SPARQLStandar ini memungkinkan SPARQL mesin untuk mendukung serangkaian fungsi XPath konstruktor yang dapat diperluas. Neptune saat ini mendukung fungsi konstruktor berikut, di mana xsd didefinisikan sebagai http://www.w3.org/2001/XMLSchema#:

  • xsd:boolean

  • xsd:integer

  • xsd:double

  • xsd:float

  • xsd:decimal

  • xsd:long

  • xsd:unsignedLong

Basis default IRI untuk kueri dan pembaruan

Karena cluster Neptunus memiliki beberapa titik akhir yang berbeda, menggunakan URL permintaan kueri atau pembaruan sebagai IRI basis dapat menyebabkan hasil yang tidak terduga saat menyelesaikan relatif. IRIs

Pada rilis mesin 1.2.1.0, Neptunus menggunakan http://aws.amazon.com/neptune/default/ sebagai basis IRI jika basis eksplisit bukan bagian dari permintaan. IRI

Dalam permintaan berikut, basis IRI adalah bagian dari permintaan:

BASE <http://example.org/default/> INSERT DATA { <node1> <id> "n1" } BASE <http://example.org/default/> SELECT * { <node1> ?p ?o }

Dan hasilnya adalah:

?p ?o http://example.org/default/id n1

Namun, dalam permintaan ini, tidak IRI ada basis yang disertakan:

INSERT DATA { <node1> <id> "n1" } SELECT * { <node1> ?p ?o }

Dalam hal ini, hasilnya adalah:

?p ?o http://aws.amazon.com/neptune/default/id n1

xsd: dateTime Nilai di Neptunus

Untuk alasan kinerja, Neptunus selalu menyimpan nilai tanggal/waktu sebagai Waktu Universal Terkoordinasi (). UTC Hal ini membuat perbandingan langsung sangat efisien.

Ini juga berarti bahwa jika Anda memasukkan dateTime nilai yang menentukan zona waktu tertentu, Neptunus menerjemahkan nilai UTC ke dan membuang informasi zona waktu tersebut. Kemudian, ketika Anda mengambil dateTime nilai nanti, itu dinyatakan dalamUTC, bukan waktu dari zona waktu asli, dan Anda tidak dapat lagi mengetahui apa zona waktu asli itu.

Neptune Penanganan Nilai Titik Terapung Khusus

Neptunus menangani nilai floating-point khusus sebagai berikut. SPARQL

SPARQLPenanganan NaN di Neptunus

Di NeptunusSPARQL, dapat menerima nilai dalam kueriNaN. Tidak ada perbedaan antara nilai NaN yang mengeluarkan sinyal dan diam. Neptune memperlakukan semua nilai NaN sebagai diam.

Secara semantik, tidak ada perbandingan NaN adalah mungkin, karena tidak ada yang lebih besar dari, kurang dari, atau sama dengan NaN. Ini berarti bahwa nilai NaN di satu sisi perbandingan dalam teori tidak pernah cocokdengan apa pun di sisi lain.

Namun, XSDspesifikasi memperlakukan dua xsd:double atau xsd:float NaN nilai sebagai sama. Neptune mengikuti ini untuk filter IN, untuk operator yang sama dalam ekspresi filter, dan untuk semantik pencocokan tepat (memiliki NaN dalam posisi objek pola triple).

SPARQLPenanganan Nilai Tak Terbatas di Neptunus

Di NeptunusSPARQL, dapat menerima nilai -INF atau dalam INF kueri. INFmembandingkan sebagai lebih besar dari nilai numerik lainnya, dan -INF membandingkan sebagai kurang dari nilai numerik lainnya.

Dua INF nilai dengan tanda yang cocok dibandingkan sebagai sama satu sama lain terlepas dari jenisnya (misalnya, float -INF membandingkan sama dengan ganda-INF).

Tentu saja, tidak ada perbandingan dengan NaN adalah mungkin karena tidak ada yang lebih besar dari, kurang dari, atau sama dengan NaN.

SPARQLPenanganan Nol Negatif di Neptunus

Neptune menormalkan nilai nol negatif ke nol unsigned. Anda dapat menggunakan nilai nol negatif dalam kueri, tetapi mereka tidak direkam seperti itu dalam database, dan mereka membandingkan sebagai sama dengan nol unsigned.

Batasan Neptune Nilai Sewenang-Panjang

Neptunus membatasi ukuran XSD penyimpanan integer, floating point, dan nilai desimal menjadi 64 bit. SPARQL Menggunakan nilai yang lebih besar menghasilkan InvalidNumericDataException kesalahan.

Neptunus Memperpanjang Perbandingan Sama di SPARQL

SPARQLStandar mendefinisikan logika ternary untuk ekspresi nilai, di mana ekspresi nilai dapat mengevaluasitrue,false, atau. error Semantik default untuk kesetaraan istilah sebagaimana didefinisikan dalam spesifikasi SPARQL 1.1), yang berlaku untuk = dan != perbandingan dalam FILTER kondisi, menghasilkan error ketika membandingkan tipe data yang tidak secara eksplisit sebanding dalam tabel operator dalam spesifikasi.

Perilaku ini dapat menyebabkan hasil yang tidak intuitif, seperti dalam contoh berikut.

Data

<http://example.com/Server/1> <http://example.com/ip> "127.0.0.1"^^<http://example.com/datatype/IPAddress>

Permintaan 1:

SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o = "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }

Permintaan 2:

SELECT * WHERE { <http://example.com/Server/1> <http://example.com/ip> ?o . FILTER(?o != "127.0.0.2"^^<http://example.com/datatype/IPAddress>) }

Dengan SPARQL semantik default yang digunakan Neptunus sebelum rilis 1.0.2.1, kedua kueri akan mengembalikan hasil kosong. Alasannya adalah bahwa ?o = "127.0.0.2"^^<http://example.com/IPAddress> ketika dievaluasi untuk ?o := "127.0.0.1"^^<http://example.com/IPAddress> menghasilkan error ketimbang false karena tidak ada aturan perbandingan eksplisit yang ditentukan untuk tipe data kustom <http://example.com/IPAddress>. Akibatnya, versi dinegasikan dalam kueri kedua juga menghasilkan error. Dalam kedua kueri, error menyebabkan solusi kandidat untuk disaring.

Dimulai dengan rilis 1.0.2.1, Neptunus telah memperluas operator SPARQL ketidaksetaraan sesuai dengan spesifikasi. Lihat bagian SPARQL 1.1 tentang ekstensibilitas operator, yang memungkinkan engine menentukan aturan tambahan tentang cara membandingkan tipe data bawaan yang ditentukan pengguna dan yang tidak sebanding.

Menggunakan opsi ini, Neptune sekarang memperlakukan perbandingan dari setiap dua tipe data yang tidak secara eksplisit didefinisikan dalam tabel pemetaan operator sebagai mengevaluasi ke true jika nilai-nilai literal dan tipe data yang secara sintaksis sama, dan false sebaliknya. error tidak diproduksi dalam kasus apa pun.

Menggunakan semantik baru ini, kueri kedua akan mengembalikan "127.0.0.1"^^<http://example.com/IPAddress> alih-alih hasil kosong.

Penanganan Literal Luar Jangkauan di Neptunus SPARQL

XSDsemantik mendefinisikan setiap jenis numerik dengan ruang nilainya, kecuali untuk dan. integer decimal Definisi ini membatasi setiap jenis untuk rentang nilai. Sebagai contoh, kisaran dari kisaran xsd:byte adalah dari -128 ke +127, inklusif. Setiap nilai di luar kisaran ini dianggap tidak valid.

Jika Anda mencoba menetapkan nilai literal di luar ruang nilai suatu tipe (misalnya, jika Anda mencoba menyetel ke nilai literal 999), Neptunus menerima out-of-range nilai apa adanya, tanpa membulatkan atau memotongnya. xsd:byte Tapi itu tidak bertahan sebagai nilai numerik karena jenis yang diberikan tidak bisa mewakilinya.

Artinya, Neptune menerima "999"^^xsd:byte meskipun itu adalah nilai di luar kisaran nilai xsd:byte yang didefinisikan. Namun, setelah nilai bertahan dalam database, itu hanya dapat digunakan dalam semantik pertandingan tepat, dalam posisi objek dari pola triple. Tidak ada filter rentang yang dapat dijalankan di atasnya karena out-of-range literal tidak diperlakukan sebagai nilai numerik.

Spesifikasi SPARQL 1.1 mendefinisikan operator jangkauan dalam bentuk numeric -operator -, -operator-numeric, string -operator-string, literal dan sebagainyaliteral. Neptune tidak dapat mengeksekusi operator perbandingan jangkauan seperti invalid-literal-operator-numeric-value.