DTD'de PCDATA ve CDATA arasındaki fark


88

Arasındaki fark nedir #PCDATAve #CDATAiçinde DTD ?



XML DTD'lerinde kullanılan anahtar sözcüklerin adları #PCDATAve CDATA. Hiçbir yoktur PCDATAkelime ve hiçbir #CDATA.
mzjn

1
Kabul edilen yanıta ek olarak, stackoverflow.com/a/918462/2013911'i de okumalısınız çünkü CDATA öznitelik türü ile <! [CDATA []]> işaretli bölümler arasındaki farkı açıklamaktadır.
Niklas Peter

Yanıtlar:


77

PCDATA - Ayrıştırılmış Karakter Verileri

XML ayrıştırıcıları normalde bir XML belgesindeki tüm metni ayrıştırır.

CDATA - (Ayrıştırılmamış) Karakter Verileri

CDATA terimi, XML ayrıştırıcı tarafından ayrıştırılmaması gereken metin verileri için kullanılır.

XML öğelerinde "<" ve "&" gibi karakterler yasa dışıdır.


78
  • PCDATAayrıştırıcı tarafından ayrıştırılacak metindir. Metin içindeki etiketler biçimlendirme olarak değerlendirilecek ve varlıklar genişletilecektir.
  • CDATAmetindir değil bir ayrıştırıcı tarafından ayrıştırılması. Metni içinde Etiketler olacak değil biçimlendirme muamelesi ve kuruluşlar genişletilmiş edilmeyecektir.

Varsayılan olarak, her şey PCDATA. Aşağıdaki örnekte, kökü yok saymak <bar>ayrıştırılacak ve içeriği olmayacak, ancak bir çocuk olacaktır.

<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>

Bir elemanın sadece metin içereceğini ve alt eleman içermeyeceğini belirtmek istediğimizde, anahtar kelimeyi kullanırız PCDATA, çünkü bu anahtar kelime, elemanın ayrıştırılabilir karakter verisi içermesi gerektiğini belirtir - yani, ( <) ' den küçük karakterler hariç herhangi bir metin , büyüktür ( >), ve işareti ( &), tırnak ( ') ve çift tırnak ( ").

Sonraki örnekte <bar>içerir CDATA. İçeriği ayrıştırılmayacak ve bu nedenle ayrılmıştır <test>content!</test>.

<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>

SGML'de birkaç içerik modeli vardır. #PCDATAİçerik modeli unsuru düz metin içerebileceğini söylüyor. Bunun "ayrıştırılmış" kısmı, içindeki işaretlemenin (PI'ler, yorumlar ve SGML direktifleri dahil) ham metin olarak görüntülenmek yerine çözümlendiği anlamına gelir. Ayrıca, varlık referanslarının değiştirildiği anlamına gelir.

Düz metin içeriklerine izin veren başka bir içerik modeli türü CDATA. XML'de, öğe içerik modeli örtük olarak ayarlanamaz CDATA, ancak SGML'de bu, öğenin içeriğinde işaretleme ve öğe referanslarının göz ardı edildiği anlamına gelir. CDATAAncak tür özniteliklerinde varlık referansları değiştirilir.

XML'de #PCDATAtek düz metin içerik modelidir. Öğedeki metin içeriklerine izin vermek istiyorsanız bunu kullanırsınız. CDATAİçerik modeli yoluyla açık bir şekilde kullanılabilir CDATAblok biçimlendirme #PCDATAancak element içerikleri olarak tanımlanabilir olmayabilirCDATA öntanımlı.

Bir DTD'de, metin içeren bir özniteliğin türü olmalıdır CDATA. CDATABir öznitelik bildiriminde anahtar farklı bir anlama sahip CDATAbir XML belgesindeki bölüm. Bir de CDATAbölüm tüm karakterler (dahil yasal <, >, &, 've "dışında karakterler) ]]>bitiş etiketi.

#PCDATAbir özniteliğin türü için uygun değildir. "Yaprak" yazı tipi için kullanılır.

#PCDATA, bu anahtar kelimeyi adlandırılmış bir öğeden ayırmak için içerik modelinin başına bir karma işareti eklenmiştir PCDATA(bu tamamen yasal olacaktır).


6
Son cümle dışında harika cevap. #bir hashtag değil. Yalnızca bu sembolün önünde bulunan bir etiket bir hashtag'dir. Sembolün kendisinin "sayı işareti", "pound işareti" (çoğunlukla Kanada ve ABD) veya sadece "karma" (dolayısıyla 'hashtag' adı) dahil olmak üzere birçok adı vardır .

