"Thế nào rồi?"

"Tuyệt. Không thể phàn nàn. Hôm nay Bilaabo nói với tôi về JavaScript. Tất nhiên không phải tất cả, nhưng nhiều hơn chỉ một chút. Tất nhiên, tôi vẫn chưa viết bất cứ thứ gì bằng JS, nhưng tôi không nghĩ nó sẽ như vậy." khó."

"Và Ellie nói với tôi về tuần tự hóa JSON. Và bạn đã giải thích khung Jackson và cách thiết lập 'khử tuần tự hóa đa hình' bằng cách sử dụng chú thích."

"Không đời nào! Giờ thì cậu thông minh rồi, Amigo! Một thằng ngu thật!"

"Và sau đó, vài!"

"OK. Bắt đầu làm việc thôi. Hôm nay chúng ta có một chủ đề mới, thú vị: XML. "

XML, tuần tự hóa thành XML - 1

"XML là một tiêu chuẩn để biểu diễn dữ liệu mà con người có thể dễ dàng đọc được—và thậm chí còn dễ dàng hơn bởi các chương trình. Đây là một tệp XML ví dụ:"

XML
<data>
<owner first="Adam" last="Shelton">
<address>London</address>
</owner>
<cat name="Missy" age="15"/>
</data>

"Nền tảng của XML là các thẻ. Một thẻ là một từ trong dấu ngoặc nhọn (dấu lớn hơn và nhỏ hơn). Có các thẻ mở và thẻ đóng. Mỗi thẻ mở có chính xác một thẻ đóng tương ứng. Các thẻ mở có thể có các thuộc tính. "

"Các thẻ có thể được lồng vào bên trong một thẻ, do đó tạo ra một cây phần tử. Thẻ cấp cao nhất được gọi là gốc: nó có các thẻ con, từ đó có các thẻ con của riêng chúng."

"Đây là một số ví dụ:"

Nhãn Sự miêu tả
< dữ liệu > Mở thẻ dữ liệu
</ dữ liệu > Đóng thẻ dữ liệu
tên mèo =" Missy " tuổi =" 15 "> Một thẻ có thuộc tính. Giá trị thuộc tính được bao bọc trong dấu ngoặc kép
<data>
<chủ sở hữu>
<tên mèo = "Tiểu thư"/> </chủ sở hữu >
</data>
Thẻ lồng nhau.
< tên mèo = "Tiểu thư" tuổi = "15"  /> Một thẻ tự đóng.
Các thẻ như vậy không cần thẻ đóng.
Và họ không thể có thẻ con.
<info>
Mọi loại thông tin có thể vào đây
</info>
Một thẻ có thể chứa dữ liệu văn bản
<info>
Mọi loại thông tin
<data xxx="yyy">
</data> <data 2xxx="yyy"/> có thể vào đây </info>



Một thẻ có thể chứa dữ liệu văn bản xen kẽ với các thẻ khác.

"Có vẻ dễ dàng. Có những loại thẻ nào?"

"Bất kỳ loại nào. Không có thẻ dành riêng. XML là ngôn ngữ để mô tả bất kỳ dữ liệu nào. Mọi người đưa ra các thẻ đáp ứng nhu cầu của họ và đồng ý về cách sử dụng chúng."

"Về cơ bản, XML là một cách để ghi dữ liệu dưới dạng cây phần tử mà máy tính có thể hiểu được."

"Tôi nghĩ tôi hiểu rồi. Nhân tiện, tôi có một câu hỏi."

"JSON được sử dụng để gửi dữ liệu từ trình duyệt đến máy chủ, nhưng XML được sử dụng ở đâu?"

"Ở những nơi mà JSON được sử dụng: để lưu trữ và gửi dữ liệu."

"Được, chúng ta tiếp tục."

"Hãy tưởng tượng rằng bạn có một tệp XML được chia sẻ lưu trữ dữ liệu cho một chương trình được viết bởi hai mươi người. Mỗi người trong số họ đưa ra các thẻ của riêng mình và họ nhanh chóng bắt đầu can thiệp lẫn nhau."

"Để đảm bảo rằng các thẻ là duy nhất, tiền tố đã được phát minh. Đây là giao diện của chúng:"

