xmllanguage

155
11/7/2014 1 07.11.2014 1 Ngôn ngữ XML Phạm Thị Thu Trang Đại học Hoa Sen Khoa Khoa Học-Công Nghệ Bộ môn Toán-Tin học Email: [email protected] 07.11.2014 2 Phần I Giới thiệu 07.11.2014 3 Nội dung XML là gì? Tại sao XML? Vài nét về XML và giá trị tỷ lệ XML đến từ đâu? XML ngày hôm nay được dùng ở đâu? Làm gì với kiểu tư liệu XML? Hiểu khái niệm và những nét cơ bản của XML Vận dụng một vài triển vọng trên như thế nào để XML được sử dụng trong thực tế

Upload: trung-lee

Post on 22-Dec-2015

3 views

Category:

Documents


2 download

DESCRIPTION

Giáo trình XML tiếng việt

TRANSCRIPT

11/7/2014

1

07.11.2014 1

Ngôn ngữ XML

Phạm Thị Thu TrangĐại học Hoa Sen

Khoa Khoa Học-Công NghệBộ môn Toán-Tin học

Email: [email protected]

07.11.2014 2

Phần I

Giới thiệu

07.11.2014 3

Nội dung

XML là gì?

Tại sao XML? Vài nét về XML và giá trị tỷ lệ

XML đến từ đâu?

XML ngày hôm nay được dùng ở đâu?

Làm gì với kiểu tư liệu XML?

Hiểu khái niệm và những nét cơ bản của XML

Vận dụng một vài triển vọng trên như thế nào để XML được sử dụng trong thực tế

11/7/2014

2

07.11.2014 4

XML là gì?

eXtensible Makup Language (ngôn ngữ tăng cường)

Là Meta-Markup Language

Không chỉ là một ngôn ngữ tăng cường

07.11.2014 5

Vấn đề dữ liệu

Chủ yếu: “cung cấp“. Trình bày một dữ liệu “ứng dụng“ như thế nào?:

Hiệu suất (tốc độ/thời gian)

Liên tục (tồn tại ngắn/dài)

Có khả năng thay đổi

Bố cục (mã hóa/đồng nhất)

07.11.2014 6

Vấn đề dữ liệu (tt)

Mở ra sự quản lý thông tin

Diễn giải

Trình bày

Tóan tử nối

Khả năng trao đổi

Sự thẩm vấn

11/7/2014

3

07.11.2014 7

Markup Language

Sử dụng dữ liệu tăng cường

Phương pháp luận cho việc mã hóa dữ liệu với thông tin

Ví dụ

Đánh dấu màu vàng lên một chuỗi trong văn bản như một sự nhấn mạnh

07.11.2014 8

Markup Language

Hai khía cạnh quan trọng: Một chuẩn cho “valid-markup“

HTML-tags

Một chuẩn cho “what markup means“ HTML-tags “communicate“ layout và dạng

thông tin

Ngôn ngữ tăng cường đặc trưng định nghĩa một tập hợp của thẻ mà mỗi trong số đó có một vài ý nghĩa kết hợp

07.11.2014 9

Ví dụ việc sử dụng ngôn ngữ tăng cường

Tập tin văn bản

Dữ liệu trên network

Cơ sở dữ liệu

Nội dung multi-media

HTML

11/7/2014

4

07.11.2014 10

HTML

Là ngôn ngữ tăng cường phổ biến

Định nghĩa tập hợp của thẻ

Thiết kế cho sự hiện thị của dữ liệu

Tư liệu HTML được thực thi bởi quá trình ứng dụng HTML (Browser)

07.11.2014 11

Thế mạnh của HTML

Dễ dàng đối với thực thi và tác giả Số lựơng thẻ còn ít

Mối liên hệ đơn giản giữa thẻ ít

Kiểm tra cú pháp chưa phức tạp

Số lựơng kiểu mẫu giới hạn trong khả năng

Sự hiển thị còn nhỏ và đơn giản

Thế mạnh của HTML là sự dể dàng trong việc sử dụng

07.11.2014 12

Điểm yếu của HTML

Tập hợp của thẻ cố định Người sử dụng không mở rộng

Phụ thuộc vào quá trình định nghĩa “tăng cường“

Phụ thuộc vào bên bán Những thẻ độc quyền bên bán

Thực thi không đồng bộ Netscape browser với IE

Ngữ nghĩa tái định nghĩa cho mỗi thẻ

Cấu trúc dữ liệu tái định nghĩa

11/7/2014

5

07.11.2014 13

Điểm yếu của HTML

Không có hợp lệ theo nghi thức

Không có hỗ trợ cho tìm kiếm theo ngữ nghĩa

Dựa trên sự xuất hiện đơn độc không trên nội dung

Kiểu mẫu quá đơn giản Kiểm tra giới hạn

Sẽ không làm được với tư liệu phức hợp

Hỗ trợ nghèo nàn cho việc in và những media khác

07.11.2014 14

HTML không phù hợp cho việc xử lý

Dữ liệu lớn và phức hợp

Dữ liệu mà phải được dùng trong phương cách khác nhau

Dữ liệu với chu kỳ sống dài

Dữ liệu tham gia điều khiển những scripts và Java applet

07.11.2014 15

XML được sinh ra

Mở đầu HTML thì không làm việc phổ biến cho

những trừong hợp chung

Ứng dụng Web sẽ cần một phương thức của dữ liệu mã hóa mà có thể điều khiển quá trình phân chia phức hợp theo mọi cách

Không có XML,HTML sẽ được thay thế bởi những dạng độc quyền và nhị phân nhiều hơn

11/7/2014

6

07.11.2014 16

Mục đích thiết kế XML

XML sẽ phải sử dụng nhiều theo chiều hướng trên Internet

XML sẽ phải hổ trợ nhiều cho những ứng dụng

XML phải tương thích đầy đủ với SGML

Phải thât sự dể dàng để viết những chương trình mà thực thi tư liệu XML

07.11.2014 17

Mục đích thiết kế XML

Số lượng những dạng tùy chọn của XML sẽ được sẽ được giữ ít nhất tuyệt đối, zero là một cách lý tưởng

Tư liệu XML thì nên hợp lý và rỏ ràng dể đọc

Thiết kế XML được chuẩn bị một cách nhanh chóng

07.11.2014 18

Mục đích thiết kế XML

Thiết kế của XML nên nghi thức và xúc tích

Tư liệu nên dễ tạo

Sự ngắn gọn trong XML tăng cường là sự quan trọng nhỏ nhất

11/7/2014

7

07.11.2014 19

Những nét chính của XML

Khả năng mở rộng

Media và sự trình bày độc lập

Sự tách biệt của nội dung từ sự trình bày

Cấu trúc

Hợp lệ

07.11.2014 20

Khả năng mở rộng

Nhiều lãnh vực đặc biệt trong ngôn ngữ tăng cường

Trao đổi dữ liệu trong lĩnh vực công nghệ đặc biệt

Trao đổi dữ liệu qua những lãnh vực khác nhau

Sức khỏe và bảo hiểm

Hóa học và dược

07.11.2014 21

Khả năng mở rộng

XML là ngôn ngữ tăng cường

Định nghĩa ngôn ngữ tăng cường riêng cho lãnh vực vấn đề riêng

Con số chính xác của thẻ có thể được định nghĩa

Cần cho lãnh vực tiêu chuẩn đặc biệt

XSLT

11/7/2014

8

07.11.2014 22

Khả năng mở rộng

Thẻ có thể nhiều hơn dạng sẵn có

Thẻ có thể là bất cứ cái gì Trình bày ngữ nghĩa dữ liệu

Quy tắc thương mại

ebXML

Mối quan hệ dữ liệu

EJB 2.0 Container Managed Persistence

Hình thức

XSL

Bất cứ cái gì chúng ta muốn

07.11.2014 23

Media (trình bày) độc lập

Sự tách biệt rỏ ràng giữa nội dung và trình bày

Nội dung của dữ liệu

Dữ liệu là cái gì

Được trình bày bởi tư liệu XML

Trình bày của dữ liệu

Dữ liệu trong như cái gì

Có thể chỉ ra bởi stylesheet

07.11.2014 24

Media (trình bày) độc lập

Cùng một dữ liệu nhưng có thể trình bày bởi những phương tiện truyền thông khác nhau HTML Browser

Voice device

Cùng dữ liệu nhưng có thể trình bày theo những dạng khác nhau

Cell phone như WML

Destop như HTML

Qua stylesheet

11/7/2014

9

07.11.2014 25

Media (trình bày) độc lập

Stylesheet

Câu lệnh như thế nào để trình bày dữ liệu XML

CSS

Thích ứng cho HTML Browser

XSL

XML cơ bản

Mục đích chung

Làm việc với XSLT

07.11.2014 26

Sự tách biệt của nội dung từ sự trình bày

Tìm kiếm và lấy dữ liệu dể dàng và hiệu quả Những thẻ có khả năng tìm kiếm thông

tin

Nhiều ứng dụng dùng cùng dữ liệu trong những cách khác nhau Dữ liệu nhân công có thể được dùng bởi

Ứng dụng trả lương

Ứng dụng tổ chức

Ứng dụng nhân sự

07.11.2014 27

Sự tách biệt của nội dung từ sự trình bày

Khả năng trao đổi của dữ liệu

Trao đổi dữ liệu trên thời gian và không gian

11/7/2014

10

07.11.2014 28

XSLT

Ví dụ (XMLHTML)XML data

<destination>[email protected]</destination>

XSTL stylesheet

Bắt đầu một dòng mới

Chuyển đổi thẻ XML “destination“ sang thẻ HTML “To:“

Hiển thị: “To:“ in đậm theo sao là một khoảng trắng

Hiển thị địa chỉ email

Kết quả:

To: [email protected]

07.11.2014 29

Cấu trúc HTML với XML

07.11.2014 30

Cấu trúc

Mối quan hệ:

Employee được tạo bởi Name và EmloyeeID

Name được tạo bởi firstName và lastName

Phân cấp (dạng cây)

Truy cập nhanh hơn

Bố trí lại dể dàng hơn

11/7/2014

11

07.11.2014 31

Cấu trúc

Khả năng xây dựng dữ liệu lớn và phức hợp

Khả năng trao đổi dữ liệu (Portability)của mối quan hê và cấu trúc phân cấp

07.11.2014 32

Hợp lệ (Validation)

Dữ liệu XML bị bắt buộc bởi những quy tắc (hay cú pháp) Dữ liệu Employee phải có Name và EmployeeID Name phải có 2 thành phần firstName và

lastName

<Employee><Name>

<firstName>John</firstName><lastName>Doe</lastName>

</Name><EmployeeID>1234</EmloyeeID>

</Employee>

07.11.2014 33

Lược đồ XML (XML schema)

Định nghĩa cú pháp

Cấu trúc

Ngữ vựng

Tư liệu XML + lược đồ XML làm việc cùng nhau

Tư liệu XML thì phải hợp khuôn dạng (well-formed)

Lược đồ XML thì kiểm tra “sự hợp lệ“ (validity)

11/7/2014

12

07.11.2014 34

Lược đồ XML

DTD (Data Type Definition) là lược đồ hầu hết phổ biến cho bây giờ

DTD là lược đồ còn hạn chế

Không thể định nghĩa “kiểm tra phạm vi“

Những lược đồ XML nổi bật khác

W3C XML schema

Relax

07.11.2014 35

Vài nét pha tạp của XML

Ngữ nghĩa của dữ liệu

Văn bản đơn giản (Plain text)

Thực thi dể dàng

Khả năng sử dụng nội dòng (Inline)

Khả năng liên kết (Linkability)

Nhất quán

07.11.2014 36

Ngữ nghĩa của dữ liệu

Ý nghĩa của dữ liệu

Thẻ XML “gián tiếp“ chỉ ra ý nghĩa của ngữ nghĩa <firstName> thực sự có ý nghĩa là “tên

đầu tiên“?

Khả năng cho sự phân ra Sự cộng tác để đồng ý về ý nghĩa ngữ

nghĩa của thẻ

Cần cho chuyển đổi (XSLT)

11/7/2014

13

07.11.2014 37

Văn bản đơn giản

Có thể sử dụng bất kỳ công cụ ứng dụng nào cho văn bản

Sự dể dàng cho con người dể đọc

Thông tin hình thể

07.11.2014 38

Thực thi dể dàng

Tập hợp quy tắc hợp khuôn dạng

Kiểm tra sự hợp lệ

Sẳn sàng sử dụng công cụ ứng dụng

parsers (hay validators)

transformers

browsers

class generators

IDE

07.11.2014 39

Khả năng dùng nội dòng

Có thể tích hợp dữ liệu từ nhiều nguồn

Có thể được hiển thị hay thực thi như một tư liệu đơn

Lắp ráp mà không dùng mối liên kết

Ví dụ

Một quyển sách được tạo bởi nhiều chương độc lập

Văn bản Copyright giống nhau trong nhiều quyển sách

11/7/2014

14

07.11.2014 40

Khả năng liên kết

Năng lực liên kết tiềm tàng mạnh và linh động hơn HTML

Hai định hướng

Nhiều hướng

W3C XLink và XPointer

07.11.2014 41

Nhất quán

XML là cơ bản Unicode

Cả hai tăng cường và nội dung

Công cụ XML phải được hổ trợ của cả hai mã hóa UTF-8 và UTF-16

Thời kỳ quyết định cho việc chọn world-wide của XML như một sự trình bày dữ liệu phổ biến

07.11.2014 42

Lịch sử của XML

Một nổ lực tiên khởi để phối hợp một dạng thức dữ liệu có thể trao đổi toàn cục với các khả năng lưu trữ thông tin phong phú

SGML

