문서 유형 정의
Document type definition문서 유형 정의(DTD)는 SGML 패밀리 마크업 언어(GML, SGML, XML, HTML)의 문서 유형을 정의하는 마크업 선언 세트입니다.
DTD는 XML 문서의 유효한 구성 요소를 정의합니다.유효한 요소 및 속성 목록으로 문서 구조를 정의합니다.DTD는 XML 문서 내에서 인라인으로 선언하거나 외부 [1]참조로 선언할 수 있습니다.
2009[업데이트]의, 새 XMLnamespace-aware 스키마 언어(W3CXML스키마와 ISORELAX NG 같은). DTDs의 namespace-aware 버전 제9부 ISODSDL의는 XML과 HTML특성 엔티티 References, fr에서 파생되는 등 특별한 출판 캐릭터들이 필요한 애플리케이션에. DTDs이 계속되고로 개발되고 있다 DTDs 대체되고 있다.om 큰r 집합은 ISO SGML 표준 작업의 일부로 정의됩니다.
문서와 DTD 연결
DTD는 DOctPE(문서 유형 선언)를 통해 XML 또는 SGML 문서와 연결됩니다.DOSCTYPE는 XML [2]문서의 시작 부근에 있는 구문 조각 doctpedecl에 나타납니다.선언은 문서가 참조된 DTD에 의해 정의된 유형의 인스턴스임을 나타냅니다.
DOSCTYPE는 두 가지 종류의 선언을 합니다.
- 옵션의 외부 서브셋
- 옵션의 내부 서브셋.
내부 하위 집합의 선언은 문서 자체의 DOSCTYPE의 일부를 구성합니다.외부 서브셋의 선언은 별도의 텍스트 파일에 있습니다.외부 서브셋은 공개 식별자 및/또는 시스템 식별자를 통해 참조할 수 있다.외부 서브셋을 읽기 위해 문서를 읽기 위한 프로그램이 필요하지 않을 수 있습니다.
DTD에서 외부 서브셋을 참조하는 유효한 SGML 또는 XML 문서 또는 본문에 DTD에서 선언된 구문 분석된 외부 엔티티에 대한 참조(내부 서브셋 내에서 선언된 외부 엔티티를 포함)는 부분적으로만 구문 분석할 수 있지만 독립 실행형 모드에서 SGML 또는 XML 파서를 검증하여 완전히 검증할 수 없습니다.이러한 검증 파서는 이러한 외부 엔티티의 취득을 시도하지 않으며 대체 텍스트에 액세스할 수 없습니다).
단, 이러한 문서는 파서를 검증하는 비독립 실행형 모드에서 완전한 파싱이 가능합니다.파서 검증은 지정된 퍼블릭 식별자(FPI) 또는 시스템 식별자(URI)로 이러한 외부 엔티티를 찾을 수 없거나 액세스할 수 없는 경우에 오류를 나타냅니다. (DTD에서 선언된 주석도 외부 엔티티를 참조하지만 파싱되지 않습니다.이러한 파서의 독립 실행형 모드에서 문서의 유효성 검사에 엔티티가 필요하지 않습니다. 알림에 의해 참조되는 모든 외부 엔티티의 유효성 검사는 SGML 또는 XML 파서를 사용하여 애플리케이션에 맡겨집니다.)검증되지 않은 파서는 최종적으로 (DTD를 부분적으로 해석하여 선언된 파서블엔티티를 해결함으로써) 비독립형 모드에서 이러한 외부 엔티티를 찾으려 하지만 이러한 문서의 내용 모델을 검증하지는 않습니다.
예
DOSCTYPE의 다음 예에는 공용 식별자와 시스템 식별자가 모두 포함되어 있습니다.
<!도프 html 일반의 -//W3C//DTD XHTML 1.0 이행 //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
모든 HTML 4.01 문서는 3개의 SGML DTD 중 하나에 준거합니다.이러한 DTD의 퍼블릭 식별자는 일정하며, 다음과 같습니다.
이러한 DTD의 시스템 식별자는 DOSCTYPE에 있는 경우 URI 참조입니다.시스템 식별자는 보통 해결 가능한 위치에 있는 특정 선언 집합을 가리킵니다.SGML을 사용하면 문서 구문 분석 소프트웨어에서 사용하는 URI 해결기에서 선택적으로 사용할 수 있는 카탈로그의 시스템 식별자에 공개 식별자를 매핑할 수 있습니다.
문서 구문이 XML에 부합하는 경우에만 선택적 XML 선언 후와 문서 본문 앞에 나타날 수 있습니다. 여기에는 다음과 같은 XHTML 문서가 포함됩니다.
<?xml version="1.0" encoding="utf-8"?> <!DOSCTYPE HTML PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" "여기서 XHTML 문서 본문 시작--> "http://www.w3.org/1999/xhtml"..."</filters>
외부 서브셋 뒤에 내부 서브셋을 추가할 수도 있습니다.
<?xml version="1.0" encoding="utf-8"?> <!DOSCTYPE HTML PUBLIC -//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [내부 서브셋은 여기에 포함시킬 수 있습니다 -->><!--XML 문서 본문이 여기서 시작됩니다.</filters>
또는 내부 서브셋만 제공할 수 있습니다.
<?xml version="1.0" encoding="utf-8"?> <!DOSCTYPE html [!--내부 하위 집합은 여기에 포함될 수 있습니다 -->> <!-- XHTML 문서 본문이 여기서 시작됩니다--> <blocked xmlns="http://www.w3.org/1999/xhtml"> ...</filters>
마지막으로 문서 유형 정의에는 하위 집합이 전혀 포함되지 않을 수 있습니다. 이 경우 문서에 단일 최상위 요소가 있음을 지정합니다(이는 모든 유효한 XML 및 HTML 문서에 대한 암묵적 요구 사항이지만 최상위 요소가 암시된 루트 요소와 다를 수 있는 문서 조각 또는 모든 SGML 문서에 대한 암묵적 요구 사항은 아닙니다).루트 요소의 유형 이름을 나타냅니다.
<?xml version="1.0" encoding="utf-8"?> <!DOYTPE html> <!--XHTML 문서 본문이 여기서 시작됩니다.--> <blocked xmlns="http://www.w3.org/1999/xhtml"> ...</filters>
마크업 선언
DTD는 요소 및 속성 목록 선언을 통해 문서 클래스의 구조를 설명합니다.요소 선언은 문서 내에서 허용되는 요소 집합의 이름을 지정하고 선언된 요소 및 문자 데이터의 실행을 각 요소에 포함할 수 있는지 여부와 방법을 지정합니다.attribute-list 선언에서는 유효한 값의 명시적인 세트가 아닌 경우 각 Atribut값의 유형을 포함하여 선언된 요소별로 허용되는 Atribute 세트의 이름을 지정합니다.
DTD 마크업 선언은 XML [3]문서의 해당 클래스의 구조에서 허용되는 요소 유형, 속성 목록, 엔티티 및 표기를 선언합니다.
요소 유형 선언
요소 유형 선언은 요소 및 가능한 내용을 정의합니다.유효한 XML 문서에는 DTD에 정의된 요소만 포함됩니다.
요소의 내용은 다음과 같은 다양한 키워드와 문자로 지정됩니다.
EMPTY
정의된 요소가 내용을 허용하지 않음을 지정하기 위해, 즉 텍스트 요소도 포함할 수 없습니다(흰 공백이 있는 경우 무시됨).ANY
정의된 요소가 제한 없이 콘텐츠를 허용하는 것을 명시한다. 즉, 임의의 수(없음)와 하위 요소 유형(텍스트 요소 포함)을 가질 수 있다.- 또는 정의된 요소의 내용에서 직계 자식으로 허용되는 유일한 요소를 지정하는 식입니다. 이 내용은 다음 중 하나입니다.
- 혼합 콘텐츠. 즉, 콘텐츠에 적어도1개의 텍스트 요소와 0개 이상의 이름 있는 요소가 포함될 수 있지만, 그 순서와 발생 횟수를 제한할 수 없습니다.이러한 내용은 다음과 같습니다.
( #PCDATA )
: 구문 분석된 문자 데이터를 의미하며, 이는 내용에서 하나의 텍스트 요소만 허용됨을 의미합니다(양자화자는 허용되지 않음).( #PCDATA ''element name'' ... )*
: 선택지가 한정되어 있습니다(괄호 사이의 배타적 리스트에서 "로 구분).*
2개 이상의 자요소(텍스트요소 또는 지정된 이름붙인 요소만 포함)의 "양자"는 내용 내에서 임의의 순서 및 발생횟수로 사용할 수 있다.
- 요소 내용. 즉, 내용의 하위 요소에 텍스트 요소가 없어야 합니다(자 요소 간에 인코딩된 모든 공백은 주석과 마찬가지로 무시됩니다).이러한 요소 함량은 Backus-Naur 형식의 변형에서 단자 기호 및 비단자 기호로 요소 이름이 없는 내용 입자로 지정됩니다.요소의 내용은 다음과 같습니다.
- 콘텐츠 파티클은 DTD에서 선언된 요소의 이름 또는 시퀀스리스트 또는 선택 리스트 중 하나입니다.그 뒤에 옵션 수량 지정자를 붙일 수 있습니다.
- 시퀀스 리스트는 순서 리스트(괄호 사이에 지정되고 "로 구분됨)를 의미합니다.
,
하나 이상의 콘텐츠 파티클의 쉼표 문자: 모든 콘텐츠 파티클은 지정된 위치와 상대 순서로 정의된 요소의 콘텐츠에서 직접 자녀로 연속적으로 표시되어야 합니다. - 선택 목록은 상호 배타적인 목록(괄호 사이에 지정되고 ""로 구분됨)을 의미합니다.
- 시퀀스 리스트는 순서 리스트(괄호 사이에 지정되고 "로 구분됨)를 의미합니다.
- 수량화란 요소 내용에서 지정된 위치에서 이러한 항목이 연속적으로 발생하는 횟수를 제한하기 위해 적용되는 특정 항목 바로 뒤에 이어지는 단일 문자입니다. 다음 중 하나를 사용할 수 있습니다.
+
항목이 1개 이상 발생해야 함을 명시하는 경우 - 각 발생의 유효 내용은 다를 수 있습니다.*
임의의 횟수(0개 이상)의 발생이 허용됨을 지정하는 경우: 항목은 선택 사항이며 각 발생의 유효 내용은 다를 수 있습니다.?
두 개 이상의 오카렌스를 지정할 수 없습니다.항목은 옵션입니다.- 수량자가 없는 경우 지정된 항목은 요소의 내용에서 지정된 위치에서 정확히 한 번 발생해야 합니다.
- 콘텐츠 파티클은 DTD에서 선언된 요소의 이름 또는 시퀀스리스트 또는 선택 리스트 중 하나입니다.그 뒤에 옵션 수량 지정자를 붙일 수 있습니다.
- 혼합 콘텐츠. 즉, 콘텐츠에 적어도1개의 텍스트 요소와 0개 이상의 이름 있는 요소가 포함될 수 있지만, 그 순서와 발생 횟수를 제한할 수 없습니다.이러한 내용은 다음과 같습니다.
예를 들어 다음과 같습니다.
<! 요소 html (머리, 몸)> <! 요소 p (# PCDATA p 울 dl 테이블 h1 h2 h3)*>
요소 유형 선언은 검증되지 않은 SGML 및 XML 파서(이 경우 모든 요소가 구문 분석된 문서에서 임의의 순서로 허용됨)에 의해 무시되지만 이러한 선언은 여전히 형식과 유효성을 검사합니다.
속성 목록 선언
속성 리스트는 특정 요소에 대해 해당 유형과 관련된 가능한 모든 속성 목록을 지정합니다.생각할 수 있는 각 Atribut에 대해서, 다음과 같이 구성됩니다.
- 선언된 속성 이름,
- 데이터 유형(또는 가능한 값의 열거),
- 디폴트값입니다.[4]
예를 들어 다음과 같습니다.
<!ATT 리스트 img src CDATA #필수 아이디 아이디 #임플리드 종류 CDATA #고정 "진짜" 인쇄물 (네. 아니요.) "네" >
다음으로 SGML과 XML에서 모두 지원되는 속성 유형을 나타냅니다.
CDATA
- 이 유형은 문자 데이터를 의미하며 속성이 고정으로 지정되지 않는 한 속성의 유효값이 임의의 텍스트 값이 될 수 있음을 나타냅니다(DTD의 코멘트는 효과적으로 받아들여지는 값을 추가로 문서화할 수 있지만 DTD 구문은 이러한 정확한 지정을 허용하지 않습니다).
ID
- 속성의 유효값은 유효한 식별자여야 하며, 이 정의된 식별자('#' 기호 뒤에 URI의 끝에 지정될 수 있는 문서 단편 식별자 포함)를 사용하여 참조의 대상을 정의하고 현재 요소에 고정하는 데 사용됩니다. 같은 문서의 개별 요소가 정의되는 경우 오류입니다.동일한 식별자; 고유성 제약은 또한 식별자 자체가 다른 의미를 가지지 않으며 식별자는 애플리케이션에서 불투명하게 취급되어야 한다는 것을 암시한다; XML은 또한 표준 의사 속성 "을 미리 정의한다.
xml:id
이 타입에서는 DTD에 선언할 필요가 없기 때문에 고유성 제약은 XML 문서의 임의의 장소에 지정되어 있는 이들 정의된 식별자에도 적용됩니다. IDREF
또는IDREFS
- 속성의 유효값은 유효한 식별자(또는 그러한 식별자의 공백으로 구분된 목록)일 수 있으며, 형식과 함께 선언된 속성과 함께 문서에 정의된 고유한 요소를 참조해야 합니다.
ID
DTD(또는 유사 속성 "을 사용하여 XML 문서에서 정의된 고유 요소)에서 사용됩니다.xml:id
") 및 유효값이 동일한 식별자일 것. NMTOKEN
또는NMTOKENS
- 속성의 유효치는 유효한 이름 토큰(또는 이러한 이름 토큰의 공백으로 구분된 목록)만 사용할 수 있지만 문서 내의 고유 식별자로 제한되지 않습니다. 이 이름은 보충적 의미론 및 응용 프로그램 의존적 의미론을 포함할 수 있으며 추가 이름 지정 제약이 필요할 수 있지만 DTD의 범위를 벗어납니다.
ENTITY
또는ENTITIES
- 속성의 유효치는 파싱되지 않은 외부 엔티티의 이름(또는 이러한 이름의 공백 구분 리스트)만 사용할 수 있습니다.이 유형은 HTML 파서에서는 지원되지 않지만 SGML 및 XML 1.0 또는 1.1(XHTML 및 SVG 포함)에서는 유효합니다.
(''value1'' ...)
- 속성의 유효값은 열거된 목록 중 하나(괄호 사이에 지정되고 "로 구분됨)일 수 있습니다.
'
싱글'
또는"
이중으로 하다"
단순한 이름 토큰이 아닌 경우 따옴표 NOTATION (''notation1'' ...)
- 속성의 유효값은 열거된 목록 중 하나(괄호 사이에 지정되고 "로 구분됨)일 수 있습니다.
디폴트값에서는 Atribute의 발생 여부를 정의할 수 있습니다( ).#REQUIRED
() 또는 (없음)#IMPLIED
또는 고정값이 있는지 여부)을 참조).#FIXED
또는 지정된 속성이 XML 태그에 없는 경우 기본값("…")으로 사용해야 하는 값입니다.
속성 목록 선언은 검증되지 않은 SGML 및 XML 파서(이 경우 구문 분석된 문서의 모든 요소 내에서 모든 속성이 허용됨)에 의해 무시되지만 이러한 선언은 여전히 올바른 형식과 유효성을 검사합니다.
엔티티 선언
엔티티는 매크로와 유사합니다.엔티티 선언은 문서 전체에서 유지되는 값을 할당합니다.일반적으로 익숙하지 않은 [5]문자의 경우 숫자 문자 참조보다 알기 쉬운 이름을 사용하는 것이 일반적입니다.엔티티는 XML 텍스트의 가독성을 향상시키는 데 도움이 됩니다.일반적으로 내부와 외부 두 가지 유형이 있습니다.
- 내부(파싱된) 엔티티는 선언에서 정의된 임의의 텍스트콘텐츠에 이름을 연관짓고 있습니다(내부 서브셋 또는 문서에서 선언된 DTD의 외부 서브셋에 있을 수 있습니다).그 후 문서의 나머지 부분(DTD의 나머지 부분 포함)에서 명명된 엔티티 참조가 발견되고 이 엔티티가 실제로 해석된 엔티티로 정의되어 있는 경우 참조 자체가 해석된 엔티티에 정의된 텍스트콘텐츠로 즉시 대체되고 파싱은 이 대체 텍스트 내에서 계속됩니다.
- 미리 정의된 이름 있는 문자 엔티티는 내부 엔티티와 유사하지만, 그 중 5개는 모든 SGML, HTML 및 XML 파서에서 특별히 처리됩니다.이러한 엔티티는 일반 구문 분석 엔티티와는 조금 다릅니다. 왜냐하면 문서에서 이름 있는 문자 엔티티 참조가 발견되면 참조도 엔티티에 정의된 문자 내용으로 즉시 대체되지만, 현재 구문 분석에서 문자 그대로 삽입된 대체 텍스트 이후에 파싱이 계속되기 때문입니다.sed token(이러한 문자가 해당 토큰의 텍스트 값으로 허용되는 경우).이것은 HTML또는 XML의 핵심 구문에 그들 자신이 그들의 특별한 통사적 역할에서 벗어날 필요하다 몇몇 캐릭터들 수 있(특히"&"는 시작하고 참조,"<>"또는 태그 태그 및"더블"또는 함께 어느 속성과 실체 defi의 가치 대안의 큰 따옴표, 대안">"에 한해서 가능하다.nitions cm이다.사전 정의된 문자 엔티티에는 동일한 방법으로 처리되며, 이들이 나타내는 문자를 이스케이프하거나 문서 인코딩에 의해 지원되는 문자 레퍼토리의 제한을 우회하는 데도 사용할 수 있는 숫자 문자 참조도 포함됩니다.
- SGML 기본 프로파일 또는 HTML 문서에서는 내부 엔티티를 선언할 수 없습니다(외부 DTD 서브셋은 취득되지 않으며 내부 DTD 서브셋은 이러한 기본 프로파일에서 지원되지 않기 때문입니다).
- 대신 HTML 표준은 수백 개의 이름 있는 문자 엔티티 세트를 미리 정의하여 파서가 사용하는 DTD에 정의된 표준 구문 분석 엔티티로 처리할 수 있습니다.
- 외부 엔티티는 외부 스토리지 개체를 참조합니다.이들은 문서에서 고유한 이름으로 선언되며 콘텐츠의 발신지를 지정하는 Public Identifier(FPI; 공개 식별자) 및 시스템 식별자(URI로 해석됨)로 정의됩니다.실제로는 다음 두 가지 종류가 있습니다.
- XML 또는 SGML 파서의 정의에 관련지을 수 없는 해석된 외부 엔티티(대부분 콘텐츠의 URI를 나타내는SYSTEM ID로 정의됨)로 정의됩니다.이 경우 XML 파서 또는 SGML 파서를 검증하면 내부 엔티티티(이펙트iv를 포함하는 외부 엔티티티)로 선언된 것처럼 내용을 취득하여 해석합니다.e 치환 텍스트);
- 주석명에 정의되어 관련지어지는 비파싱된 외부 엔티티.이 경우 SGML 또는 XML 파서를 사용하여 불투명한 참조로 처리되어 애플리케이션에 시그널링됩니다.그 해석, 검색 및 해석은 지원되는 주석의 종류에 따라 애플리케이션에 맡겨집니다(다음 섹션 참조).주석 정보 및 파싱되지 않은 외부 엔티티의 예)에 대해 설명합니다.
- 외부 엔티티는 SGML의 기본 프로파일 또는 HTML 문서에서는 지원되지 않지만 SGML의 전체 구현 및 XML 1.0 또는 1.1(XHTML 및 SVG는 이러한 문서 유형에서 엄격하게 필요하지 않더라도 포함)에서 유효합니다.
내부 엔티티 선언의 예(여기서는 SGML 문서의 내부 DTD 서브셋)는 다음과 같습니다.
<!도프 sgml [ <! 요소 sgml 조금도> <!엔티티 % 표준 "표준 SGML"> <!엔티티 % 서명 "— &author;"> <!엔티티 % 질문. "%std;에서 직접 책을 출판할 수 없는 이유는 무엇입니까?"> <!엔티티 % 작가. 윌리엄 셰익스피어> >>
<contextml>""</httml>
내부 엔티티는 DTD 또는 문서 본문에서 참조 및 구문 분석되지 않는 한 구문 분석 순서로 정의할 수 있습니다. 구문 분석된 엔티티의 내용 내에 아직 정의되지 않은 엔티티에 대한 참조를 포함하는 것은 유효하지만, 이 엔티티 이전에 다른 명명된 엔티티를 포함하는 것은 유효하지 않습니다.정의된 콘텐츠에서 참조되는 다른 모든 내부 엔티티를 포함하여 완전히 정의되었습니다(이것에 의해 내부 엔티티의 순환 또는 재귀 정의가 방지됩니다).이 문서는 다음과 같이 해석됩니다.
<!도프 sgml [ <! 요소 sgml 조금도> <!엔티티 % 표준 "표준 SGML"> <!엔티티 % 서명 " - &author;"> <!엔티티 % 질문. "왜 내 책을 표준 SGML로 직접 출판할 수 없었나요?"> <!엔티티 % 작가. 윌리엄 셰익스피어> >>
<sgml> 표준 SGML로 직접 책을 출판할 수 없었던 이유는 무엇입니까? — William Shakespeare.</httml>
"작성자" 내부 엔티티에 대한 언급은 "서명" 내부 엔티티의 대체 텍스트에서 대체되지 않는다.대신, "signature" 엔티티 참조가 "sgml" 요소의 내용 내에서 구문 분석되는 경우에만 대체됩니다. 단, 파서를 검증함으로써(비검증 파서는 문서 본문의 요소 내용 또는 속성 값 내에서 발생하는 엔티티 참조를 대체하지 않습니다).
때문에 바꿀 텍스트를 입력한 내부 실체 정의에 지정된 매개 변수 참조(는"%" 성격에 의해서의 교체가 구문 분석되 DTD내용에 적용된다 소개된다)고 일반적인 참조 자세한 내용은 그"&" 성격에 의해서가 교체하는 것이 소개됩니다의 구분을 허용하면 이 가능하다. dela효과적으로 해석 및 검증될 때까지 yed).DTD에서 매개 변수 엔티티 참조를 도입하기 위한 "%" 문자는 DTD 외부에서 특수 역할을 상실하고 리터럴 문자가 됩니다.
단, 사전 정의된 문자 엔티티에 대한 참조는 검증 파서가 필요하지 않고 어디서든 대체됩니다('&' 문자만 사용됩니다).
표기법 선언
표기는 SGML 또는 XML에서 사용됩니다.이들은 문서 본문에서 사용할 수 있는 간단한 이름을 지정하여 응용프로그램에 해석이 남아 있는(직접 해석하거나 외부 엔티티 자체를 검색함) 비파손 외부 엔티티에 대한 완전한 참조를 제공합니다.예를 들어 표기를 사용하여 XML 1.1 문서의 비 XML 데이터를 참조할 수 있습니다.예를 들어 SVG 영상에 주석을 달아 특정 렌더러와 관련짓는 방법은 다음과 같습니다.
<!주의> 타이프 이미지 표시 시스템. "이미지/이미지">
그러면 외부 이미지의 MIME 유형이 이 유형과 함께 선언되고 "type-image-svg"라는 표기와 관련지어집니다.단, 표기법은 일반적으로 표기법을 생성하거나 사용하는 응용 프로그램에 고유한 명명 규칙을 따릅니다.표기는 유효한 내용이 외부 엔티티인 추가 메타 데이터 및 XML 또는 SGML 파서에 의해 사용되는 카탈로그에 등록된 PUBLIC FPI 또는 해석이 ap인 시스템 URI 중 하나로 해석됩니다.복제 의존형(여기서는 상대 URI로 해석되지만 특정 렌더러에 대한 절대 URI 또는 UUID 등의 OS 고유 객체 ID를 나타내는 URN일 수 있습니다).
선언된 표기법 이름은 적어도 [6][7]XML을 준수하기 위해 외부 하위 집합뿐만 아니라 내부 하위 집합에서도 모든 문서 유형 선언 내에서 고유해야 합니다.
표기는 SGML 또는 XML 문서의 본문에 포함된 파싱되지 않은 외부 엔티티에 연결할 수 있습니다.그PUBLIC
또는SYSTEM
이러한 외부 엔티티의 파라미터는 외부 엔티티의 파싱되지 않은 데이터가 있는 FPI 및/또는 URI를 지정합니다.NDATA
이러한 정의된 엔티티의 파라미터는 추가 표기법(즉, 여기서는 사실상 MIME 유형)을 지정합니다.예를 들어 다음과 같습니다.
<!도프 sgml [ <! 요소 sgml (img)*> <! 요소 img 빈> <!ATT 리스트 img 데이터. 독립체 #임플리드> <!엔티티 예1SVG 시스템. "param1.paramg" 데이터 예1SVG-rdf> <!주의> 예1SVG-rdf 시스템. "1901.120g.rdf"> >>
<contextml> <img> data="param1"SVG" /> </httml>
그 표준 범용 문서 생성 언어 문서의 몸 안에, 이(이름이"&"과";"사이에 지정됩니다)평소라는 이름의 실체처럼(한 CDATA 값으로 정의되어)지만, 요소 특성(위의 것과 같은)의 값 또는 요소 내용을 제공한다 안에로 사용될 수 있는 뚜렷한unparsed 토큰으로 남아 있고 교체되지 않다 외부 기관 인용했었습니다.d가 현장 흙DTD는 요소의 선언된 콘텐츠유형 또는 선언된 속성유형 중 하나의 외부 엔티티를 허용합니다(여기서ENTITY
를 타이핑하다data
attribute) 또는 SGML 파서가 내용을 검증하지 않습니다.
또한 표기는 다른 외부 엔티티에 관련짓지 않고 추가 메타데이터로서 요소에 직접 관련지을 수도 있습니다.이 경우 추가 속성의 가능한 값으로 이름을 지정합니다(또한 DTD에서 선언됨).<!ATTLIST ...>
선언)을 실행합니다.예를 들어 다음과 같습니다.
<!도프 sgml [ <! 요소 sgml (img)*> <!-- 옵션인 "type" 속성 값은 이 표기법에만 설정할 수 있습니다. --> <!ATT 리스트 sgml 유형 표기법 ( 유형 특이적 ) #임플리드> <! 요소 img 조금도> <!--옵션 콘텐츠는 파싱 가능한SGML 또는 XML 데이터만 가능합니다.--> <!-- 옵션의 "title" 속성 값은 텍스트로 해석할 수 있어야 합니다. 옵션의 "data" 속성 값은 파싱되지 않은 외부 엔티티로 설정됩니다. 옵션인 "type" 속성 값은 두 표기 중 하나만 사용할 수 있습니다. --> <!ATT 리스트 img 직함 CDATA #임플리드 데이터. 독립체 #임플리드 유형 표기법 ( 타이프 이미지 표시 type-image-gif ) #임플리드> <!-- 표기는 외부 엔티티를 참조하며 위의 "type" 속성으로 설정할 수 있습니다. 또는 구문 분석할 수 없는 정의된 외부 엔티티에 의해 참조되어야 합니다. --> <!주의> 타이프 이미지 표시 일반의 -//W3C//DTD SVG 1.1//EN "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!주의> type-image-gif 일반의 "이미지/기피"> <!주의> 유형 특이적 일반의 "어플리케이션/VND.specific+sgml"> <!엔티티 예1SVGTitle "예 1.svg의 제목"> <!--파싱된 내부 엔티티 --> <!엔티티 예1SVG 시스템. "param1.paramg"> <!--파싱된 외부 엔티티 --> <!엔티티 예 1 GIFTLE "예 1.gif의 제목"> <!--파싱된 내부 엔티티 --> <!엔티티 예1GIF 시스템. "param1.gif" 데이터 type-image-gif> <!--파싱되지 않은 외부 엔티티 --> >>
<140ml 미만 입력="유형 고유"> <!--SVG 이미지는 유효한 SGML 또는 XML 텍스트로 해석 가능 --> <img> title=""SVGTitle; 입력="type-image-paramg">"1SVG;</img> <!--파싱되지 않은 외부 엔티티로도 참조할 수 있습니다 --> <img> title=""SVGTitle; data="param1"SVG" /> <!--GIF 이미지는 해석할 수 없으며 외부 엔티티로만 참조할 수 있습니다 --> <img> title="&example1GIFTLE;" data="param1"「GIF」 /> </httml>
위의 예에서는 첫 번째 예시와 같이 시스템 ID(로컬에서 MIME 유형으로 해석되는 상대 URI)만 지정하는 대신 SVG 1.1 문서의 표준 퍼블릭 FPI 및 시스템 ID(표준 URI)를 참조하는 type-image-svg라는 이름의 표기법을 보여 줍니다.이 주석은 "img" 요소의 파싱되지 않은 "type" 속성 내에서 직접 참조되지만 해당 내용은 검색되지 않습니다.또한 공급업체별 응용프로그램에 대한 다른 표기법을 선언하여 문서의 "sgml" 루트 요소에 주석을 추가합니다.두 경우 모두 이름이 지정된 선언된 표기법은 선언된 "type" 속성에 직접 사용됩니다. 이 속성의 내용은 "NOTION" 속성 유형과 함께 DTD에 지정됩니다(이 "type" 속성은 "sgml" 요소와 "img" 요소에 대해 선언됩니다).
단, "img" 요소의 "title" 속성은 내부 엔티티 "example1"을 지정합니다.주석을 정의하지 않는 선언이므로 파서와 엔티티 대체 텍스트의 유효성을 검사하여 구문 분석되는 SVGTitle은 "예 1.svg의 제목"입니다.
"img" 요소의 내용은 선언이 표기를 정의하지 않는 다른 외부 엔티티 "example1SVG"를 참조하기 때문에 파서를 검증함으로써 해석되며 엔티티 대체 텍스트는 정의된 SYSTEM ID "example1.svg"(상대 URI로도 해석됨)에 의해 배치됩니다."img" 요소의 효과적인 내용은 이 두 번째 외부 리소스의 내용입니다.GIF 이미지와의 차이점은 DTD의 선언에 따라 SVG 이미지가 SGML 문서 내에서 구문 분석된다는 것입니다. 여기서 GIF 이미지는 "데이터" 속성(값 유형이 불투명한 엔티티)을 통해 불투명한 외부 개체(SGML에서는 구문 분석 불가)로 참조됩니다.
ENTITY 속성 값에는 하나의 표기법 이름만 지정할 수 있습니다(SGML, XML 1.0 또는 XML 1.1에서는 선언된 동일한 외부 ENTITY 내의 여러 표기법 이름은 지원되지 않으므로 별도의 속성이 필요합니다).단, 복수의 외부 엔티티는 (공백으로 구분된 이름 리스트로) 타입 ENTITES로 선언된 속성으로 참조할 수 있습니다.또, 각 이름 있는 외부 엔티티도 독자적인 표기법으로 선언됩니다.
XML 및 SGML 파서의 경우 표기도 완전히 불투명하므로 참조할 수 있는 외부 엔티티의 유형으로 구분되지 않습니다(이러한 파서의 경우 Public Identifier(FPI; 공개 식별자) 및 System Identifier(URI; 시스템 식별자)와 관련된 고유 이름을 가질 뿐입니다).
일부 응용 프로그램(XML 또는 SGML 파서 자체는 제외)에서는 주석 이름을 지정하여 간접적으로 참조할 수도 있습니다."URN:''name''"
URI를 지정할 수 있는 모든 위치에 표준 CDATA Atribute 값을 지정합니다.단, 이 동작은 어플리케이션에 따라 다르며 어플리케이션은 기존의 URN 카탈로그를 유지관리하여 표준 SGML 또는 XML 파서로 해석된 표기로 해결해야 합니다.이렇게 하면 외부 엔티티로 저장되고 문서의 외부 서브셋으로만 참조되는 DTD에만 표기를 정의할 수 있습니다.또, 이러한 문서는, 표기를 직접 서포트하지 않는 XML 또는 SGML 파서의 검증과 호환성을 유지할 수 있습니다.
표기는 HTML 또는 XHTML 및 SVG의 기본 프로파일에서는 사용되지 않습니다.이유는 다음과 같습니다.
- 이러한 표준 문서 유형에 사용되는 모든 외부 엔티티는 공용 식별자 카탈로그 없이 표준 DTD에서 CDATA 유형으로 선언된 단순 속성(예: 앵커 "a" 요소의 "href" 속성 또는 이미지 "img" 요소의 "src" 속성)에 의해 참조됩니다.기존의 FPI)
- 추가 메타데이터의 모든 외부 엔티티는 다음 중 하나에 의해 참조됩니다.
- 추가 어트리뷰트(외부 엔티티의 MIME 타입을 나타내는 타입이나 부호화를 나타내는 charset 어트리뷰트 등)
- 자체 속성 내의 추가 요소(HTML 및 XHTML의 링크 또는 메타 등)
- XML 및 XHTML의 표준 의사 속성(네임스페이스 선언의 경우 xml:lang, xmlns 및 xmlns:* 등).
SGML, XML 1.0 또는 XML 1.1 파서를 검증하는 경우에도 선언된 알림에서 FPI 및/또는 URI에 의해 참조되는 외부 엔티티는 파서 자체에 의해 자동으로 검색되지 않습니다.대신 이들 파서는 해석된SGML 또는 XML 문서에서 발견된 표기와 관련된 해석된 FPI 및/또는 URI를 어플리케이션에 제공할 뿐이며, DTD에서 선언된 모든 표기의 이름을 포함하는 사전의 기능을 제공합니다.이러한 검증 파서는 표기의 이름 선언의 고유성도 체크하고 검증 에러를 보고합니다.r 일부 표기법이 DTD 또는 문서 본문 내에서 사용되고 있지만 선언되지 않은 경우:
- 응용 프로그램이 어떤 표기법도 사용할 수 없는 경우(또는 FPI 및/또는 URI를 알 수 없거나 로컬카탈로그에서 지원되지 않는 경우), 이러한 표기는 응용 프로그램에서 자동으로 무시되거나 응용 프로그램에서 오류를 나타낼 수 있습니다.
- 그렇지 않으면 응용 프로그램 스스로 해석 방법을 결정하고 외부 엔티티를 검색하여 별도로 구문 분석해야 하는지 여부를 결정합니다.
- 그런 다음 이러한 해석, 검색 또는 개별 해석에 실패하면 응용 프로그램이 오류를 표시할 수 있습니다.
- 응용 프로그램에서 오류를 나타내는 인식되지 않은 표기는 해당 표기를 사용하는 검증된 문서의 해석을 차단해서는 안 됩니다.
XML DTD 및 스키마 검증
XML DTD 구문은 여러 XML 스키마 언어 중 하나입니다.그러나 많은 스키마 언어가 XML DTD를 완전히 대체하지는 않습니다.특히 XML DTD를 사용하면 DTD가 필요 없는 XML에 직접 등가물이 없는 엔티티 및 표기를 정의할 수 있습니다(내부 엔티티 및 파싱 가능한 외부 엔티티는 XML 스키마 언어의 일부가 아니며 대부분의 XML 스키마 언어에서 단순하게 동등한 매핑이 없기 때문입니다).
대부분의 XML 스키마 언어는 검증되지 않은 XML 파서를 사용하여 XML 문서를 구문 분석할 수 있도록 요소 선언 및 속성 목록 선언을 대체하는 것입니다(외부 DTD 서브셋의 유일한 목적이 스키마를 정의하는 데 있는 경우).또한 이러한 XML 스키마 언어에 대한 문서는 별도로 구문 분석해야 하므로 순수 독립 실행형 모드에서 XML 문서의 스키마를 유효성 검사할 수 없습니다. 문서 유형 선언은 구문 분석된 XML 문서에 사용되는 스키마를 식별하기 위해 최소한 필요한 상태로 남아 있습니다.d를 다른 언어로 입력합니다.
일반적인 오해는 검증되지 않은 XML 파서가 문서 유형 선언을 읽을 필요가 없다는 것입니다. 실제로 문서 유형 선언은 여전히 올바른 구문과 선언의 유효성을 위해 스캔되어야 하며 파서는 내부 하위 집합의 모든 엔티티 선언을 여전히 구문 분석하여 대체 텍스트를 대체해야 합니다.문서 유형 선언서 또는 문서 본문 중 어디에서나 발생하는 내부 엔티티의 s.
단, 검증되지 않은 파서는 해석 가능한 외부 엔티티(외부 서브셋 포함)를 읽지 않기로 선택할 수 있으며 요소 선언 및 속성 목록 선언에서 정의된 콘텐츠 모델 제한을 준수할 필요가 없습니다.
XML 문서가 파싱 가능한 외부 엔티티(지정된 외부 서브셋 또는 내부 서브셋에서 선언된 파싱 가능한 외부 엔티티 포함)에 의존하는 경우, XML 문서는 다음과 같이 주장해야 합니다.standalone="no"
XML 선언에 포함시킵니다.검증중인 DTD는 XML 카탈로그를 사용하여 지정된 외부 서브셋을 취득함으로써 식별할 수 있습니다.
다음 예제에서는 XML 문서가 다음과 같이 선언됩니다.standalone="no"
문서 유형 선언에 외부 하위 집합이 있기 때문입니다.
<?xml version="1.0" encoding="UTF-8" 스탠드아론="아니요?"> <!DOSCTYPE people_list SYSTEM "example.dtd"> <사람명부> />
XML 문서 유형 선언에 외부 하위 집합의 SYSTEM 식별자가 포함된 경우 독립 실행형으로서 안전하게 처리할 수 없습니다. URI를 검색해야 합니다. 그렇지 않으면 내부 하위 집합 또는 문서 본문에서 유효한 XML 구문을 올바르게 구문 분석하기 위해 정의가 필요할 수 있습니다(X).ML 구문 해석은 일반적으로 XML에 미리 정의되어 XML 문서를 어휘 토큰으로 해석한 후 암묵적으로 대체되는 5개의 엔티티를 제외한 모든 명명된 엔티티를 치환한 후에 수행됩니다.PUBLIC ID만 포함하는 경우 XML 프로세서가 연관된 DTD 엔티티를 가져올 수 있는 로컬카탈로그에서 이 PUBLIC ID를 인식하면 스탠드아론으로 처리될 수 있습니다.
XML DTD 스키마 예시
사용자 목록의 스키마를 설명하는 매우 단순한 외부 XML DTD의 예는 다음과 같습니다.
<! 요소 people_리스트 (사람인)*> <! 요소 사람인 (이름., 생년월일?, 성별?, 사회 보장 번호?)> <! 요소 이름. (# PCDATA)> <! 요소 생년월일 (# PCDATA)> <! 요소 성별 (# PCDATA)> <! 요소 사회 보장 번호 (# PCDATA)>
한 줄 한 줄:
people_list
유효한 요소 이름이며, 이러한 요소의 인스턴스에는 임의의 개수의 요소가 포함됩니다.person
요소들.그*
0 이상일 수 있음을 나타냅니다.person
내부 요소people_list
요소.person
유효한 요소 이름이며, 이러한 요소의 인스턴스에는 라는 이름의 요소가 1개 포함되어 있습니다.name
, 그 뒤에 이름이 붙은1개birthdate
(옵션),gender
(옵션도) 및socialsecuritynumber
(옵션도 있습니다).그?
요소는 옵션임을 나타냅니다.에 대한 참조name
요소 이름에는 없음?
,비상대기상태person
요소는 다음을 포함해야 합니다.name
요소.name
는 유효한 요소 이름이며 이러한 요소의 인스턴스에는 "해석된 문자 데이터"(#PCDATA)가 포함되어 있습니다.birthdate
는 유효한 요소 이름이며 이러한 요소의 인스턴스에는 구문 분석된 문자 데이터가 포함되어 있습니다.gender
는 유효한 요소 이름이며 이러한 요소의 인스턴스에는 구문 분석된 문자 데이터가 포함되어 있습니다.socialsecuritynumber
는 유효한 요소 이름이며 이러한 요소의 인스턴스에는 구문 분석된 문자 데이터가 포함되어 있습니다.
이 DTD를 사용하고, 이 DTD에 준거하고 있는 XML 파일의 예를 다음에 나타냅니다.여기서 DTD는 SYSTEM 지정자와 URI를 통해 외부 서브셋으로 참조됩니다.이 예에서는 상대 URI 참조 "example.dtd" ("!" 뒤에 있는 "people_list")를 사용하여 DTD를 식별할 수 있다고 가정합니다.DOSCTYPE"는 루트 태그 또는 DTD에서 정의된 첫 번째 요소를 "people_list"라고 합니다.
<?xml version="1.0" encoding="UTF-8" 스탠드아론="아니요?"> <!DOSCTYPE people_list SYSTEM "example.dtd"> <people_list> <사람> <이름>Fred Bloggs </name> <birthdate> 2008-11-27 </birthdate> </gender> </person> </people_list>
위의 DTD 컴포넌트를 example.dtd라는 텍스트파일과 XML 파일을 다른 이름의 텍스트파일에 붙여넣고 저장한 후 브라우저에서 XML 파일을 열면 XML 지원 브라우저(Internet Explorer 또는 Mozilla Firefox 등)에서 이를 렌더링할 수 있습니다.양쪽 파일을 같은 디렉토리에 보존할 필요가 있습니다.단, 많은 브라우저는 XML 문서가 DTD의 규칙을 확인하는지 확인하지 않고 DTD가 구문적으로 올바른지 확인하는 데만 필요합니다.보안상의 이유로 외부 DTD를 읽지 않을 수도 있습니다.
동일한 DTD를 문서 유형 선언에서 [각괄호] 안에 넣어 XML 문서 자체에 내부 서브셋으로 직접 포함할 수도 있습니다.이 경우 문서는 더 이상 외부 엔티티에 의존하지 않고 독립 실행형 모드로 처리할 수 있습니다.
<?xml version="1.0" encoding="UTF-8" 스탠드아론="yes?"> <!DOSCTYPE people_list [!ELEMENT people_list (사람*)> <!ELEMENT 사람(이름, 생년월일, 성별, 사회보장번호)<! Element name (#PCDATA)> <!ELEMENT 생년월일(#PCDATA)> <!ELEment gender (#PCDATA)> <!ELEMENT 사회보장번호(#PCDATA)>> <people_list> <person> <name>Fred Bloggs </name> <birthdate> 2008-11-27 </birthdate> </gender> </person> </people_list>
(스키마를 지정하기 위한) DTD 대체품을 사용할 수 있습니다.
- XML Schema Definition(XSD)이라고도 불리는 XML Schema는 W3C [8]내에서 권장 상태를 달성했습니다.또한 강력한 입력 기능과 Java [citation needed]선언에 대한 라운드 트립이 용이하기 때문에 "데이터 지향"(트랜잭션 비게시) XML 사용에 널리 사용됩니다.대부분의 출판계는 XSD의 복잡성이 더해져도 특별한 [citation needed]이점이 없다는 것을 알게 되었고, 따라서 DTD는 여전히 그곳에서 훨씬 더 인기가 있습니다.XML 스키마 정의 자체는 XML 문서이지만 DTD는 그렇지 않습니다.
- 또한 DSDL의 일부이기도 한 RELEX NG는 ISO 국제 [9]표준입니다.이것은 [citation needed]XSD보다 표현력이 뛰어나고 [citation needed]구문은 단순하지만 상용 소프트웨어 지원은 느렸습니다.
보안.
XML DTD를 사용하면 기하급수적으로 확장되는 중첩된 엔티티를 정의하거나 XML 파서를 [10]반환되지 않는 외부 리소스에 전송함으로써 Denial of Service(DoS; 서비스 거부) 공격을 생성할 수 있습니다.
이 때문에, 을 참조해 주세요.NET Framework는 DTD [10]해석을 금지하거나 건너뛸 수 있는 속성을 제공하며 최신 버전의 Microsoft Office 응용 프로그램(Microsoft Office 2010 이상)은 DTD 선언을 포함하는 XML 파일 열기를 거부합니다.
「 」를 참조해 주세요.
- 시멘틱 웹
- XML 스키마 언어 비교– 다른 XML 스키마 언어와의 비교
- XML 스키마(W3C)
레퍼런스
- ^ "Introduction to DTD".
- ^ "doctypedecl". Extensible Markup Language (XML) 1.1. W3C.
- ^ Watt, Andrew H. (2002). Sams teach yourself XML in 10 minutes. Sams Publishing. ISBN 9780672324710.
- ^ Attribute-list 선언, Extensible Markup Language(XML; 확장 마크업 언어) 1.1, W3C 사양.
- ^ "DTD Entities". DTD Tutorial. W3Schools.
- ^ 표기법 선언, Extensible Markup Language(XML) 1.0, W3C 사양.
- ^ 표기법 선언, Extensible Markup Language(XML) 1.1, W3C 사양.
- ^ "XML Schema Part 1: Structures (Second Edition)". W3C. 2004. Retrieved 2011-05-17.
- ^ "ISO/IEC 19757-2:2008 - Information technology -- Document Schema Definition Language (DSDL) -- Part 2: Regular-grammar-based validation -- RELAX NG". ISO. Retrieved 2011-05-17.
- ^ a b Bryan Sullivan (November 2009). "XML Denial of Service Attacks and Defenses". MSDN Magazine. Retrieved 2013-10-21.
외부 링크
이 문서에는 추가 카테고리 또는 보다 구체적인 카테고리가 필요합니다.(2020년 6월) |