6
#justhadtogetthatoffmychest

3
Önündeki # işaretinin #PCDATAtarihsel nedenlerle orada olduğuna katılmıyorum . Oradadır çünkü bir DTD'de, bir eleman aynı zamanda adlandırılmış PCDATA, mümkün olması gereken ve buna benzeyen bir eleman da içerebilir <!ELEMENT foo (PCDATA)>.
Mathias Müller

Alıntı ve çift alıntı, PCDATA içeriğinde tamamen yasaldır. Ve işareti görünebilir, ancak (XML'de) yalnızca bir varlık tanıtıcı olarak.
Toby Speight

13

PCDATA - ayrıştırılmış karakter verileri.Bir XML belgesindeki tüm verileri ayrıştırır.

Misal:

<family>
    <mother>mom</mother>
    <father>dad</father>
</family>

Burada, <family>eleman 2 tane daha eleman içerir: <mother>ve <father>. Bu nedenle, anne ve babanın metninin "anne baba" olarak ailenin metin değerini vermesini sağlamak için daha fazla ayrıştırılır

CDATA - ayrıştırılmamış karakter Verileri. Bu, bir xml belgesinde daha fazla ayrıştırılmaması gereken verilerdir.

<family>
    <![CDATA[ 
       <mother>mom</mother>
       <father>dad</father>
    ]]>
</family>

Burada ailenin metin değeri olacaktır <mother>mom</mother><father>dad</father>.


12

Buradan ( Google arkadaşınızdır ):

Bir DTD'de, PCDATA ve CDATA, sırasıyla elemanların ve özniteliklerin izin verilen içeriği hakkında bir şeyler iddia etmek için kullanılır. Bir öğenin içerik modelinde, #PCDATA, öğenin "herhangi bir eski metin" içerdiğini (içerebilir) söyler. (Aşağıda belirtilen istisnalar dışında.) Bir özniteliğin bildiriminde, CDATA, özniteliğin izin verilen değerlerine koyabileceğiniz bir tür kısıtlamadır (diğer türler, tümü birbirini dışlayan, ID, IDREF ve NMTOKEN içerir). İzin verilen değerleri CDATA olan bir öznitelik (bir öğedeki PCDATA gibi) "herhangi bir eski metin" içerebilir.

Potansiyel olarak gerçekten kafa karıştırıcı bir sorun, işaretli bölümler olarak da adlandırılan başka bir "CDATA" nın olmasıdır. İşaretli bir bölüm, özel dizelerle ayrılmış öğe (#PCDATA) içeriğinin bir bölümüdür: kapatmak için. PCDATA'nın "ayrıştırılmış karakter verileri" olduğunu hatırlarsanız, bir CDATA bölümü "ayrıştırılmış" olmadan kelimenin tam anlamıyla aynı şeydir. Ayrıştırıcılar, <ve & gibi özel karakterlerle her karşılaştıklarında, işaretli bir bölümün içeriğini akıntıya uğramadan aşağı akış uygulamalarına iletirler. Bu, çok sayıda özel karakter (komut dosyaları ve kod parçaları gibi) içeren bir belgeyi kodlarken kullanışlıdır; veri girişinde daha kolaydır ve okunması, karşılık gelen varlık referansına göre daha kolaydır.

Bu nedenle, "herhangi bir eski metin" kuralının istisnasının, PCDATA'nın, CDATA işaretli bölümün kapsamına girmedikçe, bu çıkış karaktersiz özel karakterlerden herhangi birini içeremeyeceği sonucuna varabilirsiniz.


3

PCDATA ve CDATA arasındaki en temel fark,

PCDATA - Temelde ELEMENTS için kullanılırken

CDATA - XML'in Nitelikleri için kullanılır, yani ATTLIST


0

CDATA ( C haracter DATA ): Yoruma benzer ancak belgenin bir parçasıdır. yani CDATA bir veridir, belgenin bir parçasıdır ancak veriler XML'de ayrıştırılamaz.
Not: XML yorumu XML ayrıştırılırken atlanır, ancak CDATA olduğu gibi gösterilir.

PCDATA ( P arsed C haracter DATA ): Varsayılan olarak, her şey PCDATA'dır. PCDATA bir veridir, XML olarak ayrıştırılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.