AWS (1) - Tổng quan về AWS

Chương 1. Tổng quan về AWS

Chương này đề cập tới:

  • Tổng quan về AWS

  • Lợi ích của AWS

  • Ứng dụng của AWS

  • Thiết lập một tài khoản AWS

Ngày nay, hầu hết các giải pháp công nghệ thông tin đều được gán nhãn ‘cloud computing’ (điện toán đám mây) hoặc ngắn gọn là ‘cloud’. Các từ thời thượng kiểu này giúp gia tăng giá trị của giải pháp, và dễ được khách hàng đồng ý triển khai. Tuy nhiên, để tìm hiểu và triển khai được các công nghệ này thì không hề đơn giản. Bởi vậy, để có tính hệ thống, chúng ta sẽ tìm hiểu ý nghĩa của một vài thuật ngữ.

Điện toán đám mây, hay đám mây là một cách nói ẩn dụ về việc cung cấp và sử dụng các tài nguyên thuộc lĩnh vực Công nghệ thông tin. Theo đó, các tài nguyên bị che đi bởi các “đám mây”, đó là các lớp trừu tượng ở giữa, làm cho người dùng không thể nhìn thấy trực tiếp các tài nguyên mà họ sử dụng. Mức độ trừu tượng của đám mây rất đa dạng, từ việc cung cấp máy ảo (MV) đến phần mềm dưới dạng dịch vụ (SaaS) dựa trên các hệ thống phân tán phức tạp. Các tài nguyên luôn ở trạng thái sẵn sàng, để đáp ứng nhu cầu của người dùng với số lượng rất lớn, tuy nhiên, bạn chỉ phải tiền cho những gì bạn sử dụng.

Định nghĩa chính thức của Viện tiêu chuẩn và công nghệ quốc gia Mỹ (NIST):

Điện toán đám mây là:

  • Một mô hình cho phép truy cập và cấu hình các tài nguyên tính toán dùng chung (như hệ thống mạng, máy ảo, hệ thống lưu trữ, các ứng dụng và các dịch vụ) qua hệ thống mạng 

  • Cho phép sử dụng dịch vụ tùy theo nhu cầu, thuận tiện, mọi lúc, mọi nơi

  • Khả năng cung cấp dịch vụ và triển khai nhanh chóng, dễ dàng, ít phải tương tác với nhà cung cấp

Điện toán đám mây được chia thành 3 loại:

  • Public: hệ thống đám mây do một tổ chức quản lý và cho phép cộng đồng sử dụng

  • Private: hệ thống đám mây bao gồm hạ tầng công nghệ thông tin ảo hóa và phân tán cho một tổ chức

  • Hybrid: là hệ thống đám mây kết hợp giữa 2 loại public và private

Amazon Web Service (AWS) là một đám mây kiểu public. Sự kết hợp giữa trung tâm dữ liệu bên trong mỗi tổ chức với hệ thống AWS sẽ tạo ra một đám mây kiểu hybrid.

Điện toán đám mây bao gồm các loại dịch vụ sau:

  • Cơ sở hạ tầng dưới dạng dịch vụ: (IaaS - Infrastructure as a service) cung cấp các tài nguyên hạ tầng như khả năng tính toán, lưu trữ, kết nối mạng, sử dụng các máy ảo như Amazon EC2, Google Compute Engine, Microsoft Azure Virtual Machine.

  • Hệ thống nền tảng dưới dạng dịch vụ: (PaaS - Platform as a service) cung cấp hệ thống nền tảng để triển khai các ứng dụng người dùng lên đám mây, như AWS Elastic Beanstalk, Google App Engine, và Heroku.

  • Phần mềm dưới dạng dịch vụ: (SaaS - Software as a service) kết hợp hạ tầng và phần mềm chạy trên đám mây, bao gồm các ứng dụng như Amazon WorkSpaces, Google Apps for Work, và Microsoft 365.

AWS là nhà cung cấp điện toán đám mây với rất nhiều các loại dịch vụ liên quan đến IaaS, PaaS, SaaS.  

1.1 Amazon Web Services (AWS) là gì?

