DTD-퀵 가이드
일반적으로 DTD로 알려진 XML 문서 유형 선언은 XML 언어를 정확하게 설명하는 방법입니다. DTD는 적절한 XML 언어의 문법 규칙에 대해 XML 문서의 구조와 어휘의 유효성을 확인합니다.
XML 문서는 다음과 같이 정의 할 수 있습니다.
Well-formed− XML 문서가 태그와 같은 모든 일반 XML 규칙을 준수하는 경우 태그는 적절하게 중첩되어야하고, 여는 태그와 닫는 태그는 균형을 이루어야하며, 빈 태그는 '/>'로 끝나야하며 올바른 형식으로 호출됩니다 .
또는
Valid− 올바른 형식 일뿐만 아니라 사용 가능한 DTD를 준수 하는 XML 문서. 사용 가능한 태그, 해당 태그에 포함될 수있는 속성, 다른 속성 중에서 다른 태그 내에서 발생할 수있는 태그를 지정합니다. .
다음 다이어그램은 DTD가 XML 문서를 구성하는 데 사용됨을 나타냅니다.
종류
DTD는 다음과 같이 XML 문서에서 선언 기준으로 분류 할 수 있습니다.
내부 DTD
외부 DTD
DTD가 파일 내에서 선언되면 호출됩니다. Internal DTD 별도의 파일로 선언하면 External DTD.
이에 대한 자세한 내용은 DTD 구문 장에서 알아 보겠습니다.
풍모
다음은 DTD가 설명하는 몇 가지 중요한 사항입니다.
XML 문서에 나타날 수있는 요소.
표시 될 수있는 순서.
선택 및 필수 요소.
요소 속성 및 선택 또는 필수 여부.
속성이 기본값을 가질 수 있는지 여부.
DTD 사용의 장점
Documentation− XML 파일에 대해 고유 한 형식을 정의 할 수 있습니다. 이 문서를 보면 사용자 / 개발자는 데이터 구조를 이해할 수 있습니다.
Validation − 요소가 올바른 순서로 표시되는지, 필수 요소와 속성이 제자리에 있는지, 요소와 속성이 잘못된 방식으로 삽입되지 않았는지 등을 확인하여 XML 파일의 유효성을 확인하는 방법을 제공합니다.
DTD 사용의 단점
네임 스페이스를 지원하지 않습니다. 네임 스페이스는 요소 및 속성 이름을 그룹에 할당 할 수있는 메커니즘입니다. 그러나 DTD에서는 네임 스페이스를 DTD 내에 정의해야하므로 네임 스페이스 사용 목적에 위배됩니다.
텍스트 문자열 데이터 유형 만 지원합니다 .
객체 지향이 아닙니다. 따라서 상속 개념은 DTD에 적용 할 수 없습니다.
요소에 대한 카디널리티를 표현할 수있는 제한된 가능성.
XML DTD는 문서 내부에 지정하거나 별도의 문서에 보관 한 다음 문서를 DTD 문서에 연결하여 사용할 수 있습니다.
통사론
DTD의 기본 구문은 다음과 같습니다.
<!DOCTYPE element DTD identifier
[
declaration1
declaration2
........
]>
위의 구문에서-
DTD <! DOCTYPE 구분 기호로 시작합니다.
안 element 지정된 루트 요소에서 문서를 구문 분석하도록 파서에 지시합니다.
DTD identifier문서 유형 정의에 대한 식별자로, 시스템의 파일 경로 또는 인터넷의 파일 URL 일 수 있습니다. DTD가 외부 경로를 가리키는 경우 호출됩니다.external subset.
그만큼 square brackets [ ] 라는 엔티티 선언의 선택적 목록을 묶습니다. internal subset.
내부 DTD
XML 파일 내에서 요소가 선언 된 경우 DTD를 내부 DTD라고합니다. 내부 DTD로 참조하려면 XML 선언의 독립형 속성을 다음과 같이 설정해야합니다.yes. 이것은 선언이 외부 소스와 독립적으로 작동 함을 의미합니다.
통사론
내부 DTD의 구문은 다음과 같습니다.
<!DOCTYPE root-element [element-declarations]>
여기서 root-element 는 루트 요소의 이름이고 element-declarations 는 요소를 선언하는 곳입니다.
예
다음은 내부 DTD의 간단한 예입니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
위의 코드를 살펴 보겠습니다.
Start Declaration − 다음 문장으로 XML 선언을 시작합니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
DTD− XML 헤더 바로 다음에는 일반적으로 DOCTYPE이라고 하는 문서 유형 선언이 이어 집니다.
<!DOCTYPE address [
DOCTYPE 선언에는 요소 이름 시작 부분에 느낌표 (!)가 있습니다. DOCTYPE은 DTD가이 XML 문서와 연관되어 있음을 파서에 알립니다.
DTD Body − DOCTYPE 선언 뒤에는 요소, 속성, 엔티티 및 표기법을 선언하는 DTD 본문이 이어집니다.
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone_no (#PCDATA)>
여기서 <name> 문서의 어휘를 구성하는 몇 가지 요소가 선언됩니다. <! ELEMENT name (#PCDATA)>는 요소 이름 이 "#PCDATA"유형이되도록 정의합니다 . 여기서 #PCDATA는 구문 분석 가능한 텍스트 데이터를 의미합니다.
End Declaration− 마지막으로 DTD의 선언 섹션은 닫는 괄호와 닫는 꺾쇠 괄호 (]>)를 사용하여 닫힙니다. 이것은 효과적으로 정의를 종료하고 그 후에는 XML 문서가 즉시 뒤 따릅니다.
규칙
문서 유형 선언은 문서의 시작 부분에 나타나야합니다 (앞에 XML 헤더 만 있음). 문서 내 다른 곳에서는 허용되지 않습니다.
DOCTYPE 선언과 유사하게 요소 선언은 느낌표로 시작해야합니다.
문서 유형 선언의 이름은 루트 요소의 요소 유형과 일치해야합니다.
외부 DTD
외부 DTD에서 요소는 XML 파일 외부에서 선언됩니다. 유효한 .dtd 파일 또는 유효한 URL 일 수있는 시스템 속성을 지정하여 액세스 합니다. 외부 DTD로 참조하려면 XML 선언의 독립형 속성을 다음과 같이 설정해야합니다.no. 즉, 선언에는 외부 소스의 정보가 포함됩니다.
통사론
다음은 외부 DTD에 대한 구문입니다-
<!DOCTYPE root-element SYSTEM "file-name">
여기서 file-name 은 확장자 가 .dtd 인 파일입니다 .
예
다음 예제는 외부 DTD 사용을 보여줍니다-
<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
DTD 파일의 내용 address.dtd 다음과 같습니다.
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
종류
다음 중 하나를 사용하여 외부 DTD를 참조 할 수 있습니다. system identifiers 또는 public identifiers.
System Identifiers
시스템 식별자를 사용하면 DTD 선언이 포함 된 외부 파일의 위치를 지정할 수 있습니다. 구문은 다음과 같습니다-
<!DOCTYPE name SYSTEM "address.dtd" [...]>
보시다시피 키워드 SYSTEM과 문서의 위치를 가리키는 URI 참조가 포함되어 있습니다.
Public Identifiers
공개 식별자는 DTD 리소스를 찾는 메커니즘을 제공하며 다음과 같이 작성됩니다.
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
보시다시피 PUBLIC 키워드로 시작하여 특수 식별자가 이어집니다. 공개 식별자는 카탈로그의 항목을 식별하는 데 사용됩니다. 공용 식별자는 모든 형식을 따를 수 있지만 일반적으로 사용되는 형식을 공식 공용 식별자 또는 FPI라고합니다.
이 장에서는 DTD 관점에서 XML 구성 요소에 대해 설명합니다. DTD는 기본적으로 다음 XML 구성 요소의 선언을 포함합니다.
Element
Attributes
Entities
집단
XML 요소는 XML 문서의 구성 요소로 정의 할 수 있습니다. 요소는 텍스트, 요소, 속성, 미디어 개체 또는 모든 것을 혼합하는 컨테이너로 작동 할 수 있습니다.
각 XML 문서에는 하나 이상의 요소가 포함되며 그 경계는 시작 태그와 종료 태그로 구분되거나 빈 요소로 구분됩니다.
예
다음은 XML 요소의 간단한 예입니다.
<name>
Tutorials Point
</name>
보시다시피 <name> 태그를 정의했습니다. <name>의 시작 태그와 끝 태그 사이에 텍스트가 있습니다. XML-DTD에서 사용되는 요소는 선언되어야하며 DTD 요소 장에서 자세히 설명합니다 .
속성
속성은 XML 요소의 일부입니다. 요소는 여러 고유 속성을 가질 수 있습니다. 속성은 XML 요소에 대한 자세한 정보를 제공하거나보다 정확하게 요소의 속성을 정의합니다. XML 속성은 항상 이름-값 쌍입니다.
예
다음은 XML 속성의 간단한 예입니다.
<img src = "flower.jpg"/>
여기서 img 는 요소 이름이고 src 는 속성 이름이고 flower.jpg 는 src 속성에 대해 제공된 값 입니다.
속성이 XML DTD에서 사용되는 경우 이러한 속성을 선언해야하며 이는 DTD 속성 장에서 자세히 설명합니다.
엔티티
엔티티는 XML의 자리 표시 자입니다. 이들은 문서 프롤로그 또는 DTD에서 선언 할 수 있습니다. 엔티티는 주로 다음과 같이 분류 할 수 있습니다.
내장 엔티티
캐릭터 엔티티
일반 단체
매개 변수 엔티티
잘 구성된 XML에서 재생되는 5 개의 내장 엔티티가 있습니다.
앰퍼샌드 : & amp;
작은 따옴표 : & apos;
보다 큼 : & gt;
보다 작음 : & lt;
큰 따옴표 : & quot;
XML DTD의 엔티티 선언에 대해서는 DTD 엔티티 장에서 자세히 살펴 보겠습니다.
XML 요소는 XML 문서의 구성 요소로 정의 할 수 있습니다. 요소는 텍스트, 요소, 속성, 미디어 개체 또는 모든 것을 혼합하는 컨테이너로 작동 할 수 있습니다.
DTD 요소는 ELEMENT 선언으로 선언됩니다. XML 파일이 DTD에 의해 유효성이 검사되면 파서는 처음에 루트 요소를 확인한 다음 하위 요소의 유효성을 검사합니다.
통사론
모든 DTD 요소 선언에는 다음과 같은 일반적인 형식이 있습니다.
<!ELEMENT elementname (content)>
ELEMENT 선언은 요소를 정의하려는 파서를 나타내는 데 사용됩니다.
elementname 은 정의중인 요소 이름 ( 일반 식별자 라고도 함 )입니다.
content 는 요소 내에 들어갈 수있는 콘텐츠 (있는 경우)를 정의합니다.
요소 콘텐츠 유형
DTD의 요소 선언 내용은 다음과 같이 분류 할 수 있습니다.
빈 콘텐츠
요소 내용
혼합 콘텐츠
모든 콘텐츠
빈 콘텐츠
이것은 요소 선언의 특별한 경우입니다. 이 요소 선언에는 콘텐츠가 포함되어 있지 않습니다. 이들은 키워드로 선언됩니다.EMPTY.
Syntax
다음은 빈 요소 선언 구문입니다-
<!ELEMENT elementname EMPTY >
위의 구문에서-
ELEMENTEMPTY 카테고리의 요소 선언입니다.
elementname 빈 요소의 이름입니다.
Example
다음은 빈 요소 선언을 보여주는 간단한 예입니다.
<?xml version = "1.0"?>
<!DOCTYPE hr[
<!ELEMENT address EMPTY>
]>
<address />
이 예제에서 주소 는 빈 요소로 선언됩니다. 주소 요소 의 마크 업은 <address />로 나타납니다.
요소 내용
요소 콘텐츠가있는 요소 선언에서 콘텐츠는 괄호 안에 허용 가능한 요소가됩니다. 둘 이상의 요소를 포함 할 수도 있습니다.
Syntax
다음은 요소 내용이 포함 된 요소 선언 구문입니다.
<!ELEMENT elementname (child1, child2...)>
ELEMENT 요소 선언 태그입니다.
elementname 요소의 이름입니다.
child1, child2 .. 는 요소이며 각 요소는 DTD 내에서 자체 정의를 가져야합니다.
Example
아래 예제는 요소 내용이있는 요소 선언의 간단한 예를 보여줍니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (name,company,phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
]>
<address>
<name>Tanmay Patil</name>
<company>TutorialsPoint</company>
<phone>(011) 123-4567</phone>
</address>
위의 예에서 address 는 상위 요소이고 name , company 및 phone_no 는 하위 요소입니다.
연산자 및 구문 규칙 목록
아래 표는 하위 요소 정의에 적용될 수있는 연산자 및 구문 규칙 목록을 보여줍니다.
운영자 | 통사론 | 기술 | 예 |
---|---|---|---|
+ | <! ELEMENT 요소 이름 (child1 +)> | 하위 요소가 상위 요소 내에서 한 번 이상 발생할 수 있음을 나타냅니다. | <! ELEMENT 주소 (이름 +)> 하위 요소 이름 은 요소 이름 주소 내에서 한 번 이상 나타날 수 있습니다 . |
* | <! ELEMENT 요소 이름 (child1 *)> | 자식 요소가 부모 요소 내에서 0 회 이상 발생할 수 있음을 나타냅니다. | <! ELEMENT 주소 (이름 *)> 자식 요소 이름 은 요소 이름 주소 내에서 0 회 이상 나타날 수 있습니다 . |
? | <! ELEMENT 요소 이름 (child1?)> | 이는 자식 요소가 부모 요소 내에서 0 회 또는 한 번 발생할 수 있음을 나타냅니다. | <! ELEMENT 주소 (이름?)> 자식 요소 이름 은 요소 이름 주소 내에서 0 개 또는 한 번 나타날 수 있습니다 . |
, | <! ELEMENT 요소 이름 (child1, child2)> | 요소 이름에 포함되어야하는 쉼표로 구분 된 하위 요소의 시퀀스를 제공합니다. | <! ELEMENT 주소 (이름, 회사)> 요소 이름 주소 내에서 동일한 순서로 발생해야하는 하위 요소 이름 , 회사의 시퀀스입니다 . |
| | <! ELEMENT 요소 이름 (child1 | child2)> | 자식 요소에서 선택할 수 있습니다. | <! ELEMENT 주소 (이름 | 회사)> 그것은 당신이 자식 요소, 즉 이름 또는 회사 중 하나를 선택할 수 있도록 하는데, 이는 요소 이름 주소 내에 있어야합니다 . |
규칙
하나 이상의 요소 내용이있는 경우 특정 규칙을 따라야합니다.
Sequences − 종종 DTD 문서 내의 요소는 고유 한 순서로 나타나야합니다. 이 경우 시퀀스를 사용하여 콘텐츠를 정의합니다.
선언은 <address> 요소에 정확히 세 개의 하위 (<name>, <company> 및 <phone>)가 있어야하며이 순서대로 나타나야 함을 나타냅니다. 예를 들면-
<!ELEMENT address (name,company,phone)>
Choices− 하나 또는 다른 요소를 허용해야하지만 둘 다 허용하지 않는다고 가정합니다. 이러한 경우 파이프 (|) 문자를 사용해야합니다. 파이프는 배타적 OR로 작동합니다. 예를 들면-
<!ELEMENT address (mobile | landline)>
혼합 요소 콘텐츠
이것은 (#PCDATA)와 자식 요소의 조합입니다. PCDATA는 구문 분석 된 문자 데이터, 즉 마크 업이 아닌 텍스트를 나타냅니다. 혼합 콘텐츠 모델 내에서 텍스트는 단독으로 표시되거나 요소 사이에 배치 될 수 있습니다. 혼합 콘텐츠 모델의 규칙은 이전 섹션에서 설명한 요소 콘텐츠와 유사합니다.
Syntax
다음은 혼합 요소 내용에 대한 일반적인 구문입니다-
<!ELEMENT elementname (#PCDATA|child1|child2)*>
ELEMENT 요소 선언 태그입니다.
elementname 요소의 이름입니다.
PCDATA마크 업이 아닌 텍스트입니다. 혼합 콘텐츠 선언에서 #PCDATA가 먼저 와야합니다.
child1, child2 .. 는 요소이며 각 요소는 DTD 내에서 자체 정의를 가져야합니다.
연산자 (*)는 하위 요소가 포함 된 경우 혼합 컨텐츠 선언을 따라야합니다.
(#PCDATA) 및 자식 요소 선언은 (|) 연산자로 구분해야합니다.
Example
다음은 DTD에서 혼합 콘텐츠 요소 선언을 보여주는 간단한 예입니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA|name)*>
<!ELEMENT name (#PCDATA)>
]>
<address>
Here's a bit of text mixed up with the child element.
<name>
Tanmay Patil
</name>
</address>
모든 요소 콘텐츠
콘텐츠에서 ANY 키워드를 사용하여 요소를 선언 할 수 있습니다. 대부분의 경우 혼합 된 범주 요소라고합니다. ANY는 요소의 허용 가능한 내용을 아직 결정하지 않은 경우 유용합니다.
Syntax
다음은 모든 내용으로 요소를 선언하는 구문입니다-
<!ELEMENT elementname ANY>
여기서 ANY 키워드는 텍스트 (PCDATA) 및 / 또는 DTD 내에서 선언 된 모든 요소를 <elementname> 요소의 내용 내에서 사용할 수 있음을 나타냅니다. 순서에 관계없이 여러 번 사용할 수 있습니다. 그러나 ANY 키워드를 사용하면 DTD 내에 선언되지 않은 요소를 포함 할 수 없습니다.
Example
다음은 모든 콘텐츠로 요소 선언을 보여주는 간단한 예입니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address [
<!ELEMENT address ANY>
]>
<address>
Here's a bit of sample text
</address>
이 장에서는 DTD 속성에 대해 설명합니다. 속성은 요소에 대한 더 많은 정보를 제공하거나보다 정확하게 요소의 속성을 정의합니다. XML 속성은 항상 이름-값 쌍의 형식입니다. 요소는 여러 고유 속성을 가질 수 있습니다.
속성 선언은 하나를 제외하고 여러면에서 요소 선언과 매우 유사합니다. 요소에 대해 허용 가능한 콘텐츠를 선언하는 대신 각 요소에 대해 허용 가능한 속성 목록을 선언합니다. 이러한 목록을 ATTLIST 선언이라고합니다.
통사론
DTD 속성 선언의 기본 구문은 다음과 같습니다-
<!ATTLIST element-name attribute-name attribute-type attribute-value>
위의 구문에서-
요소에 속성이 포함 된 경우 DTD 속성은 <! ATTLIST 키워드로 시작합니다.
element-name 속성이 적용되는 요소의 이름을 지정합니다.
attribute-name element-name에 포함 된 속성의 이름을 지정합니다.
attribute-type속성 유형을 정의합니다. 이에 대해서는 다음 섹션에서 자세히 설명합니다.
attribute-value속성이 정의해야하는 고정 값을 사용합니다. 이에 대해서는 다음 섹션에서 자세히 설명합니다.
예
다음은 DTD의 속성 선언에 대한 간단한 예입니다.
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">Tanmay Patil</name>
</address>
위의 코드를 살펴 보겠습니다.
다음 문장으로 XML 선언으로 시작하십시오-
<?xml version = "1.0"?>
XML 헤더 바로 뒤에는 일반적으로 DOCTYPE이라고하는 문서 유형 선언이 있습니다.
DOCTYPE은 DTD가이 XML 문서와 연관되어 있음을 파서에 알립니다. DOCTYPE 선언에는 요소 이름 시작 부분에 느낌표 (!)가 있습니다.
<!DOCTYPE address [
다음은 DTD의 본문입니다. 여기서 우리는 요소와 속성을 선언했습니다.
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
요소 이름에 대한 속성 ID 는 다음과 같이 정의됩니다.
여기서 속성 유형은 CDATA 이고 그 값은 #REQUIRED 입니다.
<!ATTLIST name id CDATA #REQUIRED>
속성 선언 규칙
XML 문서에 사용되는 모든 속성은 속성 목록 선언을 사용하여 DTD (문서 유형 정의)에서 선언되어야합니다.
속성은 시작 또는 빈 태그에만 나타날 수 있습니다.
키워드 ATTLIST는 대문자 여야합니다.
주어진 요소에 대한 속성 목록 내에서 중복 된 속성 이름은 허용되지 않습니다.
속성 유형
속성을 선언 할 때 프로세서가 값에 나타나는 데이터를 처리하는 방법을 지정할 수 있습니다. 속성 유형을 세 가지 주요 범주로 분류 할 수 있습니다.
문자열 유형
토큰 화 된 유형
열거 형
다음 표는 다양한 속성 유형에 대한 요약을 제공합니다.
Sr. 아니. | 유형 및 설명 |
---|---|
1 | CDATA CDATA는 문자 데이터 (마크 업이 아닌 텍스트)입니다. 그것은이다 문자열 속성 유형 . |
2 | ID 속성의 고유 식별자입니다. 두 번 이상 나타나지 않아야합니다. 그것은이다 토큰 화 된 속성 유형 . |
삼 | IDREF 다른 요소의 ID를 참조하는 데 사용됩니다. 요소 간의 연결을 설정하는 데 사용됩니다. 그것은이다 토큰 화 된 속성 유형 . |
4 | IDREFS 여러 ID를 참조하는 데 사용됩니다. 그것은이다 토큰 화 된 속성 유형 . |
5 | ENTITY 문서의 외부 엔티티를 나타냅니다. 그것은이다 토큰 화 된 속성 유형 . |
6 | ENTITIES 문서의 외부 엔티티 목록을 나타냅니다. 그것은이다 토큰 화 된 속성 유형 . |
7 | NMTOKEN CDATA와 유사하며 속성 값은 유효한 XML 이름으로 구성됩니다. 그것은이다 토큰 화 된 속성 유형 . |
8 | NMTOKENS CDATA와 유사하며 속성 값은 유효한 XML 이름 목록으로 구성됩니다. 그것은이다 토큰 화 된 속성 유형 . |
9 | NOTATION 요소는 DTD 문서에 선언 된 표기법을 참조합니다. 그것은이다 열거 속성 유형 . |
10 | Enumeration 값 중 하나가 일치해야하는 특정 값 목록을 정의 할 수 있습니다. 그것은이다 열거 속성 유형 . |
속성 값 선언
각 속성 선언 내에서 값이 문서에 표시되는 방식을 지정해야합니다. 속성 여부를 지정할 수 있습니다-
기본값을 가질 수 있습니다.
고정 값을 가질 수 있습니다
필수입니다
암시
기본값
기본값을 포함합니다. 값은 작은 따옴표 ( ') 또는 큰 따옴표 ( ")로 묶을 수 있습니다.
Syntax
다음은 값의 구문입니다-
<!ATTLIST element-name attribute-name attribute-type "default-value">
여기서 default-value 는 정의 된 속성 값입니다.
Example
다음은 기본값으로 속성 선언의 간단한 예입니다-
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA "0">
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
이 예에는 기본값이 0 인 속성 id를 가진 이름 요소 가 있습니다 . 기본값은 큰 따옴표로 묶여 있습니다.
고정 값
#FIXED 키워드 뒤에 고정 값은 속성 값이 상수이고 변경할 수 없도록 지정하려는 경우 사용됩니다. 고정 속성의 일반적인 용도는 버전 번호를 지정하는 것입니다.
Syntax
다음은 고정 값의 구문입니다-
<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >
여기서 #FIXED는 정의 된 속성 값입니다.
Example
다음은 FIXED 값으로 속성 선언의 간단한 예입니다-
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "tutorialspoint">we are a free online teaching faculty</company>
</address>
이 예에서는 "tutorialspoint"값이 <company> 요소 의 속성 이름 에 대한 유일한 값임을 나타내는 #FIXED 키워드를 사용했습니다 . 속성 값을 변경하려고하면 오류가 발생합니다.
다음은 잘못된 DTD입니다-
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address (company)*>
<!ELEMENT company (#PCDATA)>
<!ATTLIST company name NMTOKEN #FIXED "tutorialspoint">
]>
<address>
<company name = "abc">we are a free online teaching faculty</company>
</address>
필수 값
속성이 필요함을 지정하려면 #REQUIRED 키워드를 사용하십시오.
Syntax
다음은 #REQUIRED의 구문입니다.
<!ATTLIST element-name attribute-name attribute-type #REQUIRED>
여기서 #REQUIRED는 정의 된 속성 유형입니다.
Example
다음은 #REQUIRED 키워드를 사용한 DTD 속성 선언의 간단한 예입니다.
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #REQUIRED>
]>
<address>
<name id = "123">
Tanmay Patil
</name>
</address>
이 예에서는 #REQUIRED 키워드를 사용 하여 요소 이름 이름에 속성 ID 를 제공해야 함 을 지정했습니다.
묵시적 가치
속성을 선언 할 때 항상 값 선언을 지정해야합니다. 선언하는 속성에 기본값이없고 고정 된 값이없고 필수가 아닌 경우 속성을 implied 로 선언해야합니다 . #IMPLIED 키워드는 속성을 암시 적 으로 지정하는 데 사용됩니다 .
Syntax
다음은 #IMPLIED의 구문입니다.
<!ATTLIST element-name attribute-name attribute-type #IMPLIED>
여기서 #IMPLIED는 정의 된 속성 유형입니다.
Example
다음은 #IMPLIED의 간단한 예입니다.
<?xml version = "1.0"?>
<!DOCTYPE address [
<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
<!ATTLIST name id CDATA #IMPLIED>
]>
<address>
<name />
</address>
이 예에서는 요소 이름에 포함 할 속성을 지정하지 않기 위해 #IMPLIED 키워드를 사용했습니다 . 선택 사항입니다.
엔티티는 XML 문서 내의 특수 문자에 대한 바로 가기를 정의하는 데 사용됩니다. 엔티티는 주로 네 가지 유형이 될 수 있습니다.
내장 엔티티
캐릭터 엔티티
일반 단체
매개 변수 엔티티
엔티티 선언 구문
일반적으로 엔티티를 선언 할 수 있습니다. internally 또는 externally. 다음과 같이 각각의 구문과 구문을 이해하겠습니다.
내부 법인
엔티티가 DTD 내에서 선언되면 내부 엔티티라고합니다.
Syntax
다음은 내부 엔티티 선언 구문입니다-
<!ENTITY entity_name "entity_value">
위의 구문에서-
entity_name 엔티티 이름 뒤에 큰 따옴표 또는 작은 따옴표 내의 값이옵니다.
entity_value 엔티티 이름의 값을 보유합니다.
내부 엔티티의 엔티티 값은 접두어를 추가하여 역 참조됩니다. & 엔티티 이름, 즉 & entity_name.
Example
다음은 내부 엔티티 선언에 대한 간단한 예입니다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address [
<!ELEMENT address (#PCDATA)>
<!ENTITY name "Tanmay patil">
<!ENTITY company "TutorialsPoint">
<!ENTITY phone_no "(011) 123-4567">
]>
<address>
&name;
&company;
&phone_no;
</address>
위의 예에서 각 엔티티 이름 name , company 및 phone_no 는 XML 문서의 해당 값으로 대체됩니다. 엔티티 값은 접두사를 추가하여 역 참조됩니다. & 엔티티 이름에.
이 파일을 다른 이름으로 저장 sample.xml브라우저에서 열면 name , company , phone_no에 대한 엔티티 값 이 각각 바뀌는 것을 볼 수 있습니다.
외부 엔티티
엔티티가 DTD 외부에서 선언되면 외부 엔티티라고합니다. 시스템 식별자 또는 공용 식별자를 사용하여 외부 엔터티를 참조 할 수 있습니다.
Syntax
다음은 외부 엔티티 선언 구문입니다-
<!ENTITY name SYSTEM "URI/URL">
위의 구문에서-
name 엔티티의 이름입니다.
SYSTEM 키워드입니다.
URI/URL 큰 따옴표 또는 작은 따옴표로 묶인 외부 소스의 주소입니다.
Types
다음 중 하나를 사용하여 외부 DTD를 참조 할 수 있습니다.
System Identifiers − 시스템 식별자를 사용하면 DTD 선언이 포함 된 외부 파일의 위치를 지정할 수 있습니다.
보시다시피 SYSTEM 키워드와 문서의 위치를 가리키는 URI 참조가 포함되어 있습니다. 구문은 다음과 같습니다-
<!DOCTYPE name SYSTEM "address.dtd" [...]>
Public Identifiers − 공용 식별자는 DTD 리소스를 찾는 메커니즘을 제공하며 다음과 같이 작성됩니다.
보시다시피 PUBLIC 키워드로 시작하여 특수 식별자가 이어집니다. 공개 식별자는 카탈로그의 항목을 식별하는 데 사용됩니다. 공용 식별자는 모든 형식을 따를 수 있습니다. 그러나 일반적으로 사용되는 형식을 공식 공개 식별자 (FPI)라고합니다.
<!DOCTYPE name PUBLIC "-//Beginning XML//DTD Address Example//EN">
Example
다음 예를 통해 외부 엔티티를 이해합시다.
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
<name>
Tanmay Patil
</name>
<company>
TutorialsPoint
</company>
<phone>
(011) 123-4567
</phone>
</address>
아래는 DTD 파일의 내용입니다 address.dtd은 -
<!ELEMENT address (name, company, phone)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
내장 엔티티
모든 XML 파서는 기본 제공 항목을 지원해야합니다. 일반적으로 이러한 엔터티 참조는 어디에서나 사용할 수 있습니다. XML 문서 내에서 요소 내용 및 속성 값과 같은 일반 텍스트를 사용할 수도 있습니다.
잘 구성된 XML에서 역할을 수행하는 5 개의 기본 제공 엔티티가 있습니다.
앰퍼샌드 : & amp;
작은 따옴표 : & apos;
보다 큼 : & gt;
보다 작음 : & lt;
큰 따옴표 : & quot;
예
다음 예제는 내장 엔티티 선언을 보여줍니다-
<?xml version = "1.0"?>
<note>
<description>I'm a technical writer & programmer</description>
<note>
여기에서 볼 수 있듯이 & amp; 문자는 프로세서가 이것을 만날 때마다 &로 대체됩니다.
캐릭터 엔티티
문자 엔티티는 정보의 상징적 표현 인 일부 엔티티의 이름을 지정하는 데 사용됩니다. 즉, 입력하기 어렵거나 불가능한 문자는 문자 엔티티로 대체 될 수 있습니다.
예
다음 예제는 문자 엔티티 선언을 보여줍니다-
<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>
<!DOCTYPE author[
<!ELEMENT author (#PCDATA)>
<!ENTITY writer "Tanmay patil">
<!ENTITY copyright "©">
]>
<author>&writer;©right;</author>
여기서 우리는 ©저작권 문자의 값으로. 이 파일을 sample.xml 로 저장 하고 브라우저에서 열면 저작권이 문자 ©로 대체 된 것을 볼 수 있습니다.
일반 단체
일반 엔티티는 XML 문서 내에서 사용되기 전에 DTD 내에서 선언되어야합니다. 단일 문자 만 나타내는 대신 일반 엔터티는 문자, 단락 및 전체 문서를 나타낼 수 있습니다.
통사론
일반 엔티티를 선언하려면 DTD에서이 일반 형식의 선언을 사용하십시오.
<!ENTITY ename "text">
예
다음 예제는 일반 엔티티 선언을 보여줍니다-
<?xml version = "1.0"?>
<!DOCTYPE note [
<!ENTITY source-text "tutorialspoint">
]>
<note>
&source-text;
</note>
XML 구문 분석기가 소스 텍스트 엔티티에 대한 참조를 발견 할 때마다 참조 지점에서 애플리케이션에 대체 텍스트를 제공합니다.
매개 변수 엔티티
매개 변수 엔티티의 목적은 대체 텍스트의 재사용 가능한 섹션을 만들 수 있도록하는 것입니다.
통사론
다음은 매개 변수 엔티티 선언 구문입니다-
<!ENTITY % ename "entity_value">
entity_value 는 '&', '%'또는 ' "'가 아닌 문자입니다.
예
다음 예제는 매개 변수 엔티티 선언을 보여줍니다. 아래와 같이 요소 선언이 있다고 가정합니다.
<!ELEMENT residence (name, street, pincode, city, phone)>
<!ELEMENT apartment (name, street, pincode, city, phone)>
<!ELEMENT office (name, street, pincode, city, phone)>
<!ELEMENT shop (name, street, pincode, city, phone)>
이제 추가 요소 국가 를 추가하려는 경우 4 개 선언 모두에 추가해야합니다. 따라서 매개 변수 엔티티 참조로 이동할 수 있습니다. 이제 매개 변수 엔티티 참조를 사용하여 위의 예는 다음과 같습니다.
<!ENTITY % area "name, street, pincode, city">
<!ENTITY % contact "phone">
매개 변수 엔티티는 앰퍼샌드 대신 퍼센트 기호 만 사용하여 일반 엔티티 참조와 동일한 방식으로 역 참조됩니다.
<!ELEMENT residence (%area;, %contact;)>
<!ELEMENT apartment (%area;, %contact;)>
<!ELEMENT office (%area;, %contact;)>
<!ELEMENT shop (%area;, %contact;)>
파서가 이러한 선언을 읽을 때 엔티티 참조를 엔티티의 대체 텍스트로 대체합니다.
DTD를 사용하여 XML 문서를 정확하게 설명합니다. DTD는 적절한 XML 언어의 문법 규칙에 대해 XML 문서의 구조와 어휘의 유효성을 확인합니다. 이제 DTD의 유효성을 확인하기 위해 다음 절차를 사용할 수 있습니다.
Using XML DTD validation tools − XML Spy (무료가 아님)와 XMLStarlet (오픈 소스)과 같은 일부 IDE를 사용하여 DTD 문서에 대해 XML 파일의 유효성을 검사 할 수 있습니다.
Using XML DTD on-line validators− W3C Markup Validation Service는 웹 문서의 유효성을 검사하도록 설계되었습니다. 온라인 유효성 검사기를 사용하여 여기에서 XML DTD의 유효성을 확인 하십시오 .
Write your own XML validators with XML DTD validation API − 최신 버전의 JDK (1.4 이상)는 XML DTD 유효성 검사 API를 지원합니다. XML DTD 유효성 검사의 유효성을 확인하기 위해 자체 유효성 검사기 코드를 작성할 수 있습니다.