XML: Bài 6.1. Giới thiệu về XSL


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong bài học đầu tiên này, Giới thiệu về XSL, bạn sẽ học cách:

  • Định nghĩa XSL, XSLT và mục đích của chúng.
  • Giải thích cấu trúc và cú pháp của XSL.
  • Phân biệt giữa CSS và XSL.

6.1.1. Giới thiệu về XSL

Biểu định kiểu là một tập hợp các lệnh cho bộ xử lý (chẳng hạn như trình duyệt Web hoặc trình đọc tài liệu) cách hiển thị hình thức trực quan của nội dung trong một trang Web.

Các biểu định kiểu thường chứa các hướng dẫn như:

  • Đánh số các số liệu tuần tự trong toàn bộ tài liệu.
  • Hiển thị các liên kết siêu văn bản bằng màu xanh lam.
  • Định vị văn bản và hình ảnh trên trang Web.
  • Tạo bố cục được tối ưu hóa cho màn hình nhỏ cho điện thoại di động.

Cascading Style Sheet (CSS) là một công nghệ biểu định kiểu được sử dụng để định dạng nội dung HTML.

Ngôn ngữ trang tính kiểu mở rộng (eXtensible Stylesheet Language - XSL) được phát triển bởi World Wide Web Consortium (W3C) dùng để mô tả cách hiển thị tài liệu XML. Hình 6.1 cho thấy một ví dụ về style sheet.

Mô tả XSL

Hình 6.1: Biểu định kiểu

6.1.2. eXtensible Stylesheet Language - XSL

XSL là một ngôn ngữ dựa trên XML được sử dụng để tạo các biểu định kiểu. XSL được thiết kế để định dạng nội dung XML cho mục đích hiển thị và cũng có khả năng chuyển đổi hoàn toàn các tài liệu XML. XSL là một thông số kỹ thuật từ World Wide Web Consortium (W3C). Đề xuất chuyển đổi XSL mô tả quá trình chuyển đổi tài liệu XML, sử dụng công cụ chuyển đổi và XSL. Tài liệu XML và biểu định kiểu XSL được cung cấp làm đầu vào cho công cụ chuyển đổi XML, còn được gọi là bộ xử lý XSLT (XSL Transformations). Kết quả của bộ xử lý sẽ ở dạng cây kết quả trong đó các phần tử của tài liệu XML được chuyển đổi thành các nút có các giá trị và thuộc tính văn bản cụ thể. Các bộ xử lý XSLT sử dụng các biểu định kiểu XSL để thu thập các hướng dẫn chuyển đổi tài liệu XML nguồn thành các tài liệu XML.

XSL bao gồm ba ngôn ngữ:

Ø XSL Transformations (XSLT)

XSLT chuyển đổi một tài liệu XML thành một tài liệu XML khác mà máy tính có thể thực sự hiểu và hiển thị.

Ø XML Path Language (XPath)

XPath được sử dụng làm trình điều hướng cho XSL. XSL sử dụng XPath để tìm các phần của tài liệu nguồn khớp với một mẫu được xác định trước nhất định. Khi XPath tìm thấy nút, XSLT sẽ tiếp nhận và thực hiện một phép biến đổi, biến tài liệu nguồn thành tài liệu kết quả.

Ø XSL Formatting Objects (XSL-FO)

Một ngôn ngữ XML để định dạng các tài liệu XML. Khi XPath đã tìm kiếm qua tài liệu nguồn và sử dụng XSLT để chuyển tài liệu nguồn thành tài liệu kết quả, tài liệu sau đó cần được định dạng để trình duyệt Web có thể trình bày tài liệu với bố cục và cấu trúc thích hợp. Nói một cách đơn giản, XSL-FO là một phần của XSL để tạo ra kết quả cuối cùng.

Hình 6.2 mô tả cấu trúc của XSL.

Cấu trúc của XSL

Hình 6.2: Cấu trúc của XSL

6.1.3. XSL Transformations

Thành phần chuyển đổi của công nghệ biểu định kiểu XSL là XSLT. Mục đích của nó là chuyển đổi các tài liệu XML. Nó mô tả quá trình chuyển đổi một tài liệu XML, sử dụng một công cụ chuyển đổi và XSL. Tài liệu XML và biểu định kiểu XSL được cung cấp làm đầu vào cho công cụ chuyển đổi XML, còn được gọi là bộ xử lý XSLT. Đầu ra của bộ xử lý ở dạng cây kết quả trong đó các phần tử của tài liệu XML được chuyển đổi thành các nút có các giá trị và thuộc tính văn bản cụ thể.

