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.
Topik
- Standar yang Berlaku untuk SPARQL
- Awalan Namespace Default di Neptunus SPARQL
- SPARQLGrafik Default dan Grafik Bernama
- SPARQLXPathFungsi Konstruktor Didukung oleh Neptunus
- Basis default IRI untuk kueri dan pembaruan
- xsd: dateTime Nilai di Neptunus
- Neptune Penanganan Nilai Titik Terapung Khusus
- Batasan Neptune Nilai Sewenang-Panjang
- Neptunus Memperpanjang Perbandingan Sama di SPARQL
- Penanganan Literal Luar Jangkauan di Neptunus SPARQL
Amazon Neptunus mematuhi standar berikut dalam menerapkan SPARQL bahasa kueri grafik.
Standar yang Berlaku untuk SPARQL
SPARQLdidefinisikan oleh rekomendasi W3C SPARQL1.1 Query Language
tanggal 21 Maret 2013. Protokol SPARQL Pembaruan dan bahasa kueri ditentukan oleh spesifikasi Pembaruan W3C SPARQL 1.1
. Untuk format numerik, SPARQL ikuti W3C XML Schema Definition Language (XSD) 1.1 Bagian 2: Spesifikasi tipe data, yang konsisten dengan spesifikasi IEEE 754 (754-2019 - Standar untuk Aritmatika Floating-Point
. IEEE IEEE Untuk informasi lebih lanjut, lihat juga halaman Wikipedia IEEE 754) . Namun, fitur yang diperkenalkan setelah versi IEEE 754-1985
tidak termasuk dalam spesifikasi.
Awalan Namespace Default di Neptunus SPARQL
Neptunus mendefinisikan awalan berikut secara default untuk digunakan dalam kueri. SPARQL Untuk informasi selengkapnya, lihat Nama Awalan
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
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, XSDspesifikasixsd: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. INF
membandingkan 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=
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
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
-operatornumeric
, string
-operator-string
, literal
dan sebagainyaliteral
. Neptune tidak dapat mengeksekusi operator perbandingan jangkauan seperti invalid-literal
-operator-numeric-value
.