Jawaban:
The standalone
deklarasi adalah cara untuk memberitahu parser untuk mengabaikan deklarasi markup dalam DTD . DTD selanjutnya digunakan hanya untuk validasi.
Sebagai contoh, perhatikan <img>
tag sederhana . Jika Anda melihat XHTML 1.0 DTD , Anda melihat deklarasi markup yang memberitahukan parser bahwa <img>
tag harus KOSONG dan memiliki src
dan alt
atribut. Ketika browser akan melalui dokumen XHTML 1.0 dan menemukan <img>
tag, itu harus memperhatikan bahwa DTD memerlukan src
dan alt
atribut dan menambahkannya jika mereka tidak ada. Ini juga akan menutup sendiri <img>
tag karena seharusnya KOSONG. Inilah yang dimaksud spesifikasi XML dengan "deklarasi markup dapat memengaruhi konten dokumen." Anda kemudian dapat menggunakan standalone
deklarasi untuk memberi tahu parser untuk mengabaikan aturan ini.
Apakah parser Anda benar-benar melakukan ini atau tidak, ini adalah pertanyaan lain, tetapi parser yang memvalidasi yang memenuhi standar (seperti browser) seharusnya.
Perhatikan bahwa jika Anda tidak menentukan DTD, maka deklarasi mandiri "tidak memiliki arti," jadi tidak ada alasan untuk menggunakannya kecuali Anda juga menentukan DTD.
standalone=yes
, deklarasi markup tidak diabaikan, sebaliknya itu menyebabkan dokumen menjadi XML yang tidak valid. Apakah Anda keberatan jika saya mengeditnya menjadi jawaban?
yes
dan no
, di mana no
nilai default.standalone="yes"
berarti bahwa prosesor XML harus menggunakan DTD hanya untuk validasi. Dalam hal itu tidak akan digunakan untuk:
standalone="yes"
dapat menambahkan batasan validitas jika dokumen menggunakan DTD eksternal. Ketika dokumen berisi hal-hal yang memerlukan modifikasi XML, seperti nilai default untuk atribut, dan standalone="yes"
digunakan maka dokumen tersebut tidak valid .standalone="yes"
dapat membantu mengoptimalkan kinerja pemrosesan dokumen.Sumber: Atribut semu mandiri hanya relevan jika DTD digunakan
standalone
menjelaskan apakah dokumen XML saat ini tergantung pada deklarasi markup eksternal.
W3C menjelaskan tujuannya dalam "Extensible Markup Language (XML) 1.0 (Fifth Edition)":
Deklarasi markup dapat memengaruhi konten dokumen, seperti diteruskan dari prosesor XML ke aplikasi; contohnya adalah atribut default dan deklarasi entitas. Deklarasi dokumen mandiri, yang dapat muncul sebagai komponen deklarasi XML, menandakan apakah ada deklarasi yang muncul di luar entitas dokumen atau di entitas parameter. [Definisi: Deklarasi markup eksternal didefinisikan sebagai deklarasi markup yang terjadi di subset eksternal atau dalam entitas parameter (eksternal atau internal, yang terakhir dimasukkan karena prosesor yang tidak memvalidasi tidak diharuskan untuk membacanya).]
Maksud dari standalone=yes
deklarasi ini adalah untuk menjamin bahwa informasi di dalam dokumen dapat dengan setia diambil hanya berdasarkan DTD internal, yaitu dokumen dapat "berdiri sendiri" tanpa referensi eksternal. Memvalidasi dokumen mandiri memastikan bahwa prosesor yang tidak memvalidasi akan memiliki semua informasi yang tersedia untuk menguraikan dokumen dengan benar.
Deklarasi mandiri tidak berfungsi jika dokumen tidak memiliki DTD eksternal, dan DTD internal tidak memiliki referensi entitas parameter, karena dokumen-dokumen ini sudah tersirat berdiri sendiri.
Berikut ini adalah efek aktual penggunaan standalone=yes
.
Memaksa prosesor untuk melempar kesalahan saat mem-parsing dokumen dengan DTD eksternal atau referensi entitas parameter, jika dokumen berisi referensi ke entitas yang tidak dinyatakan dalam DTD internal (dengan pengecualian teks pengganti entitas parameter karena prosesor yang tidak memvalidasi tidak diharuskan untuk uraikan ini); amp
, lt
, gt
, apos
, Dan quot
adalah satu-satunya pengecualian
Ketika mem-parsing dokumen yang tidak dinyatakan sebagai standalone, prosesor yang tidak memvalidasi bebas untuk berhenti mem-parsing DTD internal segera setelah menemukan referensi entitas parameter. Mendeklarasikan dokumen sebagai gaya mandiri memaksa prosesor yang tidak memvalidasi untuk mengurai deklarasi markup di DTD internal bahkan setelah mereka mengabaikan satu atau lebih referensi entitas parameter.
Memaksa prosesor yang memvalidasi untuk melempar kesalahan jika salah satu dari yang berikut ditemukan dalam dokumen, dan deklarasi masing-masing berada di DTD eksternal atau dalam teks penggantian entitas parameter:
amp
, lt
,gt
, apos
, dan quot
)Prosesor yang tidak memvalidasi dapat mempertimbangkan mengambil DTD eksternal dan memperluas semua referensi entitas parameter untuk dokumen yang tidak berdiri sendiri, meskipun tidak berkewajiban untuk melakukannya, yaitu pengaturan standalone=yes
secara teoritis dapat meningkatkan kinerja untuk prosesor yang tidak memvalidasi (peringatan spoiler: mungkin tidak akan membuat perbedaan).
Jawaban lain di sini tidak lengkap atau salah, kesalahpahaman utamanya adalah itu
Deklarasi mandiri adalah cara untuk memberitahu parser untuk mengabaikan deklarasi markup dalam DTD. DTD selanjutnya digunakan hanya untuk validasi.
standalone = "yes" berarti prosesor XML harus menggunakan DTD hanya untuk validasi.
Justru sebaliknya, mendeklarasikan dokumen sebagai standalone sebenarnya akan memaksa prosesor yang tidak memvalidasi untuk menguraikan deklarasi internal yang biasanya harus diabaikan (yaitu yang setelah referensi entitas parameter diabaikan). Prosesor yang tidak memvalidasi masih harus menggunakan info dalam DTD internal untuk memberikan nilai atribut default dan menormalkan atribut yang di-token, karena ini tidak tergantung pada validasi.