HTML

11/7/2014

15

07.11.2014 43

Lịch sử của XML

SGML Mạnh và mở rộng

Tốt cho dữ liệu danh mục và chỉ số

Quá phức tạp và mắc

HTML Hổ trợ ở phạm vi lớn và đơn giản

Không mở rộng

XML Tương thích đầy đủ với SGML

07.11.2014 44

Phát triển XML

Được bắt đầu vào năm 1996 bởi Joh Bosak of Sun

W3C chấp nhận XML 1.0 năm 1998

Những hoạt động tiêu chuẩn quan hệ của XML đang di chuyển với một tốc độ nhanh Nằm ngang

Thẳng đứng

Thương mại điện tử

07.11.2014 45

XML được dùng ở đâu

Trình bày dữ liệu đơn và phức

Tích hợp những ứng dụng không đồng nhất

Trình bày dữ liệu có khả năng trao đổi

Hiển thị và công bố

Mục đích

Thay đổi dữ liệu

Trình bày business logic

11/7/2014

16

07.11.2014 46

Trình bày dữ liệu

XML mã hóa dữ liệu cho chương trình dể thực thi

Khả năng đọc dể dàng

Khả năng thực thi bỡi máy tính

Mối quan hệ phức có thễ đựơc trình bày

Nhất quán

Nhiều công cụ ứng dụng Editting, Syntax checking

07.11.2014 47

Trình bày dữ liệu

Ví dụ

Configuation files

EJB deployment descriptor

“Làm“ thư mục (Apache ANT project)

07.11.2014 48

Tích hợp những ứng dụng không đồng nhất

Một cách đặc trưng dùng với hệ thống thông điệp

Thông điệp XML là một tài liệu ít nhất cho việc thông tin liên lạc Loosely coupled communication

Khả năng EAI (Enterprise Application Integration) dể dàng Lương, tài chính, sản phẩm

Thương mại điện tử Supplier, distributor, manufacturer, retail

11/7/2014

17

07.11.2014 49

Trình bày dữ liệu có khả năng trao đổi

Không độc quyền Ứng dụng độc lập

Mẫu đối tượng độc lập

Ngôn ngữ độc lập

Plattform độc lập

Communication protocol độc lập

Comunication media độc lập

Dùng cho ý nghĩa của trao đổi thông tin

07.11.2014 50

Trình bày dữ liệu có khả năng trao đổi

Ví dụ

Purcharse order, Invoice

Business transactional semantics

Patient record

Mathematical formular

Musical notation

Manufacturing process

07.11.2014 51

Hiển thị và phổ biến

Dữ liệu chung cho trình bày khác nhau

Sự tách biệt của nội dung từ trình bày

Ví dụ

Thông tin web trình bày kiểu client khác nhau

Thông tin trả lại đến medium khác nhau

11/7/2014

18

07.11.2014 52

Mục đích

Dữ liệu XML có thể chọn là những dạng trữ dữ liệu

Quản lý version tốt hơn

Dể dàng để thực thi

Khả năng hiện hữu của những công cụ ứng dụng đọc để dùng:

Thực thi tường thuật chung

Ngôn ngữ query tiêu chuẩn XML

Ví dụ

Bao gồm dữ liệu XML cơ bản

07.11.2014 53

Thay đổi dữ liệu

Nhiều công cụ ứng dụng hiện hữu cho sự thay đổi dữ liệu XML

Ví dụ

Dữ liệu từ dữ liệu quan hệ chuyển đổi thành XML cho việc thay đổi dể dàng

07.11.2014 54

Trình bày business logic

Thẻ XML có thể là bất cứ cái gì

Nó có thể là business logic hoặc hành động

Cơ bản cho sự di chuyển XML-RPC

Ví dụ

“Withdraw $40 from my saving account“ có thể được trình bày như XML

11/7/2014

19

07.11.2014 55

Những hoạt động phát triển trên XML

Tạo tư liệu trên XML Hầu hết bởi công cụ ứng dụng text-editor

hay WISWIG

Lập trình

Gửi và nhận tư liệu XML Qua những loại chuyển đổi

HTTP, SMTP, FTP,..

Qua những chương trình APIs JMS API, JAXM API

Socket APIs

07.11.2014 56

Những hoạt động phát triển trên XML

Trình phân ngữ (Parsing) tư liệu XML

Chuyển đổi tư liệu XML trong đối tượng lập trình

Thay đổi đối tượng lập trình

Những ứng dụng đặc trưng

Ví dụ

Hiển thị

Trữ chúng trong cơ sở dữ liệu

Tạo một tư liệu XML mới

07.11.2014 57

Những hoạt động phát triển trên XML

Tư liệu XML có thể là

URI

File

URL

InputStream

SAX Input Source

Dom tree

11/7/2014

20

07.11.2014 58

Java™ Technology + XML: Mối quan hệ đặc trưng

Đó là sự thích hợp rất tốt:

Java khả năng trao đổi code

XML khả năng trao đổi thông tin

Công cụ ứng dụng XML và chương trình hầu như được viết bởi ngôn ngữ Java

API hổ trợ cho Java platform tốt hơn bất kỳ ngôn ngữ nào khác

07.11.2014 59

Những hoạt động tiêu chuẩn

Chuẩn cơ bản XML

Qua những tổ chức cơ bản

W3C, OASIS, UN/CEFACT

Lĩnh vực đặc trưng chuẩn cho XML

Qua những lĩnh vực tổ chức chuẩn

Kỹ thuật cơ bản Java API cho XML

Qua JCP (Java Community Process)

Chuẩn thương mại điện tử

07.11.2014 60

Chuẩn XML

XML, DTD

XSL, XSLT, XPATH

DOM, SAX

W3C XML Schema

Namespaces

XLINK, XPOINTER

XHTML

XQL

11/7/2014

21

07.11.2014 61

Lãnh vực đặc trưng chuẩn XML

Chemical – CML

2DGraphics – SVG

Math – MathML

Music – MusicML

Travel – OTA

Nhiều hơn...

http://xml.org/xmlorg_registry/index.shtml

07.11.2014 62

Core Java APIs cho XML

JAXP: Parsing and Transforming

JAXB: High-level XML programming

JAXM: Messagin

JAXR: Registry APIs

JDOM: Java-optimized Parsing

07.11.2014 63

Chuẩn thương mại điện tử

ebXML

UDDI (Universal Description, Discovery and Integration)

SOAP (Simple Open Access Prorocol)

W3C XP (XML Protocol)

WSDL (Web Services Definition Lang)

S2ML (Security Services ML)

XAML (Transaction Authority ML)

11/7/2014

22

07.11.2014 64

Dự đoán tương lai bởi Joh Bosak

XML sẻ là cơ bản cho chuẩn Web tương lai

XML sẻ trở thành dạng chuẩn phổ biến cho sự thay đổi dữ liệu trong môi trường thành phần khác nhau

XML sẽ trở thành cơ bản cho sự phổ biến quốc tế

XML và XSL sẽ thay thế tất cả những dạng thực thi ngữ vựng và dạng phổ biến cho desktop

07.11.2014 65

Phần II

Kỹ Thuật

07.11.2014 66

Nội dung

Tạo tài liệu XML

Kiểm tra tính hợp lệ của XML bằng cách định nghĩa kiểu tư liệu (DTD)

Kiểm tra tính hợp lệ của XML bằng lược đồ XML (XML Schema)

CSS & XML

XSL (XSLT-XPATH)

Xử lý XML bằng bộ phân tích DOM

Xử lý XML bằng SAX

Nối kết XML (XLink-XPointer)

XML và cơ sở dữ liệu

Các công dụng khác của XML

11/7/2014

23

07.11.2014 67

Tạo tài liệu XML (Creating XML Document)

07.11.2014 68

Nội dung

Tài liệu XML được xây dựng như thế nào?

Phần tử (element) là gì và thuộc tính (attribute) là gì?

Phần tử và thuộc tính khi nào thì nên được sử dụng?

Không gian tên của XML (namespace)

07.11.2014 69

Nội dung phần tử

1. Phần tử có thể bao gồm một văn bản đơn giản:

<first>John</first>

Nội dung phần tử được gọi là Parsed

Character Data (PCDATA)

2. Phần tử có thể bao gồm các phần tử khác<name>

<first>John</first>

<last>Doe</last>

</name>

Được miêu tả theo hệ phân cấp

11/7/2014

24

07.11.2014 70

Phần tử (Element)

• <first>là một thẻ

gán đầu </first>là một thẻ

gán cuối <first>John</first>

là một phần tử Văn bản giữa thẻ

gán đầu và thẻ gán cuối của một thành được gọi là nội dung thành phần

07.11.2014 71

Nội dung thành phần

3. Thành phần có thể chứa cả văn bản lẫn các phần tử khác

<section>

Text

<subsection>... </subsection>

Text

</section>

Như vậy ta nói chúng có nội dung hỗn hợp (mixed content)

07.11.2014 72

Nội dung thành phần4. Phần tử rổng:

<name><first>John</first><middle></middle><last>Doe</last>

</name>

Chú ý: Sự khác biệt so với phần tử không tồn tại

Phần tử rổng <tag-name></tag-name> có thể được viết tắt là <tag-name/>

<name><first>John</first><middle/><last>Doe</last>

</name>

11/7/2014

25

07.11.2014 73

PCDATA

Đối với XML có vài ký tự như `<` và `&`không thể gộp trong PCDATA

Có 2 cách mà có thể khắc phục:

Thoát các ký tự

Bao văn bản trong một đoạn CDATA

07.11.2014 74

Thoát các ký tự

Thay ký tự `<` bằng &lt và ký tự `&` bằng &amp

&lt và &amp được xem là tham chiếu thực thể (entity references)

Các thực thể sau đây được định nghĩa trong XML: &amp cho `&`

&lt cho `<`

&gt cho `>`

&apos cho `‘`

&quot cho `“`

07.11.2014 75

CDATA

Nếu có khá nhiều ký tự `<` và `&` cần thoát thì sử dụng các đoạn CDATA tốt hơn

Dùng các đoạn CDATA có thể báo cho trình phân ngữ XML không phân ngữ văn bản, nhưng cứ để tất cả đi cho đến khi nó đụng đến cuối đoạn

Mọi thứ bắt đầu sau <! [CDATA[ và kết thúc tại ] ]> đều được bỏ qua bằng trình phân ngữ

<comparison><! [CDATA[6 is < 7 & 7 > 6] ]>

</comparison>

11/7/2014

26

07.11.2014 76

Quy tắc cho các thành phần

Mọi thẻ gán đầu phải có một thẻ gán cuối so khớp

Các thẻ gán không thể phủ chồng

Các tư liệu XML chỉ có thể có một thành phần gốc

Các tên thành phần phải tuân thủ các quy ước đặt tên XML

XML có phân biệt chữ hoa chữ thường

XML sẽ giữ khoảng trắng trong văn bản

07.11.2014 77

Mọi thẻ gán đầu phải có một thẻ gán cuối

Trong XML cần có thẻ gán cuối và phải so khớp chính xác với thẻ gán đầu

Quy tắc này không bắt buộc trong HTML<html><body><P>Here is some text in an HTML paragraph<BR>Here is some more text in the same paragraph<P>Anh here is some text in another HTML

paragraph</p></body></html>

Phần tử P đầu tiên kết thúc ở đâu? Cú pháp rỏ ràng hơn -> Cấu trúc của XML

07.11.2014 78

Các thẻ gán không thể phủ chồng

Trong XML các phần tử không được phủ chồng

Trong HTML các thẻ gán được phép phủ chồng<P>Some

<Strong>formatted

<EM>text

</Strong>, but

</EM>no grammar no good!

</P>

Quy tắc rỏ ràng hơn

11/7/2014

27

07.11.2014 79

Một tư liệu XML chỉ có thể có một thành phần gốc

Một tư liệu XML phải có một và chỉ một thành phần gốc

Phải có thành phần gốc cho dù không có nội dung

Ví dụ, một số thành phần gốc:<name>John</name><name>Jane</name>Phải bổ sung thêm thành phần cấp đỉnh:<names>

<name>John</name><name>Jane</name>

</names>

07.11.2014 80

Các tên thành phần

Các tên có thể bắt đầu bằng các mẫu tự (bao gồm các ký tự phi La tinh) hoặc ký tự `_`, nhưng không có các con số hoặc các ký tự dấu chấm câu khác

Sau ký tự đầu tiên, ta được phép dùng các con số, cũng như các ký tự `-` và ´.´

Các tên không thể chứa các khoảng cách

Các tên không thể chứa ký tự `;`

