XML: Bài 2. Namespace

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Tổng quan về Bài học số 2

Chào mừng bạn đến với Bài học số 2, Namespace. Bài học này giới thiệu Namespace XML và lý do sử dụng Namespace (Không gian tên) trong tài liệu XML. Bài học này nhằm mục đích hiểu rõ về cú pháp Không gian tên.

Trong bài học này, bạn sẽ tìm hiểu về:

  • Không gian tên XML
  • Làm việc với Cú pháp không gian tên

2.1. Không gian tên XML

Trong bài học đầu tiên này, Không gian tên XML , bạn sẽ học cách:

  • Xác định sự cần thiết của một không gian tên.
  • Định nghĩa và mô tả không gian tên trong XML.

2.1.1. Tên phần tử trùng lặp

XML cho phép các nhà phát triển tạo các phần tử và thuộc tính của riêng họ cho các dự án của riêng họ. Các phần tử hoặc thuộc tính này có thể được chia sẻ bởi các nhà phát triển đang làm việc trong các dự án tương tự trên toàn thế giới.

Ví dụ: một tác giả của tài liệu XML bao gồm phần tử có tên là <title> trong phần tử <CD> và một tác giả khác tạo phần tử <title> trong phần tử <Book>. Một vấn đề sẽ nảy sinh nếu phần tử <title> được tạo bởi hai tác giả khác nhau, được hợp nhất thành một tài liệu XML duy nhất. Nhà phát triển XML phải đảm bảo tính duy nhất của tên phần tử và thuộc tính trong tài liệu.

2.1.2. Hậu quả của tên phần tử trùng lặp

Khi các tác giả bắt đầu tích hợp các tài liệu XML từ các nhà phát triển khác nhau, xung đột tên là không thể tránh khỏi. Trong trường hợp như vậy, trình duyệt sẽ khó phân biệt một phần tử xung đột trong tài liệu XML.

Hãy xem xét một ví dụ trong đó có hai lần xuất hiện của phần tử <title> trong tài liệu XML, một lần xuất hiện đề xuất tiêu đề của đĩa CD trong khi một lần xuất hiện khác đề xuất tên sách. Hãy tưởng tượng rằng một ứng dụng phải truy cập vào tài liệu này và tìm kiếm phần tử <title>. Một trình phân tích cú pháp XML sẽ bị vô hiệu nếu nó không nhận được thông tin bổ sung để tìm kiếm một tiêu đề cụ thể.

Hình 2.1 mô tả các phần tử trùng lặp.

Các phần tử trùng lặp

Hình 2.1: Các phần tử trùng lặp

2.1.3. Namespaces

Trong XML, các phần tử được phân biệt bằng cách sử dụng không gian tên. Không gian tên XML cung cấp tên duy nhất trên toàn cầu cho một phần tử hoặc thuộc tính để chúng không xung đột với nhau.

Không gian tên là một tập hợp các tên có thể được sử dụng làm tên phần tử hoặc tên thuộc tính trong tài liệu XML.

Không gian tên XML cung cấp những ưu điểm sau:

Ø Khả năng tái sử dụng

Không gian tên XML cho phép tái sử dụng đánh dấu bằng cách sử dụng các phần tử và thuộc tính đã được xác định trước đó.

Ø Tính mô-đun

Các mô-đun mã có thể tái sử dụng và chúng có thể được gọi cho các phần tử hoặc thuộc tính cụ thể. Các phần tử và thuộc tính từ các mô-đun khác nhau có thể được tích hợp vào một tài liệu XML duy nhất. Các thuộc tính và tên phần tử duy nhất trên toàn thế giới đảm bảo rằng các mô-đun đó có thể được gọi cho các phần tử và thuộc tính nhất định.

Ø Khả năng mở rộng

Không gian tên XML cung cấp cho các tài liệu XML khả năng nhúng các phần tử và thuộc tính từ các từ vựng khác như MathML, XHTML (Ngôn ngữ đánh dấu siêu văn bản mở rộng), v.v.

