Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan SPARQL untuk mendapatkan semua induk dari sebuah simpul

Data Anda dapat direpresentasikan dalam RDF sebagai data.n3 :

@prefix : <http://example.org/> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

:Network rdfs:subClassOf :Main .

:ATM rdfs:subClassOf :Network .
:ARPANET rdfs:subClassOf :Network .

:Software rdfs:subClassOf :Main .

:Linux rdfs:subClassOf :Software .
:Windows rdfs:subClassOf :Software .

:XP rdfs:subClassOf :Windows .
:Win7 rdfs:subClassOf :Windows .
:Win8 rdfs:subClassOf :Windows .

Dari sini, Anda hanya ingin kueri SPARQL yang menemukan semua hal yang terhubung ke kelas tertentu melalui jalur (termasuk jalur kosong) rdfs:subClassOf properti.

prefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?superclass where { 
  :Win7 rdfs:subClassOf* ?superclass
}
--------------
| superclass |
==============
| :Win7      |
| :Windows   |
| :Software  |
| :Main      |
--------------

Hasil dalam kueri itu tidak harus diurutkan berdasarkan posisinya di jalur (meskipun dalam kasus ini memang demikian). Jika Anda membutuhkannya secara berurutan, Anda dapat melakukan ini (yang didasarkan pada jawaban ini tentang menghitung posisi elemen dalam daftar RDF ):

prefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select ?class where { 
  :Win7 rdfs:subClassOf* ?mid .
  ?mid rdfs:subClassOf* ?class .
}
group by ?class
order by count(?mid)

Ini menemukan setiap leluhur ?class dari :Win7 serta setiap ?mid nenek moyang perantara. Untuk leluhur ?class , jarak dihitung sebagai jumlah hubungan antara di antara (count(?mid) ). Itu memerintahkan hasil berdasarkan jarak itu, jadi :Win7 adalah nenek moyang terdekat, :Windows setelah itu, dan seterusnya.

Anda bahkan dapat melakukan beberapa pemformatan mewah yang Anda inginkan seperti ini:

prefix : <http://example.org/>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>

select (group_concat( ?name ; separator="--" )  as ?path) where {
  {
    select ?name where { 
      :Win7 rdfs:subClassOf* ?mid .
      ?mid rdfs:subClassOf* ?class .
      bind( strAfter( str(?class), "http://example.org/") as ?name )
    }
    group by ?class ?name
    order by count(?mid)
  }
}
-----------------------------------
| path                            |
===================================
| "Win7--Windows--Software--Main" |
-----------------------------------

Itu mungkin dimungkinkan untuk melakukan pemrosesan string yang lebih menarik dan untuk mendapatkan string multiline. Anda dapat melihat bagian terakhir dari jawaban ini di mana ada beberapa pemformatan yang bagus untuk matriks ide yang disejajarkan dengan baik.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah tidak masuk akal untuk menetapkan database MySQL untuk setiap pengguna di situs saya?

  2. Temukan jumlah total hasil dalam kueri mySQL dengan offset+limit

  3. Cara menulis migrasi untuk mengubah kunci utama model dengan ManyToManyField

  4. Tabel asli 'performance_schema'.'???' memiliki struktur yang salah

  5. Apa manfaat zerofill di MySQL?