차이 무엇 #PCDATA과 #CDATA의 DTD는 ?
#PCDATA및 CDATA입니다. 더 없습니다 PCDATA키워드 더는 #CDATA.
차이 무엇 #PCDATA과 #CDATA의 DTD는 ?
#PCDATA및 CDATA입니다. 더 없습니다 PCDATA키워드 더는 #CDATA.
답변:
PCDATA파서가 파싱 할 텍스트입니다. 텍스트 내의 태그는 마크 업으로 처리되고 엔티티가 확장됩니다.CDATA파서가 파싱 하지 않을 텍스트입니다 . 텍스트 내부 태그 것
없는 마크 업으로 취급하고 엔티티는 확장되지 않습니다.기본적으로 모든 것은 PCDATA입니다. 다음 예제에서 루트를 무시하면 <bar>구문 분석되고 콘텐츠는 없지만 자식은 하나입니다.
<?xml version="1.0"?>
<foo>
<bar><test>content!</test></bar>
</foo>
요소가 텍스트 만 포함하고 자식 요소는 포함하지 않도록 지정하려는 PCDATA경우이 키워드는 요소가 구문 분석 가능한 문자 데이터를 포함해야 함을 지정하기 때문에 키워드를 사용합니다. 즉, ( <) 보다 작은 문자를 제외한 모든 텍스트 , 보다 큼 ( >), 앰퍼샌드 ( &), 따옴표 ( ') 및 큰 따옴표 ( ").
다음 예에서, <bar>포함 CDATA. 그 내용은 구문 분석되지 않으므로 <test>content!</test>.
<?xml version="1.0"?>
<foo>
<bar><![CDATA[<test>content!</test>]]></bar>
</foo>
SGML에는 여러 콘텐츠 모델이 있습니다. #PCDATA내용 모델은 요소가 일반 텍스트를 포함 할 수 있다고 말한다. "분석 된"부분은 마크 업 (PI, 주석 및 SGML 지시문 포함)이 원시 텍스트로 표시되지 않고 구문 분석됨을 의미합니다. 또한 엔티티 참조가 대체됨을 의미합니다.
일반 텍스트 콘텐츠를 허용하는 또 다른 유형의 콘텐츠 모델은 CDATA. XML에서 요소 콘텐츠 모델은 암시 적으로로 설정되지 않을 수 CDATA있지만 SGML에서는 요소의 콘텐츠에서 마크 업 및 엔티티 참조가 무시됨을 의미합니다. CDATA그러나 유형 속성에서는 엔티티 참조가 대체됩니다.
XML #PCDATA에서 유일한 일반 텍스트 콘텐츠 모델입니다. 요소에 텍스트 내용을 허용하려는 경우 사용합니다. CDATA콘텐츠 모델은 통해 명시 적으로 사용할 수 CDATA있는 블록 마크 업 #PCDATA하지만, 요소의 내용은 다음과 같이 정의 할 수 없습니다 CDATA기본적으로 당.
DTD에서 텍스트가 포함 된 속성의 유형은이어야합니다 CDATA. CDATA속성 선언 의 키워드 CDATA는 XML 문서 의 섹션과 다른 의미를 갖습니다 . A의 CDATA섹션의 모든 문자는 (를 포함하여 합법적 <, >, &, '및 "를 제외하고, 문자) ]]>종료 태그.
#PCDATA속성 유형에 적합하지 않습니다. "리프"텍스트 유형에 사용됩니다.
#PCDATA이 키워드를 이름이 지정된 요소 PCDATA(완전히 합법적 임) 와 구별하기 위해 컨텐츠 모델에서 해시가 앞에 추가됩니다 .
#해시 태그가 아닙니다. 이 기호가 앞에 오는 태그 만 해시 태그입니다. 기호 자체에는 "숫자 기호", "파운드 기호"(대부분 캐나다 및 미국) 또는 "해시"(따라서 이름 '해시 태그')를 비롯한 많은 이름이 있습니다.
#PCDATA이 역사적인 이유로 거기에 있다는 것에 동의하지 않습니다 . DTD에서 요소는라는 요소도 포함 할 수 있기 때문에 PCDATA가능해야하며 <!ELEMENT foo (PCDATA)>.
PCDATA – 구문 분석 된 문자 데이터. XML 문서의 모든 데이터를 구문 분석합니다.
예:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
여기에서 <family>요소에는 2 개의 요소가 더 있습니다. <mother>및 <father>. 따라서 가족의 텍스트 값을 "엄마 아빠" 로 제공하기 위해 어머니와 아버지의 텍스트를 가져 오기 위해 더 구문 분석합니다.
CDATA – 구문 분석되지 않은 문자 데이터. 이것은 xml 문서에서 더 이상 파싱해서는 안되는 데이터입니다.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
여기서 family의 텍스트 값은 <mother>mom</mother><father>dad</father>.
여기에서 ( Google은 당신의 친구입니다 ) :
DTD에서 PCDATA와 CDATA는 각각 요소와 속성의 허용 가능한 내용에 대해 무언가를 주장하는 데 사용됩니다. 요소의 콘텐츠 모델에서 #PCDATA는 요소가 "모든 이전 텍스트"를 포함 (포함 할 수 있음)한다고 말합니다. (아래에 언급 된 예외가 있습니다.) 속성의 선언에서 CDATA는 속성의 허용 가능한 값 (다른 정렬, 모두 상호 배타적, ID, IDREF 및 NMTOKEN 포함)에 지정할 수있는 제약의 한 종류입니다. 허용 가능한 값이 CDATA 인 속성 (예 : 요소의 PCDATA)은 "모든 이전 텍스트"를 포함 할 수 있습니다.
잠재적으로 매우 혼란스러운 문제는 표시된 섹션이라고도하는 또 다른 "CDATA" 가 있다는 것 입니다. 표시된 섹션은 닫는 특수 문자열로 구분 된 요소 (#PCDATA) 콘텐츠의 일부입니다. PCDATA가 "파싱 된 문자 데이터"라는 것을 기억한다면 CDATA 섹션은 "파싱 된"없이 말 그대로 동일합니다. 파서는 <및 &와 같은 특수 문자를 만날 때마다 딸꾹질없이 표시된 섹션의 내용을 다운 스트림 애플리케이션으로 전송합니다. 이것은 특수 문자 (예 : 스크립트 및 코드 조각)가 많이 포함 된 문서를 코딩 할 때 유용합니다. 해당 엔티티 참조보다 데이터 입력과 읽기가 더 쉽습니다.
따라서 "모든 이전 텍스트"규칙에 대한 예외는 PCDATA가 CDATA 표시 섹션의 범위에 속하지 않는 한 이러한 이스케이프되지 않은 특수 문자를 포함 할 수 없다는 것입니다.