--- 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) ``` "2024-01-15" "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: O: > "2024-01-15"^^xsd:date # date comparison ``` **Belirli bir bilginin ne zaman doğru olduğuna inanıldığı bulun:** ``` S: << >> # quoted triple as subject P: O: ? # returns the date ``` **Yanlış hale gelen bilgileri bulun:** ``` S: ? # any quoted triple P: O: ? # has any value (exists) ``` #### Kaynak Sorguları **Belirli bir kaynağa dayanan tüm bilgileri bulun:** ``` S: ? # any quoted triple P: O: ``` **Belirli bir gerçeği destekleyen kaynakları bulun:** ``` S: << >> # quoted triple as subject P: O: ? # returns source IRIs ``` #### Doğruluk Sorguları **Bir kişinin doğru olarak işaretlediği ifadeleri bulun:** ``` S: ? # any quoted triple P: O: ``` **Çelişkili ifadeleri bulun (aynı gerçek, farklı doğruluk):** ``` # First query: facts asserted true S: ? P: O: ? # Second query: facts asserted false S: ? P: O: ? # Application logic: find intersection of subjects ``` **Güvenilirlik puanı eşik değerinin altında olan bilgileri bulun:** ``` S: ? # any quoted triple P: 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: "<>" 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: 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)