Amazon Web Services (AWS) là một nền tảng của dịch vụ web, nó cung cấp các giải pháp cho việc tính toán, lưu trữ và kết nối mạng, ở nhiều mức trừu tượng khác nhau. Ví dụ, ở lớp trừu tượng mức thấp (mức vật lý), bạn có thể gắn các ổ đĩa cứng vào một máy ảo, hoặc ở mức trừu tượng cao (mức ứng dụng), bạn có thể lưu trữ và lấy dữ liệu thông qua một REST API (sử dụng API theo chuẩn REST). Sử dụng các dịch vụ do AWS cung cấp để thiết lập website, chạy các ứng dụng của doanh nghiệp, và khai phá khối dữ liệu khổng lồ. Con người và các hệ máy có thể truy cập dịch vụ web thông qua giao diện đồ họa (UI), hoặc qua Internet bằng các giao thức web thông dụng (như HTTP). Các dịch vụ nổi bật mà AWS đã cung cấp gồm EC2 để tạo máy ảo, S3 để lưu trữ dữ liệu. Các dịch vụ của AWS có thể làm việc hiệu quả với nhau: bạn có thể sử dụng chúng để nhân bản hạ tầng mạng cục bộ đang có hoặc thiết kế từ đầu một hệ thống mới. Bạn trả tiền cho các dịch vụ theo hình thức: dùng bao nhiêu trả tiền bấy nhiêu.

Giả sử bạn là khách hàng của AWS, bạn có thể chọn các trung tâm dữ liệu (data center) của AWS trên phạm vi toàn cầu. Ví dụ, bạn tạo ra một máy ảo ở Nhật như thế nào, thì cũng có thể làm giống vậy để tạo ra máy ảo tại Ireland. Nghĩa là bạn sẽ được phục vụ ở phạm vi toàn cầu.

Bản đồ ở hình 1.1 là các trung tâm dữ liệu của AWS. Mỗi trung tâm dữ liệu sẽ có chính sách truy cập khác nhau; một số trung tâm chỉ cho các tổ chức của chính phủ Mỹ truy cập; một số trung tâm ở Trung Quốc được áp dụng các chính sách riêng; Đã có thêm nhiều trung tâm dữ liệu, vừa được công bố bắt đầu hoạt động ở Canada, Tây Ban Nha, Thụy Sĩ, Israel, Các Tiểu Vương Quốc Arập Thống Nhất, Úc và New Zealand.

Như vậy, chúng ta đã hiểu rõ các thuật ngữ quan trọng, câu hỏi đặt ra là: Bạn có thể làm gì với AWS?

1.2 Bạn có thể làm gì với AWS

Bạn có thể chạy tất cả các loại ứng dụng trên AWS, bằng cách sử dụng một hoặc kết hợp nhiều dịch vụ với nhau. Các ví dụ trong phần này sẽ cho bạn biết là bạn có thể làm gì với AWS.

1.2.1 Thiết lập một trang thương mại điện tử

John là Giám đốc thông tin (CIO: Chief Information Officer) của một công ty thương mại điện tử tầm trung. Anh ấy muốn xây dựng một trang thương mại điện tử chạy nhanh và tin cậy. Ban đầu, anh ấy đã quyết định đặt trang thương mại điện tử trên máy server ở trong công ty, tuy nhiên, ba năm trước, anh ấy đã thuê các máy chủ của một Trung tâm dữ liệu. Hệ thống gồm: một máy web server để xử lý các yêu cầu của khách hàng, một máy máy lưu trữ thông tin hàng hóa và đơn hàng. John đang đánh giá các ưu điểm của AWS mà công ty của anh ấy có thể tận dụng được, bằng cách chạy đồng thời 2 hệ thống, một ở trong công ty và một ở trên AWS. Xem hình minh họa 1.2.


