---
title: 'Belge Türü ve Kök Yapı'
source: 'https://academia.sh/tr/kurslar/web-temelleri-ve-html/belge-turu-ve-kok-yapi'
course: "Web'in Temelleri ve HTML"
language: tr
updated: '2026-08-17T18:09:31+00:00'
license: 'CC BY-SA 4.0'
---

# Belge Türü ve Kök Yapı

Belge türü bildiriminin işlevi, kök ögenin dil bildirimi, baş ve gövde bölümlerinin ayrımı ve yazılmayan ögelerin ayrıştırıcı tarafından kurulması.

Önceki konu belgenin nasıl işlendiğini kurdu. Bu konu belgenin nasıl yazıldığını kurar ve
en dıştaki yapıdan başlar: her HTML belgesinin ilk satırlarında bulunan ve çoğu zaman
üzerinde düşünülmeden kopyalanan bildirimlerden.

Bu bildirimlerin her biri belirli bir soruna karşılık gelir. Hangi soruna karşılık
geldiklerini bilmek, hangilerinin zorunlu, hangilerinin koşullu olduğunu da belirler.

## Belge Türü Bildirimi

Bir belgenin ilk satırı `<!doctype html>` yazımıdır. Bu bir öge değildir; ayrıştırıcıya
verilen bir bildirimdir ve tek bir işi vardır: ayrıştırma kipini seçmek.

Kipin varlığının nedeni geriye dönük uyumluluktur. Web'in erken belgelerinin bir bölümü,
sonradan standartlaşan kurallara aykırı yazılmıştı; o belgeleri standart kurallarla
işlemek, görünümlerini bozardı. Çözüm iki kip tanımlamak oldu: standart kurallara uyan
belgeler için **standart kip**, eski belgeler için **uyumluluk kipi (quirks mode)**. Belge
türü bildirimi, belgenin hangi kiple işleneceğini seçen anahtardır.

Bildirimin yokluğu bir kusur değil, farklı bir istektir: ayrıştırıcı belgeyi uyumluluk
kipinde işler ve o kipteki kurallar bugün beklenen kurallar değildir. Aradaki farklar
çoğunlukla sunum katmanındadır — kutu genişliğinin nasıl hesaplandığı gibi — ve bu kurs
kapsamında ele alınmaz. Kural nettir: bildirim yazılır.

Bildirimin kendisinde başka bilgi taşınmaz. Sürüm numarası, şema adresi ve dil kimliği
içermez; yalnızca kipi seçer.

## Kök Öge ve Dil Bildirimi

Belge türü bildiriminden sonra tek bir kök öge gelir: `html`. Ağacın belge düğümünden
sonraki tek çocuğudur ve tüm belge onun içindedir.

Kök ögede yazılması gereken bir öznitelik vardır: `lang`. Belgenin doğal dilini bildirir
ve etkisi görsel değildir.

```html
<!doctype html>
<html lang="tr">
```

Dil bildirimi en az dört kararı etkiler. Ekran okuyucular metni hangi dilin ses kurallarıyla
seslendireceğini buradan öğrenir; yanlış bildirilmiş bir dil, metni okunamaz kılar. Yazım
denetimi ve hecelemeyle satır bölme kuralları dile bağlıdır. Arama dizinleyicileri belgeyi
dile göre sınıflandırır. Bazı tipografik kurallar —tırnak işaretlerinin biçimi gibi— dile
göre değişir.

Belgenin bir bölümü başka dildeyse, o bölümü taşıyan ögede yeniden bildirilir; öznitelik
kalıtılır ve en yakın bildirim geçerlidir.

```html
<p>İstasyon adının İngilizce karşılığı
  <span lang="en">North Slope Station</span> biçimindedir.</p>
```

## Baş ve Gövde

Kök ögenin iki çocuğu vardır ve sırası değişmez: `head`, sonra `body`.

**Baş bölümü (`head`)**, belgeye ilişkin bilgiyi taşır: başlığı, karakter kodlaması
bildirimi, dış kaynak bağlantıları, üstveri. Bu içerik çizilmez. Tek görünür etkisi,
`title` ögesinin tarayıcı sekmesinde ve yer imlerinde kullanılmasıdır.

