SHLS (Sebis Hierarchical List Structure) yapılandırılmış verileri tırnak, parantez, iki nokta veya yinelenen anahtarlar olmadan yazar: her bölüm anahtarlarını bir kez belirtir, altındaki kayıtlar yalnızca değerleri listeler. SHLS Editörü kodu ve yanında her bölümün anahtar bloğunu ve kayıtlarını gösterir. Değerleri, anahtarları ve kayıtları doğrudan orada değiştirin, sorunları satıra göre görün, JSON, YAML ve CSV'ye ve bunlardan dönüştürün ve SHLS'nin JSON'a karşı ne kadar belirteç tasarrufu sağladığını görün.
Her şey tarayıcınızda çalışır. Belgeler yüklenmez; kayıt ve reklam yoktur.
Bir bölüm adıyla başlar. Anahtar bloğu bir boşluk girintili anahtarları listeler; iç içe bir listenin anahtarları bir düzey daha derindedir. Tam olarak bir boş satırdan sonra kayıtlar gelir: anahtarların sırasıyla satır başına bir değer. İç içe bir listenin kendi satırı vardır (anahtarı veya yer tutucu olarak PH) ve kayıtları bir düzey daha derindedir. Tüm değerler metindir - onları sayılara veya tarihlere dönüştürmek, onları okuyan programa kalmıştır.
Product
Name
Price
Smartphone A1
599.99
Laptop B2
1299.99
Company
Name
Location
Country
City
TechCorp
PH
USA
San Francisco
Aynı veriler JSON olarak her kayıtta her anahtarı tekrarlar ve tırnaklar, parantezler ve iki noktalar gerektirir. SHLS, her belirtecin önemli olduğu yerel ve bulut yapay zekâ modelleri için yapıldı. SHLS by Sebastian Grünwald - biçim, kuralları ve referans SHLSDecoder ile SHLSEncoder (Python) GitHub'daki SHLS deposundadır.
Solda vurgulanmış SHLS - bölümler, anahtarlar, değerler, iç içe düzeyler ve PH yer tutucuları. Ortada her bölümün anahtar bloğu ve kayıtları, anahtarlar etiket olarak. Bir tıklama koda atlar, kod imleci kaydını işaretler.
Değerleri, anahtarları ve bölüm adlarını değiştirin; kayıt ve anahtar ekleyin, çoğaltın, taşıyın ve kaldırın. Kayıtlar anahtar bloklarını izler: yeni bir anahtar her kayıtta "-" alır. Her biri Geri al için tek adım.
Editör SHLS'yi tam olarak SHLSDecoder gibi okur ve göründüğünden farklı okuyacağı şeyleri listeler: bir değeri eksik veya fazla bir kayıt, girinti, anahtar bloğundan sonraki boş satırlar, iki kez geçen bir anahtar.
Dönüştür sekmesi SHLS'nizin ve aynı verilerin JSON halinin yaklaşık belirteçlerini sayar; böylece tasarrufu bir bakışta görürsünüz.
Tam olarak SHLSDecoder ve SHLSEncoder gibi JSON'a ve JSON'dan, YAML, CSV (tablo olarak tek bölüm) ve JSON Lines. JSON, YAML, CSV ve JSON Lines dosyaları SHLS olarak açılır.
Tarayıcınızda kendi geri alma geçmişleriyle istediğiniz sayıda belge saklayın ve hepsini bir ZIP olarak indirin.
Her https sayfası (ve localhost) editörü bir <iframe> ve ?embed=1 ile yerleştirebilir - kayıt yok, anahtar yok. Yerleştirildiğinde editör bu metni gizler ve bir Kaydet düğmesi gösterir. Belgeyi içeri almanın ve dışarı vermenin iki yolu vardır.
src= bir dosya açar (sunucunuz CORS'a izin vermelidir), webhook= ise "Kaydet"in (Ctrl+S) belgeyi o adrese göndermesini sağlar. Authorization: Bearer … başlığı için &token=…, her değişiklikten sonra kaydetmek için &auto ekleyin.
<iframe src="https://shls.giit.ch/?embed=1&src=https://your-site.com/data/products.shls&webhook=https://your-site.com/save.php"
allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
Webhook, JSON içeren bir POST alır: { editor: "shls", event: "save", id, name, content, updated }; content dize olarak belgedir. Bunu saklayan küçük bir PHP betiği:
<?php
header('Access-Control-Allow-Origin: https://shls.giit.ch');
header('Access-Control-Allow-Headers: Content-Type, Authorization');
header('Access-Control-Allow-Methods: POST, OPTIONS');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
$d = json_decode(file_get_contents('php://input'), true);
$name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
file_put_contents(__DIR__ . "/data/$name.shls", $d['content']);
echo '{"ok":true}';
Editör shlseditor:ready der, sayfanız shlseditor:load ile yanıt verir, editör shlseditor:loaded, gerçek düzenlemelerde shlseditor:change ve kullanıcı kaydettiğinde shlseditor:save bildirir. Sayfanız shlseditor:get (geçerli durum) veya shlseditor:save (Kaydet'e basma) gönderebilir. Kaydetme böylece kendi oturum açma ve oturum sisteminiz üzerinden yapılır.
<iframe id="ed" src="https://shls.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
<script>
const ed = document.getElementById('ed');
const ORIGIN = 'https://shls.giit.ch';
addEventListener('message', async e => {
if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
const m = e.data;
if (m.type === 'shlseditor:ready') { // editör hazır: belgeyi ona verin
ed.contentWindow.postMessage({
type: 'shlseditor:load',
name: 'Products',
content: await (await fetch('/data/products.shls')).text()
}, ORIGIN);
}
if (m.type === 'shlseditor:change') document.title = '● not saved'; // gerçek bir düzenleme
if (m.type === 'shlseditor:save') { // kullanıcı "Kaydet"e tıkladı
await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ name: m.name, content: m.content }) });
document.title = 'Saved';
}
});
// Kendi sayfanızda bir kaydet düğmesi: yanıt shlseditor:save olarak gelir
function saveNow() { ed.contentWindow.postMessage({ type: 'shlseditor:get' }, ORIGIN); }
</script>
Sayfanızın içinde Yapay Zekâ Asistanı: çerçeve içinde de çalışır. iframe üzerinde allow="clipboard-write" ile "İstemi kopyala" panoyu doğrudan kullanır (aksi halde editör eski kopyalama komutuna geri döner veya istemi elle kopyalamanız için gösterir). Yapay zekânın gönderdiği bir bağlantı başka bir web sitesinin içindeki editöre ulaşamaz; bu yüzden editör, yapay zekâya ve kullanıcıya bunun yerine yapay zekânın yanıtının tamamını editöre yapıştırmasını söyler - veya editörü kendi penceresinde açın.
window.open("https://shls.giit.ch/?embed=window", "shlseditor-17") tam editörü kendi penceresinde açar ve aynı mesajları window.opener ile konuşur. Yapay zekâdan gelen bağlantılar ona orada ulaşır. shlseditor:load ayrıca context: { host, title, rules } taşıyabilir - yapay zekâ istemi bu durumda belgenin nereye ait olduğunu söyler ve kurallarınıza uyar - ve hook: { url, token }, yalnızca bu belge için olan ve asla saklanmayan bir webhook. Kaydedilmemiş değişikliklerle pencereyi kapatmak shlseditor:closing gönderir.
Editöre kendi isteminizi, sitenizde bir adresi ve bu editör oturumu için bir anahtarı verin. Yapay zekâ iletişim kutusu bu durumda sitenize "Bağlı" olduğunu, yapay zekâya ne söylediğinizi ve geçerli belgeyi değiştir veya yeni bir belge oluştur seçimini gösterir; İstemi kopyala hepsini bir araya getirir. Yapay zekâ sonucunu anahtarla sunucunuza gönderir ve sayfanız onu editörde açar - yeni bir belge ayrı açılır ve kullanıcının tarayıcısında kalır. Editör oturumu başına bir anahtar: editör açık olduğu sürece geçerli kalır ve editör yalnızca anahtarı yokken shlseditor:key-request ile ister. Editör anahtarı asla kendisi göndermez ve asla saklamaz; adres kendi alan adınızda veya onun bir alt alan adında https olmalıdır.
const key = async () => (await fetch('/api/ai-key.php?doc=17')).json(); // editör oturumu başına bir anahtar
const k = await key();
ed.contentWindow.postMessage({ type: 'shlseditor:load', name: 'Products', content, ai: {
label: 'My Site', prompt: 'Keep every key. Only add records.',
endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
// shlseditor:loaded içindeki id'yi hatırlayın ve başka id'li change/save/closing mesajlarını yok sayın
// yalnızca editörün anahtarı yokken:
if (m.type === 'shlseditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'shlseditor:ai', key: k.key }, ORIGIN); }
// editör açıkken sunucunuza her dakika bildirin; editörü veya sayfayı kapatmak anahtarı geçersiz kılar
setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
// sunucunuzda bir sonuç var (polling, SSE …): target "current" veya "new" olur
ed.contentWindow.postMessage({ type: 'shlseditor:load', name: 'Products', content: draft, from: 'ai', target }, ORIGIN);
Anahtarları en az 128 rastgele bitle oluşturun, yalnızca özetlerini (hash) saklayın, her birini oturum açmış kullanıcıya, belgeye ve bu editör oturumuna bağlayın, oturum başına bir tane oluşturun, yalnızca sayfanız oturumu açık bildirdiği sürece geçerli tutun ve editör veya sayfa kapandığında geçersiz kılın.
Protokolün tamamı llms.txt dosyasındadır - bir yapay zekâya verin, sisteminiz için bağlantıyı o kursun. JSON Editörü jsoneditor: önekiyle aynı şekilde çalışır - json.giit.ch.
SHLS (Sebis Hierarchical List Structure), Sebastian Grünwald'ın yapılandırılmış veriler için geliştirdiği bir metin biçimidir. Her bölüm anahtarlarını bir anahtar bloğunda bir kez belirtir; altındaki kayıtlar yalnızca değerleri satır başına bir tane olacak şekilde listeler ve girinti iç içeliği gösterir. Tırnak, parantez, iki nokta veya yinelenen anahtarlar olmadan aynı veriler JSON'dan çok daha az belirteç gerektirir - bu da onu yapay zekâ modelleri için iyi bir biçim yapar.
Hayır. Editör tamamen tarayıcınızda çalışır. Kendi sunucunuza bir webhook kurmadığınız sürece belgeleriniz asla bir sunucuya gönderilmez.
Evet. Editör SHLS'yi tam olarak SHLS deposundaki SHLSDecoder ve SHLSEncoder gibi okur ve yazar - Dönüştür sekmesindeki JSON, Python sınıflarının verdiği verilerdir. Bir belgeyi göründüğünden farklı okudukları yerlerde (bir değeri eksik kayıt, boşluk içeren bir boş satır) editör bunu satırıyla birlikte bir sorun olarak listeler.
Evet. Ortadaki bir değere, anahtara veya bölüm adına tıklayın, yazın ve Enter'a basın. Kayıtların üstündeki düğmeler kayıt ve anahtar ekler, çoğaltır, taşır ve kaldırır; bir anahtar eklediğinizde veya kaldırdığınızda bölümün her kaydı değerini alır veya kaybeder. Her değişiklik Geri al için tek adımdır.
Dönüştür sekmesi belgenizin SHLS olarak ve aynı verilerin JSON olarak yaklaşık belirteçlerini sayar. Kayıt tablolarında SHLS çoğu zaman girintili JSON'un belirteçlerinin yarısından azına ihtiyaç duyar, çünkü anahtarlar yalnızca bir kez yazılır.
Evet. Bir .json, .yaml, .csv veya .jsonl dosyası açın; SHLSEncoder'ın yazdığı gibi yazılmış SHLS'ye dönüşür; editör SHLS'nin neyi tutamayacağını söyler (boş değerler, satır sonu içeren değerler). Dönüştür sekmesi ve Dışa aktar JSON, YAML, CSV, JSON Lines ve düz metin yazar.
Evet, her yapay zekâ - ChatGPT, Claude, Gemini, Copilot veya kodlama aracınızdaki yapay zekâ. "Yapay Zekâ Asistanı"na, ardından "İstemi kopyala"ya tıklayın: istem SHLS'yi açıklar, böylece her yapay zekâ geçerli SHLS yazar. Yapay zekâ bir bağlantıyla yanıt verir; ona tıklayın, belge editörünüzde görünür. "Geri al" her değişikliği geri alır.
Hayır. Editör ücretsizdir; reklam ve kayıt yoktur.