Các tên không thể bắt đầu bằng các mẫu tự `xml, bằng chữ hoa, chữ thường, hoặc hỗn hợp

Không thể có một dấu cách sau ký tự ´<´ mở, tên của thành phần phải đi ngay sau đó. Tuy nhiên, có thể có dấu cách trước ký tự `>` đóng, nếu muốn

07.11.2014 81

Các tên thành phần

<résumé> hợp lệ

<xml-tag> bắt đầu bẳng `xml`

<123> bắt đầu bằng một con số

<fun=xml> dấu `=` là không hợp lệ

<my tag> chứa một dấu cách

11/7/2014

28

07.11.2014 82

Phân biệt chữ hoa chữ thường

Các thẻ gán trong XML đều phân biệt chữ hoa chữ thường

Sự khác biệt lớn so với HTML, nó không phân biệt chữ hoa chữ thường, ví dụ giữa <P> và <p>

<first> khác với <FIRST>, khác với <First>

07.11.2014 83

Khoảng cách trắng trong PCDATA

Ví dụ:

<P>This is a parapraph. It has a whole bunch of space.</P>

Trong HTML, mọi khoảng cách trắng được xem là vô nghĩa sẽ bị cắt bỏ ra khỏi tư liệu khi nó được xử lý

07.11.2014 84

Khoảng cách trắng trong PCDATA

Trong XML, không có tính năng cắt bỏ khoảng trắng đối với PCDATA

Ví dụ:<paragraph>This is a parapraph. It has a whole

bunch of space.</paragraph>

Chú ý: trong IE 5 và IE 6 khoảng cách trắng sẽ được cắt bỏ hoặc có vẻ như vậy

Nguyên nhân: XML được biến đổi thành HTML để hiển thị

11/7/2014

29

07.11.2014 85

Thuộc tính

Ngoài các thẻ gán và thành phần, các tư liệu XML còn bao gồm các thuộc tính

Các thuộc tính là các cặp tên/giá trị đơn giản kết hợp với một thành phần

Giá trị của thuộc tính phải nằm trong dấu nháy

Một thành phần có thể có nhiều thuộc tính

07.11.2014 86

Thuộc tính

Không thể có nhiều thuộc tính trùng tên trên một thanh phần

07.11.2014 87

Thành phần thay thế thuộc tính

Một thuộc tính có thể được hiển thị như một thành phần con

11/7/2014

30

07.11.2014 88

Thuộc tính thay thế thành phần

Môt thành phần con có thể hiển thị như một thuộc tính

07.11.2014 89

Khai báo XML

Chứa những thông tin cho bộ xử lý, đặc biệt là sử dụng XML-Version và Mã hóa

Phải luôn xuất hiện ở dòng đầu tiên của tư liệu

<?xml version='1.0' encoding='UTF-16' standalone=‘yes‘?>

<name nickname='Shiny John'>

<first>John</first>

<!—John lost his middle name in a free-->

<middle/>

<last>Doe</last>

</name>

07.11.2014 90

Khai báo XML

version(bắt buộc): Sử dụng XML-Version, version hiện tại là `1.0`

standalone(tuỳ chọn): nó phải là yes hoặc no

encoding(tuỳ chọn): Sử dụng mã hoá của tư liệu XML

<?xml version='1.0' encoding='UTF-16' standalone='yes'>

11/7/2014

31

07.11.2014 91

Khai báo XML: Mã hoá

ASCII (American Standard Code for Information Interchange) là lược đồ mã hoá 7 bít và 8 bít.

7-bit-ASCII phủ 128 ký tự với chỉ một phần nhỏ của những ký tự sử dụng trên thế giới

ASCII 8-bit dùng một byte (8 bit) cho mỗi ký tự

Chỉ có thể lưu trữ 256 giá trị khác nhau, do do đó giới hạn ASCII ở mức 256 ký tự.

Tổng hợp: ASCII chỉ có thể điều quản một tập con nhỏ trong số các ngôn ngữ trên thế giới

07.11.2014 92

Khai báo XML: Unicode

Unicode phủ 65356 ký tự cho tất cả những ký tự được sử dụng trên thế giới

Có 2 phương pháp mã hoá ký tự chính cho Unicode: UTF-16 và UTF-8

UTF-8 hay UTF-16 bao hàm đủ các ký tự khả dĩ để chứa tất cả các ký tự trong bất kỳ ngôn ngữ nào của loài ngươì, UTF-8 sử dụng mã hoá thông minh hơn

7-bit ASCII là một phần của UTF-8

Với các văn bản bằng tiếng anh, ở đó hầu hết các ký tự hợp với phương pháp mã hoá ký tự ASCII, UTF-8 có thể cho ra các kích cỡ tập tin nhỏ hơn, nhưng với văn bản trong các ngôn ngữ khác, UTF-16 thường nhỏ hơn

07.11.2014 93

Khai báo XML: Mã hoá

Tất cả các bộ xử lý XML phải dùng Unicode nội bộ

Thuộc tính encoding chỉ định, với trình phân ngữ XML, phương pháp mã hoá ký tự mà văn bản tuân thủ

Nếu không có phương pháp mã hoá nào chỉ định, UTF-16 hoặc UTF-8 được mặc nhận

Nếu không có phương pháp mã hoá nào được chỉ định, và tư liệu không thuộc UTF-8 hoặc UTF-16, điều đó sẽ dẫn đến một lỗi

11/7/2014

32

07.11.2014 94

Không gian tên

(Namespace)

07.11.2014 95

Nội dung

Cần cho không gian tên

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

Không gian tên mặc định

Bộ xử lý (Parser) và không gian tên

07.11.2014 96

Cần cho không gian tên

Một tư liệu XML có thể dùng nhiều ngữ vựng XML

Ví dụ: XHTML có thể chứa cả hai phần tử SGV và

MathML

XSL stylesheet có thể chứa cả hai phần tử XSLT và kết quả cây

Như thế nào để tránh sự va chạm tên?

Cả hai SVG và MathML “set“ phần tử

11/7/2014

33

07.11.2014 97

Cần cho không gian tên

07.11.2014 98

Tiếp tục

07.11.2014 99

Cần cho không gian tên

Thay đổi tên phần tử (để tránh sự va chạm) không là một sự tùy chọn quy ước

Một vài sự va chạm không thể tránh được: Nếu cả hai ngữ vựng tiêu chuẩn

SVG “set“ với MathML “set“

Một nhóm tên sẽ hữu dụng trong bất kỳ trường hợp nào Bộ máy xử lý XSLT cần biết loại nào là lệnh XSLT

và loại nào là phần tử kết quả cây

11/7/2014

34

07.11.2014 100

Ví dụ không gian tên

07.11.2014 101

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

Hai phần:

Mô tả không gian tên

Thành phần và Thuộc tính

07.11.2014 102

Mô tả không gian tên

Một prefix được liên kết với một URI

Sự liên kết này đựơc định nghĩa như một thuộc tính trong một thành phần

xmlns:prefix

xmlns là một từ khóa không gian tên. Prefix là người dùng định nghĩa

<classes xmlns:XMLclass=“http://www.brandeis.edu/rseg-0151-g“>

<XMLclass:syllabus>

...

<XMLclass:syllabus>

</classes>

11/7/2014

35

07.11.2014 103

Mô tả không gian tên

Có thể mô tả trong thành phần gốc hoặc trong thành phần phân cấp thấp hơn

Cùng prefix có thể được tái định nghĩa trong cùng một tư liệu

Mô tả scope của không gian tên thì nằm trong thành phần nơi nó được định nghĩa

07.11.2014 104

Thành phần và thuộc tính với prefix không gian tên

Ví dụ

XMLclass:syllabus

svg:set

mathml:set

prefix:local part prefix đồng nhất không gian tên một thành phần

và thuộc tính phụ thuộc

local part đồng nhất một phần thành phần hay thuộc tính trong không gian tên

Tên hạn định

07.11.2014 105

Thành phần và thuộc tính với prefix không gian tên

Prefix

Có thể được hình thành từ bất kỳ ký tự quy tắc tên của XML ngoại trừ “:“

“xml“ (trong bất kỳ trường hợp kết hợp nào) được dự phòng

Local part

Không thể chứa “:“

11/7/2014

36

07.11.2014 106

Không gian URI

URI không thể là prefix “/“, “%“, và “~“ không hợp quy tắc trong

tên phần tử

URI có thể được chuân hóa trong khi prefix chỉ là quy ước

URI chỉ là đồng nhất URI không phải là dạng “http“

URI không phải được giải quyết

Nó thì như “một giá trị hằng“

07.11.2014 107

Không gian tên mặc định

Biểu thị với xmlns thuộc tính với không prefix

Chỉ cung cấp đến thành phần unprefix và những thành phần con cháu của nó

Chỉ cung cấp đến những thành phần không thuộc tính

07.11.2014 108

Không gian tên mặc định

11/7/2014

37

07.11.2014 109

Bộ xử lý và không gian tên

Không gian tên là sự suy nghĩ sau của XML 1.0

Tình trạng tương thích đã qua SAX 1.0 và bộ xử lý DOM bậc 1 (1.0)

không nhận biết được không gian tên

Chúng nó vẫn đọc không gian tên-khả năng tư liệu XML

Bây giờ SAX 2.0 và bộ xử lý DOM bậc 2 nhận biết được không gian tên

07.11.2014 110

XML hợp lệ cơ bản (Document Type Definitions-DTD)

07.11.2014 111

Nội dung

Tại sao lại cần các DTD, và các lợi ích khi dùng chúng

Cách viết DTD đơn giản

Cách dùng các DTD

11/7/2014

38

07.11.2014 112

XML và DTDs

DTD (Document Type Definition) miêu tả cấu trúc của một hay nhiều tư liệu XML. Đặc biệt, một DTD miêu tả:

Thành phần (elements)

Thuộc tính (Attributes), và

Thực thể (Entities)

Tư liệu XML tề chỉnh (well-formed) là tư liệu thỏa một số quy tắc ngữ pháp nhất định được nêu khái quát trong định chuẩn XML 1.0

Tư liệu XML hợp lệ là các tư liệu tề chỉnh cũng tuân thủ các quy tắc cú pháp, cấu trúc và các quy tắc khác như định nghĩa trong một DTD

07.11.2014 113

Tại sao lại cần các DTD? Mọi thay đổi đối với cấu trúc dữ liệu XML phải được thực

hiện trong ba nơi: định chuẩn, các ứng dụng nhận và gửi. Đây có thể là cách tiếp cận hiệu quả, năng suất cao, để điều quản dữ liệu XML trong một số tình huống hạn chế

Tuy nhiên, trong các trường hợp ở đó dữ liệu XML được chia sẻ rộng rãi hơn việc duy trì các chức năng này trong mỗi và mọi ứng dụng đã trở thành cơn ác mộng bùng nổ

Việc tách biệt phần mô tả dữ liệu XML với các ứng dụng riêng lẻ cho phép tất cả các ứng dụng hợp tác chia sẻ một phần mô tả dữ liệu đơn lẻ, có tên là từ vựng XML

Một nhóm tư liệu XML chia sẻ một từ vựng XML chung được gọi là một kiểu tư liệu[document type], và mỗi tư liệu riêng lẻ tuân thủ một kiễu tư liệu được gọi là một minh dụ tư liệu[document instance]

07.11.2014 114

Trình phân ngữ (Parsers)

Trình phân ngữ XML (XML parser) là bộ xử lý XML để bảo đảm một tư liệu XML tề chỉnh: Một bộ xử lý phổ biến hiện tại là DOM

(Document Object Model) và SAX (Simple API for XML)

Một trình phân ngữ phê chuẩn (validating parser) là bộ xử lý XML. Tiến trình phê chuẩn này được hoàn thành bằng cách so sánh nội dung của tư liệu XML với một tập mẫu kết hợp dưới dạng một DTD Hầu hết các browser không dùng các validating

parser

11/7/2014

39

07.11.2014 115

Một ví dụ về XML<novel>

<foreword><paragraph>This is the great American novel.</paragraph>

</foreword><chapter number="1">

<paragraph>It was a dark and stormy night.</paragraph><paragraph>Suddenly, a shot rang out!</paragraph>

</chapter></novel>

Một tư liệu XML chứa (và DTD miêu tả): Thành phần, là novel và paragraph, bao gôm thẻ và nội dung Thuộc tính, chính là number = `1`, bao gồm tên và giá trị Thực thể (không sử dụng trong ví dụ này)

07.11.2014 116

Một ví dụ của DTD

<!DOCTYPE novel [<!ELEMENT novel (foreword, chapter+)><!ELEMENT foreword (paragraph+)><!ELEMENT chapter (paragraph+)><!ELEMENT paragraph (#PCDATA)><!ATTRIBUTE chapter number CDATA #REQUIRED>

]>

Một novel bao gồm một foreword và một hay nhiều chapter, trong đó

Một foreword bao gồm một hay nhiều paragraph Một chapter bap gồm một hay nhiều paragraph Một paragraph bao gồm parsed character data (văn

bản không thể chứa bất kỳ một thành phần nào) Mỗi chapter phải có một thuộc tính number

07.11.2014 117

Các khai báo kiểu thành phần (Element)

Hậu tố (Suffixes):

? tuỳ chọn foreword?

+ Một hoặc nhiều chapter+

* zero hoặc nhiều appendix*

Toán tử (Separators):

, tuần tự foreword?, chapter+

| chọn section|chapter

Nhóm (Grouping)( ) grouping (section|chapter)+

11/7/2014

40

07.11.2014 118

Phạm trù EMPTY

Cú pháp: <!ELEMENT name category>

Tham số name là tên kiểu thành phần đang được mô tả

Tham số category mô tả loại nội dung có thể xuất hiện bên trong các thành phần của tên đã cho. Nó có thể rỗng (EMPTY):

Trong DTD: <!ELEMENT br EMPTY>

Trong XML: <br></br> hoặc <br />

Trong XML, thành phần rỗng có thể không có nội dung ở giữa thẻ đầu và thẻ cuối

Một thành phần rỗng có thể có thuộc tính

07.11.2014 119

Phạm trù ANY

Cú pháp: <!ELEMENT name category>

Tham số category có thể là ANY: Điều này có thể bao gồm dữ liệu ký tự, các thành phần

khác, các chú giải, các PI, các thành phần CDATA

Phải sử dụng thật dè sẻn loại thành phần này, bởi sẽ làm mất hầu như toàn bộ tính năng kiểm tra tính hợp lệ.

Tham số category có thể là (#PCDATA): Trong DTD: <!ELEMENT paragraph (#PCDATA)>

Trong XML: <paragraph>A shot rang out!</paragraph>

Phải có dấu ngoặc đơn

Các thành phần trong phạm trù nội dung PCDATA chỉ cho phép dữ liệu ký tự

07.11.2014 120

Thành phần với thành phần con

Tham số category có thể miêu tả một hay nhiều con:

<!ELEMENT novel (foreword, chapter+)>

Phải có dấu ngoặc đơn, thậm chí nó chỉ có một con

Khoảng trắng không tồn tại sau khi mở ngoặc

Dấu phẩy (,) giữa các thành phần nghĩa là các thành phần con phải xuất hiện theo thứ tự đã chỉ định

`|` sổ dọc nghĩa là chỉ một trong số thành phần con được phép

Tất cả thành phần con phải tự định nghĩa

Thành phần con có thể có thành phần con (phân cấp)

Dấu ngoặc đơn có thể được dùng để nhóm:

<!ELEMENT novel (foreword, (chapter+|section+))>

11/7/2014

41

07.11.2014 121

Thành phần với nội dung hỗn hợp(mixed content)

#PCDATA miêu tả thành phần với chỉ dữ liệu ký tự (character data)

#PCDATA có thể được dùng trong trong một nhóm `hay`: <!ELEMENT note (#PCDATA|message)*>

Đây được gọi là nội dung hỗn hợp

Những quy tắc bắt buộc:

#PCDATA là mục đầu tiên

Toán tử phải là sổ dọc `|`

Nhóm phải được đánh dấu (zero hay nhiều)

07.11.2014 122

Tên và không gian tên

Tất cả các tên của thành phần, thuộc tính và thực thể, trong cả hai DTD và XML, theo những quy tắc sau: Tên phải bắt đầu bắng 1 chử cái hay dấu gạch dưới

(_) Tên chỉ có thể chứa những chữ cái, các con số, dấu

chấm, dấu gạch ngang(-), dấu gạch dưới và dấu hai chấm(và, đối với ngôn ngữ nước ngoài, kết hợp với những ký tự và sự mở rộng)

DTD không liên quan đến không gian tên. Dấu hai chấm trong DTD chỉ là một phần của tên 2 ví dụ khác nhau nhưng đều hợp lệ:

<!ELEMENT chapter (paragraph+)> <!ELEMENT myBook:chapter (myBook:paragraph+)>

Tránh sử dụng dấu hai chấm trong tên, trừ trường hợp muốn hiển thị không gian tên

07.11.2014 123

Một ví dụ DTD mở rộng

<!DOCTYPE novel [<!ELEMENT novel

(foreword, chapter+, biography?, criticalEssay*)>

<!ELEMENT foreword (paragraph+)><!ELEMENT chapter (section+|paragraph+)><!ELEMENT section (paragraph+)><!ELEMENT biography(paragraph+)><!ELEMENT criticalEssay (section+)><!ELEMENT paragraph (#PCDATA)>

]>

11/7/2014

42

07.11.2014 124

Thuộc tính và thực thể(Attributes and entities)

Ngoài thành phần, DTD còn mô tả thêm thuộc tính và thực thể

Các thuộc tính thành phần được mô tả bằng khai báo danh sách thuộc tính: Trong XML: <dog name="Spot" age="3"></dog>

Trong DTD: <!ATTLIST dogname CDATA #REQUIREDage CDATA #IMPLIED >

Một thực thể miêu tả văn bản để thay thế:

Trong XML: &copyright;

Trong DTD: <!ENTITY copyright "Copyright Dr. Dave">

07.11.2014 125

Thuộc tính

Khai báo thuộc tính như sau:

<!ATTLIST element-namename type requirementname type requirement>

Trong đó, tham số name-type-requirement

Tham số element-name là tên kiểu thành phần kết hợp

Tham số name là tên thuộc tính riêng lẻ

Mỗi thành phần có type, như CDATA (character data)

Mỗi thành phần được yêu cầu, tuỳ chọn hay cố định

Trong XML, thuộc tính có thể xảy ra trong bất kỳ câu lệnh

07.11.2014 126

Kiểu thuộc tính quan trọng

Có 10 kiểu thuộc tính

Những thuộc tính quan trọng:

CDATA Dữ liệu ký tự

(man|woman|child) Giá trị là một trong một loạt

ID Giá trị là dấu định danh duy nhất

Điều này là một chuỗi văn bản tuân thủ tất cả các quy tắc đặt tên XML

NMTOKEN Một thẻ bài tên Một chuỗi văn bản tuân thủ các quy tắc đặt tên XML

Ngoại trừ ký tự đầu tiên của tên có thể là một ký tự tên hợp lệ bất kỳ

11/7/2014

43

07.11.2014 127

Kiểu thuộc tính ít quan trọng hơn

IDREF Một tham chiếu đến thành phần có một thuộc tính ID có cùng giá trị như của IDREF

IDREFS Một danh sách IDREFs được định biên bởi khoảng cách trắng

NMTOKENS Một danh sách NMTOCKENs được định biên bởi khoảng trắng

ENTITY Tên của một thực thể định nghĩa sẵn ENTITIES Một danh sách các tên ENTITY được

định biên bởi khoảng cách trắng NOTATION Giá trị thuộc tính phải là một kiểu ký

hiệu

07.11.2014 128

Yêu cầu (Requirements)

Gọi lại thuộc tính dạng<!ATTLIST element-name name type requirement>

Requirement:

Default value: Ví dụ: <!ATTLIST degree CDATA "PhD">

#REQUIRED Thuộc tính phải có mặt

#IMPLIED Thuộc tính tuỳ chọn

FIXED “value“ Thuộc tính phải có gán giá trị

Đặc biệt trong XML, cùng giá trị phải được sử dụng

07.11.2014 129

Thực thể (Entities)

Có 5 thực thể tiền định nghĩa: &lt;, &gt;, &amp;, &quot;, và &apos;

Thực thể được định nghĩa trong DTD:<!ENTITY copyright "Copyright Dr. Dave">

Ví dụ sử dụng trong XML:This document is &copyright; 2002.

Thực thể không nên mâu thuẫn với tham chiếu ký tự là giá trị số giữa & và #

Ví dụ: &233#; hay &xE9#; để chỉ ký tự é

11/7/2014

44

07.11.2014 130

Một ví dụ khác:XML

<?xml version="1.0"?><!DOCTYPE myXmlDoc SYSTEM

"http://www.mysite.com/mydoc.dtd"><weatherReport>

<date>05/29/2002</date><location>

<city>Philadelphia</city>, <state>PA</state><country>USA</country></location>

<temperature-range><high scale="F">84</high><low scale="F">51</low>

</temperature-range></weatherReport>

07.11.2014 131

Một ví dụ cho DTD

<!ELEMENT weatherReport (date, location,temperature-range)>

<!ELEMENT date (#PCDATA)><!ELEMENT location (city, state, country)><!ELEMENT city (#PCDATA)><!ELEMENT state (#PCDATA)><!ELEMENT country (#PCDATA)><!ELEMENT temperature-range

((low, high)|(high, low))><!ELEMENT low (#PCDATA)><!ELEMENT high (#PCDATA)><!ATTLIST low scale (C|F) #REQUIRED> <!ATTLIST high scale (C|F) #REQUIRED>

07.11.2014 132

Kết hợp DTD với một tư liệu XML(Inline DTDs)

Nếu một DTD kết hợp với một tư liệu XML, nó có thể được đặt trực tiếp trong tư liệu:

<?xml version="1.0"><!DOCTYPE myRootElement [

<!-- DTD content goes here -->]><myRootElement>

<!-- XML content goes here --></myRootElement>

Mỗi tư liệu XML có thể kết hợp với một và chỉ một DTD.

11/7/2014

45

07.11.2014 133

DTD bên ngoài (extenal DTDs)

DTD bên ngoài được mô tả với lệnh SYSTEM hoặc PUBLIC:

<!DOCTYPE myRootElement SYSTEM"http://www.mysite.com/mydoc.dtd">

Tên xuất hiện sau DOCTYPE phải trùng với tên thành phần gốc của tư liệu XML

Dùng SYSTEM cho DTD bên ngoài để tự định nghĩa, và dùng PUBLIC cho DTD công cộng

DTD bên ngoài chỉ có thể tham chiếu đến URL Tập tin thường dùng tên đuôi tập tin .dtd cho DTD bên

ngoài DTD bên ngoài luôn thích hợp dùng hơn trong inline

DTDs, từ đây chúng có thể được dùng nhiều hơn một tư liệu

07.11.2014 134

Các giới hạn của DTD

Vài giới hạn của DTD bao gồm:

Các DTD không thể mở rộng

Mỗi tư liệu chỉ có thể kết hợp với một DTD

Các DTD không làm việc với các không gian tên XML

Định kiểu dữ liệu rất yếu

Các phần mô tả nội dung hạn chế

Không có sự thừa kế đối tượng kiểu OO

Một tư liệu có thể chạy đè/bỏ qua một DTD bên ngoài dùng tập con nội bộ

Cú pháp phi XML

Không hổ trợ DOM

Tương đối ít công cụ cũ, đắt tiền hơn

07.11.2014 135

Tính hợp lệ

Opera 5 và Internet Explorer 5 có thể kiểm tra tính hợp lệ XML đối với một DTD nội bộ

IE cung cấp thông tin lỗi tốt hơn

Opera chỉ bỏ qua DTD bên ngoài

IE sẽ quan sát DTD bên ngoài để báo lỗi

jEdit với XML plugin sẽ kiểm tra việc cấu trúc tề chỉnh và (nếu là DTD inline) sẽ kiểm tra tính hợp lệ của XML mổi lần được trữ http://www.jedit.org/

11/7/2014

46

07.11.2014 136

XML hợp lệ: các giản đồ (XML Schema)

07.11.2014 137

Nội dung

Mở đầu Kiểu đơn giản Kiểu phức Thành phần với thuộc tính Những sự kiện Kiểu liệt kê (List type) Kiểu hợp nhất (Union type) Explicit với implicit Nội dung thành phần Chú giải (annotation) Lựa chọn và nhóm (Choices và group)

07.11.2014 138

Mở đầu

Cung cấp ngôn ngữ lược đồ mạnh và linh động hơn DTD

Hiển thị cú pháp tư liệu XML trong ngôn ngữ XML

Mọi công cụ XML có thể được hiển thị và điều tác

Hổ trợ kiểu dữ liệu phi văn bản

Quan trọng cho B2B và thương mại điện tử

Xử lý những cú pháp phức tạp

11/7/2014

47

07.11.2014 139

Hợp lệ so với lược đồ hợp lệ

Giản đồ XML (XML schema) không ở trong phần của XML 1.0

Tư liệu XML được hợp lệ với DTD hợp lệ

Tư liệu XML xác nhận là một XML schema thì là một lược đồ hợp lệ (schema-valid)

Tư liệu XML xác nhận là một phần của XML schema thì được gọi là “instance document“ của schema

07.11.2014 140

Những kiểu dữ liệu trong XML Schema

Kiểu dữ liệu là kiểu nội dung mà thành phần chứa

XSD cung cấp một bảng liệt kê của những kiểu dữ liệu được định nghĩa trước

07.11.2014 141

Định nghĩa với khai báo (Definition vs. Declarations)

11/7/2014

48

07.11.2014 142

Định nghĩa và khai báo

Định nghĩa:

Tạo một kiểu mới (new type) cho cả hai kiểu dữ liệu đơn và phức

Khai báo:

Cho phép thành phần và thuộc tính với những kiểu và tên (cho cả hai kiểu đơn và phức) xuất hiện trong document instance

07.11.2014 143

Ví dụ

07.11.2014 144

Kiểu dữ liệu trong lược đồ:

Kiểu đơn giản và Kiểu phức hợp (Schema Data Types:

Simple Types & Complex Types)

11/7/2014

49

07.11.2014 145

Kiểu dữ liệu trong lược đồ (Schema Data Type)

Kiểu đơn (Simple type):

Không có thành phần con (sub-element)

Không có “thành phần“ thành phần con

Không có “thuộc tính“ thành phần con

Kiểu được định nghĩa trước hoặc mở rộng từ kiểu được định nghĩa trước

Kiểu phức (Complex type)

Có “thành phần“ thành phần con hoặc “thuộc tính“ thành phần con

07.11.2014 146

Kiểu đơn

(Simple Types)

07.11.2014 147

Kiểu đơn định nghĩa trước (Predefined Simple Types)

String, CDATA, token, byte, unsignedByte, binary, integer, positiveInteger, negativeInteger, nonNegativeInteger, nonPositiveInteger, int, unsignedInt, long, unsignedLong, short, unsignedShort, decimal, float, double, boolean, time, timeInstant, timePeriod, timeDuration, date, month, year, century, recurringDay, recurringDate, recurringDuration, Name, Qname, NCName, uriReference, language, ID, IDREF, IDREFS, ENTITY, ENTITIES, NOTATION, NMTOKEN, NMTOKENS

11/7/2014

50

07.11.2014 148

Ví dụ của Predefined Simple Types

07.11.2014 149

Kiểu đơn thừa kế (Derived Simple Type)

Mở rộng từ kiểu đơn hiện có (predefined hay derived )

Đặc trưng một kiểu đơn hiện có hạn chế: Phạm vi hợp lệ của giá trị cho kiểu mới là việc

chọn của một trong những kiểu đã hiện có

Kiểu hiện có được gọi là kiểu cơ sở

Dùng thành phần hạn chế thông qua giới hạn kiểu (facets) để giới hạn phạm vi của giá trị

Facets là những nguyên tắc của sự hạn chế

07.11.2014 150

Ví dụ của kiểu đơn thừa kế 1 (phạm vi số)

<xsd:simpleType name=“myInteger“><xsd:restriction base=“xsd:integer“>

<xsd:minInclusive value=“10000“>

<xsd:maxInclusive value=“99999“>

</xsd:restriction>

</xsd:simpleType>

Định nghĩa kiểu myInteger mà phạm vi giá trị của nó từ 10000 đến 99999

minInclusive và maxInclusive là facets mà có thể được sử dụng trong kiểu integer

11/7/2014

51

07.11.2014 151

Ví dụ của kiểu đơn thừa kế 2 (Regular expression)

<xsd:simpleType name=“SKU“><xsd:restriction base=“xsd:string“>

<xsd:pattern value=“\d{3}-[A-Z]{2}“/>

</xsd:restriction>

</xsd:simpleType>

Định nghĩa kiểu mới là SKU

pattern là facet mà được sử dụng trong string Regular expression

Ba số, tiếp theo là dấu gạch ngang, tiếp theo là hai chữ cái trong upper-case ASCII

07.11.2014 152

Ví dụ của kiểu đơn thừa kế 3 (Enumeration)

<xsd:simpleType name=“USState“>

<xsd:restriction base=“xsd:string“>

<xsd:enumeration value=“AK“>

<xsd:enumeration value=“AL“>

<xsd:enumeration value=“AR“>

<!–- and so on ..-->

</xsd:restriction>

</xsd:simpleType>

enumeration facet giới hạn kiểu đơn để đặt một giá trị riêng biệt, rỏ ràng

07.11.2014 153

Kiểu phức

(Complex Types)

11/7/2014

52

07.11.2014 154

Kiểu phức (Complex Type)

Định nghĩa dùng thành phần “complexType“

Bao gồm một cách đặc trưng:

Khai báo thành phần (elementdeclarations)

Con trỏ quy chiếu (element references)

Khai báo thuộc tính (attributedeclarations)

07.11.2014 155

Ví dụ 1 về complexType

07.11.2014 156

Ví dụ 1 về complexType

Định nghĩa kiểu USAddress

Nó bao gồm 5 khai báo thành phần (element declarations) và một khai báo thuộc tính (attribute declaration)

Định nghĩa USAddress chỉ bao gồm những khai báo liên quan đến những kiểu đơn: string, decimal, và NMTOKEN

11/7/2014

53

07.11.2014 157

Ví dụ 2 về complexType

07.11.2014 158

Ví dụ 2 về complexType

Định nghĩa kiểu PurschaOrder

Bao gồm khai báo thành phần quy chiếu kiểu phức (element declarations referencing complex types) như USAddress, Items

Bao gồm khai báo thành phần quy chiếu kiểu đơn định nghĩa trước (element declarations referencing “pre-defined“ simple types): date

07.11.2014 159

Thành phần với thuộc tính

(Element vs. Attribute)

11/7/2014

54

07.11.2014 160

Thành phần với thuộc tính

Khai báo thành phần có thể quy chiếu cho cả hai kiểu phức lẫn kiểu đơn

Tất cả khai báo thuộc tính chỉ có thể quy chiếu cho kiểu đơn:

Bởi vì chúng nó không thể chứa những thành phần con khác

07.11.2014 161

Thuộc tính ref (ref Attribute)

Để sử dụng thành phần hay thuộc tính hiện có tương đối hơn sử dụng thành phần hay thuộc tính khai báo mới

Thành phần hiện có phải là global element -một thành phần mà được khai báo dưới thành phần gốc (root element)

07.11.2014 162

Ví dụ về ref

11/7/2014

55

07.11.2014 163

Những sự kiện

(Occurrences)

07.11.2014 164

Những sự kiện của thành phần

minOccurs

maxOccurs

fixed=“Hannah“

Nếu thành phần xuất hiện (tuỳ chọn), giá trị phải là “Hannah“, mặt khác giá trị được đặt là “Hannah“ bởi bộ xử lý (parser)

default=“Hannah“

Nếu thành phần xuất hiện (tuỳ chọn), giá trị được đặt là cái gì , mặt khác giá trị được đặt là “Hannah“ bởi bộ xử lý (parser)

07.11.2014 165

Ví dụ

11/7/2014

56

07.11.2014 166

Những sự kiện của thuộc tính

Thuộc tính có thể xảy ra một hay không bao gìơ xảy ra

Thuộc tính “use“

required

optional

fixed

default

Thuộc tính “value“

07.11.2014 167

Ví dụ

07.11.2014 168

Ví dụ

<xsd:complexType name=“USAddress“><xsd:requence base=“xsd:string“>

<xsd:element name=“name“ type=“xsd:string“><xsd:element name=“street“ type=“xsd:string“ >...

</xsd:requence><xsd:attribute name=“xsd:country“ type=“xsd:NMTOKEN“ used=“fixed“ value=“US“/>

</xsd:complexType> Sự xuất hiện của thuộc tính country là tuỳ chọn Giá trị của nó phải là US nếu nó xuất hiện Nếu nó không xuất hiện, bộ xử lý sẽ tạo một thuộc

tính country với giá trị US

11/7/2014

57

07.11.2014 169

Thuộc tính

Enumeration

Thành phần simpleType với thuộc tính cơ bản

Thuộc tính cơ bản đặt ra kiểu dữ liệu

07.11.2014 170

Một ví dụ hoàn chỉnh

07.11.2014 171

Ví dụ

11/7/2014

58

07.11.2014 172

Một ví dụ hoàn chỉnh(trang đầu tiên)

07.11.2014 173

Tiếp tục

07.11.2014 174

Kiểu danh sách

(List Type)ôi

11/7/2014

59

07.11.2014 175

Kiểu danh sách (List Type)

Tạo thành những chuỗi kiểu dữ liệu đơn nguyên tử (atomic simple type)

3 kiểu xây dựng danh sách: NMTOKENS, IDREFS, ENTITIES

Sử dụng kiểu danh sách định nghĩa: Mở rộng từ kiểu nguyên tử

facets length, minLength, maxLength,

enumeration

07.11.2014 176

Ví dụ kiểu danh sách

Lược đồ (schema)<xsd:simpleType name=“listOfMyIntType“>

<xsd:list itemType=“myInteger“/>

</xsd:simpleType>

Instance document<listOfMyIntType>20003 15037 95977

95945</listOfMyIntType>

07.11.2014 177

Kiểu danh sách với Facet<xsd:simpleType name=“USStateList“>

<xsd:list itemType=“USState“/></xsd:simpleType>

<xsd:simpleType name=“SIXUSStates“><xsd:restriction base=“USStateList“>

<xsd:length value=“6“/></xsd:restriction>

</xsd:simpleType> Định nghĩa một danh sách chính xác 6 tiêủ bang ở Mỹ

(SixUSStates), đầu tiên định nghĩa một kiểu danh sách mới được gọi là USStateList từ USState và sau đó mở rộng SixUSStates bởi USStateList hạn chế chỉ có 6 phần tử

<sixStates>PA CA NY LA AK</sixStates>

11/7/2014

60

07.11.2014 178

Kiểu hợp nhất

(Union Type)ôi

07.11.2014 179

Kiểu hợp nhất (Union Type)

Cho phép giá trị phần tử hay một thuộc tính để là một hay nhiều instance của một kiểu được vẽ từ sự hợp nhất của nhiều nguyên tử và những kiểu danh sách

facets: pattern và enumeration

07.11.2014 180

Kiểu hợp nhất cho Zipcodes

11/7/2014

61

07.11.2014 181

Explicit Type với Implicit

07.11.2014 182

Explicit Type với Implicit Explicit Type

Là một kiểu dữ liệu mà tên (name) được gán cho kiểu dữ liệu

Thành phần dùng kiểu dữ liệu được định nghĩa chung trong một phần khác nhau của thư mục

Hướng đối tượng trong cùng explicit type được dùng như kiểu dữ liệu cho những thành phần khác nhau

Implicit Type (kiểu không tên)

Dùng khi kiểu dữ liệu không được cần bởi nhiều thành phần

07.11.2014 183

Ví dụ của Explicit Type

11/7/2014

62

07.11.2014 184

Ví dụ của Implicit Type

07.11.2014 185

Nội dung thành phần

(Element Content)

07.11.2014 186

Nội dung thành phần

Nội dung của một thành phần có cấu trúc như thế nào

Có 3 phương pháp khác nhau:

Kiểu phức từ kiểu đơn

Nội dung hỗn hợp

Thành phần hỗn hợp với văn bản

Nội dung rỗng

11/7/2014

63

07.11.2014 187

Kiểu phức từ kiểu đơn

<xsd:element name=“internationalPrice“>

<xsd:complexType><xsd:simpleContent>

<xsd:extension base=“xsd:decimal“>

<xsd:attribute name=“currency“ type=“xsd:string“/>

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

simpleContent chi ra rằng mẫu nội dung của kiểu dữ liệu mới chỉ bao gồm văn bản và không có khai báo thành phần (element declaration)

07.11.2014 188

Nôi dung hỗn hợp

Thành phần con hỗn hợp với văn bản

<letterbody>

<salutation>Dear Mr<name>Robert Smith</name></satulation>Your order of<quantity>1</quantity><productName>Baby monitor</productName>shipped from our warehouse<shipDate>1999-05-21</shipDate>...

</letterbody>

07.11.2014 189

Nội dung hỗn hợp

11/7/2014

64

07.11.2014 190

Nội dung rỗng

Định nghĩa một kiểu dữ liệu mà nó không khai báo bất kỳ thành phần nào trong nội dung của nó

Mâũ nội dung của kiểu dữ liệu rỗng

07.11.2014 191

Nội dung rỗng 1

07.11.2014 192

Nội dung rỗng 2

complexContent

Để hạn chế hay mở rộng mẫu nội dung của kiểu phức

<xsd:restriction base=“xsd:anyType“>

11/7/2014

65

07.11.2014 193

Nội dung rổng 3

<xsd:element name=“internationalPrice“>

<xsd:complexType><xsd:simpleContent>

<xsd:extension base=“xsd:decimal“>

<xsd:attribute name=“currency“ type=“xsd:string“/>

</xsd:extension>

</xsd:simpleContent>

</xsd:complexType>

</xsd:element>

Một kiểu phức định nghĩa không có complexContentđược định nghĩa như ký hiệu đặc biệt cho nội dung phức mà hạn chế anyType

07.11.2014 194

anyType

07.11.2014 195

anyType

Kiểu dữ liệu cơ sở mà từ đó tất cả kiểu đơn và phức được mở rộng

Không ép buộc nội dung trong bất kỳ hướng nào

Kiêủ mặc định khi không kiểu được cho phép <xsd:element name=“anything“

type=“xsd:anyType“> giống như

<xsd:element name=“anything“/>

Dùng nhiều kiểu dữ liệu ép buộc hơn bất cứ khi nào có thể

11/7/2014

66

07.11.2014 196

Chú giải

(Annotation)

07.11.2014 197

Chú giải (Annotation)

Xuất hiện tại phần đầu của hầu hết các cấu trúc của lượt đồ

Có thể có 2 thành phần con Documentation

appInf

Documentation

Cho việc đọc tài liệu dể dàng

appInf

Đối với công cụ ứng dụng, stylesheets và những ứng dụng (application) khác

07.11.2014 198

Ví dụ

11/7/2014

67

07.11.2014 199

Lựa chọn và nhóm

(Choices & Group)

07.11.2014 200

Lựa chọn và Nhóm

Lựa chọn (choice):

Chỉ một con của nó xuất hiện trong một instance

Nhóm (group):

Nhóm các nhóm của thành phần

Sự bắt buộc xa hơn

sequence

Tất cả (all)

Xuất hiện zero hoặc một

Trong bất kỳ câu lệnh

07.11.2014 201

Choice và Sequence Group

11/7/2014

68

07.11.2014 202

Ví dụ cho all

07.11.2014 203

Thuộc tính nhóm (attribute group)

Định nghĩa thuộc tính nhóm dùng thành phần attributeGroup

Quy chiếu trong nhiều định nghĩa và khai báo

Phát triển khả năng dễ đọc và sự duy trì

Chúng nó phải xuất hiện tại phần cuối của định nghĩa kiểu dữ liệu phức hợp

07.11.2014 204

Ví dụ của attributeGroup

11/7/2014

69

07.11.2014 205

CSS

07.11.2014 206

Nội dung

CSS với XML-FO

Lịch sử CSS

Cú pháp CSS

07.11.2014 207

XML và sự trình bày

Tài liệu XML chỉ bao gồm nội dung

Nội dung cần được định dạng cho sự trình bày

Hai lựa chọn cho sự trình bày

CSS (Cascading Stylesheets)

XSL-FO (XSL Formatting Object)

11/7/2014

70

07.11.2014 208

CSS

Không cú pháp XML

Mô tả sự xuất hiện của một phần thành phần trong tư liệu

Không truyền tải

Dữ liệu trong tài liệu được trình bày nhiều hay ít hơn như nó xuất hiện trong tài liệu XML

CSS không thay đổi sự đánh dấu của tài liệu XML

07.11.2014 209

XSL-FO

Cú pháp XML

Miêu tả layout of text trên trang giấy

Có những thành phần cho trang, bố cục của văn bản và hình ảnh,...

Taì liệu XML được truyền tải vào trong XSL-FO mà được trả lại bởi ứng dụng hiển thị

07.11.2014 210

Ba cấp của CSS

CSS1 W3C recommendation năm 1996

Chỉ cho HTML

Được đánh giá chưa hoàn chỉnh

Việc thực thi browser chưa nhất quán

CSS2 Recommendation tại lúc này

Tài liệu XML và HTML

CSS3 (tương lai)

11/7/2014

71

07.11.2014 211

Cú pháp CSS

Không cú pháp XML nhưng không quá khó

Danh sách những phần tử với dạng thông tin

Cho những phần tử có nhận thức về không gian tên, tên hoàn toàn bổ nghĩa được sử dụng

07.11.2014 212

Ví dụ về tài liệu XML

07.11.2014 213

Ví dụ về tài liệu XML (tt)

11/7/2014

72

07.11.2014 214

Ví dụ về CSS Stylesheet

07.11.2014 215

Quy tắc style

Mỗi tên quy tắc đến thành phần hay đặt thành phần được theo dạng tính chất đính kèm bởi {}

Mỗi dạng tính chất có tên và giá trị

Trường hợp không có ý

Không phải tất cả những phần tử có quy tắc style

Những phần tử con thừa hưởng những quy tắc style của cha

Giá trị mặc định vừa phải được cung cấp

07.11.2014 216

Stylesheet và tài liệu XML

CSS Stylesheet được tham dự đầu tiên cho việc sử dụng trong web-pages

Web-browser tìm kiếm cấu trúc thực thi xml-stylesheet trong tài liệu XML

<?xml-stylesheet type=“text/css“ href=“recipe.css“?>

6 pseudo attributes:

type, href, charset, title, media, alternate

11/7/2014

73

07.11.2014 217

Pseudo Attributes

Type: Stylesheet`s MIME media type

