DTD - Thuộc tính

Trong chương này, chúng ta sẽ thảo luận về các thuộc tính DTD. Thuộc tính cung cấp thêm thông tin về một phần tử hoặc chính xác hơn là nó xác định thuộc tính của một phần tử. Thuộc tính XML luôn ở dạng một cặp tên-giá trị. Một phần tử có thể có bất kỳ số lượng thuộc tính duy nhất nào.

Khai báo thuộc tính rất giống với khai báo phần tử theo nhiều cách ngoại trừ một; thay vì khai báo nội dung cho phép cho các phần tử, bạn khai báo một danh sách các thuộc tính cho phép cho mỗi phần tử. Các danh sách này được gọi là khai báo ATTLIST.

Cú pháp

Cú pháp cơ bản của khai báo thuộc tính DTD như sau:

<!ATTLIST element-name attribute-name attribute-type attribute-value>

Trong cú pháp trên -

  • Các thuộc tính DTD bắt đầu bằng từ khóa <! ATTLIST nếu phần tử chứa thuộc tính.

  • element-name chỉ định tên của phần tử mà thuộc tính áp dụng.

  • attribute-name chỉ định tên của thuộc tính được bao gồm với tên phần tử.

  • attribute-typexác định loại thuộc tính. Chúng ta sẽ thảo luận thêm về vấn đề này trong các phần sau.

  • attribute-valuenhận một giá trị cố định mà các thuộc tính phải xác định. Chúng ta sẽ thảo luận thêm về vấn đề này trong các phần sau.

Thí dụ

Dưới đây là một ví dụ đơn giản về khai báo thuộc tính trong 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>

Hãy để chúng tôi xem qua đoạn mã trên -

  • Bắt đầu với khai báo XML với câu lệnh sau:

<?xml version = "1.0"?>
  • Ngay sau tiêu đề XML là khai báo loại tài liệu, thường được gọi là LOẠI TÀI LIỆU như được hiển thị bên dưới:

    DOCTYPE thông báo cho trình phân tích cú pháp rằng một DTD được liên kết với tài liệu XML này. Khai báo DOCTYPE có dấu chấm than (!) Ở đầu tên phần tử.