Lưu ý: Bạn có thể chuyển đổi một tài liệu XML sang bất kỳ định dạng dựa trên văn bản nào, bao gồm HTML, văn bản thuần túy hoặc một lược đồ khác của XML bằng XSLT.  Bộ xử lý XSLT là một ứng dụng kết nối tài liệu XML với biểu định kiểu XSLT. Việc chuyển đổi tài liệu XML ở dạng cây nút, có thể được hiển thị dưới dạng đầu ra hoặc được gửi để chuyển đổi thêm.

6.1.4. Mô hình xử lý XSL

Bộ xử lý XML đọc một tài liệu XML và xử lý nó thành một cây phân cấp chứa các nút cho mỗi phần thông tin trong tài liệu. Sau khi tài liệu đã được xử lý thành cây, bộ xử lý XSL bắt đầu áp dụng các quy tắc của biểu định kiểu XSL cho cây tài liệu.

Bộ xử lý XSL bắt đầu với nút gốc trong cây và thực hiện đối sánh mẫu trong biểu định kiểu. Các mẫu này được lưu trữ trong các cấu trúc được gọi là mẫu trong biểu định kiểu XSL. Bộ xử lý XSL phân tích các mẫu và các mẫu được liên kết với chúng để xử lý các phần khác nhau của cây tài liệu. Khi đối sánh được thực hiện, phần của cây khớp với mẫu đã cho sẽ được xử lý bởi mẫu biểu định kiểu thích hợp. Tại thời điểm này, các quy tắc của mẫu được áp dụng cho nội dung để tạo cây kết quả. Bản thân cây kết quả là một cây dữ liệu và dữ liệu đã được biến đổi bởi biểu định kiểu.

Hình 6.3 hiển thị mô hình xử lý XSL.

Mô hình xử lý XSL

Hình 6.3: Mô hình xử lý XSL

Lưu ý: Đối sánh mẫu là quá trình sử dụng các mẫu để xác định các nút trong cây sẽ được xử lý theo kiểu XSL.

6.1.5. Cấu trúc và cú pháp XSLT

XSLT tuân theo các quy tắc bình thường của cú pháp XML. Nó sử dụng phần giới thiệu tài liệu chuẩn, đối sánh các thẻ đóng cho bất kỳ thẻ mở nào có chứa nội dung và cú pháp thích hợp cho các phần tử trống.

Trong XSL, các quy tắc kiểu được viết trong tệp có phần mở rộng .xsl. Tệp này được liên kết với tài liệu XML bằng cách sử dụng câu lệnh <?xml-stylesheet href = "file xsl" type = "text/xsl" ?>. Ở đây, xml-stylesheet là hướng dẫn hay chỉ thị xử lý.

Cú pháp:

Tất cả các biểu định kiểu XSLT đều sử dụng phần tử biểu định kiểu xsl: làm phần tử tài liệu. Tài liệu XSLT có dạng cơ bản sau:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
………
………
</xsl:styleheet>

trong đó,

<xsl: stylesheet>: Phần tử gốc của style sheet.

xmlns: xsl = "http://www.w3.org/1999/XSL/Transform" : đề cập đến không gian tên W3C XSLT chính thức. Bạn phải bao gồm thuộc tính version = "1.0" nếu bạn sử dụng không gian tên này.

Không gian tên XSLT phải được khai báo ở đầu tài liệu để có quyền truy cập vào các phần tử, thuộc tính và tính năng XSLT.

Lưu ý: Phần tử <xsl:transform> có cùng giá trị cú pháp với <xsl:stylesheet>. Các thành phần <xsl:variable> và <xsl: stylesheet> hoàn toàn đồng nghĩa và có thể được sử dụng. Phần tử xsl:stylesheet được sử dụng phổ biến hơn phần tử xsl:transform.

6.1.6. Các phần tử XSLT mức top

Các phần tử XSLT cấp cao nhất có thể xuất hiện trực tiếp bên trong phần tử xsl:stylesheet. Phần tử xuất hiện dưới dạng phần tử con của phần tử xsl:stylesheet được gọi là phần tử cấp cao nhất. Các phần tử này cung cấp các khối xây dựng để tạo tài liệu XSLT.