John không chỉ muốn nâng cấp và di chuyển hạ tầng mạng hiện tại lên AWS mà còn muốn tận dụng hết những ưu điểm mà AWS đang cung cấp. Các dịch vụ đi kèm của AWS còn giúp John có thể hoàn thiện hệ thống hiện thời, cụ thể gồm:

  • Trang thương mại điện tử bao gồm các nội dung động (như tên, giá các sản phẩm) và các nội dung tĩnh (như logo công ty). Việc chia nội dung web thành 2 loại như vậy giúp giảm tải cho web server và nâng cao hiệu suất của hệ thống bằng cách chuyển các nội dung web tĩnh lên các CDN (content delivery network - mạng phân phối nội dung)

  • Việc chuyển sang sử dụng các dịch vụ bảo trì trọn gói (maintenance-free services) bao gồm cơ sở dữ liệu, thư mục lưu trữ, và hệ thống DNS đã giúp John có thời gian để quản lý các phần khác của hệ thống, giảm chi phí vận hành và cải tiến chất lượng 

  • Có thể cài đặt nền tảng để chạy trang thương mại điện tử trên nhiều máy ảo. Khi sử dụng AWS, John có thể chạy cùng lượng tài nguyên mà anh ấy đang sử dụng trên máy nội bộ, nhưng chia thành nhiều máy ảo nhỏ hơn mà không mất thêm chi phí. Nếu một trong các máy ảo bị hỏng, hệ thống cân bằng tải (load balancer) sẽ gửi yêu cầu của khách hàng tới các máy ảo còn lại. Thiết lập hệ thống kiểu này giúp nâng cao tính sẵn sàng của trang thương mại điện tử.  

Xem hình 1.3 để biết John đã nâng cấp trang thương mại điện tử với AWS như thế nào.




John cảm thấy hài lòng khi chạy trang thương mại điện tử của mình trên AWS. Với việc di chuyển hệ thống hạ tầng của công ty lên đám mây, anh ấy có thể nâng cao độ tin cậy và hiệu suất hoạt động của trang thương mại điện tử.

1.2.2 Chạy ứng dụng Java EE trong mạng nội bộ

Maureen là kỹ sư hệ thống cao cấp trong một tập đoàn đa quốc gia. Trong vài tháng tới, khi hợp đồng với trung tâm dữ liệu kết thúc, cô ấy muốn chuyển một phần các ứng dụng điều hành công ty lên AWS, nhằm giảm chi phí và tăng tính linh hoạt trong vận hành. Cô ấy muốn chạy các ứng dụng doanh nghiệp (như ứng dụng Java EE) gồm một máy server chạy ứng dụng và một máy cơ sở dữ liệu SQL trên AWS. Để làm như vậy, cô ấy cần thiết lập một mạng ảo trên đám mây và kết nối nó với mạng của tập đoàn thông qua kết nối Mạng riêng ảo (VPN: virtual private network). Cô ấy cài các server ứng dụng trên các máy ảo để chạy ứng dụng Java EE. Maureen cũng muốn lưu trữ dữ liệu trong dịch vụ cơ sở dữ liệu SQL (như Oracle Database Enterprise Edition hoặc Microsoft SQL Server EE).

Để bảo mật, Maureen sử dụng kĩ thuật chia mạng con (subnet) để phân tách hệ thống thành các mạng con với các mức bảo mật khác nhau. Bằng việc sử dụng Danh sách kiểm soát truy cập (ACL: access control list), cô ấy có thể kiểm soát lưu lượng vào/ra của mỗi mạng con. Ví dụ, chỉ có các máy trong mạng con “JEE server” mới được phép truy cập cơ sở dữ liệu, điều này giúp bảo vệ các dữ liệu quan trọng. Maureen kiểm soát lưu lượng truy cập Internet bằng kỹ thuật NAT và các luật của tường lửa. 

Hình 1.4 minh họa kiến trúc mạng của Maureen.

Maureen đã thực hiện được việc kết nối giữa trung tâm dữ liệu nội bộ với mạng riêng đang chạy trên AWS để khách hàng có thể truy cập JEE server. Bước đầu, Maureen sử dụng VPN để kết nối trung tâm dữ liệu nội bộ với AWS, tuy nhiên, cô ấy cũng đã tính tới việc thiết lập một đường kết nối mạng chuyên dụng để giảm chi phí và tăng thông lượng mạng trong tương lai.

Dự án này là một thành công lớn đối với Maureen. Cô ấy đã rút ngắn thời gian để cài đặt hệ thống ứng dụng của doanh nghiệp từ vài tháng thành vài giờ, vì AWS có thể quản lý các máy ảo, cơ sở dữ liệu và thậm chí cả cơ sở hạ tầng mạng theo yêu cầu trong vòng vài phút. Dự án của Maureen cũng được hưởng lợi vì chi phí cho cơ sở hạ tầng trên AWS thấp hơn so với việc sử dụng hệ thống nội bộ tự xây dựng.

