Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn SPARQL để lấy tất cả cha mẹ của một nút

Dữ liệu của bạn có thể được biểu diễn trong RDF dưới dạng 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 .

Từ đây, bạn chỉ muốn truy vấn SPARQL tìm tất cả những thứ được kết nối với một lớp cụ thể bằng một đường dẫn (bao gồm cả đường dẫn trống) của rdfs:subClassOf thuộc tính.

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      |
--------------

Các kết quả trong truy vấn đó không nhất thiết phải được sắp xếp theo vị trí của chúng trong đường dẫn (mặc dù trong trường hợp này, chúng tình cờ như vậy). Nếu bạn cần chúng theo thứ tự, bạn có thể thực hiện việc này (dựa trên câu trả lời này về tính toán vị trí phần tử trong danh sách RDF ):

Tiền tố
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)

Điều này tìm thấy từng tổ tiên ?class của :Win7 cũng như từng ?mid tổ tiên trung gian. Đối với ?class tổ tiên , khoảng cách được tính bằng số lượng các quan hệ trung gian ở giữa (count(?mid) ). Nó sắp xếp các kết quả dựa trên khoảng cách đó, vì vậy :Win7 là tổ tiên gần nhất, :Windows sau đó, và cứ tiếp tục như vậy.

Bạn thậm chí có thể thực hiện một số định dạng ưa thích mà bạn muốn như sau:

Tiền tố
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" |
-----------------------------------

có thể có thể thực hiện một số xử lý chuỗi huyền ảo hơn và lấy chuỗi nhiều dòng. Bạn có thể xem phần sau của câu trả lời này nơi có một số định dạng ưa thích cho một ma trận được căn chỉnh độc đáo cho các ý tưởng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ mục tháng của JavaScript Date Object bắt đầu bằng 0

  2. Cách tốt nhất để liên kết các giá trị thập phân / kép / float với PDO trong PHP là gì?

  3. MySQL SELECT WHERE datetime khớp với ngày (và không nhất thiết phải là thời gian)

  4. Spark JoinWithCassandraTable trên khóa phân vùng TimeStamp STUCK

  5. Hiệu suất MySQL:MySQL so với MariaDB