Các phần tử cấp cao nhất trong cú pháp XSLT được liệt kê trong bảng 6.1. Các phần tử này có thể xuất hiện trực tiếp bên trong các phần tử xsl:stylesheet hoặc xsl:convert.

Phần tử

Mô tả

xsl:decimal-format

Xác định định dạng thập phân mặc định để chuyển đổi số thành văn bản.

xsl:include

Được sử dụng để đưa một trang CSS vào một trang khác.

xsl:key

Xác định một khóa được đặt tên sẽ được sử dụng với hàm key() để hoạt động trên các mẫu và biểu thức.

xsl:output

Xác định định dạng của đầu ra được tạo bởi biểu định kiểu.

xsl:preserve-space

Xác định định dạng của đầu ra được tạo bởi biểu định kiểu.

Bảng 6.1: Các phần tử XSLT cấp cao nhất

Ø Phần tử xsl:decimal-format

Cú pháp:

<xsl:decimal-format
  decimal-separator="character"
  digit="character"
  grouping-separator="character"
  infinity="string"
  minus-sign="character"
  name="name"
  NaN="string"
  pattern-separator="character"
  percent="character"
  per-mille="character"
  zero-digit="character"/>

trong đó,

decimal-separator="character": Xác định ký tự được sử dụng để phân tách phần nguyên và phần phân số của một số. Giá trị mặc định là dấu chấm (.).

digit="character": Xác định ký tự được sử dụng để biểu thị rằng một chữ số là cần thiết trong một mẫu định dạng. Giá trị mặc định là #.

grouping-separator="character": Xác định ký tự được sử dụng để phân tách các nhóm chữ số. Giá trị mặc định là dấu phẩy (,).

infinity="string": Xác định chuỗi được sử dụng để biểu thị giá trị vô hạn. Giá trị mặc định là chuỗi "infinity".

minus-sign="character": Xác định ký tự được sử dụng để biểu thị dấu trừ. Mặc định là dấu gạch nối (-).

name="name": Gán tên cho phần tử.

NaN="string": Định nghĩa chuỗi được sử dụng để chỉ ra rằng giá trị không phải là một số. Giá trị mặc định là chuỗi "NaN".

pattern-separator="character": Xác định ký tự được sử dụng để phân tách các mẫu phụ âm và dương trong một mẫu định dạng. Mặc định là dấu chấm phẩy (;).

percent="character": Xác định ký tự được sử dụng để biểu diễn dấu phần trăm. Mặc định là dấu phần trăm (%).

per-mille="character": Xác định ký tự được sử dụng để đại diện cho dấu phần nghìn. Giá trị mặc định là Unicode cho mỗi ký tự mille (%).

zero-digit="character": Xác định ký tự được sử dụng để đại diện cho chữ số không. Giá trị mặc định là (0).

Sau đây là ví dụ minh họa một số biến thể định dạng số.

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:decimal-format name="name" digit="D" />
  <xsl:output method="html"/>
  <xsl:template match="/">
    <xsl:value-of select='format-number(45665789, "#.000")' />
    <xsl:value-of select='format-number(0.3456789, "###%")' />
    <xsl:value-of select='format-number(789, "D.0", "name")' />
    <xsl:value-of select='format-number(123456789, "$DDD,DDD,DDD. DD","name")' />
    <xsl:value-of select="format-number(193 div 200, '###.#%')"/>
    <xsl:value-of select="format-number(a div 0, '###,###.00')"/>
    <xsl:value-of select="format-number(1 div 0, '###,###.00')"/>
  </xsl:template>
</xsl:stylesheet>

Câu lệnh select trả về các giá trị 45665789.000, 35%, 789,0, $ 123,456,789, 96,5%, NaN và Infinity tương ứng.

Ø Phần tử xsl:include

Cú pháp:

<xsl:include href = "uri"/>

trong đó,

href = "uri": Địa chỉ URI (Uniform Resource Identifier) xác định tệp XSLT sẽ được đưa vào.

Ví dụ sau minh họa cách đưa một tệp CSS khác vào tệp CSS hiện thời.

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:include href="ExampleTemplate.xsl"/>
  <xsl:template match="/">
    ...........
    ..........
  </xsl:template>
</xsl:stylesheet>

Trong ví dụ trên, tệp biểu định kiểu ExampleTemplate.xsl được đưa vào trong tệp biểu định kiểu hiện tại.