<!DOCTYPE address [
  • Sau đây là phần thân của DTD. Ở đây chúng tôi đã khai báo phần tử và thuộc tính -

<!ELEMENT address ( name )>
<!ELEMENT name ( #PCDATA )>
  • Id thuộc tính cho tên phần tử được định nghĩa như sau:

    Ở đây loại thuộc tính là CDATA và giá trị của nó là #REQUIRED .

<!ATTLIST name id CDATA #REQUIRED>

Quy tắc khai báo thuộc tính

  • Tất cả các thuộc tính được sử dụng trong tài liệu XML phải được khai báo trong Định nghĩa loại tài liệu (DTD) bằng cách sử dụng khai báo danh sách thuộc tính

  • Các thuộc tính chỉ có thể xuất hiện trong thẻ bắt đầu hoặc thẻ trống.

  • Từ khóa ATTLIST phải viết hoa

  • Không cho phép các tên thuộc tính trùng lặp trong danh sách thuộc tính cho một phần tử nhất định.

Các loại thuộc tính

Khi khai báo thuộc tính, bạn có thể chỉ định cách bộ xử lý sẽ xử lý dữ liệu xuất hiện trong giá trị. Chúng tôi có thể phân loại các loại thuộc tính thành ba loại chính:

  • Loại chuỗi

  • Các loại mã hóa

  • Các loại được liệt kê

Bảng sau cung cấp tóm tắt về các loại thuộc tính khác nhau:

Sr.No. Loại & Mô tả
1

CDATA

CDATA là dữ liệu ký tự (văn bản và không phải đánh dấu). Nó là một loại thuộc tính chuỗi .

2

ID

Nó là một định danh duy nhất của thuộc tính. Nó không nên xuất hiện nhiều hơn một lần. Nó là một loại thuộc tính được mã hóa .

3

IDREF

Nó được sử dụng để tham chiếu một ID của một phần tử khác. Nó được sử dụng để thiết lập kết nối giữa các phần tử. Nó là một loại thuộc tính được mã hóa .

4

IDREFS

Nó được sử dụng để tham chiếu nhiều ID. Nó là một loại thuộc tính được mã hóa .

5

ENTITY

Nó đại diện cho một thực thể bên ngoài trong tài liệu. Nó là một loại thuộc tính được mã hóa .

6

ENTITIES

Nó đại diện cho một danh sách các thực thể bên ngoài trong tài liệu. Nó là một loại thuộc tính được mã hóa .

7

NMTOKEN

Nó tương tự như CDATA và giá trị thuộc tính bao gồm một tên XML hợp lệ. Nó là một loại thuộc tính được mã hóa .

số 8

NMTOKENS

Nó tương tự như CDATA và giá trị thuộc tính bao gồm một danh sách tên XML hợp lệ. Nó là một loại thuộc tính được mã hóa .

9

NOTATION

Một phần tử sẽ được tham chiếu đến một ký hiệu được khai báo trong tài liệu DTD. Nó là một loại thuộc tính được liệt kê .

10

Enumeration

Nó cho phép xác định danh sách các giá trị cụ thể trong đó một trong các giá trị phải khớp. Nó là một loại thuộc tính được liệt kê .

Khai báo giá trị thuộc tính

Trong mỗi khai báo thuộc tính, bạn phải chỉ định cách giá trị sẽ xuất hiện trong tài liệu. Bạn có thể chỉ định nếu một thuộc tính -

  • có thể có một giá trị mặc định

  • có thể có một giá trị cố định

  • bắt buộc

  • được ngụ ý

Giá trị mặc định

Nó chứa giá trị mặc định. Các giá trị có thể được đặt trong dấu nháy đơn (') hoặc dấu nháy kép (").

Syntax

Sau đây là cú pháp của giá trị -

<!ATTLIST element-name attribute-name attribute-type "default-value">

trong đó giá trị mặc định là giá trị thuộc tính được xác định.

Example

Sau đây là một ví dụ đơn giản về khai báo thuộc tính với giá trị mặc định:

<?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>

Trong ví dụ này, chúng ta có phần tử tên với id thuộc tính có giá trị mặc định là 0 . Giá trị mặc định được đặt trong dấu ngoặc kép.

Giá trị CỐ ĐỊNH

Từ khóa #FIXED theo sau là giá trị cố định được sử dụng khi bạn muốn chỉ định rằng giá trị thuộc tính là không đổi và không thể thay đổi. Cách sử dụng phổ biến của các thuộc tính cố định là chỉ định số phiên bản.

Syntax

Sau đây là cú pháp của các giá trị cố định:

<!ATTLIST element-name attribute-name attribute-type #FIXED "value" >

trong đó #FIXED là một giá trị thuộc tính được xác định.

Example

Sau đây là một ví dụ đơn giản về khai báo thuộc tính với giá trị CỐ ĐỊNH -

<?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>

Trong ví dụ này, chúng tôi đã sử dụng từ khóa #FIXED trong đó nó chỉ ra rằng giá trị "tutorialspoint" là giá trị duy nhất cho tên thuộc tính của phần tử <company>. Nếu chúng tôi cố gắng thay đổi giá trị thuộc tính thì nó sẽ báo lỗi.

Sau đây là một DTD không hợp lệ -

<?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>

Giá trị BẮT BUỘC

Bất cứ khi nào bạn muốn chỉ định rằng một thuộc tính là bắt buộc, hãy sử dụng từ khóa #REQUIRED.

Syntax

Sau đây là cú pháp của #REQUIRED -

<!ATTLIST element-name attribute-name attribute-type #REQUIRED>

trong đó #REQUIRED là một loại thuộc tính được xác định.

Example

Sau đây là một ví dụ đơn giản về khai báo thuộc tính DTD với từ khóa #REQUIRED -

<?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>

Trong ví dụ này, chúng tôi đã sử dụng từ khóa #REQUIRED để xác định rằng các thuộc tính id phải được cung cấp cho các phần tử có tên tuổi tên

Giá trị IMPLIED

Khi khai báo các thuộc tính, bạn phải luôn chỉ định một khai báo giá trị. Nếu thuộc tính bạn đang khai báo không có giá trị mặc định, không có giá trị cố định và không bắt buộc, thì bạn phải khai báo thuộc tính đó như ngụ ý . Từ khóa #IMPLIED được sử dụng để chỉ định một thuộc tính như được ngụ ý .

Syntax

Sau đây là cú pháp của #IMPLIED -

<!ATTLIST element-name attribute-name attribute-type #IMPLIED>

trong đó #IMPLIED là một loại thuộc tính được xác định.

Example

Sau đây là một ví dụ đơn giản về #IMPLIED

<?xml version = "1.0"?>

<!DOCTYPE address [
   <!ELEMENT address ( name )>
   <!ELEMENT name ( #PCDATA )>
   <!ATTLIST name id CDATA #IMPLIED>
]>

<address>
   <name />
</address>

Trong ví dụ này, chúng tôi đã sử dụng từ khóa #IMPLIED vì chúng tôi không muốn chỉ định bất kỳ thuộc tính nào được đưa vào tên phần tử . Nó là tùy chọn.