Saya ingin tahu apakah ada kemungkinan untuk mengambil UUID() urn: saat menggunakan INSERT Statement di SPARQL query ? Masalah saya sederhana tetapi saya tidak tahu bagaimana menyelesaikannya menggunakan SPARQL : Saya ingin menyimpan banyak nilai timestamp. Stempel waktu yang sama dapat muncul beberapa kali, jadi saya rasa saya dapat menggunakan UUID() untuk menghasilkan URI acak. Saya perlu fungsi urn: from UUID() untuk menghubungkan tiga kali lipat baru saya. Aku benar ? Atau UUID() bukan solusinya?

Terima kasih atas bantuan Anda.

EDIT:

Ok, jadi saya harus mengatakan saya ingin mengambil data dalam kode python saya. Saya menggunakan SPARQLWrapper untuk menjalankan permintaan saya.

Jika saya membuat satu permintaan INSERT seperti itu:

INSERT { 
    ?uuid1 rdf:type capt:ECHANTILLON .
    ?uuid1 capt:Nom ?uuid1 .
    ?uuid1 capt:Description '2019-08-07 16:07:34.027636' .
    ?uuid1 capt:Valeur '1565182189' .
} WHERE { 
    FILTER NOT EXISTS { ?uuid1 rdf:type capt:ECHANTILLON} .
    BIND (UUID() AS ?uuid1) . 
};

Kemudian permintaan INSERT lainnya menggunakan ?uuid1 dari yang pertama :

INSERT { 
    ?uuid2 rdf:type capt:VALEUR .
    ?uuid2 capt:Nom ?uuid2 .
    ?uuid2 capt:Description '2019-08-07 16:07:34.027659' .
    ?uuid2 capt:Valeur '27.0' .
    **?uuid1 capt:A_Pour_Valeur ?uuid2 .**  <===
} WHERE { 
    FILTER NOT EXISTS { ?uuid2 rdf:type capt:VALEUR} .
    BIND (UUID() AS ?uuid2) . 
};

Yang saya inginkan adalah:

uuid1 = endpoint.setQuery(request_1)
request_2.addSubject(uuid1)
uuid2 = endpoint.setQuery(request_2)

Sesuatu seperti itu.

Bagaimana saya bisa mengambil ?uuid1 dari permintaan pertama jika INSERT tidak mengembalikan nilai ini ? Saya ingin membuat dua permintaan jika memungkinkan. Apakah saya harus mengelompokkan kembali dua permintaan dalam satu permintaan, atau apakah saya harus menjalankan permintaan SELECT ?uuid1 sebelum menjalankan kedua ?

1
A.Dumas 7 Agustus 2019, 18:27

1 menjawab

Jawaban Terbaik

Anda tidak bisa mendapatkan nilai UUID langsung dari pembaruan SPARQL - jika Anda ingin mengambilnya melalui SPARQL, Anda harus melakukan kueri setelah memasukkannya - atau, tentu saja, Anda dapat menyesuaikan pembaruan SPARQL kedua untuk melakukan pemilihan untuk Anda dengan menanyakan UUID 'benar' dalam klausa WHERE-nya.

Namun, dalam kasus ini, tampaknya sulit untuk dilakukan, dan saya pikir solusi termudah untuk Anda adalah Anda tidak membuat UUID dalam operasi SPARQL itu sendiri, melainkan membuatnya dalam kode dan kemudian menggunakannya dalam string kueri Anda, misalnya dengan menambahkan klausa VALUES, kira-kira seperti ini:

  import uuid

  uuid1 = uuid.uuid1()
  update = """INSERT {  .... }
              WHERE { VALUES ?uuid1 { <urn:uuid:""" + uuid1 + """> }
                      FILTER NOT EXISTS .... (etc) }"""
2
Jeen Broekstra 8 Agustus 2019, 10:26