text/css cho CSS

text/xml (not text/xsl) cho XSL

href: URL tương đối và tuyệt đối của stylesheet

charset: Tên của đặc tính đặt trong stylesheet được viết

title: tên của stylesheet

07.11.2014 218

Pseudo Attributes

media: Media type được nhằm vào bởi stylesheet

screen, tty, projection, handheld, print, brailled, aural, all

alternate: nói rằng stylesheet lần lượt hay đầu tiên

07.11.2014 219

Selectors

Chỉ ra nhưng thế nào để lựa chọn phần tử cho kiểu dạng

Hầu hết các tên phần tử và danh sách của phần tử

CSS cung cấp những lựa chọn căn bản khác

Không mạnh như Xpath

11/7/2014

74

07.11.2014 220

Chọn lựa phần tử

07.11.2014 221

Lựa chọn thuộc tính

Những dấu ngoặc vuông cho phép chọn những phần tử với một phần của thuộc tính hay giá trị thuộc tính

step[tùy chọn]{display:none}-dấu tất cả phần tử bậc thang mà có thuộc tính tự chọn

*[optional]{display:none}

step[optional=“yes“]{display:none}

07.11.2014 222

Display Property

11/7/2014

75

07.11.2014 223

Font Property

07.11.2014 224

Text Property