thẻ Sự miêu tả
< động vật :mèo> Thẻ mèo có tiền tố động vật
< động vật :mèo>
</ động vật: mèo>
< sở thú :mèo>
</ sở thú :mèo>
Hai thẻ mèo có tiền tố khác nhau.
< động vật : sở thú mèo  : name ="MX"> Một thẻ mèo với tiền tố động vật . Thuộc tính tên có tiền tố sở thú .

"Các tiền tố còn được gọi là không gian tên. Nếu chúng ta gọi chúng là không gian tên, thì mô tả cuối cùng trong bảng sẽ trở thành 'Thẻ mèo có không gian tên động vật. Thuộc tính tên có không gian tên sở thú.'"

"Nhân tiện, bạn có nhớ rằng trong Java, mỗi lớp có một tên ngắn và một tên dài duy nhất bao gồm tên gói, cũng được chỉ định khi nhập gói không?"

"Chuẩn rồi."

"Chà, các tiền tố cũng có một tên dài duy nhất và nó cũng được chỉ định khi nhập: "

Ví dụ
< dữ liệu  xmlns:soap="http://cxf.apache.org/bindings/soap" >
 < xà phòng :item> 
< xà phòng :info/> 
</ xà phòng :item> 
</ dữ liệu >

"' xml ns :soap' có nghĩa là ' XMLtốc độ của SOAP'"

"Bạn cũng có thể đặt tên duy nhất của các thẻ không có tiền tố: "

Ví dụ
<data xmlns="http://www.springframework.org/schema/beans" 
xmlns: soap ="http://cxf.apache.org/bindings/soap" 
xmlns:task="http://www.springframework .org/schema/task" > 
< xà phòng :item> 
< xà phòng :info/> 
< nhiệm vụ :info/> 
</ xà phòng :item> 
</data>

"'xmlns=…' đặt không gian tên cho tiền tố trống. Nói cách khác, nó đặt không gian tên cho các thẻ không có tiền tố, chẳng hạn như dữ liệu trong ví dụ trên."

"Bạn có thể có bao nhiêu không gian tên trong tài liệu tùy thích, nhưng mỗi không gian tên phải có một tên duy nhất."

"Tôi hiểu rồi. Tại sao những không gian tên này lại có những cái tên độc đáo kỳ lạ như vậy?"

"Chúng thường chỉ ra một URL trỏ đến một tài liệu mô tả không gian tên và/hoặc các thẻ XML của nó."

"Hôm nay anh đã đổ cho tôi rất nhiều thông tin. Còn gì nữa không?"

"Vẫn còn một chút nữa."

"Đầu tiên, XML có một tiêu đề. Đó là một dòng đặc biệt mô tả phiên bản XML và mã hóa tệp. "Nó thường trông như thế này:"

"Nó thường trông như thế này:"

Ví dụ
<?xml  version ="1.0"  encoding ="UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<xà phòng:mục>
<xà phòng:thông tin/>
</soap:item>
</dữ liệu>

"Bạn cũng có thể thêm nhận xét vào XML. Để bắt đầu nhận xét, hãy sử dụng '<!--'. Để kết thúc nhận xét, hãy sử dụng '-->'."

Ví dụ
<?xml version = "1.0" encoding = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- This is also a comment  -->
</data>

"Tôi hiểu cho đến nay."

"Một số ký hiệu (< > " &) có ý nghĩa đặc biệt trong XML, vì vậy chúng không thể được sử dụng ở nơi khác. Chúng ta có thể khắc phục hạn chế này bằng một chuỗi thoát—một tập hợp các ký tự được sử dụng để biểu thị các ký tự/ký hiệu khác. Dưới đây là một số trong số họ:"

Trình tự thoát Biểu tượng mà nó thay thế
& &
" «
< <
> >
' '

"Và đây là một ví dụ về mã nhúng trong XML:"

mã Java Mã Java trong XML
if (a < b)
System.out.println("a is minimum");
<mã>
nếu (a  <  b)
 System.out.println( " a là nhỏ nhất " );
</mã>

"Uh... Trông không được đẹp cho lắm."

"Bạn sẽ nhớ rằng trong Java, một số ký tự cũng được thoát? Ví dụ: "\". Và chuỗi này cũng phải được viết hai lần khi ghi vào Chuỗi? Vì vậy, đây là một sự cố phổ biến."

"ĐƯỢC RỒI."

"Đó là tất cả những gì tôi có cho ngày hôm nay."

"Hoan hô. Cuối cùng tôi cũng có thể nghỉ ngơi."