Lưu ý: Không gian tên được xác định bởi Định danh tài nguyên đồng nhất (URI).  Ví dụ, chúng ta có thể có cả ba phần tử được đặt tên là 'batch'.  Phần tử đầu tiên giới thiệu các bạn học viện tại Trung tâm Giáo dục V1Study, phần tử thứ hai là các sản phẩm và phần tử thứ ba là khách du lịch.  Phần tử batch có thể được xác định bằng một URI duy nhất, chẳng hạn như:  https://v1study.com/student https://v1study.com/book https://v1study.com/tourist

Kiểm tra kiến thức phần 1

1. Câu nào sau đây về phần tử XML và Không gian tên XML là đúng và câu nào sai?

(A)

Trình duyệt có khả năng phân biệt các tên phần tử trùng lặp trong tài liệu XML.

(B)

Nhà phát triển XML phải đảm bảo tính duy nhất của tên phần tử và thuộc tính trong tài liệu.

(C)

Không gian tên là một tập hợp các tên có thể được sử dụng làm tên phần tử hoặc tên thuộc tính trong tài liệu XML.

(D)

Trong XML, các phần tử được phân biệt bằng cách sử dụng DTD.

2.2. Làm việc với cú pháp Không gian tên

Trong phần này, Làm việc với cú pháp Không gian tên, bạn sẽ học cách:

  • Giải thích cú pháp cho không gian tên XML.
  • Thảo luận về các thuộc tính và không gian tên.
  • Thảo luận về cách sử dụng không gian tên mặc định.

2.2.1. Tên phần tử tiền tố

Không gian tên là một cơ chế mà tên phần tử và thuộc tính có thể được gán cho các nhóm. Chúng cũng đảm bảo rằng không có xung đột trong tên phần tử. Cách tốt nhất để giải quyết vấn đề này là cho mỗi phần tử trong tài liệu có một tên hoàn toàn riêng biệt. Do đó, các tiền tố của Không gian tên XML được gắn trực tiếp vào tên cũng như tên của các thuộc tính và con cháu của nó.

Sử dụng tiền tố trong tên phần tử cung cấp một phương tiện để tác giả tài liệu ngăn chặn xung đột tên, như được minh họa trong đoạn mã sau.

Đoạn mã:

<CD:Title> Feel </CD:Title>

<Book:Title> Returning to Earth </Book:Title>

Trong ví dụ này, cả CD và Book đều là tiền tố không gian tên.

2.2.2. Các vấn đề được đặt ra bởi các tiền tố

Có một hạn chế đối với cách tiếp cận tiền tố của không gian tên trong tài liệu XML. Lý do đặt tiền tố một phần tử trong tài liệu XML là để ngăn nó bị trùng lặp. Tuy nhiên, nếu các tiền tố không phải là duy nhất, vấn đề trùng lặp ban đầu sẽ vẫn tồn tại.

Để giải quyết vấn đề này, mỗi tiền tố không gian tên được thêm vào Định danh tài nguyên đồng nhất hoặc URI xác định duy nhất không gian tên. URI là một chuỗi các ký tự dùng để phân biệt tên.

Để đảm bảo tính duy nhất của tên trong bất kỳ tài liệu XML nào mà công ty tạo ra, các tài liệu được liên kết với không gian tên của chúng. Đoạn mã sau minh họa URI của công ty có tại https://v1study.com.

Đoạn mã:

<S:Student xmlns:S="https://v1study.com/student/">
  <S:First>John</S:First>
  <S:Last>Dewey</S:Last>
  <S:Title>Student</S:Title>
</S:Student>

Lưu ý: Tiền tố không gian tên là chữ viết tắt của định danh vùng tên (URI).  Đối với đơn đăng ký của sinh viên, tiền tố S hoặc s có thể được chọn.  Các phần tử có tiền tố S được cho là có tên đủ điều kiện.  Phần tên sau dấu hai chấm được gọi là tên địa phương.

2.2.3. Cú pháp không gian tên

Thuộc tính không gian tên XML được đặt trong thẻ bắt đầu của một phần tử và cú pháp của không gian tên được đưa ra trong hình 2.2.

Thuộc tính không gian tên

Hình 2.2: Cú pháp không gian tên

Ø namespacePrefix