07.11.2014 225

Color Property

11/7/2014

76

07.11.2014 226

XSLT

07.11.2014 227

Nội dung

Khái niệm: XSL, XSLT, XSL-FO

Tại sao truyền tải

Mô hình điều hành của XSLT

XSLT Stylesheet Language

template

value-of

apply-templates

for-each

if

when, choose, otherwise

sort

filtering

07.11.2014 228

Thuật ngữ

11/7/2014

77

07.11.2014 229

XSL

eXtensible Stytesheet Language

Một ngôn ngữ cho stylesheet diễn đạt

Làm thành 2 phần

XSL Transformation(XSLT)

XSL Formatting Object (XSL-FO)

07.11.2014 230

Truyền tải

Truyền tải tài liệu XML vào trong

Một tài liệu XML khác

XHTML

WML

Tài liệu HTML

Văn bản

XSLT

Kiểu mẫu W3C cho sự truyền tải XML

07.11.2014 231

Tại sao lại truyền tải?

11/7/2014

78

07.11.2014 232

Hai điểm hiển thị của XML

Trình bày theo hướng phổ biến (POP) Hữu dụng cho Browsers và Editors

Thường dùng cho dữ liệu mà sẽ được dùng bởi con người

Thông điệp hướng theo Middleware (MOM) Hữu ích cho sự thay đổi dữ liệu từ máy