**Gövde bölümü (`body`)**, belgenin okunacak içeriğini taşır. Çizilen her şey buradadır.

Ayrım keskin görünse de sınırda duran bir öge vardır: `script`. Betik ögesi her iki bölümde
de bulunabilir ve nerede bulunduğu, önceki derste görülen yükleme davranışını belirler.

## Yazılmayan Ögeler Kurulur

`html`, `head` ve `body` ögelerinin etiketleri yazılmasa da ayrıştırıcı bunları kurar.
Baş bölümüne hangi ögenin gireceği, gövdeye hangisinin gireceği tanımlı bir kurala göre
belirlenir: baş bölümüne ait ögelerden başkası görüldüğü anda baş bölümü kapanır ve gövde
başlar.

```js
// kok.mjs — yazilmayan html/head/body ogelerinin yerlestirilmesi
const BAS_ICERIGI = new Set(["title", "base", "link", "meta", "style", "script", "noscript"]);

function yerlestir(metin) {
  const birimler = [...metin.matchAll(/<\/?([a-z0-9!]+)[^>]*>/g)]
    .map((e) => ({ ad: e[1], kapanis: e[0][1] === "/" }));
  const bas = [];
  const govde = [];
  let belgeTuru = null;
  let kip = "bas";
  for (const birim of birimler) {
    if (birim.ad === "!doctype") { belgeTuru = "html"; continue; }
    if (birim.kapanis) continue;
    if (["html", "head", "body"].includes(birim.ad)) continue;
    if (kip === "bas" && BAS_ICERIGI.has(birim.ad)) bas.push(birim.ad);
    else { kip = "govde"; govde.push(birim.ad); }
  }
  return { belgeTuru, bas, govde };
}

const belgeler = {
  "tam yazilmis": `<!doctype html><html lang="tr"><head><meta charset="utf-8">
<title>Kuzey Yamaç</title></head><body><h1>Kuzey Yamaç</h1><p>1840 m</p></body></html>`,
  "kok ogeleri yazilmamis": `<!doctype html><meta charset="utf-8">
<title>Kuzey Yamaç</title><h1>Kuzey Yamaç</h1><p>1840 m</p>`,
  "belge turu yok": `<title>Kuzey Yamaç</title><h1>Kuzey Yamaç</h1>`,
};

for (const [ad, belge] of Object.entries(belgeler)) {
  const { belgeTuru, bas, govde } = yerlestir(belge);
  console.log("[" + ad + "]");
  console.log("  belge turu :", belgeTuru ?? "yok -> uyumluluk kipi");
  console.log("  head       :", bas.join(", "));
  console.log("  body       :", govde.join(", "));
}
```

```
[tam yazilmis]
  belge turu : html
  head       : meta, title
  body       : h1, p
[kok ogeleri yazilmamis]
  belge turu : html
  head       : meta, title
  body       : h1, p
[belge turu yok]
  belge turu : yok -> uyumluluk kipi
  head       : title
  body       : h1
```

İlk iki belge farklı yazılmış, aynı yapıyı üretmiştir. Üçüncüsü aynı kuralla
bölünmüştür ama farklı bir kiple işlenecektir.

Bu kuralın bir sonucu, baş bölümüne ait olmayan bir ögenin yanlışlıkla baş bölümüne
yazılamamasıdır: yazılsa bile gövdeye taşınır. Tersi de doğrudur — gövdenin ortasına
yazılmış bir `title` ögesi baş bölümüne geri gitmez, gövdede kalır ve beklenen işi
görmez. Ayrıştırıcının hoşgörüsü, yazım hatalarını sessizce düzeltmek değil, tanımlı bir
sonuç üretmektir.

Etiketlerin yazılmasının yine de bir gerekçesi vardır: okunabilirlik ve öznitelik yeri.
`lang` özniteliği `html` ögesine, sınıf veya kimlik `body` ögesine yazılabilmelidir; bunun
için etiketin kaynak metinde bulunması gerekir.