Mỗi không gian tên có một tiền tố được sử dụng làm tham chiếu đến không gian tên. Tiền tố không được bắt đầu bằng xmlns hoặc xml. Tiền tố không gian tên có thể là bất kỳ tên XML hợp lệ nào không chứa dấu hai chấm. Tên XML hợp lệ phải bắt đầu bằng chữ cái hoặc dấu gạch dưới.

Ø elementName

Nó chỉ định tên của phần tử.

Ø xmlns

Thuộc tính xmlns là thuộc tính thông báo cho bộ xử lý XML rằng một vùng tên đang được khai báo. xmlns là viết tắt của XML Namespace.

Ø URI

Mã định danh tài nguyên đồng nhất (URI) là một chuỗi ký tự xác định Tài nguyên Internet. URI bao gồm Tên tài nguyên đồng nhất (URN) và Bộ định vị tài nguyên đồng nhất (URL). URL chứa tham chiếu cho một tài liệu hoặc một trang HTML trên Web. URN là một số duy nhất trên toàn cầu xác định các tài nguyên Internet. Ngoài ra, URI cũng phân biệt chữ hoa chữ thường, có nghĩa là hai không gian tên sau đây khác nhau: https://V1STUDY.com, https://v1study.com.

Mục đích của không gian tên khi được sử dụng trong tài liệu XML là để ngăn chặn sự va chạm của các phần tử và tên thuộc tính tương tự. Không gian tên trong XML chỉ đơn giản là một tập hợp các tên phần tử và thuộc tính được xác định bởi một tham chiếu URI. Tham chiếu URI chỉ đơn giản là một số nhận dạng chuỗi. Một URI không cần phải hợp lệ, ví dụ: có thể không có một trang Web thực sự với tên https://v1study1.com. Đặc biệt, các URI không cần phải hợp lệ hoặc trỏ đến một tài nguyên thực tế.

Các URI không cần phải hợp lệ, do đó không gian tên XML coi chúng như chuỗi. Đặc biệt, so sánh được thực hiện theo từng ký tự. Theo định nghĩa này, các URI sau đây không giống nhau mặc dù chúng trỏ đến cùng một site: https://www.v1study.com, https://v1study.com .

Đoạn mã sau minh họa các thuộc tính của không gian tên.

Đoạn mã:

<Auc:Books xmlns:Auc="https://v1study/books" xmlns:B="https://v1study.com/xml1">
...
<Auc:BookReview>
<B:Table>
...

Các phần tử có tiền tố là Auc được liên kết với một không gian tên có tên https://v1study/books, trong khi những phần tử có tiền tố B được liên kết với một không gian tên có tên là https://v1study/xml1.

Lưu ý: URI bao gồm cả URL và URN. URN khác với URL ở chỗ URL mô tả vị trí thực của tài nguyên cụ thể, trong khi URN xác định tên độc lập vị trí duy nhất cho tài nguyên ánh xạ tới một hoặc nhiều URL. Tất cả các URL đều bắt đầu bằng tiền tố dịch vụ Internet, chẳng hạn như ftp :, http :, v.v., trong khi URN bắt đầu bằng tiền tố urn:.

Các thuộc tính thuộc về các phần tử cụ thể và chúng không phải là một phần của không gian tên, ngay cả khi phần tử nằm trong một số không gian tên. Tuy nhiên, nếu một tên thuộc tính không có tiền tố, nó không có không gian tên. Thuộc tính không có tiền tố nằm trong không gian tên mặc định. Nếu tên thuộc tính có tiền tố, tên của thuộc tính đó nằm trong vùng tên được chỉ định bởi tiền tố.

Cú pháp:

Cú pháp để bao gồm một thuộc tính trong không gian tên là,

prefix:localname='value'

hoặc

prefix:localname="value"

trong đó,

prefix được sử dụng như một tham chiếu đến không gian tên. prefix không được bắt đầu bằng xmlns hoặc xml.

localname là tên của một thuộc tính.

value đề cập đến giá trị do người dùng xác định cho một thuộc tính.

Trong đoạn mã sau, thuộc tính Type được liên kết với không gian tên sách vì nó đứng trước tiền tố Book.

Đoạn mã:

<Catalog xmlns:Book = "https://v1study.com">
  <Book:Booklist>
    <Book:Title Book:Type = "Fiction">Evening in Paris</Book:Title>
    <Book:Price>$123</Book:Price>
  </Book:Booklist>
