development

DTD에서 PCDATA와 CDATA의 차이점

big-blog 2020. 9. 24. 08:01
반응형

DTD에서 PCDATA와 CDATA의 차이점


차이 무엇 #PCDATA#CDATADTD는 ?


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

반응형