## Tekillik ve Sıra Kısıtları

Kök yapıda dört öge tektir: bir belgede yalnızca bir `html`, bir `head`, bir `body` ve bir
`title` bulunur. İkincisinin yazılması yeni bir öge kurmaz; ayrıştırıcı ikinci `body`
etiketini gördüğünde yeni bir gövde açmaz, var olanın öznitelikleriyle birleştirir.
Belgenin iki gövdesi olamaz, çünkü ağacın tek bir kökü ve o kökün tek bir görünür dalı
vardır.

Baş bölümünün içeriğinde sıra genellikle serbesttir; iki durum bunun dışındadır. Karakter
kümesi bildirimi olabildiğince erken yazılır — gerekçesi sonraki dersin konusudur. Göreli
adreslerin tabanını değiştiren `base` ögesi de, kendisinden **sonra** gelen adresleri
etkilediği için erken yazılır ve belgede yalnızca bir kez bulunur.

`title` ögesi baş bölümünün zorunlu içeriğidir. Yazılmadığında belge işlenmeyi sürdürür
ancak bağlamı dışında adlandırılamaz: sekmede adres görünür, yer imi adsız kaydedilir,
arama sonucunda belgeyi tanıtan metin başka kaynaklardan üretilir. Zorunluluk, bir
ayrıştırma koşulu değil, belgenin dış dünyada tanınabilir olmasının koşuludur.

## İstasyon Belgesinin İskeleti

Kurs boyunca geliştirilecek belgenin ilk hâli şudur:

```html
<!doctype html>
<html lang="tr">
<head>
  <meta charset="utf-8">
  <title>Kuzey Yamaç Ölçüm İstasyonu</title>
</head>
<body>
  <h1>Kuzey Yamaç Ölçüm İstasyonu</h1>
  <p>Deniz seviyesinden 1840 metre yükseklikte kurulu otomatik ölçüm istasyonu.</p>
</body>
</html>
```

Beş satır bildirim, iki satır içerik. Bu oran belgede içerik arttıkça düşecektir; bildirim
bölümü belgenin büyüklüğünden bağımsız olarak sabit kalır.

`title` ögesi baş bölümünde, `h1` ögesi gövdededir ve ikisinin metni burada aynıdır. İkisi
farklı işler görür: `title` belgeyi bağlamı dışında adlandırır — sekmede, yer iminde, arama
sonucunda —; `h1` belgenin içindeki en üst başlıktır. Bağlam dışında anlaşılır olması
gereken `title` ögesi çoğu belgede daha uzun yazılır ve site adını da taşır.

## Özet

- Belge türü bildirimi bir öge değildir; ayrıştırma kipini seçer ve başka bilgi taşımaz.
  Yazılmadığında belge uyumluluk kipinde işlenir.
- Kök öge `html`, belgenin tek kök çocuğudur; `lang` özniteliği seslendirme, heceleme,
  dizinleme ve tipografi kararlarını etkiler ve bir bölüm başka dildeyse orada yeniden
  bildirilir.
- Baş bölümü belgeye ilişkin bilgiyi, gövde okunacak içeriği taşır; baş bölümü içeriği
  çizilmez.
- `html`, `head` ve `body` etiketleri yazılmasa da ayrıştırıcı bu ögeleri kurar; bölünme,
  baş bölümüne ait olmayan ilk ögede yapılır.
- `title` belgeyi bağlamı dışında adlandırır, `h1` belgenin içindeki en üst başlıktır;
  metinleri aynı olabilir ama işlevleri ayrıdır.

## Sonraki Adım

Bu ders belgenin en dış kabuğunu kurdu ve etiketleri sözdizimsel ayrıntısına girmeden
kullandı. Sonraki ders o ayrıntıyı ele alır: bir etiketin nasıl yazıldığı, özniteliklerin
hangi yazım biçimlerini kabul ettiği, metinde geçen `<` ve `&` karakterlerinin nasıl
yazılacağı ve kurallara aykırı bir yazımda ayrıştırıcının hangi kurtarma kurallarını
uyguladığı.
