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 , companyphone_no 는 하위 요소입니다.

연산자 및 구문 규칙 목록

아래 표는 하위 요소 정의에 적용될 수있는 연산자 및 구문 규칙 목록을 보여줍니다.

운영자 통사론 기술
+ <! ELEMENT 요소 이름 (child1 +)> 하위 요소가 상위 요소 내에서 한 번 이상 발생할 수 있음을 나타냅니다.

<! ELEMENT 주소 (이름 +)>

하위 요소 이름 은 요소 이름 주소 내에서 한 번 이상 나타날 수 있습니다 .

* <! ELEMENT 요소 이름 (child1 *)> 이는 자식 요소가 부모 요소 내에서 0 회 이상 발생할 수 있음을 나타냅니다.

<! ELEMENT 주소 (이름 *)>

자식 요소 이름 은 요소 이름 주소 내에서 0 회 이상 나타날 수 있습니다 .

? <! ELEMENT 요소 이름 (child1?)> 이는 자식 요소가 부모 요소 내에서 0 회 또는 한 번 발생할 수 있음을 나타냅니다.

<! ELEMENT 주소 (이름?)>

자식 요소 이름 은 요소 이름 주소 내에서 0 개 또는 한 번 나타날 수 있습니다 .

, <! ELEMENT 요소 이름 (child1, child2)> element-name에 포함되어야하는 쉼표로 구분 된 하위 요소의 시퀀스를 제공합니다.

<! ELEMENT 주소 (이름, 회사)>

요소 이름 주소 내에서 동일한 순서로 발생해야하는 하위 요소 이름 , 회사의 시퀀스입니다 .

| <! ELEMENT 요소 이름 (child1 | child2)> 자식 요소에서 선택할 수 있습니다.

<! ELEMENT 주소 (이름 | 회사)>

그것은 당신이 자식 요소, 즉 이름 또는 회사 중 하나를 선택할 수 있도록 하는데, 이는 요소 이름 주소 내부에 있어야합니다 .

규칙

하나 이상의 요소 내용이있는 경우 특정 규칙을 따라야합니다.

  • Sequences − 종종 DTD 문서 내의 요소는 고유 한 순서로 나타나야합니다. 이 경우 시퀀스를 사용하여 콘텐츠를 정의합니다.

    선언은 <address> 요소에 정확히 세 개의 하위 (<name>, <company> 및 <phone>)가 있어야하며이 순서대로 나타나야 함을 나타냅니다. 예를 들면-

<!ELEMENT address (name,company,phone)>
  • Choices − Suppose you need to allow one element or another, but not both. In such cases you must use the pipe (|) character. The pipe functions as an exclusive OR. For example −

<!ELEMENT address (mobile | landline)>

Mixed Element Content

This is the combination of (#PCDATA) and children elements. PCDATA stands for parsed character data, that is, text that is not markup. Within mixed content models, text can appear by itself or it can be interspersed between elements. The rules for mixed content models are similar to the element content as discussed in the previous section.

Syntax

Following is a generic syntax for mixed element content −

<!ELEMENT elementname (#PCDATA|child1|child2)*>
  • ELEMENT is the element declaration tag.

  • elementname is the name of the element.

  • PCDATA is the text that is not markup. #PCDATA must come first in the mixed content declaration.

  • child1, child2.. are the elements and each element must have its own definition within the DTD.

  • The operator (*) must follow the mixed content declaration if children elements are included

  • The (#PCDATA) and children element declarations must be separated by the (|) operator.

Example

Following is a simple example demonstrating the mixed content element declaration in a 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 Element Content

You can declare an element using the ANY keyword in the content. It is most often referred to as mixed category element. ANY is useful when you have yet to decide the allowable contents of the element.

Syntax

Following is the syntax for declaring elements with ANY content −

<!ELEMENT elementname ANY>

Here, the ANY keyword indicates that text (PCDATA) and/or any elements declared within the DTD can be used within the content of the <elementname> element. They can be used in any order any number of times. However, the ANY keyword does not allow you to include elements that are not declared within the DTD.

Example

Following is a simple example demonstrating the element declaration with ANY content −

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

<!DOCTYPE address [
   <!ELEMENT address ANY>
]>

<address>
   Here's a bit of sample text
</address>