này đến máy khác

Sự đàm thoại từ Business này đến Business khác là một ví dụ hay nhất

07.11.2014 233

Sự quan trọng của sự truyền tải

XSLT thì hữu ích nhiều đến:

Thông tin truyền tải vào trong dạng tầm nhìn trong Browser (POP)

Dữ liệu Business truyền tải giữa những mô hình nội dung (MOM)

07.11.2014 234

XSL trong POP

Tài liệu XML tách biệt nội dung từ sự trình bày

Sự truyền tải có thể được tạo mẫu (hoàn lại, hiển thị) những tài liệu XML

Một kỹ thuật mẫu chung hiển thị XML trong dạng HTML

11/7/2014

79

07.11.2014 235

XSLT trong POP

07.11.2014 236

XSLT trong MOM

Sự quan trọng cho eCommerce, B2B/EDI và sự thực thi nội dung động

Mô hình nội dung khác nhau

Mối quan hệ cấu trúc khác nhau

Những ngữ vựng khác nhau

07.11.2014 237

XSLT trong MOM

11/7/2014

80

07.11.2014 238

XSLT-Truyền tải dữ liệu

07.11.2014 239

Mô hình điều hành XSLT

07.11.2014 240

Mô hình điều hành XSLT

11/7/2014

81

07.11.2014 241

XSLT Processor

Một phần của software Đọc một XSLT stylesheet và nhập liệu tài

liệu XML

Chuyển đổi tài liệu nhập vào trong tài liệu xuất

Qua cấu trúc cơ sở stylesheet được đưa

Thỉnh thoảng gọi stylesheet processor

07.11.2014 242

Ví dụ của XSLT processor

Xây dựng trong browser

IE 5.5 (không phù hợp với mẫu XSLT)

Xây dựng trong web hay application server

Apache Cocoon

Đứng một mình

Michael Kay ‘s SAXON

Apache.org‘s Xalan

07.11.2014 243

XSL Stylesheet

Tài liệu XML đích thức

Đặc trưng của thành phần gốc:

stylesheet hay biến đổi

Cả hai được định nghĩa trong mẫu không gian tên XSLT

http://www.w3c.org/XSL/Transform

xsl như tiền tố thông lệ

XSLT processtor nên phải hiểu cả hai

11/7/2014

82

07.11.2014 244

Ví dụ XSLT 0

07.11.2014 245

Ví dụ tài liệu XML

07.11.2014 246

Tối thiểu nhưng XSLT stylesheet đầy đủ

11/7/2014

83

07.11.2014 247

Kết quả sự thực thi của XSLT

07.11.2014 248

Giải thích kết quả

Đưa stylesheet rỗng vào bất kỳ tư liệu XML nào:

Những thành phần được đặt ngang liên tiếp

Nội dung của mỗi thành phần được đặt trong xuất

Thuộc tính không được đặt ngang

Xử lý mặc định

Không có bất kỳ template đặc biệt nào XSLT processor quay lại xử lý mặc định

Cần cho những template

07.11.2014 249

Cấu trúc cơ sở xml-stylesheet

11/7/2014

84

07.11.2014 250

Cấu trúc cơ sở thực thi xml-stylesheet

Bao gồm như phần của tài liệu XML

Báo cho XML-aware browser nơi tìm thấy stylesheet kết hợp

<?xml version=“1.0“>

<?xml-stylesheet

type=“text/xml“

href=http://www.oreilly.com/styles/people.xsl?>

<people>

......

07.11.2014 251

Template

07.11.2014 252

Templates

Theo dỏi việc xuất được tạo từ việc nhập

xsl:template dạng thành phần

Thuộc tính match bao gồm một Xpath expression

Xpath expression đồng nhất input node set mà nó so khớp

Đối với mỗi node trong input node set, nội dung template (những thứ giữa thẻ xsl:template) được minh dụ hóa và được nhập vào cây xuất

11/7/2014

85

07.11.2014 253

Ví dụ XSLT 1

07.11.2014 254

XSLT stylesheet 1 rất đơn giản

<?xml version=“1.0“>

<xsl:stylesheet version=“1.0“

xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“people“>

</xsl:template>

</xsl-stylesheet>

Dạng đơn giản nhất của mẫu XPath là tên của một thành phần đơn

07.11.2014 255

Ví dụ tài liệu XML

11/7/2014

86

07.11.2014 256

Kết quả

07.11.2014 257

Giải thích kết quả

Chỉ có một node trong kết quả node set – chỉ có một thành phần <people>

Đối với node, nó sẽ thay thế nội dung template, chính là “null“

07.11.2014 258

Ví dụ XSLT 2

11/7/2014

87

07.11.2014 259

Ví dụ stylesheet 2 rất đơn giản

07.11.2014 260

Kết quả

07.11.2014 261

Ví dụ XSLT 3

11/7/2014

88

07.11.2014 262

Ví dụ stylesheet 3 rất đơn giản

<?xml version=“1.0“>

<xsl:stylesheet version=“1.0“

xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“person“>

A Person

</xsl:template>

</xsl-stylesheet>

Literal data character – văn bản copy từ stylesheet vào trong tư liệu xuất

07.11.2014 263

Ví dụ tài liệu XML

07.11.2014 264

Kết quả

<?xml version=“1.0“ encoding=“utf-8“?>

A Person

A Person

Khoảng trắng ngoài thành phần của <person> bảo quản

Thành phần person được thay thế bởi những nội dung của template

11/7/2014

89

07.11.2014 265

Ví dụ XSLT 4

07.11.2014 266

Ví dụ stylesheet 4 rất đơn giản

<?xml version=“1.0“>

<xsl:stylesheet version=“1.0“

xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“person“>

A Person

</xsl:template>

</xsl-stylesheet>

Cùng stylesheet với ví dụ 3 nhưng khác tư liệu nhập XML

07.11.2014 267

Ví dụ tư liệu XML mới

11/7/2014

90

07.11.2014 268

Kết quả

07.11.2014 269

Ví dụ XSLT 5

07.11.2014 270

Ví dụ stylesheet 4 rất đơn giản

<?xml version=“1.0“>

<xsl:stylesheet version=“1.0“

xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“person“>

<p>A Person</p>

</xsl:template>

</xsl-stylesheet>

Literal data character – thành phần copy từ stylesheet đến trong tư liệu xuất

11/7/2014

91

07.11.2014 271

Kết quả

<?xml version=“1.0“ encoding=“utf-8“?>

<p>A Person</p>

<p>A Person</p>

Nội dung Template chứa những thẻ và character data

07.11.2014 272

xsl-valueof

07.11.2014 273

Thành phần xsl:value-of

Giải nén string value của một thành phần hay một thuộc tính và viết nó đến chổ xuất

Nội dung văn bản của những thành phần sau tất cả những thẻ được chuyển đi và thực thể tham chiếu được giải quyết

Thuộc tính select chứa trong Xpath expression đồng nhất một thành phần hay một thuộc tính Nếu nó có thể là một node set, trong trường hợp

này, string value của nút đầu tiên sẽ được lấy

11/7/2014

92

07.11.2014 274

Ví dụ XSLT 6

07.11.2014 275

Ví dụ Stylesheet

Giải nén tên của tất cả mọi người

<?xml version=“1.0“><xsl:stylesheet version=“1.0“xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“person“><p>

<xsl:value-of select=“name“/></p>

</xsl:template>

</xsl-stylesheet>

07.11.2014 276

Tài liệu XML

11/7/2014

93

07.11.2014 277

Kết quả

07.11.2014 278

xsl:apply-templates

07.11.2014 279

xsl:apply-templates

XSLT processor đọc (đi ngang) tài liệu XML nhập liên tục từ đầu tới cuối

Templates được kích hoạt theo quy định chúng so khớp với những thành phần bắt gặp

Template cho cha sẽ được kích hoạt trước con

11/7/2014

94

07.11.2014 280

xsl:apply-templates

Quy ước đi ngang có thể được thay đổi bởi apply-templates Nó có thể chỉ ra thành phần hay những

thành phần nên được thực thi kế tiếp

Nó có thể chỉ ra một thành phần hay nhiều thành phần nên được thực thi trong phần giữa của thành phần khác trong quá trình thực thi

Nó có thể tránh một phần những thành phần từ quá trình đang thực thi

07.11.2014 281

xsl:apply-templates

xsl:apply-templates được dùng trong một tập mẫu để gọi những tập mẫu khác

Thuộc tính select chứa Xpath expression được dùng làm mắt ngữ cảnh mà sau đó các tập mẫu khác sẽ được kiểm tra dựa trên nó apply-templates không có thuộc tính

select thì mắt ngữ cảnh hiện hành sẽ được dùng

07.11.2014 282

Ví dụ XSLT 7

11/7/2014

95

07.11.2014 283

Ví dụ xsl:apply-template

Xuất một tài liệu theo như yêu cầu sau: Last name sau đó đến First name

Chỉ name không profession không hobby

<?xml version=“1.0“ encoding=“utf-8“>

Turing

Alan

Feyman

Richard

07.11.2014 284

Ví dụ xsl:apply-template

07.11.2014 285

Ví dụ tài liệu XML

11/7/2014

96

07.11.2014 286

Kết quả

07.11.2014 287

Giải thích

Hai thành phần <name> trong node set

Những nội dung <xsl:value-of> của hai thành phần <name> sẽ ở trong cây xuất

Những thành phần khác được hiển thị trong mode mặc định

07.11.2014 288

Ví dụ XSLT 8

11/7/2014

97

07.11.2014 289

Ví dụ xsl:apply-templates

07.11.2014 290

Kết quả

07.11.2014 291

xsl:apply-template

Rất tiện ích khi những thành phần con có những template của riêng nó

<xsl:template macht=“people“>

<html>

<head><title>Famous Scientist</title></head>

<body>

<xsl:apply-template select=“person“/>

</body>

</html>

</xsl>

11/7/2014

98

07.11.2014 292

xsl:apply-template

Thay thế mỗi thành phần people với thành phần html

Thực thi tất cả con person của thành phần people hiện tại

