DTD에서 PCDATA와 CDATA의 차이점
차이 무엇 #PCDATA
과 #CDATA
의 DTD는 ?
PCDATA-구문 분석 된 문자 데이터
XML 파서는 일반적으로 XML 문서의 모든 텍스트를 구문 분석합니다.
CDATA-(분석되지 않은) 문자 데이터
CDATA라는 용어는 XML 파서에 의해 구문 분석되지 않아야하는 텍스트 데이터에 사용됩니다.
"<"및 "&"와 같은 문자는 XML 요소에서 불법입니다.
- 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 콘텐츠 모델은 #PCDATA의 CDATA 블록 마크 업을 통해 명시 적으로 사용할 수 있지만 요소 콘텐츠는 기본적으로 CDATA로 정의되지 않을 수 있습니다.
DTD에서 텍스트를 포함하는 속성 유형은 CDATA 여야합니다. 속성 선언의 CDATA 키워드는 XML 문서의 CDATA 섹션과 다른 의미를 갖습니다. CDATA 섹션에서 "]]>"종료 태그를 제외하고 모든 문자는 합법적입니다 (<,>, &, '및 "문자 포함).
#PCDATA는 속성 유형에 적합하지 않습니다. "리프"텍스트 유형에 사용됩니다.
#PCDATA는 단순히 역사적인 이유로 해시가 앞에 붙습니다.
여기에서 ( Google은 당신의 친구입니다 ) :
DTD에서 PCDATA와 CDATA는 각각 요소와 속성의 허용 가능한 내용에 대해 무언가를 주장하는 데 사용됩니다. 요소의 콘텐츠 모델에서 #PCDATA는 요소가 "모든 이전 텍스트"를 포함 (포함 할 수 있음)한다고 말합니다. (아래에 언급 된 예외가 있습니다.) 속성의 선언에서 CDATA는 속성의 허용 가능한 값에 지정할 수있는 제약의 한 종류입니다 (다른 정렬은 모두 상호 배타적이며 ID, IDREF 및 NMTOKEN 포함). 허용 가능한 값이 CDATA 인 속성 (예 : 요소의 PCDATA)은 "모든 이전 텍스트"를 포함 할 수 있습니다.
잠재적으로 매우 혼란스러운 문제는 표시된 섹션이라고도하는 또 다른 "CDATA" 가 있다는 것 입니다. 표시된 섹션은 닫는 특수 문자열로 구분 된 요소 (#PCDATA) 콘텐츠의 일부입니다. PCDATA가 "파싱 된 문자 데이터"라는 사실을 기억한다면 CDATA 섹션은 "파싱 된"없이 말 그대로 동일한 것입니다. 파서는 <및 &와 같은 특수 문자를 만날 때마다 딸꾹질없이 표시된 섹션의 내용을 다운 스트림 애플리케이션으로 전송합니다. 이것은 특수 문자 (예 : 스크립트 및 코드 조각)가 많이 포함 된 문서를 코딩 할 때 유용합니다. 해당 엔티티 참조보다 데이터 입력과 읽기가 더 쉽습니다.
따라서 "모든 이전 텍스트"규칙에 대한 예외는 PCDATA가 CDATA 표시 섹션의 범위에 속하지 않는 한 이러한 이스케이프되지 않은 특수 문자를 포함 할 수 없다는 것입니다.
PCDATA – 구문 분석 된 문자 데이터 . xml 문서의 모든 데이터를 구문 분석합니다.
예:
<family>
<mother>mom</mother>
<father>dad</father>
</family>
여기에서 패밀리 요소에는 "어머니" 및 "아버지" 요소가 2 개 더 포함 됩니다. 그래서 가족의 가치를 “엄마 아빠” 로 제공하기 위해 어머니와 아버지의 텍스트를 얻기 위해 더 파싱합니다.
CDATA – 파싱되지 않은 문자 데이터. 이것은 xml 문서에서 더 이상 파싱해서는 안되는 데이터입니다.
<family>
<![CDATA[
<mother>mom</mother>
<father>dad</father>
]]>
</family>
여기서 가족의 가치는 <mother>mom</mother><father>dad</father>
.
PCDATA와 CDATA의 가장 큰 차이점은
PCDATA-기본적으로 ELEMENTS에 사용되는 동안
CDATA - Used for Attributes of XML i.e ATTLIST
CDATA (Character DATA): It is similarly to a comment but it is part of document. i.e. CDATA is a data, it is part of the document but the data can not parsed in XML.
Note: XML comment omits while parsing an XML but CDATA shows as it is.
PCDATA (Parsed Character DATA) :By default, everything is PCDATA. PCDATA is a data, it can be parsed in XML.
참고URL : https://stackoverflow.com/questions/918450/difference-between-pcdata-and-cdata-in-dtd
'development' 카테고리의 다른 글
Android NDK에 벡터와 같은 C ++ 헤더를 포함 할 수 없습니다. (0) | 2020.09.24 |
---|---|
문자열이 다른 문자열로 시작하는지 또는 끝나는 지 테스트 (0) | 2020.09.24 |
WPF 사용자 정의 컨트롤에서 가져온 리소스와 로컬 리소스를 결합하는 방법 (0) | 2020.09.24 |
Wireshark vs Firebug vs Fiddler-장단점? (0) | 2020.09.24 |
파일을 사전으로 변환하는 방법은 무엇입니까? (0) | 2020.09.24 |