mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-26 00:46:22 +02:00
775 lines
31 KiB
Markdown
775 lines
31 KiB
Markdown
---
|
||
layout: default
|
||
title: "Graph Contexts Technical Specification"
|
||
parent: "Turkish (Beta)"
|
||
---
|
||
|
||
<<<<<<< HEAD
|
||
# Graph Contexts Technical Specification
|
||
|
||
> **Beta Translation:** This document was translated via Machine Learning and as such may not be 100% accurate. All non-English languages are currently classified as Beta.
|
||
|
||
## Overview
|
||
|
||
Bu özellik, TrustGraph'ın temel grafik yapılarına yapılan değişiklikleri tanımlar ve
|
||
RDF 1.2 ile uyumlu olacak ve tam RDF Dataset semantiğini destekleyecek şekilde tasarlanmıştır. Bu, 2.x yayın serisi için önemli bir değişikliktir.
|
||
|
||
|
||
### Versioning
|
||
=======
|
||
# Graph Contexts Teknik Özellikler
|
||
|
||
## Genel Bakış
|
||
|
||
Bu özellik, TrustGraph'ın temel grafik öğelerindeki değişiklikleri,
|
||
RDF 1.2 ile uyumlu olacak ve tam RDF Dataset semantiğini destekleyecek şekilde tanımlar. Bu, 2.x sürüm serisi için önemli bir değişikliktir.
|
||
|
||
|
||
### Sürümleme
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
**2.0**: Erken benimseyen sürüm. Temel özellikler mevcut, ancak henüz tamamen
|
||
üretim ortamına hazır olmayabilir.
|
||
**2.1 / 2.2**: Üretim sürümü. Kararlılık ve eksiksizlik doğrulandı.
|
||
|
||
Olgunluk konusundaki esneklik kasıtlıdır; erken benimseyenler, tüm özellikler
|
||
üretim ortamına hazır hale gelmeden önce yeni yeteneklere erişebilir.
|
||
|
||
<<<<<<< HEAD
|
||
## Goals
|
||
=======
|
||
## Hedefler
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
Bu çalışmanın temel hedefleri, gerçekler/ifadeler hakkında meta veri sağlamaktır:
|
||
|
||
**Zaman bilgisi**: Gerçekleri zamanla ilgili bilgilerle ilişkilendirme
|
||
<<<<<<< HEAD
|
||
Bir gerçeğin doğru olduğu düşünüldüğü zaman
|
||
Bir gerçeğin doğru hale geldiği zaman
|
||
Bir gerçeğin yanlış olduğu tespit edildiği zaman
|
||
|
||
**Kaynak/Köken**: Bir gerçeği destekleyen kaynakları izleme
|
||
"Bu gerçek, X kaynağı tarafından desteklenmektedir"
|
||
Gerçekleri, köken belgelerine bağlama
|
||
|
||
**Doğruluk/Güven**: Gerçekler hakkındaki iddiaları kaydetme
|
||
"Kişi P, bunun doğru olduğunu iddia etti"
|
||
"Kişi Q, bunun yanlış olduğunu iddia ediyor"
|
||
Güven puanlamasını ve çakışma tespitini etkinleştirme
|
||
|
||
**Hipotez**: Yeniden tanımlama (RDF-star / tırnak işaretli üçlüler), bu sonuçları
|
||
elde etmek için temel mekanizmadır, çünkü bunların hepsi ifadeler hakkında ifadeler yapmayı gerektirir.
|
||
|
||
## Background
|
||
|
||
"Alice'in Bob'u tanıdığı" gerçeğinin "2024-01-15" tarihinde keşfedildiğini veya
|
||
"X kaynağının (Y'nin Z'ye neden olduğu) iddiasını desteklediğini" ifade etmek için,
|
||
bir kenara bir şey olarak başvurmanız ve bu kenar hakkında ifadeler yapabilmeniz gerekir. Standart üçlüler bunu desteklemez.
|
||
|
||
### Current Limitations
|
||
|
||
Mevcut `Value` sınıfı `trustgraph-base/trustgraph/schema/core/primitives.py` içinde
|
||
=======
|
||
Bir gerçeğin doğru olduğuna inanıldığı zaman
|
||
Bir gerçeğin doğru hale geldiği zaman
|
||
Bir gerçeğin yanlış olduğu keşfedildiğinde
|
||
|
||
**Kaynak/Köken**: Bir gerçeği destekleyen kaynakları izleme
|
||
"Bu gerçek, kaynak X tarafından destekleniyordu"
|
||
Gerçekleri, köken belgelerine bağlama
|
||
|
||
**Doğruluk/Güvenilirlik**: Doğrulukla ilgili ifadeleri kaydetme
|
||
"Kişi P, bunun doğru olduğunu iddia etti"
|
||
"Kişi Q, bunun yanlış olduğunu iddia ediyor"
|
||
Güvenilirlik puanlaması ve çakışma tespitini etkinleştirme
|
||
|
||
**Hipotez**: Yeniden tanımlama (RDF-star / tırnaklı üçlüler), bu sonuçları elde etmenin temel mekanizmasıdır, çünkü bunların hepsi ifadeler hakkında ifadeler yapmayı gerektirir.
|
||
|
||
|
||
## Arka Plan
|
||
|
||
"Alice'nin Bob'u bildiği gerçeği 2024-01-15'te keşfedildi" veya "kaynak X, (Y'nin Z'ye neden olduğu) iddiasını destekliyor" gibi ifadeleri belirtmek için,
|
||
bir kenarı, hakkında ifadeler yapılabilecek bir şey olarak referans göstermeniz gerekir. Standart üçlüler bunu desteklemez.
|
||
|
||
### Mevcut Sınırlamalar
|
||
|
||
|
||
Mevcut `Value` sınıfı `trustgraph-base/trustgraph/schema/core/primitives.py` içinde:
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
şunları temsil edebilir:
|
||
URI düğümleri (`is_uri=True`)
|
||
Literal değerler (`is_uri=False`)
|
||
|
||
<<<<<<< HEAD
|
||
`type` alanı mevcuttur, ancak XSD veri türlerini temsil etmek için kullanılmaz.
|
||
|
||
## Technical Design
|
||
|
||
### RDF Features to Support
|
||
|
||
#### Core Features (Related to Reification Goals)
|
||
|
||
Bu özellikler, zaman, kaynak ve doğruluk hedefleriyle doğrudan ilgilidir:
|
||
|
||
1. **RDF 1.2 Quoted Triples (RDF-star)**
|
||
Diğer kenarlara işaret eden kenarlar
|
||
Bir Üçlü, başka bir Üçlünün konusu veya nesnesi olabilir
|
||
İfadeler hakkında ifadeler yapmayı sağlar (yeniden tanımlama)
|
||
Bireysel gerçekleri açıklamak için temel mekanizma
|
||
|
||
2. **RDF Dataset / Named Graphs**
|
||
Bir veri kümesi içindeki birden fazla adlandırılmış grafik için destek
|
||
Her grafik bir IRI ile tanımlanır
|
||
Üçlülerden (s, p, o) dörtlülere (s, p, o, g) geçiş
|
||
Bir varsayılan grafik ve sıfır veya daha fazla adlandırılmış grafik içerir
|
||
Grafik IRI'si, ifadelerin konusu olabilir, örneğin:
|
||
Grafik IRI'si, ifadelerde bir özne olabilir, örneğin:
|
||
=======
|
||
`type` alanı mevcut, ancak XSD veri tiplerini temsil etmek için kullanılmıyor.
|
||
|
||
## Teknik Tasarım
|
||
|
||
### Desteklenecek RDF Özellikleri
|
||
|
||
#### Temel Özellikler (Somutlaştırma Hedefleriyle İlgili)
|
||
|
||
Bu özellikler, zamansallık, köken ve doğruluk
|
||
hedefleriyle doğrudan ilişkilidir:
|
||
|
||
1. **RDF 1.2 Tırnak İşaretli Üçlüler (RDF-star)**
|
||
Diğer kenarlara işaret eden kenarlar
|
||
Bir Üçlü, başka bir Üçlünün öznesi veya nesnesi olabilir
|
||
Üçlüler hakkında ifadeler oluşturmayı sağlar (somutlaştırma)
|
||
Bireysel gerçekleri açıklamak için temel mekanizma
|
||
|
||
2. **RDF Veri Kümesi / Adlandırılmış Grafikler**
|
||
Bir veri kümesi içinde birden fazla adlandırılmış grafik desteği
|
||
Her grafik bir IRI ile tanımlanır
|
||
Üçlülerden (s, p, o) dörtlülere (s, p, o, g) geçiş
|
||
Bir varsayılan grafik ve sıfır veya daha fazla adlandırılmış grafik içerir
|
||
Grafik IRI'si, ifadelerin bir öznesi olabilir, örneğin:
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
```
|
||
<graph-source-A> <discoveredOn> "2024-01-15"
|
||
<graph-source-A> <hasVeracity> "high"
|
||
```
|
||
Not: Adlandırılmış grafikler, somutlaştırmadan ayrı bir özelliktir. Bunlar,
|
||
yalnızca ifade açıklamasının ötesinde kullanımlara sahiptir (bölümleme, erişim kontrolü, veri kümesi
|
||
<<<<<<< HEAD
|
||
organizasyonu) ve ayrı bir yetenek olarak ele alınmalıdır.
|
||
=======
|
||
düzeni) ve ayrı bir yetenek olarak ele alınmalıdır.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
3. **Anonim Düğümler** (Sınırlı Destek)
|
||
Küresel bir URI'ye sahip olmayan anonim düğümler
|
||
Dış RDF verilerini yüklerken uyumluluk için desteklenir
|
||
<<<<<<< HEAD
|
||
**Sınırlı durum:** Yükleme işleminden sonra kararlı bir kimlik konusunda hiçbir garanti yoktur
|
||
Bunları jokerli sorgular aracılığıyla bulun (bağlantılara göre, kimliğe göre değil)
|
||
=======
|
||
**Sınırlı durum**: Yükleme işleminden sonra kararlı bir kimlik konusunda garanti yoktur
|
||
Bunları jokerli sorgularla bulun (bağlantılara göre, kimliğe göre değil)
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Birincil bir özellik değildir - kesin anonim düğüm işleme özelliğine güvenmeyin
|
||
|
||
#### Fırsatçı Düzeltmeler (2.0'ın Kırıcı Değişikliği)
|
||
|
||
Bu özellikler, somutlaştırma hedefleriyle doğrudan ilişkili değildir, ancak
|
||
kırıcı değişiklikler yaparken dahil edilmesi değerli olan iyileştirmelerdir:
|
||
|
||
4. **Literal Veri Tipleri**
|
||
XSD veri tipleri için `type` alanını doğru şekilde kullanın
|
||
Örnekler: xsd:string, xsd:integer, xsd:dateTime, vb.
|
||
<<<<<<< HEAD
|
||
Mevcut sınırlamayı düzeltir: tarihleri veya tamsayıları düzgün bir şekilde temsil edilemez
|
||
=======
|
||
Mevcut sınırlamayı düzeltir: tarihleri veya tamsayıları doğru şekilde temsil edilemez
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
5. **Dil Etiketleri**
|
||
Dize literal değerleri üzerinde dil öznitelikleri desteği (@en, @fr, vb.)
|
||
Not: Bir literal değerin ya bir dil etiketi YA da bir veri tipi vardır, ikisi birden değil
|
||
(rdf:langString hariç)
|
||
<<<<<<< HEAD
|
||
Yapay zeka/çok dilli kullanım senaryoları için önemlidir
|
||
=======
|
||
Yapay zeka/çok dilli kullanım durumları için önemlidir
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
### Veri Modelleri
|
||
|
||
#### Terim (Value adından değiştirildi)
|
||
|
||
`Value` sınıfı, RDF terminolojisini daha iyi yansıtmak için `Term` olarak yeniden adlandırılacaktır.
|
||
<<<<<<< HEAD
|
||
Bu yeniden adlandırma iki amaca hizmet etmektedir:
|
||
1. İsimlendirmeyi RDF kavramlarıyla uyumlu hale getirmek (bir "Terim", bir IRI, literal, boş
|
||
düğüm veya tırnak içindeki üçlü olabilir - sadece bir "değer" değildir).
|
||
2. Değişikliklere neden olan arayüzde kod incelemesini zorlamak - hala
|
||
`Value`'a referans veren herhangi bir kod, açıkça hatalıdır ve güncellenmesi gerekir.
|
||
=======
|
||
Bu yeniden adlandırmanın iki amacı vardır:
|
||
1. İsimlendirmeyi RDF kavramlarıyla uyumlu hale getirmek (bir "Terim", bir IRI, literal, boş
|
||
düğüm veya tırnak içindeki üçlü olabilir - sadece bir "değer" değildir).
|
||
2. Kod incelemesini, önemli değişikliklerin yapıldığı arayüzde zorunlu kılmak - hala
|
||
`Value`'a referans veren herhangi bir kod, açıkça hatalı olacaktır ve güncellenmesi gerekecektir.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
Bir Terim şunları temsil edebilir:
|
||
|
||
**IRI/URI** - Adlandırılmış bir düğüm/kaynak
|
||
**Boş Düğüm** - Yerel kapsamı olan anonim bir düğüm
|
||
**Literal (Değer)** - Ya bir veri türü (XSD türü) veya
|
||
Bir dil etiketi
|
||
**Tırnak İçine Alınmış Üçlü** - Bir terim olarak kullanılan bir üçlü (RDF 1.2)
|
||
|
||
|
||
##### Seçilen Yaklaşım: Tip Ayırıcısı Olan Tek Sınıf
|
||
|
||
<<<<<<< HEAD
|
||
Serileştirme gereksinimleri yapıyı belirler - bir tür ayrımcısına ihtiyaç vardır.
|
||
Python gösteriminden bağımsız olarak, kablo formatında bir tür ayrımcısına ihtiyaç vardır.
|
||
=======
|
||
Serileştirme gereksinimleri yapıyı belirler - bir tür belirleyiciye ihtiyaç vardır.
|
||
Python gösteriminden bağımsız olarak, kablo formatında bir tür belirleyiciye ihtiyaç vardır.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Tek bir sınıf ve bir tür alanı, doğal bir çözümdür ve mevcut `Value` kalıbıyla uyumludur.
|
||
|
||
Tek karakterli tür kodları, kompakt serileştirme sağlar:
|
||
|
||
```python
|
||
from dataclasses import dataclass
|
||
|
||
# Term type constants
|
||
IRI = "i" # IRI/URI node
|
||
BLANK = "b" # Blank node
|
||
LITERAL = "l" # Literal value
|
||
TRIPLE = "t" # Quoted triple (RDF-star)
|
||
|
||
@dataclass
|
||
class Term:
|
||
type: str = "" # One of: IRI, BLANK, LITERAL, TRIPLE
|
||
|
||
# For IRI terms (type == IRI)
|
||
iri: str = ""
|
||
|
||
# For blank nodes (type == BLANK)
|
||
id: str = ""
|
||
|
||
# For literals (type == LITERAL)
|
||
value: str = ""
|
||
datatype: str = "" # XSD datatype URI (mutually exclusive with language)
|
||
language: str = "" # Language tag (mutually exclusive with datatype)
|
||
|
||
# For quoted triples (type == TRIPLE)
|
||
triple: "Triple | None" = None
|
||
```
|
||
|
||
Kullanım örnekleri:
|
||
|
||
```python
|
||
# IRI term
|
||
node = Term(type=IRI, iri="http://example.org/Alice")
|
||
|
||
# Literal with datatype
|
||
age = Term(type=LITERAL, value="42", datatype="xsd:integer")
|
||
|
||
# Literal with language tag
|
||
label = Term(type=LITERAL, value="Hello", language="en")
|
||
|
||
# Blank node
|
||
anon = Term(type=BLANK, id="_:b1")
|
||
|
||
# Quoted triple (statement about a statement)
|
||
inner = Triple(
|
||
s=Term(type=IRI, iri="http://example.org/Alice"),
|
||
p=Term(type=IRI, iri="http://example.org/knows"),
|
||
o=Term(type=IRI, iri="http://example.org/Bob"),
|
||
)
|
||
reified = Term(type=TRIPLE, triple=inner)
|
||
```
|
||
|
||
##### Alternatifler
|
||
|
||
**B Seçeneği: Özel sınıfların birleşimi** (`Term = IRI | BlankNode | Literal | QuotedTriple`)
|
||
Reddedildi: Seri hale getirme işlemi hala bir tür belirleyici gerektirecek, bu da karmaşıklığı artıracaktır.
|
||
|
||
**C Seçeneği: Alt sınıflara sahip temel sınıf**
|
||
Reddedildi: Aynı seri hale getirme sorunu, ayrıca dataclass miras özellikleriyle ilgili sorunlar.
|
||
|
||
#### Üçlü / Dörtlü
|
||
|
||
`Triple` sınıfı, isteğe bağlı bir grafik alanı kazanarak dörtlü bir yapıya dönüşebilir:
|
||
|
||
```python
|
||
@dataclass
|
||
class Triple:
|
||
s: Term | None = None # Subject
|
||
p: Term | None = None # Predicate
|
||
o: Term | None = None # Object
|
||
g: str | None = None # Graph name (IRI), None = default graph
|
||
```
|
||
|
||
Tasarım kararları:
|
||
**Alan adı**: `g`, `s`, `p` ve `o` ile tutarlılık için.
|
||
**İsteğe bağlı**: `None`, varsayılan grafiği (isim belirtilmemiş) ifade eder.
|
||
**Tip**: Terim yerine düz bir dize (IRI).
|
||
Grafik adları her zaman IRI'lerdir.
|
||
Boş düğümlerin grafik adı olarak kullanılması reddedildi (çok kafa karıştırıcı).
|
||
Tam Terim mekanizmasına ihtiyaç yok.
|
||
|
||
Not: Sınıf adı teknik olarak bir dörtlü olsa bile `Triple` olarak kalır.
|
||
Bu, karmaşayı önler ve "üçlü" terimi hala s/p/o kısmı için yaygın olarak kullanılan bir terimdir. Grafik bağlamı, üçlünün nerede bulunduğu hakkında meta veridir.
|
||
|
||
|
||
### Olası Sorgu Desenleri
|
||
|
||
Mevcut sorgu motoru, S, P, O terimlerinin kombinasyonlarını kabul eder. Tırnak içinde belirtilen
|
||
üçlüler, bir üçlünün kendisi bu konumlarda geçerli bir terim haline gelir. Aşağıda,
|
||
orijinal hedefleri destekleyen olası sorgu desenleri bulunmaktadır.
|
||
|
||
<<<<<<< HEAD
|
||
#### Grafik Parametre Anlamları
|
||
=======
|
||
#### Grafik Parametre Anlamı
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
Geriye dönük uyumluluk için SPARQL kurallarına uygun olarak:
|
||
|
||
**`g` belirtilmemiş / Yok**: Yalnızca varsayılan grafiği sorgula.
|
||
**`g` = belirli bir IRI**: Yalnızca o adlandırılmış grafiği sorgula.
|
||
**`g` = joker karakter / `*`**: Tüm grafikler arasında sorgu yap (SPARQL ile eşdeğer
|
||
`GRAPH ?g { ... }`).
|
||
|
||
Bu, basit sorguları basit tutar ve adlandırılmış grafik sorgularını isteğe bağlı hale getirir.
|
||
|
||
<<<<<<< HEAD
|
||
Grafik arası sorgular (g=joker karakter), tamamen desteklenir. Cassandra şeması,
|
||
g'nin bir kümeleme sütunu olduğu (bölüm anahtarı olmadığı) özel tabloları içerir (SPOG, POSG, OSPG),
|
||
=======
|
||
Grafikler arası sorgular (g=joker karakter) tamamen desteklenir. Cassandra şeması,
|
||
g'nin bir kümeleme sütunu olduğu (bölüm anahtarı değil) özel tabloları içerir (SPOG, POSG, OSPG),
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
bu da tüm grafikler arasında verimli sorgular yapmayı sağlar.
|
||
|
||
#### Zamansal Sorgular
|
||
|
||
**Belirli bir tarihten sonra keşfedilen tüm bilgileri bul:**
|
||
```
|
||
S: ? # any quoted triple
|
||
P: <discoveredOn>
|
||
O: > "2024-01-15"^^xsd:date # date comparison
|
||
```
|
||
|
||
**Belirli bir bilginin ne zaman doğru olduğuna inanıldığı bulun:**
|
||
```
|
||
S: << <Alice> <knows> <Bob> >> # quoted triple as subject
|
||
P: <believedTrueFrom>
|
||
O: ? # returns the date
|
||
```
|
||
|
||
**Yanlış hale gelen bilgileri bulun:**
|
||
```
|
||
S: ? # any quoted triple
|
||
P: <discoveredFalseOn>
|
||
O: ? # has any value (exists)
|
||
```
|
||
|
||
#### Kaynak Sorguları
|
||
|
||
**Belirli bir kaynağa dayanan tüm bilgileri bulun:**
|
||
```
|
||
S: ? # any quoted triple
|
||
P: <supportedBy>
|
||
O: <source:document-123>
|
||
```
|
||
|
||
**Belirli bir gerçeği destekleyen kaynakları bulun:**
|
||
```
|
||
S: << <DrugA> <treats> <DiseaseB> >> # quoted triple as subject
|
||
P: <supportedBy>
|
||
O: ? # returns source IRIs
|
||
```
|
||
|
||
#### Doğruluk Sorguları
|
||
|
||
**Bir kişinin doğru olarak işaretlediği ifadeleri bulun:**
|
||
```
|
||
S: ? # any quoted triple
|
||
P: <assertedTrueBy>
|
||
O: <person:Alice>
|
||
```
|
||
|
||
**Çelişkili ifadeleri bulun (aynı gerçek, farklı doğruluk):**
|
||
```
|
||
# First query: facts asserted true
|
||
S: ?
|
||
P: <assertedTrueBy>
|
||
O: ?
|
||
|
||
# Second query: facts asserted false
|
||
S: ?
|
||
P: <assertedFalseBy>
|
||
O: ?
|
||
|
||
# Application logic: find intersection of subjects
|
||
```
|
||
|
||
**Güvenilirlik puanı eşik değerinin altında olan bilgileri bulun:**
|
||
```
|
||
S: ? # any quoted triple
|
||
P: <trustScore>
|
||
O: < 0.5 # numeric comparison
|
||
```
|
||
|
||
### Mimari
|
||
|
||
<<<<<<< HEAD
|
||
Birden çok bileşende önemli değişiklikler gereklidir:
|
||
=======
|
||
Birden fazla bileşende önemli değişiklikler gereklidir:
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
#### Bu Depo (trustgraph)
|
||
|
||
**Şema ilkel öğeleri** (`trustgraph-base/trustgraph/schema/core/primitives.py`)
|
||
Değer → Terim yeniden adlandırması
|
||
<<<<<<< HEAD
|
||
Tip ayrımcısına sahip yeni Terim yapısı
|
||
=======
|
||
Tip ayrımcısı ile yeni Terim yapısı
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Üçlü, grafik bağlamı için `g` alanı kazanır
|
||
|
||
**Mesaj çeviricileri** (`trustgraph-base/trustgraph/messaging/translators/`)
|
||
Yeni Terim/Üçlü yapıları için güncelleme
|
||
Yeni alanlar için serileştirme/deserileştirme
|
||
|
||
**Geçit bileşenleri**
|
||
Yeni Terim ve dörtlü yapılarını işleyin
|
||
|
||
**Bilgi çekirdekleri**
|
||
Dörtlüleri ve yeniden tanımlamayı desteklemek için çekirdek değişiklikleri
|
||
|
||
**Bilgi yöneticisi**
|
||
Şema değişiklikleri burada yayılır
|
||
|
||
**Depolama katmanları**
|
||
Cassandra: Şema yeniden tasarımı (Ayrıntılar için Uygulama Ayrıntılarına bakın)
|
||
Diğer arka uçlar: Daha sonraki aşamalara ertelenmiştir
|
||
|
||
**Komut satırı araçları**
|
||
Yeni veri yapıları için güncelleme
|
||
|
||
**REST API dokümantasyonu**
|
||
OpenAPI spesifikasyonunda güncellemeler
|
||
|
||
#### Harici Depolar
|
||
|
||
**Python API'si** (bu depo)
|
||
Yeni yapılar için istemci kitaplığı güncellemeleri
|
||
|
||
**TypeScript API'leri** (ayrı depo)
|
||
İstemci kitaplığı güncellemeleri
|
||
|
||
**Çalışma alanı** (ayrı depo)
|
||
Önemli durum yönetimi değişiklikleri
|
||
|
||
### API'ler
|
||
|
||
#### REST API
|
||
|
||
OpenAPI spesifikasyonunda belgelenmiştir
|
||
Yeni Terim/Üçlü yapıları için güncellenmesi gerekecektir
|
||
Grafik bağlamı işlemleri için yeni uç noktaları gerekebilir
|
||
|
||
#### Python API'si (bu depo)
|
||
|
||
Yeni ilkel öğelerle eşleşen istemci kitaplığı değişiklikleri
|
||
Terim (önceden Değer) ve Üçlü için bozucu değişiklikler
|
||
|
||
#### TypeScript API'si (ayrı depo)
|
||
|
||
Python API'sine paralel değişiklikler
|
||
Ayrı sürüm koordinasyonu
|
||
|
||
#### Çalışma alanı (ayrı depo)
|
||
|
||
Önemli durum yönetimi değişiklikleri
|
||
<<<<<<< HEAD
|
||
Grafik bağlamı özellikleriyle ilgili kullanıcı arayüzü güncellemeleri
|
||
=======
|
||
Grafik bağlamı özelliklerini destekleyen UI güncellemeleri
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
### Uygulama Ayrıntıları
|
||
|
||
#### Aşamalı Depolama Uygulaması
|
||
|
||
<<<<<<< HEAD
|
||
Birden çok grafik depolama arka ucu (Cassandra, Neo4j, vb.) vardır. Uygulama
|
||
aşağıdaki aşamalarda gerçekleştirilecektir:
|
||
|
||
1. **1. Aşama: Cassandra**
|
||
Yerel Cassandra deposuyla başlayın
|
||
Depolama katmanı üzerinde tam kontrol, hızlı yinelemeyi sağlar
|
||
Şema, dörtlüler + yeniden tanımlama için sıfırdan yeniden tasarlanacaktır
|
||
=======
|
||
Birden fazla grafik depolama arka ucu (Cassandra, Neo4j, vb.) bulunmaktadır. Uygulama,
|
||
aşağıdaki aşamalarda gerçekleştirilecektir:
|
||
|
||
1. **1. Aşama: Cassandra**
|
||
Kendi geliştirdiğimiz Cassandra deposuyla başlayın
|
||
Depolama katmanı üzerinde tam kontrole sahip olmak, hızlı yinelemeyi sağlar
|
||
Şema, dörtlüler ve yeniden tanımlama için sıfırdan yeniden tasarlanacaktır
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Veri modelini ve sorgu kalıplarını gerçek kullanım durumlarına göre doğrulayın
|
||
|
||
#### Cassandra Şema Tasarımı
|
||
|
||
Cassandra, farklı sorgu erişim modellerini desteklemek için birden fazla tablo gerektirir
|
||
(her tablo, bölüm anahtarı + kümeleme sütunları aracılığıyla verimli bir şekilde sorgulanır).
|
||
|
||
##### Sorgu Modelleri
|
||
|
||
"quads" (g, s, p, o) ile, her konum belirtilebilir veya joker karakter olabilir ve bu da
|
||
16 olası sorgu modeli oluşturur:
|
||
|
||
| # | g | s | p | o | Açıklama |
|
||
|---|---|---|---|---|-------------|
|
||
| 1 | ? | ? | ? | ? | Tüm "quads" |
|
||
| 2 | ? | ? | ? | o | Nesneye göre |
|
||
| 3 | ? | ? | p | ? | Özneye göre |
|
||
| 4 | ? | ? | p | o | Özne + nesneye göre |
|
||
| 5 | ? | s | ? | ? | Konuya göre |
|
||
| 6 | ? | s | ? | o | Konu + nesneye göre |
|
||
<<<<<<< HEAD
|
||
| 7 | ? | s | p | ? | Konu + öneye göre |
|
||
| 8 | ? | s | p | o | Tam üçlü (hangi grafikler?) |
|
||
| 9 | g | ? | ? | ? | Grafiğe göre |
|
||
| 10 | g | ? | ? | o | Grafik + nesneye göre |
|
||
| 11 | g | ? | p | ? | Grafik + öneye göre |
|
||
| 12 | g | ? | p | o | Grafik + öne + nesneye göre |
|
||
| 13 | g | s | ? | ? | Grafik + konuya göre |
|
||
| 14 | g | s | ? | o | Grafik + konu + nesneye göre |
|
||
| 15 | g | s | p | ? | Grafik + konu + öneye göre |
|
||
=======
|
||
| 7 | ? | s | p | ? | Konu + özneliğe göre |
|
||
| 8 | ? | s | p | o | Tam üçlü (hangi grafikler?) |
|
||
| 9 | g | ? | ? | ? | Grafiğe göre |
|
||
| 10 | g | ? | ? | o | Grafik + nesneye göre |
|
||
| 11 | g | ? | p | ? | Grafik + özneliğe göre |
|
||
| 12 | g | ? | p | o | Grafik + özneliği + nesneye göre |
|
||
| 13 | g | s | ? | ? | Grafik + konuya göre |
|
||
| 14 | g | s | ? | o | Grafik + konu + nesneye göre |
|
||
| 15 | g | s | p | ? | Grafik + konu + özneliğe göre |
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
| 16 | g | s | p | o | Tam "quad" |
|
||
|
||
##### Tablo Tasarımı
|
||
|
||
<<<<<<< HEAD
|
||
Cassandra kısıtlaması: Yalnızca bölüm anahtarına göre verimli bir şekilde sorgulayabilirsiniz, ardından
|
||
=======
|
||
Cassandra kısıtlaması: Yalnızca bölüm anahtarına göre verimli bir şekilde sorgu yapabilirsiniz, ardından
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
kümeleme sütunları üzerinde soldan sağa filtreleme yapabilirsiniz. "g" joker karakterli sorgular için, "g" bir
|
||
kümeleme sütunu olmalıdır. "g" belirtilmiş sorgular için, bölüm anahtarında bulunan "g" daha
|
||
verimlidir.
|
||
|
||
**İki tablo ailesi gereklidir:**
|
||
|
||
**A Ailesi: "g" joker karakterli sorgular** ("g" kümeleme sütunlarında)
|
||
|
||
| Tablo | Bölüm | Kümeleme | Desteklenen modeller |
|
||
|-------|-----------|------------|-------------------|
|
||
| SPOG | (kullanıcı, koleksiyon, s) | p, o, g | 5, 7, 8 |
|
||
| POSG | (kullanıcı, koleksiyon, p) | o, s, g | 3, 4 |
|
||
| OSPG | (kullanıcı, koleksiyon, o) | s, p, g | 2, 6 |
|
||
|
||
**B Ailesi: "g" belirtilmiş sorgular** ("g" bölüm anahtarında)
|
||
|
||
| Tablo | Bölüm | Kümeleme | Desteklenen modeller |
|
||
|-------|-----------|------------|-------------------|
|
||
| GSPO | (kullanıcı, koleksiyon, g, s) | p, o | 9, 13, 15, 16 |
|
||
| GPOS | (kullanıcı, koleksiyon, g, p) | o, s | 11, 12 |
|
||
| GOSP | (kullanıcı, koleksiyon, g, o) | s, p | 10, 14 |
|
||
|
||
**Koleksiyon tablosu** (döngüleme ve toplu silme için)
|
||
|
||
| Tablo | Bölüm | Kümeleme | Amaç |
|
||
|-------|-----------|------------|---------|
|
||
| COLL | (kullanıcı, koleksiyon) | g, s, p, o | Koleksiyondaki tüm "quad"ları numaralandır |
|
||
|
||
##### Yazma ve Silme Yolları
|
||
|
||
**Yazma yolu**: Tüm 7 tabloya ekleyin.
|
||
|
||
**Koleksiyon silme yolu**:
|
||
1. `(user, collection)` için COLL tablosunu yineleyin
|
||
2. Her "quad" için, tüm 6 sorgu tablosundan silin
|
||
3. COLL tablosundan silin (veya aralık silme)
|
||
|
||
**Tek bir "quad" silme yolu**: Tüm 7 tabloya doğrudan silin.
|
||
|
||
##### Depolama Maliyeti
|
||
|
||
Her "quad" 7 kez depolanır. Bu, esnek sorgulama ile
|
||
verimli koleksiyon silme birleşiminin maliyetidir.
|
||
|
||
##### Depolamada Alıntılanmış Üçlüler
|
||
|
||
Konu veya nesne kendisi bir üçlü olabilir. Seçenekler:
|
||
|
||
**A Seçeneği: Alıntılanmış üçlüleri standart bir dizeye seri hale getirin**
|
||
```
|
||
S: "<<http://ex/Alice|http://ex/knows|http://ex/Bob>>"
|
||
P: http://ex/discoveredOn
|
||
O: "2024-01-15"
|
||
G: null
|
||
```
|
||
Tırnak içinde belirtilen üçlüleri, seri hale getirilmiş bir dize olarak S veya O sütunlarında saklayın.
|
||
<<<<<<< HEAD
|
||
Seri hale getirilmiş forma göre tam eşleşme ile sorgulayın.
|
||
Artı: Basit, mevcut indeks kalıplarına uyuyor.
|
||
Eksileri: "Tırnak içinde belirtilen öznenin yüklemesinin X olduğu üçlüleri bul" gibi sorguları yapmak mümkün değil.
|
||
=======
|
||
Seri hale getirilmiş forma göre tam eşleşme sorgusu yapın.
|
||
Artı: Basit, mevcut indeks kalıplarına uyuyor.
|
||
Eksileri: "Tırnak içinde belirtilen öznenin yüklemesinin X olduğu üçlüleri bul" gibi sorgular yapılamaz.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
**B Seçeneği: Üçlü Kimlikleri / Hash'leri**
|
||
```
|
||
Triple table:
|
||
id: hash(s,p,o,g)
|
||
s, p, o, g: ...
|
||
|
||
Metadata table:
|
||
subject_triple_id: <hash>
|
||
p: http://ex/discoveredOn
|
||
o: "2024-01-15"
|
||
```
|
||
Her üçlüye bir kimlik (bileşenlerin karma değeri) atayın.
|
||
<<<<<<< HEAD
|
||
Örnek meta veri referansları, kimlik numarasıyla üçlüleri belirtir.
|
||
Artı: Temiz bir ayrım, üçlü kimlik numaralarının indekslenmesini sağlar.
|
||
Eksileri: Üçlü kimliğinin hesaplanmasını/yönetilmesini gerektirir, iki aşamalı aramalar.
|
||
|
||
**Öneri**: Basitlik için A seçeneğiyle (serileştirilmiş dizeler) başlayın.
|
||
B seçeneği, tırnak içinde belirtilen üçlü bileşenleri üzerinde gelişmiş sorgu desenleri gerekiyorsa gerekebilir.
|
||
|
||
ÇIKTI SÖZLEŞMESİ (tam olarak aşağıdaki formatı takip etmelidir):
|
||
2. **2. Aşama+: Diğer Altyapılar**
|
||
Neo4j ve diğer depolama sistemleri, sonraki aşamalarda uygulanmıştır.
|
||
Cassandra'dan edinilen deneyimler, bu uygulamaları etkilemiştir.
|
||
|
||
Bu yaklaşım, tamamen kontrol altında olan bir altyapıda doğrulama yaparak tasarım riskini azaltır.
|
||
=======
|
||
Somutlaştırma meta veri referansları, kimlik numarasıyla üçlülere başvurur.
|
||
Artı: Temiz bir ayrım, üçlü kimlik numaralarını indekslemek mümkündür.
|
||
Eksileri: Üçlü kimliğini hesaplamayı/yönetmeyi gerektirir, iki aşamalı aramalar.
|
||
|
||
**Öneri**: Basitlik için A seçeneğiyle (serileştirilmiş dizeler) başlayın.
|
||
B seçeneği, tırnak içinde belirtilen üçlü
|
||
bileşenleri üzerinde gelişmiş sorgu desenleri gerekiyorsa gerekebilir.
|
||
|
||
2. **Faz 2+: Diğer Altyapılar**
|
||
Neo4j ve diğer depolama sistemleri, sonraki aşamalarda uygulanmıştır.
|
||
Cassandra'dan edinilen deneyimler, bu uygulamaları etkilemiştir.
|
||
|
||
Bu yaklaşım, tamamen kontrol altında olan bir altyapıda doğrulama yaparak tasarım risklerini azaltır.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Tüm depolama sistemlerine yönelik uygulamalara başlamadan önce bu doğrulama yapılır.
|
||
|
||
#### Değer → Terim Yeniden Adlandırma
|
||
|
||
`Value` sınıfı, `Term` olarak yeniden adlandırılacaktır. Bu, kod tabanındaki yaklaşık 78 dosyayı etkilemektedir.
|
||
Yeniden adlandırma, bir zorlama işlevi olarak görev görmektedir: hala ⟦CODE_0⟧'ı kullanan herhangi bir kod...
|
||
`Value`, 2.0 ile uyumluluk açısından gözden geçirilmesi/güncellenmesi gereken bir alan olarak hemen belirlenebilir.
|
||
|
||
|
||
## Güvenlik Hususları
|
||
|
||
Adlandırılmış grafikler bir güvenlik özelliği değildir. Kullanıcılar ve koleksiyonlar,
|
||
<<<<<<< HEAD
|
||
güvenlik sınırlarıdır. Adlandırılmış grafikler tamamen veri organizasyonu ve
|
||
=======
|
||
güvenlik sınırlarıdır. Adlandırılmış grafikler tamamen veri düzenlemesi ve
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
somutlaştırma desteği içindir.
|
||
|
||
## Performans Hususları
|
||
|
||
Tırnak işaretli üçlüler, iç içe derinliğini artırır - sorgu performansını etkileyebilir.
|
||
<<<<<<< HEAD
|
||
Verimli grafik kapsamlı sorgular için adlandırılmış grafik indeksleme stratejilerine ihtiyaç vardır.
|
||
=======
|
||
Verimli grafik kapsamlı sorgular için adlandırılmış grafik indeksleme stratejileri gereklidir.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
Cassandra şema tasarımı, dörtlü depolamayı verimli bir şekilde karşılayacak şekilde tasarlanmalıdır.
|
||
|
||
### Vektör Depolama Sınırı
|
||
|
||
Vektör depoları her zaman yalnızca IRI'lere başvurur:
|
||
Asla kenarlar (tırnak işaretli üçlüler)
|
||
Asla literal değerler
|
||
Asla boş düğümler
|
||
|
||
Bu, vektör deposunu basit tutar; adlandırılmış varlıkların semantik benzerliğini işler. Grafik yapısı, ilişkileri, somutlaştırmayı ve meta verileri yönetir.
|
||
Tırnak içinde belirtilen üçlüler ve adlandırılmış grafikler, vektör işlemlerini karmaşıklaştırmaz.
|
||
|
||
## Test Stratejisi
|
||
|
||
Mevcut test stratejisini kullanın. Bu, önemli bir değişiklik olduğundan, yeni yapıların tüm bileşenlerde doğru şekilde çalıştığını doğrulamak için uçtan uca test paketine kapsamlı bir şekilde odaklanılmalıdır.
|
||
|
||
## Geçiş Planı
|
||
|
||
2.0, önemli bir değişiklik içeren bir sürümdür; geriye dönük uyumluluk gerekmemektedir.
|
||
Mevcut verilerin, yeni şemaya aktarılması gerekebilir (son tasarım bazında belirlenecektir).
|
||
Mevcut üçlüleri dönüştürmek için geçiş araçlarını göz önünde bulundurun.
|
||
|
||
## Açık Sorular
|
||
|
||
|
||
## Açık Sorular
|
||
|
||
<<<<<<< HEAD
|
||
**Boş düğümler**: Sınırlı destek doğrulandı. Boş düğümler için bir skolemleştirme stratejisi belirlemek gerekebilir (yükleme sırasında IRI'lar oluşturmak veya boş düğüm kimliklerini korumak).
|
||
**Sorgu sözdizimi**: Alıntılanmış üçlüleri sorgularda belirtmek için somut sözdizimi nedir? Sorgu API'sini tanımlamak gerekiyor.
|
||
~~**Önerme sözlüğü**~~: Çözüldü. Herhangi bir geçerli RDF önermesi izin verilir, kullanıcı tanımlı olanlar dahil. RDF geçerliliği hakkında minimum varsayımlar.
|
||
Çok az sabit değer (örneğin, bazı yerlerde kullanılan ⟦CODE_0⟧).
|
||
~~**Önerme sözlüğü**:~~ Çözüldü. Herhangi bir geçerli RDF özneli kabul edilebilir,
|
||
kullanıcı tarafından tanımlanmış özel özneler de dahil. RDF geçerliliği hakkında çok az varsayım.
|
||
Çok az sabit değer (örneğin, bazı yerlerde kullanılan `rdfs:label`).
|
||
Strateji: Mümkün olduğunca hiçbir şeyi kilitlememeye özen gösterin.
|
||
~~**Vektör depolama etkisi**~~: Çözüldü. Vektör depoları her zaman IRI'lere işaret eder.
|
||
sadece - asla kenarlara, literal değerlere veya boş düğümlere işaret etmez. Tırnak işaretli üçlüler ve
|
||
yeniden tanımlama, vektör deposunu etkilemez.
|
||
~~**Adlandırılmış grafik semantiği**~~: Çözüldü. Sorgular varsayılan olarak
|
||
grafiğe yöneliktir (SPARQL davranışıyla eşleşir, geriye dönük uyumlu). Adlandırılmış grafiklere veya tüm
|
||
grafiklere sorgu yapmak için açık bir grafik parametresi gereklidir.
|
||
=======
|
||
**Boş düğümler**: Sınırlı destek doğrulandı. Boş düğümler için bir skolemleştirme stratejisi belirlemek gerekebilir (yükleme sırasında IRİ'ler oluşturmak veya boş düğüm kimliklerini korumak).
|
||
**Sorgu sözdizimi**: Alıntılanmış üçlüleri sorgularda belirtmek için somut sözdizimi nedir? Sorgu API'sini tanımlamak gerekiyor.
|
||
~~**Önerme sözlüğü**~~: Çözüldü. Herhangi bir geçerli RDF önermesi izin verilir, kullanıcı tanımlı olanlar da dahil. RDF geçerliliği hakkında minimum varsayımlar.
|
||
Çok az sabit değer (örneğin, bazı yerlerde kullanılan ⟦CODE_0⟧).
|
||
~~**Önerme sözlüğü**:~~ Çözüldü. Herhangi bir geçerli RDF özneli kabul edilir,
|
||
kullanıcı tarafından tanımlanmış özel özneler de dahil. RDF geçerliliği hakkında çok az varsayım yapılır.
|
||
Çok az sabit değer (örneğin, bazı yerlerde kullanılan `rdfs:label`).
|
||
Strateji: Mümkün olduğunca hiçbir şeyi kilitlememeye özen gösterin.
|
||
~~**Vektör depolama etkisi**~~: Çözüldü. Vektör depoları her zaman IRI'lara işaret eder.
|
||
sadece - asla kenarlara, literal değerlere veya boş düğümlere işaret etmez. Tırnak işaretli üçlüler ve
|
||
yeniden tanımlama, vektör deposunu etkilemez.
|
||
~~**Adlandırılmış grafik semantiği**~~: Çözüldü. Sorgular, varsayılan
|
||
grafiğe varsayılan olarak yöneliktir (SPARQL davranışıyla eşleşir, geriye dönük uyumlu). Açık bir grafik
|
||
parametresi, adlandırılmış grafiklere veya tüm grafiklere sorgu yapmak için gereklidir.
|
||
>>>>>>> 82edf2d (New md files from RunPod)
|
||
|
||
## Referanslar
|
||
|
||
[RDF 1.2 Kavramları](https://www.w3.org/TR/rdf12-concepts/)
|
||
[RDF-star ve SPARQL-star](https://w3c.github.io/rdf-star/)
|
||
[RDF Veri Kümesi](https://www.w3.org/TR/rdf11-concepts/#section-dataset)
|