-----

Nhóm đóng góp cho bài viết: Lê Gia Công - Nguyễn Bảo Lâm - Nguyễn Thành Long - Nguyễn Lê Thanh Tỉnh - Trần Thị Ngọc Ánh - Đặng Phương Tây - Phạm Thanh Sơn - Đinh Xuân Việt - Đoàn Cao Nhật Hạ - Lâm Ngọc Yến - Vũ Quang Thanh - Nguyễn Vũ Thịnh

-----

Cập nhật: 29/12/2023


Dịch sách

 Mục đích

- Giúp các bạn tự tin hơn (không biết gì về tiếng Anh/chuyên môn cũng cứ tham gia)

- Học tiếng Anh chuyên ngành

- Thực hành, lập trình, cấu hình hệ thống trong quá trình dịch, để học chuyên môn

Liên hệ để tham gia

- Vào nhóm này để nhận các thông báo (nhóm Langbiang): https://www.facebook.com/groups/578115795970217

- Form đăng ký: https://forms.gle/BbXk4fsL629TD9oe6

- Liên hệ với người phụ trách: https://www.facebook.com/legia.cong/

Các cuốn sách đang dịch:

1. Amazon Web Services In Action

2. C++ How To Program

3. C# & OOP

4. JavaScript

5. React

6. Linux OS

-----  Ở đâu có ý chí, ở đó có con đường -----

Khóa học TOEIC (450+, 650+)

 

Khóa học: TOEIC (450+, 650+)

Mục tiêu khóa học

  • Củng cố từ vựng, ngữ pháp & kiến thức quan trọng theo từng chủ điểm

  • Nắm rõ cấu trúc đề thi TOEIC theo bộ đề ETS của tổ chức IIG.

  • Cung cấp các MẸO, chiến lược làm bài thi nhanh & hiệu quả

  • Học theo phương pháp chủ động, trao đổi, trình bày ý kiến, giúp các bạn nắm vững kiến thức ngay tại lớp

  • Lấy lại nền tảng tiếng Anh, giúp bạn có thể học lên các cấp độ và kỹ năng cao hơn

Đối tượng học

  • Học sinh, sinh viên, người đi làm cần lấy lại nền tảng về từ vựng và ngữ pháp hoặc cần thi chứng chỉ TOEIC để ra trường, xin việc

  • Nội dung bài học được dạy bài bản, đầy đủ các kiến thức và kĩ năng nên phù hợp với mọi trình độ đầu vào

Thời gian & học phí

  • Thời gian học: 04 tháng

  • Địa điểm học: 15 Thông Thiên Học, Đà Lạt

  • Lịch học: 5h30 > 8h30 tối Thứ 2 và Thứ 5 hàng tuần

  • Học phí: 2.000.000VND/khóa

  • Khai giảng: 18/12/2023

Nội dung và lộ trình học

Tháng 1 - 1.5: Lấy lại nền tảng và ôn tập tổng hợp

  • Ôn lại các kiến thức tiếng Anh cơ bản

  • Các thì, câu điều kiện, mệnh đề quan hệ, và các chủ điểm ngữ pháp khác

Tháng 1.5 - 3: Luyện các kỹ năng thi TOEIC 

  • Phân tích và dự đoán các câu hỏi trong phần Listening

  • Rèn luyện kĩ năng và MẸO làm phần Listening

  • Luyện kỹ năng thi: Reading, Grammar, Vocabulary

  • Kỹ năng phân bổ thời gian làm bài

  • Chuẩn bị tâm lý trước và trong khi thi

  • Kỹ năng đăng ký và tham dự kì thi

  • Chiến lược làm bài để có điểm cao

Tháng 4: Luyện đề 

  • Giải các đề, rút kinh nghiệm và nâng cao kỹ năng làm bài

  • Bổ sung những mặt còn yếu về từ vựng, ngữ pháp, cách phân bố thời gian, sức lực, tinh thần trong quá trình làm bài.

Liên hệ và đăng ký (ms. Nhạn)