Thêm vào việc xuất của bất kỳ thành phần so khớp vào trong thành phần body của tài liệu xuất

07.11.2014 293

Ví dụ

07.11.2014 294

Kết quả

11/7/2014

99

07.11.2014 295

Thuộc tính

07.11.2014 296

Thuộc tính

07.11.2014 297

Thuộc tính

Quy tắc mặc nhận không ứng dụng

apply-templates phải trình bày để xuất những giá trị của những thuộc tính

11/7/2014

100

07.11.2014 298

Kết quả

07.11.2014 299

Modes

07.11.2014 300

Modes

Cùng nội dung nhập cần xuất hiện nhiều trong tài liệu xuất sắp xếp xuyên qua những tài liệu khác nhau Tiêu đề của chương

Table của nội dung

Tự trong chương của nó

Thuộc tính mode xsl:template

xsl:apply-templates

11/7/2014

101

07.11.2014 301

Ví dụ với thuộc tính mode

07.11.2014 302

Kết quả

07.11.2014 303

Filtering

11/7/2014

102

07.11.2014 304

Filtering

Cùng thực thi tất cả các thành phần quan hệ đến một nút hoặc một thành phần

Cần một hướng để lọc những thành phần thật tốt

Điều này được hoàn thành với một cấu trúc giám sát Xpath

07.11.2014 305

Ví dụ của Filtering

<?xml version=“1.0“>

<xsl:stylesheet version=“1.0“

xmlns:xsl=http://www.w3c.org/1999/XSL/Transform>

<xsl:template match=“person“>

<xsl:apply-templates select=“*[not(self::hobby)]“/>

</xsl:template>

</xsl-stylesheet>

Từ khóa được cần để xác nhận XSLT processor mà nút theo là một con của node hiện tại

07.11.2014 306

Kết quả

11/7/2014

103

07.11.2014 307

xsl:for-each

07.11.2014 308

xsl:for-each

Vòng lặp qua một node set

<xsl:for-each></xsl:for-each>

07.11.2014 309

Ví dụ của <xsl:for-each>

11/7/2014

104

07.11.2014 310

Kết quả

07.11.2014 311

xsl-if

07.11.2014 312

xsl-if

Có thể kiểm tra nội dung cho những giá trị chắc chắn với XSL

<xsl:if test=criterial></xsl:if>

Thuộc tính test được cần đến và sẽ là true hoặc false

11/7/2014

105

07.11.2014 313

Ví dụ của xsl:if

07.11.2014 314

Kết quả

07.11.2014 315

xsl:choose

11/7/2014

106

07.11.2014 316

xsl:choose, xsl:when, xsl:otherwise

Có thể chọn nội dung dùng:

<xsl:choose>

<xsl:when test=criterial>

</xsl:when>

<xsl:otherweise>

</xsl:otherweise>

</xsl.choose>

Thuộc tính test làm việc trong cùng kiểu như xsl:if

07.11.2014 317

xsl:choose, xsl:when, xsl:otherwise

07.11.2014 318

Kết quả

11/7/2014

107

07.11.2014 319

xsl:sort

07.11.2014 320

Ví dụ của xsl:sort (Ascending)

XSLT cung cấp một cách tốt để phân loại những tài liệu bởi những nội dung thành phần

Cấu trúc để dùng là: <xsl:sort select=selection></xsl:sort>

Sự phân loại chỉ có thể hòan thành theo những cấu trúc sau: <xsl:apply-templates..../>

<xsl:for-each..../>

07.11.2014 321

Ví dụ của xsl:sort

11/7/2014

108

07.11.2014 322

Kết quả

07.11.2014 323

Ví dụ của xsl:sort (Descending)

07.11.2014 324

Kết quả

11/7/2014

109

07.11.2014 325

xsl:copy

07.11.2014 326

xsl:copy

Được dùng để tạo tài liệu XML

Copying được dùng với cấu trúc

<xsl:copy></xsl:copy>

Chỉ đến máy xử lý mà việc xuất nên là XML thay thế HTML

<xml:output method=“xml“/>

07.11.2014 327

Ví dụ của xsl:copy

11/7/2014

110

07.11.2014 328

Kết quả

07.11.2014 329

Ví dụ của xsl:copy

07.11.2014 330

Kết quả

11/7/2014

111

07.11.2014 331

DOM

(Document Object Model)

07.11.2014 332

Nội dung

Tính chất và đặc điểm

DOM node tree và node types

Java interfaces

Lập trình DOM

Traversing DOM

Manipulating DOM

Creating a new DOM

Writing out (Serializing) DOM

07.11.2014 333

Nền tảng

DOM là một dạng chuẩn được định nghĩa bởi W3C, chỉ như XML

DOM không được thiết kế đặc trưng cho Java (không như SAX)