Ø Phần tử xsl:key

Cú pháp:

<xsl:key match="pattern" name="qname" use="expression">
</xsl:key>

trong đó,

match = "pattern": Xác định các nút mà khóa sẽ được áp dụng.

name = "qname": Chỉ định tên đủ điều kiện của khóa.

use = "expression": Dùng để xác định giá trị của khóa cho mỗi nút.

Đoạn mã sau chứa tệp XML và trình bày cách sử dụng phần tử xsl:key.

<?xml version="1.0" encoding = "UTF-8"?>
<?xml-stylesheet type="text/xsl" href="key.xsl"?>
<APTstaff>
  <Developer 
    name="David Blake"
    address="B-602, East West Coast"
    phone="567- 877-9766"/>
  <Developer
    name="Roger Blake"
    address="B-345, East West Coast"
    phone="345- 865-9777"/>
</APTstaff>

Đoạn mã sau thể hiện file .xsl và trình bày cách sử dụng xsl:key.

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="1.0">
  <xsl:key
    name="stafflist"
    match="Developer"
    use="@name"/>
  <xsl:template match="/">
    <xsl:for-each select="key('stafflist', 'David Blake')">
      NAME: <xsl:value-of select="@name"/>
      ADDRESS: <xsl:value-of select="@address"/>
      PHONE: <xsl:value-of select="@phone"/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Kết quả khi thực hiện sẽ là:

NAME: David Blake ADDRESS: B-602, East West Coast PHONE: 567-877- 9766

Ø Phần tử xsl:output

Cú pháp:

<xsl:output
  cdata-section-elements="namelist"
  doctype-public="string"
  doctype-system="string"
  encoding="string"
  indent="yes" | "no"
  media-type="mimetype"
  method="html" | "name" | "text" | "xml"
  omit-xml-declaration="yes" | "no"
  standalone="yes" | "no"
  version="version_number"/>

Chi tiết của các thuộc tính được cho trong bảng 6.2.

Thuộc tính

Mô tả

cdata-section-elements

Không bắt buộc. Danh sách các phần tử được phân cách bằng khoảng trắng có nội dung văn bản sẽ được viết dưới dạng các phần CDATA.

doctype-public

Không bắt buộc. Chỉ định các mã định danh công khai trong khai báo loại tài liệu.

doctype-system

Không bắt buộc. Chỉ định số nhận dạng hệ thống trong khai báo loại tài liệu.

encoding

Không bắt buộc. Đặt giá trị của thuộc tính mã hóa trong kết quả.

indent

Không bắt buộc. Chỉ định xem có thụt lề đầu ra hay không. Nếu được đặt thành "yes", các kết quả đầu ra XML và HTML được thụt lề từng bước để làm cho chúng dễ đọc hơn.

media-type

Không bắt buộc. Xác định kiểu MIME của đầu ra. Mặc định là "text/xml".

method

Không bắt buộc. Xác định loại đầu ra. Ba giá trị được phép là HTML, văn bản và XML. Mặc định là XML. Tuy nhiên, nếu phần tử con đầu tiên của nút gốc là thẻ HTML <html> và không có nút văn bản nào trước đó, thì kiểu đầu ra mặc định được đặt thành HTML.

omit-xml-declaration

Không bắt buộc. "yes" chỉ định rằng khai báo XML (<?xml ...?>) nên được bỏ qua trong kết quả. "no" chỉ định rằng khai báo XML nên được đưa vào đầu ra. Mặc định là "no".

standalone

Không bắt buộc. Chỉ định liệu bộ xử lý XSLT có xuất ra một khai báo độc lập hay không. "yes" chỉ định rằng một khai báo độc lập sẽ xuất hiện ở kết quả. "no" (mặc định) biểu thị rằng một khai báo độc lập sẽ không xuất hiện ở kết quả.

version

Không bắt buộc. Cung cấp số phiên bản W3C cho định dạng đầu ra. Nếu đầu ra là XML, phiên bản mặc định là 1.0. Hoặc nếu loại đầu ra là HTML, phiên bản mặc định là 4.0.

Bảng 6.2: Các thuộc tính của phần tử xsl:output

Đoạn mã sau minh họa việc sử dụng phần tử xsl:output. Nó cho thấy rằng đầu ra sẽ là một tài liệu HTML, phiên bản 4.0 và được thụt lề để dễ đọc.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output
    method="html"
    version="4.0"
    indent="yes"/>
  ...
  ...