https://bit.ly/3RBLa41 - 0985740348  hoặc  Đăng ký khóa học  

----- TRÌ HOÃN LÀ RÀO CẢN LỚN NHẤT ĐỂ ĐẠT ĐƯỢC MỤC TIÊU ! -----

Web services (6) - XML, JSON, Ajax

Bài trước: Web services (5) - Trải nghiệm làm một web services (3)

-----

1.1       XML là gì?

Đọc thêm: https://vi.wikipedia.org/wiki/XMLhttps://en.wikipedia.org/wiki/XML

Theo wiki:

XML (viết tắt của từ tiếng Anh eXtensible  Markup Language) được gọi là Ngôn ngữ đánh dấu mở rộng.

XML là ngôn ngữ đánh dấu với mục đích chung, do W3C đề nghị, để tạo ra các ngôn ngữ đánh dấu khác. Đây là tập con đơn giản của SGML, có khả năng mô tả nhiều loại dữ liệu khác nhau. Mục đích chính của XML là đơn giản hóa việc chia sẻ dữ liệu giữa các hệ thống khác nhau, đặc biệt là các hệ thống được kết nối với Internet.

Các ngôn ngữ dựa trên XML (ví dụ: RDF, RSS, MathML, XHTML, SVG, GML, và cXML) được định nghĩa theo cách thông thường, cho phép các chương trình sửa đổi và kiểm tra hợp lệ bằng các ngôn ngữ này mà không cần có hiểu biết trước về hình thức của chúng.

XML cung cấp một phương tiện dùng văn bản (text) để mô tả thông tin và áp dụng một cấu trúc kiểu cây cho thông tin đó.

Một điều cần lưu ý là: trong quá trình thao tác và truyền dữ liệu bằng XML, tỉ lệ sai sót và mất dữ liệu khoảng 5%-7%. Tuy con số này không cao, nhưng cũng đáng để những người sử dụng phải có những cân nhắc kỹ càng hơn.

1.1.1       Cú pháp của tài liệu XML

Một tập tin chứa tài liệu XML thường có phần mở rộng là .xml.

Một tài liệu XML thường bắt đầu bằng dòng chỉ thị xử lý (processing instruction). Chỉ thị được đặt trong cặp dấu <?  ?>. Nó cho biết phiên bản đặc tả XML được sử dụng (version=“1.0”), bản mã hóa văn bản được sử dụng (encoding=“utf-8”), và tài liệu XML có cần đến một tài liệu khác không (standalone=“yes”, nghĩa là không cần đến tài liệu khác).

Dòng chú thích được đặt trong cặp dấu <!-- -->.

Ví dụ:

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

<!-- thong tin sinh vien -->

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan>7</Toan>

        <LapTrinh>8</LapTrinh>

    </Diem>

</SinhVien>

Thẻ XML

Thẻ (tag) là thành phần để tạo ra các phần tử XML, chúng xác định phạm vi một phần tử XML. Ngoài ra thẻ cũng có thể được sử dụng để chèn các chú thích (comment), khai báo các thiết lập và tạo ra các chỉ thị lệnh đặc biệt.

Thẻ gồm hai loại: thẻ mở (start tag) và thẻ đóng (end tag).

Thẻ mở được sử dụng để đánh dấu bắt đầu một phần tử (phần tử không rỗng). Ví dụ:

<SinhVien>

Thẻ đóng được sử dụng để đánh dấu kết thúc một phần tử (phần tử không rỗng). Ví dụ:

</SinhVien>

Phần tử XML

Phần tử XML (XML element) được định nghĩa là các khối để tạo ra một tài liệu XML. Mỗi khối được bắt đầu bằng <thẻ mở>, tiếp theo là phần nội dung, và cuối cùng là thẻ đóng.

Ví dụ:

<Ten>Teo</Ten>

Phần tử có thể chứa văn bản (text), thuộc tính, phần tử khác, đối tượng media.

Cú pháp của một phần tử:

<ten-phan-tu thuoc-tinh1=“gia-tri1” thuoc-tinh2=“gia-tri2”>

nội dung

</ten-phan-tu>

Ví dụ:

<Sach the-loai=“VanHoc”>

            <TacGia>NVTeo</TacGia>