</Catalog>

Lưu ý: Các thuộc tính từ một không gian tên cụ thể cũng có thể được thêm vào các phần tử từ một không gian tên khác. Ví dụ sau đây chứng minh khái niệm này.

<Catalog xmlns="https://v1study.vn" xmlns:Author="https://v1study.com">
  <Book Type="Adventure">The Last Samurai</Book>
  <Book Author:Type="Fiction">Hannibal</Book>
  <Book>American Dream</Book>
</Catalog>

Hãy xem xét một tài liệu XML chứa thông tin chi tiết của tất cả các sách trong thư viện. Vì tài liệu này bao gồm rất nhiều đánh dấu trong cùng một không gian tên nên có thể hơi bất tiện khi thêm tiền tố vào mỗi tên phần tử. Hãy xem xét một tình huống khác trong đó một tài liệu XML được hợp nhất với một tài liệu MathML.

Vấn đề này có thể được giải quyết bằng cách thêm một không gian tên mặc định vào một phần tử và cho các phần tử con của nó bằng cách sử dụng thuộc tính xmlns không có tiền tố.

Một vùng tên mặc định được sử dụng bởi một phần tử và các phần tử con của nó nếu phần tử không có tiền tố vùng tên.

Ø   Tài liệu MathML

Ngôn ngữ đánh dấu toán học (MathML) là một ngôn ngữ đánh dấu dựa trên XML để biểu diễn các biểu thức toán học phức tạp. Nó có hai loại, là ngôn ngữ đánh dấu để trình bày bố cục của các biểu thức toán học và là ngôn ngữ đánh dấu để trình bày nội dung toán học của công thức. Ví dụ: biểu thức x + 1 có thể được viết bằng MathML như được minh họa trong đoạn mã sau.

Đoạn mã:

<MRow>
  <Mi>x</Mi>
  <Mo>+</Mo>
  <Mn>1</Mn>
</MRow>

Cú pháp:

Cú pháp của không gian tên mặc định được đưa ra là,

<elementName xmlns = 'URL'>

trong đó,

elementName chỉ định tên của phần tử thuộc cùng một không gian tên.

URL chỉ định vùng tên tham chiếu cho một tài liệu hoặc một trang HTML trên Web.

Đoạn mã sau thể hiện không gian tên mặc định.

Đoạn mã:

<Catalog xmlns="http://www.aptechworldwide.com">
  <BookList>
    <Title type="Thriller">African Safari</Title>
    <Price>$12</Price>
    <ISBN>23345</ISBN>
  </Booklist>
</Catalog>

Không gian tên mặc định sử dụng thuộc tính xmlns với giá trị của URI. Khi không gian tên mặc định này được khai báo, các phần tử con là một phần của không gian tên này không cần tiền tố không gian tên.

2.2.6. Ghi đè không gian tên mặc định

Không gian tên mặc định áp dụng cho phần tử mà nó được định nghĩa và tất cả các con của phần tử đó. Nếu một trong các phần tử con có một không gian tên mặc định khác được xác định trên đó, định nghĩa không gian tên mới này sẽ ghi đè phần tử trước đó và trở thành mặc định cho phần tử đó và tất cả các phần tử con của nó như được minh họa trong đoạn mã sau.

Đoạn mã:

<Catalog xmlns="https://v1study.com">
  <Book>
    <Title type="Fiction">Evening in Paris</Title>
    <Price>$123</Price>
  </Book>
  <Book>
    <Title type="Non-Fiction">Return to Earth</Title>
    <Price xmlns="http://www.aptech.ac.in">$23</Price>
    <Title type="Non-Fiction">Journey to the center of the Moon</Title>
    <Price>$123</Price>
  </Book>
</Catalog>

Lưu ý rằng trong phần tử giá trong phần tử sách thứ hai, một không gian tên khác được cung cấp. Không gian tên này chỉ áp dụng cho phần tử giá và ghi đè không gian tên trong phần tử danh mục.

2.2.7. Các phương pháp hay nhất để sử dụng không gian tên XML