</xsl:stylesheet>

Ø Phần tử xsl:preserve-space 

Cú pháp:

<xsl:preserve-space elements="names"/>

trong đó,

elements: Chỉ định danh sách tên phần tử được phân tách bằng khoảng trắng.

Đoạn mã sau thể hiện việc sử dụng phần tử xsl:preserve-space và cho thấy rằng khoảng trắng được giữ nguyên cho các phần tử tên và địa chỉ.

 

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:preserve-space elements="name address"/>
  <xsl:template match="/">
    <xsl:for-each select="Company/Programmer">
      <xsl:value-of select="name"/>
      <br/>
      <xsl:value-of select="age"/>
      <br/>
      <xsl:value-of select="address"/>
      <br/>
      <xsl:value-of select="company"/>
      <br/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

6.1.7. So sánh XSL và CSS

XSL và CSS là hai ngôn ngữ định kiểu khác nhau được World Wide Web Consortium (W3C) khuyến nghị. XSL mạnh hơn và phức tạp hơn CSS. Một số khác biệt giữa CSS và XSL được liệt kê trong bảng 6.3.

CSS

XSL

Ngôn ngữ bảng định kiểu để tạo kiểu cho các tài liệu HTML và XML

Ngôn ngữ bảng định kiểu để tạo kiểu cho tài liệu XML

Xác định giao diện trực quan của một trang, nhưng không làm thay đổi cấu trúc của tài liệu nguồn

Cung cấp phương tiện chuyển đổi tài liệu XML

Không hỗ trợ cấu trúc quyết định và nó không thể tính toán số lượng hoặc lưu trữ giá trị trong các biến

Hỗ trợ cấu trúc quyết định và có thể tính toán số lượng hoặc lưu trữ giá trị trong các biến

Sử dụng ký hiệu riêng của nó

Sử dụng ký hiệu XML

Hiệu quả cao và dễ học cho các ứng dụng đơn giản

Được thiết kế để đáp ứng nhu cầu của các ứng dụng phức tạp hơn cho các kiểu phong phú hơn

Bảng 6.3: Sự khác biệt giữa CSS và XSL

Kiểm tra kiến thức bài 6.1

1. Các bước để xử lý biểu định kiểu XSL và áp dụng nó vào tài liệu XML được đưa ra ở đây. Bạn có thể sắp xếp các bước theo trình tự để đạt được quy trình không?

(1)

Áp dụng các quy tắc của biểu định kiểu XSL cho cây tài liệu.

(2)

Phần cây phù hợp với mẫu đã cho được xử lý bằng mẫu biểu định kiểu thích hợp.

(3)

Bộ xử lý XSL bắt đầu với nút gốc trong cây và thực hiện khớp mẫu.

(4)

Bộ xử lý XML đọc một tài liệu XML.

(5)

Bộ xử lý XML tạo một cây phân cấp chứa các nút cho mỗi phần thông tin.

2. Bạn có thể đối sánh các phần tử XSL với mô tả tương ứng của chúng không?

Mô tả

 

Nút XPath

(A)

Được sử dụng để thêm một biểu định kiểu vào một biểu định kiểu khác

(1)

xsl:template

(B)

Cho phép đặt một biến trong tệp xsl

(2)

xsl:output

(C)

Cho phép biểu định kiểu bí danh một tiền tố không gian tên cho một tiền tố không gian tên khác trong cây kết quả

(3)

xsl:import

(D)

Được sử dụng để xây dựng các mẫu

(4)

xsl:namespace-alias

(E)

Cho phép tác giả bảng định kiểu chỉ định cách họ muốn cây kết quả được xuất

(5)

xsl:variable

3. Câu nào về ngôn ngữ CSS và XSL style sheet là đúng và câu nào sai?

(A)

CSS sử dụng các phần tử phức tạp để định dạng tài liệu.

(B)

XSL mô tả cách hiển thị tài liệu XML.

(C)

Các phần tử XSL có thể được sử dụng để thực hiện các phép tính phức tạp.

(D)

XSL là một ứng dụng biểu định kiểu dành riêng cho HTML.

(E)

CSS là một cách tiếp cận dựa trên kiểu đơn giản, không yêu cầu kỹ năng lập trình nâng cao.

» Tiếp: Test Theory
« Trước: Bài 5.4. Kế thừa và Các tầng trong CSS
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!