</Sach>

Phần tử không có phần nội dung được gọi là phần tử rỗng (empty element). Cú pháp của phần tử rỗng:

<element></element>

hoặc,

<element />

Thuộc tính

Thuộc tính là thông tin được khai báo trong thẻ mở, bao gồm các thông tin bổ sung cho mỗi phần tử XML.

Cú pháp viết thuộc tính:

<element-name attribute1 attribute2 >

....content..

< /element-name>

Cú pháp của attribute:

name = “value”

Tên thuộc tính là duy nhất, giá trị (value) được bao bằng dấu nháy đơn (‘’) hoặc nháy kép (“”).

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan HeSo="1">7</Toan>

        <LapTrinh HeSo="2">8</LapTrinh>

    </Diem>

</SinhVien>

Một số quy tắc về cú pháp

Một tài liệu XML luôn phải có một phần tử gốc (root element) duy nhất, nó chứa tất cả các phần tử còn lại. Phần tử gốc thường cho biết nội dung chính của tài liệu XML. Ví dụ nếu tài liệu XML chứa danh sách của một lớp thì phần tử gốc có thể đặt tên là DanhSachSinhVien.

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

<!-- thong tin sinh vien -->

<DanhSachSinhVien>

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan>7</Toan>

        <LapTrinh>8</LapTrinh>

    </Diem>

</SinhVien>

</DanhSachSinhVien>

Tên của thẻ mở và thẻ đóng phải đồng nhất. Ví dụ tài liệu XML sau sẽ bị lỗi,

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan>7</Toan>

        <LapTrinh>8</LapTrinh>

    </Diem>

</Sinhvien>

Mỗi thẻ mở luôn có thẻ đóng đi kèm. Ví dụ tài liệu XML sau bị lỗi do thẻ <TiengAnh> không có thẻ đóng.

 <SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan>7</Toan>

        <TiengAnh>9

        <LapTrinh>8</LapTrinh>

    </Diem>

</SinhVien>

Phần tử con phải nằm trọn trong phần tử cha của nó. Ví dụ tài liệu XML sau bị lỗi do thẻ </Toan> nằm ngoài thẻ </Diem>.

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan>7

        <LapTrinh>8</LapTrinh>

    </Diem>

        </Toan>

</SinhVien>

Giá trị của thuộc tính được đặt trong cặp dấu nháy đơn (‘’) hoặc nháy kép (“”).Ví dụ tài liệu XML sau bị lỗi.

<SinhVien>

    <Ten>Teo</Ten>

    <Tuoi>20</Tuoi>

    <Diem>

        <Toan HeSo=1>7</Toan>

        <LapTrinh HeSo="2'>8</LapTrinh>

    </Diem>

</SinhVien>

Lab 1. Thực hiện kiểm tra một tài liệu XML (online) xem đã chuẩn chưa (validate). Vào trang web https://www.xmlvalidation.com/, nhập các đoạn mã XML bị lỗi ở các phần trên để kiểm tra lại.

Lab 2. Tạo bằng tay một tài liệu XML để chứa danh sách sinh viên của lớp. Tham khảo ví dụ sau:

[DanhSachSV.xml]

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

<!-- thong tin sinh vien -->

<DanhSachSinhVien>

    <SinhVien>

        <Ten>Teo</Ten>

        <Tuoi>20</Tuoi>

        <Diem>

            <Toan HeSo="1">7</Toan>

            <LapTrinh HeSo="2">8</LapTrinh>

        </Diem>

    </SinhVien>

        <SinhVien>

        <Ten>Ti</Ten>

        <Tuoi>21</Tuoi>

        <Diem>

            <Toan HeSo="1">5</Toan>

            <LapTrinh HeSo="2">5</LapTrinh>

        </Diem>

    </SinhVien>

        <SinhVien>

        <Ten>Mui</Ten>

        <Tuoi>19</Tuoi>

        <Diem>

            <Toan HeSo="1">9</Toan>

            <LapTrinh HeSo="2">9</LapTrinh>

        </Diem>

    </SinhVien>

</DanhSachSinhVien>

1.1.2       Cấu trúc cây trong XML