DOM là cross-platform và cross-language Dùng OMG `s IDL để định nghĩa những

giao diện

IDL là ngôn ngữ nối kết

11/7/2014

112

07.11.2014 334

Đặc điểm của DOM

Truy xuất tài liệu XML như một cấu trúc cây

Hình thành hầu hết là những nút thành phần và những nút văn bản

Có thể “walk“ trong cây từ trước ra sau

Cần bộ nhớ lớn

Dùng nó để walking và modifying cây

07.11.2014 335

Dom trong Action

07.11.2014 336

DOM cây và nút

Tài liệu XML được hiển thị như một cây

Cây được tạo thành từ nút

Có 12 loại kiểu nút khác nhau

Nút có thể chứa những nút khác (phụ thuộc vào loại nút)

Nút cha chứa những nút con

11/7/2014

113

07.11.2014 337

Loại nút

Document node

Document Fragment node

Element node

Attribute node

Text node

Comment node

Processing instruction node

Document type node

Entity node

Entity reference node

CDATA section node

Notation node

07.11.2014 338

DOM cây phân cấp

Một document node chứa

Một element node (nút thành phần gốc)

Một hay nhiều processing instruction node

Một element node có thể chứa

Những element node khác

Một hay nhiều text node

Một hay nhiều attribute node

Một attribute node có thể chứa

Một text node

07.11.2014 339

Ví dụ XML Document

11/7/2014

114

07.11.2014 340

Ví dụ DOM cây

XML Document node Element node “people“

Element node “person“ Element node “name“

Element node “first_name“

text node “Alan“

Element node “last_name“

text node “Turing“

Element node “profession“

Text node “computer scientist“

Attribute node “born“

Text node “1912“

07.11.2014 341

DOM và Java programming

Làm thế nào để hiển thị mỗi loại kiểu node trong chương trình Java?

Java interface type

Làm thế nào để gói gọn những đặc điểm chung của những loại kiểu nút

Java interface hierarchy

07.11.2014 342

Java Interface Hierarchy

Node interface Document interface DocumentFragment interface DocumentType interface DocumentInstruction interface CharacterData interface

Comment Text

CDATASection

Element interface Attr interface EntityReference interface Entity interface Notation interface

11/7/2014

115

07.11.2014 343

Những Interface khác cho DOM

NodeList

NamedNodeMap

DOMImplementation

07.11.2014 344

Node Interface

Loại dữ liệu đầu tiên trong DOM

Trình bày một nút đơn trong cây DOM

Mỗi nút là Node Interface Type Từ khi mỗi nút là một Node interface

node, mỗi nút có thể thực thi trong cùng một hứơng (polymorphis)

Những giao diện đặc trưng chứa thêm những phương thức hoặc những phương thức thích hợp

07.11.2014 345

Những phương thức trong Node Interface

Node interface methods tiện lợi

public short getNodeType()

public String getNodeName()

public String getNodeValue()

public NameNodeMap getAttributes()

public NodeList getChildNodes()

Không phải tất cả phương thức đều làm có mục đích cho tất cả kiểu nút, tuy nhiên

GetNodeValue() cho Element node

GetAttributes() cho Comment Node

11/7/2014

116

07.11.2014 346

Node Interface-Node Type

07.11.2014 347

Node Interface

07.11.2014 348

Node Interface

11/7/2014

117

07.11.2014 349

NodeList Interface

Hiển thị tập hợp của nút

Trả lại kiểu của getChildNodes()phương thức của Node interface

public interface NodeList()

public Node item (int index);

public int getLength();

}

07.11.2014 350

NamedNodeMap interface

Hiển thị tập hợp của nút mà mỗi nút được đồng nhất bởi name

Trả lại kiểu của getAttributes()phương thức của Node interface

07.11.2014 351

NameNodeMap interface

11/7/2014

118

07.11.2014 352

Document Node

Nút gốc

Hiển thị tài liệu hoàn toàn

Loại nút con

Một Element node

Document type node tùy chọn

Processing instruction nodes

Comment nodes

07.11.2014 353

Document Interface

Chứa factory methods cho những nút tạo khác

Elements, text nodes, comments, processing instructions,...

Phương thức để lấy nút thành phần gốc

07.11.2014 354

Document Interface

11/7/2014

119

07.11.2014 355

Ví dụ

07.11.2014 356

Element node

Hiển thị một thành phần

Bao gồm thẻ đầu, thẻ cuối và nội dung

Những loại nút con

Element nodes

Attribute nodes

ProcessingInstruction nodes

Comment nodes

Text nodes

CDATASection nodes

EntityReference nodes

07.11.2014 357

Element Interface

11/7/2014

120

07.11.2014 358

Element node

Dùng những phương thức của giao diện nút

Tên thành phần

getNodeName()

Tên thuộc tính và giá trị

NamedNodeMap getAttributes()

Thành phần con

NodeList getChildNodes()

07.11.2014 359

Ví dụ Element Node

07.11.2014 360

CharacterData Interface

Hiển thị mọi thứ mà là text

Super interface của

Text interface

Comment interface

11/7/2014

121

07.11.2014 361

Character Interface

07.11.2014 362

Text Node

Hiển thị nội dung văn bản của thành phần hay thuộc tính

Chỉ chứa hoàn toàn text không đánh dấu (mark up)

Một text node cho việc chạy tiếp cận của một text hoàn toàn Thành phần với không có sub-thành phần

Text được hiển thị như một đối tượng text đơn

Thành phần với những sub-thành phần

Nhiều đối tượng text

07.11.2014 363

Text node

Những phương thức text node

getNodeValue() trả lại text

Giống như phương thức getData() của CharacterData interface

11/7/2014

122

07.11.2014 364

Text Interface

07.11.2014 365

Comment Node

Hiển thị comment

Child Node Types

Không

Phương thức Node Interface

getNodeValue() trả lại text

07.11.2014 366

Comment Interface

11/7/2014

123

07.11.2014 367

CDATA Section Node

Hiển thị một CDATA section

Child node types

Không

Phương thức Node interface

getNodeValue() trả lại text

07.11.2014 368

CDATASection interface

07.11.2014 369

Code ví dụ

11/7/2014

124

07.11.2014 370

Attribute Node

Hiển thị một thuộc tính

Child node types

Text node

Entity reference node

Những phương thức node interface

getNodeName() trả lại tên của thuộc tính

getNodeValue() trả lại giá trị của thuộc tính

07.11.2014 371

Attribute Interface

07.11.2014 372

Document Type Node

Hiển thị sự miêu tả loại tư liệu

Child node types

Không

11/7/2014

125

07.11.2014 373

DocumentType Interface

07.11.2014 374

Processing Instruction Node

Hiển thị một processing instruction <?xml-stylesheet href=“XSL\JavaXML.html.xsl“

type=“text/xsl“?>

Child node type

Không

Những phương thức Node interface

getNodeName() trả lại target Giống như getTarget() của ProcessingInstruction

interface

getNodeValue() trả lại rest Giống như getData() của ProcessingInstruction

interface

07.11.2014 375

Ví dụ code

11/7/2014

126

07.11.2014 376

Processing Instruction interface

07.11.2014 377

Entity Node

Hiển thị một thực thể (không phải là một thực thể tham chiếu)

Child Node types Element nodes

ProcessingIntruction nodes

Comment nodes

Text nodes

CDATASection nodes

EntityReference nodes

07.11.2014 378

Entity interface

11/7/2014

127

07.11.2014 379

DOM Programming Procedures

Tạo một một đối tượng parser

Set Features và Read Properties

Phân tích tư liệu XML và lấy đối tượng Document

Thực thi những toán tử Traversing DOM

Manipulating DOM

Creating a new DOM

Writing out DOM

07.11.2014 380

Tạo một đối tượng Parser

Chưa được chuẩn hóa:

Đặc trưng DOM không chỉ ra tạo một đối tượng parser như thế nào

API khác nhau được dùng phụ thuộc vào sự thực thi

Khả năng trao đổi code bị ảnh hưởng

Nguyên nhân dùng JAXP

07.11.2014 381

Code ví dụ (Xerces)

11/7/2014

128

07.11.2014 382

Set Features và Read Properties

Chuẩn hóa cho cả hai SAX 2 và DOM level 2

Những tính chất

Tính chất chung

Tính chất đặc trưng DOM

Tính chất đặc trưng SAX

07.11.2014 383

Ví dụ Code

07.11.2014 384

Phân tích tư liệu XML và trả lại đối tượng tài liệu

Trước khi bất cứ toán tử DOM nào xảy ra, thì tài liệu XML cần được phân tích và đối tượng tài liệu cần được tạo

Không được chuẩn hóa bởi W3C

Lý do cho việc sử dụng JAXP

11/7/2014

129

07.11.2014 385

Ví dụ Code (Xerces)

07.11.2014 386

Thực thi những toán tử DOM

Traversing DOM

Manipulating DOM

Appending nodes

Removing nodes

Modifying nodes

Generating a new DOM

Serializing DOMb

Q:subclassing DOM

07.11.2014 387

Traversing DOM Tree

http://www.w3.org/TR/DOM-Level-2-Traversal-Range/traversal.html

org.w3c.dom.traversal.*

Interfaces

DocumentTraversal

NodeIterator

NodeFilter

TreeWalker

11/7/2014

130

07.11.2014 388

DocumentTraversal Interface

Bao gồm những phương thức mà tạo ra iterators và tree-walkers để di chuyển từ một node đến những con của nó trong sự sắp xếp tài liệu

Trong DOMs mà hổ trợ Traversal Feature, DocumentTraversal sẽ được thực thi bởi cùng một đối tượng mà thực thi Document interface Document.isSupported(“Traversal“,

“2.0“)

07.11.2014 389

DocumentTraversal Interface

07.11.2014 390

Ví dụ Code

11/7/2014

131

07.11.2014 391

NodeIterator interface

Được dùng để bước qua một set of nodes cũng như set of nodes trong một NodeList Document subtree

Result of a query

Đối tượng sự thực thi của interface lấy trả lại từ phương thức createNodeIterator() của DocumentTraversal interface

07.11.2014 392

NodeIterator interface

07.11.2014 393

NodeFilter interface

Được dùng để lọc ra nút đơn

Được dùng với NodeIterator và TreeWalker

Ứng dụng trong determining next node

Phải thực thi nó

Chúa WhatToShow flags

11/7/2014

132

07.11.2014 394

NodeFilter Interface

07.11.2014 395

TreeWalker Interface

Được dùng để tìm vị trí logical view của một tree (hoặc subtree)

Làm việc với logical view của tree Tree hay subtree nơi mà những nút được

lọc ra ngoài qua whatToShow flags và lọc (nếu bất cứ)

Khác với non-filtered tree Cấu trúc cây

Cha và những mối quan hệ ruột

07.11.2014 396

TreeWalker Interface

11/7/2014

133

07.11.2014 397

Ví dụ

07.11.2014 398

Manipulating DOM

Tạo mới một nút

Cộng một nút con

Xóa một nút con

Thay đổi giá trị của nút

Bình thường hóa nút text

07.11.2014 399

Tạo một nút mới và cộng thêm một nút con

11/7/2014

134

07.11.2014 400

Xóa nút con

07.11.2014 401

Thực thi một DOM mới

Thực thi một DOM mới từ đầu

Chưa có một dạng chuẩn DOM

Dùng sự thực thi Apache Xerces

org.apache.xerces.dom.DocumentImpl

WMLDocumentImpl

HTMLDocumentImpl

07.11.2014 402

Ví dụ

11/7/2014

135

07.11.2014 403

Serializing DOM

Không chuẩn DOM Org.apache.xml.serialize.* package

Serialize DOM vào trong một string Được dùng để tạo tài liệu XML

Interfaces Serializer

Classes XML Serializer

OutputFormat

07.11.2014 404

Serializer Interface

Interface cho sự thực thi một DOM serializer

BaseMarkupSerializer

HTMLSerializer

TextSerializer

XMLSerializer

Chứa phương thức factory cho SAX và DOM serializer

Chứa những phương thức static cho serializing DOM

07.11.2014 405

OutputFormat Class

Chỉ ra một kiểu dạng xuất để kiểm soát serializer

Mặc định cho

Encoding

indentation

line separator

Mặc định encoding là UTF-8

11/7/2014

136

07.11.2014 406

Ví dụ

07.11.2014 407

Bình thường hóa nút Text

Nút Text bao gồm những ký tự dòng mới

Sự bình thường hóa làm giảm sự khác nhau giữa dòng cuối cùng với một dòng mới đơn

Sự bình thường hóa làm giảm những ký tự với nhiều khoảng trắng với ký tự một khoảng trắng

Sự bình thường hóa bảo đảm rằng những nút Text không có những nút Text kế cận

Hữu ích để so sánh những tài liệu XML

07.11.2014 408

Ví dụ

11/7/2014

137

07.11.2014 409

Error Handling

DOMException

Cho nhiều những phương thức DOM

SAXException

Cho phương thức parse()

07.11.2014 410

Ví dụ Code

07.11.2014 411

Error Handler (Xerces)

Cùng một lược đồ error handler làm việc cho cả hai SAX và DOM trong sự thực thi Xerces

Cả hai SAXParser và DOMParser là subclass của org.apache.xerces.framework.XMLParser

Cả hai code của DOM và SAX chia sẻ cùng phương thức bao gồm error handlers

11/7/2014

138

07.11.2014 412

Ví dụ Code

07.11.2014 413

Demo và Code Review

07.11.2014 414

Lợi ích của DOM

Cung cấp sự thay đổi truy xuất ngẫu nhiên của một XML file

Một DOM có thể được tạo từ đầu hoặc một file đang tồn tại có thể thay đổi trong bộ nhớ

11/7/2014

139

07.11.2014 415

Sự rút lui của DOM

Tài liệu lớn có thể có vấn đề từ khi toàn bộ tài liệu được đọc trong bộ nhớ

Sự thực thi có thể tồi tệ hơn khi dùng DOM với tư liệu lớn và (hoặc) khả năng tồn tại của giới hạn của bộ nhớ

Không hổ trợ chuẩn cho việc đọc tài liệu hay viết mô hình DOM đến những file

07.11.2014 416

SAX

(Simple API for XML)

07.11.2014 417

Nội dung

Phân tích và ứng dụng

Cơ bản lịch sử SAX

Mô hình SAX event

Error handling

Khi sử dụng SAX

Demo và code

11/7/2014

140

07.11.2014 418

Phân tích và ứng dụng

Phân tích

Kiểm tra tính chất tề chỉnh và hợp lệ

Đọc

Ứng dụng

Thao tác

Tạo

Viết và gửi

07.11.2014 419

Lịch sử cơ bản SAX

API đơn giản cho XML

Bắt đầu như project community-driven xml-dev mailing list

Được thiết kế nguyên thủy như Java API Những cái khác (C++, Python, Perl) bây giờ

được hổ trợ

SAX 2

Không gian tên

07.11.2014 420

Những tính chất SAX

Event-driven

Cung cấp Event-handlers

Nhanh và nhẹ

Tài liệu không phải hoàn toàn trong bộ nhớ

Chỉ truy xuất đọc liên tiếp

One lần truy xuất

Không hổ trợ sự thay đổi của tài liệu

11/7/2014

141

07.11.2014 421

Mô hình thực thi SAX

07.11.2014 422

Lập trình SAX

Tập hợp giao diện và lớp của Java

org.xml.sax package

Giao diện

Parser

XMLReader

Event handlers

ContentHandler

07.11.2014 423

Loại giao diện Java căn bản

11/7/2014

142

07.11.2014 424

Cấu trúc lập trình SAX

07.11.2014 425

Giao diện XMLReader

Hiển thị SAX parser

Thực thi SAX parser phải thực thi giao diện này

Phương thức cho

Đăng ký event handlers

Bắt đầu phân tích

Cấu hình những nét và tính chất

Hợp lệ bật và tắt

07.11.2014 426

Giao diện XMLReader

11/7/2014

143

07.11.2014 427

XMLReader Instance

Đối tượng thực thi cụ thể giới hạn trong giao diện XMLReader

Phải được tạo trước khi phân tích

Được tạo bởi sử dụng phương thức static của phương thức createXMLReader() của lớp hổ trợ XMLReaderFactory()

07.11.2014 428

Ví dụ 1 XMLReader

07.11.2014 429

Ví dụ 2 XMLReader

11/7/2014

144

07.11.2014 430

Ví dụ 3 XMLReader

07.11.2014 431

Ví dụ 4 XMLReader

07.11.2014 432

Setting Features

Phương thức setFeature(String, boolean) của giao diện XMLReader

Features

Features chung

SAX Features

DOM Features

11/7/2014

145

07.11.2014 433

Features

07.11.2014 434

Ví dụ

07.11.2014 435

Phương thức Parse

11/7/2014

146

07.11.2014 436

Ví dụ

07.11.2014 437

Ví dụ

07.11.2014 438

Đối tượng InputSource

Gói gọn thông tin về input source như một đối tượng đơn

Chuyển tới phương thức XMLReader.parse()

Bao gồm: Public identifier

System identifier

A byte stream

A character stream

11/7/2014

147

07.11.2014 439

Parse trên InputSource

Nếu charater stream tồn tại, parse sẽ đọc stream trực tiếp

Ngoài ra nếu byte stream tồn tại, parse sẽ đọc byte stream

Ngoài ra mở một kết nối URI đến resource được chỉ ra trong hệ thống identifier

07.11.2014 440

SAX Event Handlers

Giao diện

ContentHandler

ErrorHandler

DTDHandler

EntityResolve

Attributes

Lớp

DefaultHandler

07.11.2014 441

SAX Event Handlers

11/7/2014

148

07.11.2014 442

Giao diện ContentHandler

07.11.2014 443

Một ví dụ SAX đơn giản: Parser

07.11.2014 444

Một ví dụ SAX đơn giản: Event Handler

11/7/2014

149

07.11.2014 445

Character Data

Character Data Void character(char [] ch, int start, int

length) throws SAXException

Parser được cho phép để ngưng character data trong bất kỳ trường hợp nào mong muốn

Character data trong Unicode bất chấp lược đồ encoding chỉ ra trong tư liệu XML

07.11.2014 446

Khoảng trắng

Khoảng trắng

Nonvalidating parse

void characters (char [] ch, int start, int length) throws SAXException

Validating parse

void ignorableWhiteSpace (char [] ch, int start, int length) throws SAXException

“Ignorable white space“ bao gồm khoảng trắng, dòng mới và tab

07.11.2014 447

Giao diện thuộc tính

11/7/2014

150

07.11.2014 448

Giao diện Locator

07.11.2014 449

Giao diện Locator

SAX parser chuyển những đối tượng đối tượng thực thi của giao diện Locator đến ContentHandler.setDocumentLocator()

Nó được trữ đến tham chiếu địa phương nếu ứng dụng cần nó

07.11.2014 450

Ví dụ Locator

11/7/2014

151

07.11.2014 451

Giao diện ErrorHandler

07.11.2014 452

Phương thức DTDHandler

07.11.2014 453

Giao diện EntityResolve

Public interface EntityResolve{

InputSource resolveEntity(String public ID, String systemID) throws SAXException

}

Đây là phương thức được dùng để trả lại InputSource để nội dung của thực thể ngoài có thể đọc

Một thực thể ngoài

Những thực thể phân ngữ bên ngoài

Những thực thể chưa phân ngữ

11/7/2014

152

07.11.2014 454

Lớp DefaultHandler

Lớp hổ trợ

Thực thi ContentHandler

ErrorHandler

DTDHandler

EntityResolver

Chỉ subclass và viết đè những phương thức mà chúng ta quan tâm

Tùy chọn hoàn toàn cho sử dụng

07.11.2014 455

Ưu điểm của SAX

Đơn giản và nhanh

Hữu ích khi cấu trúc dữ liệu được cần cho mô hình của tư liệu XML

Có thể phân tích bất kỳ độ lớn của tài liệu nào không cần phải sử dụng bộ nhớ nén

Có thể được dùng để kéo tập hợp của thông tin tài liệu

07.11.2014 456

Nhìn lại SAX

SAX chỉ cung cấp việc truy xuất đọc

Không có truy xuất ngẫu nhiên đến tư liệu

Tìm kiếm tài liệu không dể dàng

11/7/2014

153

07.11.2014 457

XML và cơ sở dữ liệu

07.11.2014 458

Nội dung

Mở đầu

Sự giống nhau và khác nhau giữa cơ sở dữ liệu và XML

Loại cơ sở dữ liệu XML

Trữ dữ liệu XML trong RDBMS

Sản phẩm

07.11.2014 459

Mở đầu

Ứng dụng muốn giả quyết dữ liệu trong kiểu XML

Cần cho quản lý tài liệu/dữ liệu XML

Store, Retrieve, Search, Update

Cơ sở dữ liệu đang được sử dụng thành công cho việc quản lý dữ liệu

Cả hai ảnh hưởng như thế nào?

11/7/2014

154

07.11.2014 460

Sự giống nhau với cơ sở dữ liệu

Trữ: Table với tài liệu XML

Lược đồ: Lược đồ cơ sở dữ liệu với DTD, ngôn ngữ lược đồ XML

Ngôn ngữ Query: SQL với XQL, XML-QL, QUILT

Giao diện lập trình: JDBC với SAX, DOM

07.11.2014 461

Khác nhau với cơ sở dữ liệu

Storge mechanism

Indexing

Built-in security

Transaction support

Data integrity

Multi-user access

Query across multiple data sources

07.11.2014 462

Quản lý dữ liệu với quản lý tư liệu

Quản lý dự liệu:

Cần cơ sở dữ liệu cho trữ dữ liệu

Relational hay Object database

Quản lý tư liệu

Cần hệ thống quản lý nội dung

Hệ thống quản lý nội dung có thể được xây dựng trên cơ sở dữ liệu

11/7/2014

155

07.11.2014 463

Loại cơ sở dữ liệu XML

XML enabled database

XML được dùng cho việc xuất và nhập

Những mối quan hệ table bên trong

Middleware chuyển đổi giữa XML và relational database tables

Native XML database

Dữ liệu XML được trữ trong kiểu native của nó

07.11.2014 464

XML enabled database

Pros

Cung cấp kỹ thuật cơ sở dữ liệu

Cons

Sự chuyển đổi giữa XML và cơ sở dữ liệu được cần:

Chuyển đổi thực thi hòan toàn

Thông tin cấu trúc XML phức tạp rất khó chuyển đổi sang tables

Có thể không xử lý đủ tốt cho Unicode

07.11.2014 465

Native XML database

Pros