Một số phương pháp hay nhất được sử dụng để khai báo Không gian tên XML như sau:

  • Không gian tên nên được quy hoạch hợp lý.
  • Tên tiền tố hợp lý và nhất quán nên được sử dụng để thuận tiện trong khi tạo tài liệu XML.
  • Không gian tên nên được áp dụng cho từ vựng cá nhân, ngay cả khi chỉ có một.
  • Không gian tên nên được sử dụng để tách biệt hoặc cô lập các phần tử có vẻ giống nhau.
  • Khi thiết kế hai từ vựng có một số yếu tố chung, một không gian tên nên được sử dụng để chứa các mục chung.
  • URL HTTP hoặc HTTPS nên được sử dụng cho các URI.
  • Các URI nên được phối hợp bằng cách đặt tên theo một tên miền cụ thể.
  • URI không gian tên sẽ thay đổi đối với mọi thay đổi cơ bản đối với từ vựng, bao gồm cả việc thêm và xóa các phần tử mới.
  • Nếu có thể, nên sử dụng một tiền tố cho một không gian tên trong tất cả các tài liệu XML trong hệ thống.
  • Tất cả các khai báo không gian tên phải được thực hiện trong thẻ bắt đầu của phần tử tài liệu.
  • Các tên miền như namespaces.com, namespaces.net hoặc namespaces.org nên được sử dụng trong tài liệu XML.

Kiểm tra kiến thức phần 2

1. Dòng mã nào sau đây là khai báo không gian tên đúng?

(A)

<Title:Catalog xmlns:Book="http://www.aptechworldwide.com">

(B)

<CD:Catalog CD:xmlns="http://www.aptechworldwide.com">

(C)

<Car xmlns:Vehicle xmlns=http://www.aptechworldwide.com>

(D)

<CD:xmlns CD:Catalog="http://www.aptechworldwide.com">

2. Trong các câu này, câu nào về thuộc tính và không gian tên là đúng và câu nào sai?

(A)

Các thuộc tính thuộc về một phần tử cụ thể trong một số không gian tên cũng là một phần của cùng một không gian tên.

(B)

Thuộc tính không có tiền tố nằm trong không gian tên mặc định.

(C)

xmlns: localname = "value" là cú pháp chính xác để bao gồm một thuộc tính trong một không gian tên.

(D)

<Sinh viên: Tên tuổi = "12"> Kevin </ Sinh viên: Tên> là chính xác để liên kết tuổi với không gian tên sinh viên.

(E)

Tiền tố được sử dụng trong một thuộc tính được sử dụng như một tham chiếu đến không gian tên.

3. Câu nào sau đây về không gian tên mặc định là đúng và câu nào sai?

(A)

<elementName xmlns='URL'> là cú pháp chính xác để khai báo vùng tên mặc định.

(B)

Phần tử con có cùng vùng tên với phần tử mẹ ngay cả khi nó có định nghĩa vùng tên mới.

(C)

Một vùng tên mặc định được sử dụng bởi một phần tử và các phần tử con của nó nếu phần tử đó có tiền tố vùng tên.

(D)

Không gian tên mặc định áp dụng cho phần tử mà nó được định nghĩa và tất cả các phần tử con của phần tử đó.

(E)

Một phần tử con có một vùng tên mới không thể ghi đè vùng tên được xác định bởi phần tử mẹ.

Tóm tắt Bài học số 2

Trong mô-đun này, Namespace, bạn đã học về:

Ø Không gian tên XML

Không gian tên phân biệt giữa các phần tử và thuộc tính có cùng tên từ các ứng dụng XML khác nhau.  Nó là một tập hợp các tên có thể được sử dụng làm tên phần tử hoặc tên thuộc tính trong tài liệu XML.  Không gian tên XML cung cấp tên duy nhất trên toàn cầu cho một phần tử hoặc thuộc tính để tránh xung đột tên.

Ø Làm việc với cú pháp Không gian tên

Không gian tên được khai báo bởi một thuộc tính xmlns có giá trị là URI của không gian tên.  Nếu một tên thuộc tính không có tiền tố, nó không có không gian tên.  Một vùng tên mặc định được sử dụng bởi một phần tử và các phần tử con của nó nếu phần tử không có tiền tố vùng tên.

» Tiếp: Bài 3.1. Định nghĩa loại tài liệu
« Trước: Bài 1.4. Cú pháp XML
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!