XML sử dụng cấu trúc cây để tổ chức dữ liệu. Một tài liệu XML luôn bắt đầu bằng một phần tử gốc (root element) hay nút gốc, phần tử gốc này sẽ chứa một hoặc nhiều phần tử con (hay nút con). Một tài liệu XML không được có hai nút gốc.

Mỗi nút con lại có thể chứa một hoặc nhiều các nút con khác.

Nút con cấp cuối cùng (nút lá) sẽ chứa dữ liệu.

Xem hình ví dụ:


1.1.3       Một số chủ đề tìm hiểu thêm

– DTD

– Schema

– Tree structure

– DOM

– Namespace

– Database

1.1.4       Một số câu hỏi ôn tập

1.      XML là gì?

2.      Cú pháp của tài liệu XML

3.      Cấu trúc cây trong XML

4.      JSON

5.      JSON và AJAX

Lab 3. Đọc dữ liệu từ database để tạo ra một tài liệu XML bằng ngôn ngữ lập trình. Tham khảo clip sau:

https://www.youtube.com/watch?v=F40a7nsPhuQ

Một vài gợi ý:

[dbconnection.php]

<?php

    $con=mysqli_connect("localhost", "root","")

    or

    die("Connection Failed");

    // echo "<pre>";

    // print_r($con);

    // echo "</pre>";

    $db=mysqli_select_db ($con, "test");

?>

Thư viện mysql dùng cho PHP4, 5. Nếu dùng PHP5, 7 thì sử dụng thư viện mysqli. Với mysqli, có thể viết theo kiểu gọi thủ tục hoặc kiểu hướng đối tượng. Đoạn mã ở trên viết theo kiểu gọi thủ tục.

Học thêm về kiểu viết:

$con=mysqli_connect("localhost", "root","")

    or

    die("Connection Failed");

Nó là áp dụng tính chất xử lý của biểu thức or hay || trong PHP. Cụ thể:

$ketqua = bieuthuc1 or bieuthuc2;

bieuthuc1 sẽ được thực hiện trước, nếu kết quả là true thì kết thúc việc thực hiện vế phải, gán giá trị true vào biến $ketqua, không thực hiện bieuthuc2. Nếu bieuthuc1 trả về kết quả false thì tiếp tục thực hiện biểu thức 2 (ở ví dụ trên nếu hàm mysqli_connect trả về false, thì thực hiện tiếp hàm die() và kết thúc chương trình).

Viết dbconnection.php theo kiểu hướng đối tượng:

[dbconnection.php]

<?php    

$conn = new mysqli("localhost", "root", "");

if($conn->connect_error){

        die("Connection failed: " . $conn->connect_error);

    }

    // echo "<pre>";

    // print_r($conn);

    // echo "</pre>";

    $conn->select_db("test");

?>

Hàm DOMDocument() để tạo một đối tượng XML, đối tượng này giúp tham chiếu và thao tác với các thành phần trong tài liệu XML.

[index.php]

<?php

    include 'dbconnection.php';

    // createElement and appendChild()

    $result = mysqli_query($con, 'select * from books');

    // echo "<pre>";

    // print_r($result);

    // echo "</pre>";

    $xml = new DOMDocument("1.0");

    $xml -> formatOutput = true;

    $books = $xml -> createElement("books");

    $xml -> appendChild($books);

    while($row = mysqli_fetch_array($result)){

        $book = $xml -> createElement("book");

        $books -> appendChild($book);

        $name = $xml -> createElement("name", $row['name']);

        $book -> appendChild($name);

        $price = $xml -> createElement("price", $row['price']);

        $book -> appendChild($price);

    }

    // xuất tài liệu XML ra trình duyệt để kiểm tra, dùng Developer tool để xem

    echo "<xmp>" . $xml -> saveXML() . "</xmp>";

    // xuất ra tập tin kết quả

    $xml -> save("reports.xml");

?>

Lab 4. Đọc dữ liệu gửi về của sensor dạng XML, viết chương trình chuyển dữ liệu dạng XML vào database. Tham khảo clip sau:

https://www.youtube.com/watch?v=0EhtyNsLOVY

xml:lang thuộc tính xác định ngôn ngữ chính được sử dụng trong phần nội dung (conten) và giá trị của các thuộc tính trong tài liệu XML.

