차이 무엇 #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 표시 섹션의 범위에 속하지 않는 한 이러한 이스케이프되지 않은 특수 문자를 포함 할 수 없다는 것입니다.