[data.xml]

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

<xmlResponse xml:lang="eng">

<Monitor>

<sensorList>

<sensor>

    <name>Sensor 1</name>

    <value>NOK</value>

    <status>0</status>

</sensor>

<sensor>

    <name>Sensor 2</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 3</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 4</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 5</name>

    <value>NOK</value>

    <status>0</status>

</sensor>

<sensor>

    <name>Sensor 6</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 7</name>

    <value>NOK</value>

    <status>0</status>

</sensor>

<sensor>

    <name>Sensor 8</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 9</name>

    <value>OK</value>

    <status>1</status>

</sensor>

<sensor>

    <name>Sensor 10</name>

    <value>NOK</value>

    <status>0</status>

</sensor>

</sensorList>

</Monitor>

</xmlResponse>

[index.php]

<html>

    <head></head>

    <body>

        <?php

            include_once("processSensors.php")

        ?>

    </body>

</html>

[processSensor.php]

<?php

    include_once("dbLib.inc");

    $xml = simplexml_load_file("data.xml");

        if($xml){

            foreach($xml->Monitor->sensorList->sensor as $sensor){

                echo "<p>".$sensor->name."</p>";

                echo "<p>".$sensor->value."</p>";

                echo "<p>".$sensor->status."</p>";

                recordSensor($sensor->name, $sensor->value, $sensor->status);

            }

        }

?>

[dbLib.inc]

<?php

$db_msg = "";

function connectDatabase(){

    $username = "root";

    $password = "";

 

    try{

        $db = new PDO("mysql:dbname=sensors;host=localhost;port=3306",$username,$password);

    }

    catch(PDOException $e){

        $db = -1;

        $db_msg = "Khong ket noi duoc co so du lieu".$e->getMessage();

    }

    return $db;

}

 

function recordSensor($name, $value, $status){

    $db = connectDatabase();

    if($db){

        $sql = "INSERT  INTO sensorsInfo(SensorName, SensorValue, SensorStatus) VALUES (\"$name\", \"$value\", $status)";

        try{

            $r = $db->query($sql);

        }catch(PDOException $e){

            echo "Loi trong qua trinh gi du lieu" . $e->getMessage();

        }

    }else {

        echo $db_msg;

    }

}

?>

[database]



1.1.5       XML schema

Schema nghĩa là lược đồ.

Theo từ điển Longman thì schema: a drawing or description of the main parts of something.

Schema là một tài liệu được viết dưới dạng XML, được sử dụng để mô tả cấu trúc của một tài liệu XML.

Trong XML, schema được sử dụng để:

– Định nghĩa cấu trúc các thành phần có trong XML

– Định nghĩa các thuộc tính có trong schema

– Định nghĩa các thành phần con và thứ tự xuất hiện của chúng trong thành phần cha

– Định nghĩa một thành phần là rỗng hay có chứa văn bản (text)

– Định nghĩa kiểu dữ liệu cho các thành phần và thuộc tính

– Định nghĩa giá trị mặc định cho thuộc tính

Schema được phát triển từ nền tảng DTDs, với các ưu điểm:

– Schema viết theo định dạng như XML, nên dễ sử dụng

– Schema cho phép người dùng tự định nghĩa kiểu dữ liệu riêng từ các kiểu dữ liệu chuẩn

– Có hỗ trợ namespace

– Dễ dàng kiểm tra tính đúng của dữ liệu, dễ khai báo định dạng và phạm vi của dữ liệu

Xem clip sau:

https://www.youtube.com/watch?v=1BjmZHRHDv0

 

 

Học thêm từ loạt bài giảng của tác giả Hải Lân:

https://www.youtube.com/watch?v=jA_PYaf239M

</////3

1.2       JSON và AJAX

Tổng quan về JSON

https://legiacong.blogspot.com/2020/10/json-1-lam-quen-voi-json.html

JSON và AJAX

Lab 1. Thực hiện cấu hình dữ liệu JSON phía server, viết chương trình sử dụng AJAX để lấy dữ liệu từ server về client. Tham khảo tài liệu sau:

https://legiacong.blogspot.com/2020/11/json-2-json-va-ajax.html

-----
Cập nhật: 27/11/2023