Thứ Ba, 30 tháng 8, 2016

Style Sheets – Giới thiệu cách sử dụng và cách viết style sheet áp dụng cho XML – Extensible Style Language – XSL (Phần 1)

Style Sheets – Giới thiệu cách sử dụng và cách viết style sheet áp dụng cho XML – Extensible Style Language – XSL (Phần 1)

Mục đích: Chủ đề của bài này giới thiệu XSL và một số cú pháp cơ bản, một thành phần hỗ trợ giúp để ứng dụng vào XML để tạo ra cách thức trình bày, định dạng, lọc bớt dữ liệu và chuyển đổi tài liệu XML thành các định dạng khác hướng tới việc trình bày dữ liệu, tạo kết xuất dữ liệu mới. Chúng tôi sẽ mô tả nội dung cú pháp với những nội dung đơn giản nhất trong phần 1 này cùng với cách sử dụng song song được thể hiện qua các ví dụ để quí vị có thể tiếp cận ý niệm mới một cách dễ dàng. Nội dung bài này sẽ là nền tảng để tiếp cận chủ đề xây dựng ứng dụng web với việc sử dụng XML là dữ liệu và XSL để trình bày giao diện và tạo ra định dạng mới để tiếp tục xử lý trong khi ứng dụng thực thi

Style Sheets – Giới thiệu cách sử dụng và cách viết style sheet áp dụng cho XML – Extensible Style Language – XSL (Phần 1)

Mục đích: Chủ đề của bài này giới thiệu XSL và một số cú pháp cơ bản, một thành phần hỗ trợ giúp để ứng dụng vào XML để tạo ra cách thức trình bày, định dạng, lọc bớt dữ liệu và chuyển đổi tài liệu XML thành các định dạng khác hướng tới việc trình bày dữ liệu, tạo kết xuất dữ liệu mới. Chúng tôi sẽ mô tả nội dung cú pháp với những nội dung đơn giản nhất trong phần 1 này cùng với cách sử dụng song song được thể hiện qua các ví dụ để quí vị có thể tiếp cận ý niệm mới một cách dễ dàng. Nội dung bài này sẽ là nền tảng để tiếp cận chủ đề xây dựng ứng dụng web với việc sử dụng XML là dữ liệu và XSL để trình bày giao diện và tạo ra định dạng mới để tiếp tục xử lý trong khi ứng dụng thực thi

Yêu cầu về kiến thức cơ bản

Tổng quan XSL

  • XML được sử dụng để mô tả dữ liệu và cách tổ chức dữ liệu để dễ dàng khai thác xử lý thông qua các bộ parser
  • Tuy nhiên, từ bước chuyển đổi từ thông tin xử lý sang trình bày giao diện với các định dạng theo mong muốn sẽ tốn rất nhiều thời gian. Hay lọc bớt dữ liệu, chuyển đổi định dạng là điều khá khó khăn. XSL được đưa ra nhằm giải quyết vấn đề đó là định dạng kết xuất và chuyển đổi định dạng từ dạng này sang dạng khác
  • XSL đưa ra các chức năng chuyển đổi XML thành XML mới, thành HTML, thành dạng text. XSL còn hỗ trợ lọc dữ liệu, sắp xếp dữ liệu
  • Tài liệu XSL được viết theo cú pháp của XML, được validation theo một thành phần schema/DTD đã định nghĩa sẵn và được lưu trữ trong tập tin có phần mở rộng là xsl

  • XSL  có 3 thành phần chính
    • XPath: chúng tôi đã giới thiệu qua bài Giới thiệu XPath
    • XSLT: chúng tôi sẽ giới thiệu ngay nội dung bên dưới
    • XSL-FO: thực hiện định dạng cho ra dạng PDF – chúng tôi sẽ giới thiệu trong bài tiếp theo
  • XSLT – XSL transformation
    • Là ngôn ngữ để chuyển đổi tài liệu XML thành một định dạng khác mà người dùng mong đợi
    • Kết hợp XPath để duyệt và định hướng trong tài liệu XML
    • XSLT thực hiện việc xác định source tree từ cấu trúc tài liệu XML và thực hiện các luật template định nghĩa để đưa ra result tree – đây là cấu trúc cuối cùng để chuyển thành định dạng của người dùng

  • Các bước thực hiện qui trình xử lý XSL
    • XML Processor thực hiện đọc nội dung tài liệu XML và chuyển đổi nó thành cấu trúc hình cây
    • XSL Processor thực hiện áp dụng các template được khai báo trong tài liệu xsl đến cấu trúc hình cây đã được xây dựng ở bước trên
      • XSL Processor duyệt từ gốc của cây XML và tìm kiếm các template định nghĩa tương ứng cho các node đang duyệt
      • Nếu như tìm thấy template, XSL thực hiện áp dụng theo định nghĩa của người dùng để đưa ra kết xuất tương ứng
      • Nếu không tìm thấy XSL sẽ áp dụng các template được định nghĩa sẵn trong bộ processor để áp dụng cho các node đang xử lý
      • Kết thúc quá trình này, XSL sẽ đưa ra được result tree
    • Cơ chế tổng quát thực hiện thể hiện bằng hình vẽ

  • Các template mặc định được định nghĩa

Dạng node

Template mặc định

Root

Áp dụng template của các node con của root

Element

Áp dụng template của các node con của node hiện hành

Text

Đưa ra kết quả dạng text

Processing Instruction

Không làm gì – hay bỏ qua

Comment

Không làm gì – hay bỏ qua

 

  • Cấu trúc của tài liệu XSL
    • Node root với khai báo sử dụng namespace uri http://www.w3.org/1999/XSL/Transform
    • Có 02 cách khái báo node root
      • Cách 1

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

</xsl:stylesheet>

 

      • Cách 2

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

</xsl:transform>

    • Nội dung bên trong là một hay nhiều template được định nghĩa
      • Template là các luật để người dùng có thể định nghĩa để thực hiện xử lý nội dung pattern trong tài liệu XML trở thành định dạng người dùng mong muốn
      • Thông báo cho bộ XSL processor cần thực hiện nội dung cần thiết khi phù hợp với định nghĩa
      • Cú pháp: <xsl:template match=“pattern” [mode=“mode” name=“name” priority=“number”]> … </xsl:template>
        • match: định nghĩa biểu thức XPath để xác định điều kiện pattern áp dụng cho source tree
        • mode: xác định để xử lý node nhiều hơn một lần – tương tự như chúng ta áp dụng mệnh đề if để duyệt node với các trạng thái khác nhau
        • name: xác định tên template tương tự như khái niệm gọi hàm trong lập trình. Nên nhớ rằng đã khi dùng name là không dùng chung với thuộc tích match và để dành gọi template khi cần, không sử dụng dạng vừa định nghĩa hàm và thực thi matching là không được
        • priority: xác định mức độ ưu tiên của template để ứng dụng khi template định nghĩa trùng. Khi trùng thì template có độ ưu tiên lớn hơn sẽ được lựa chọn áp dụng. Nếu các template trùng không có định nghĩa độ ưu tiên thì template được định nghĩa cuối cùng sẽ được lựa chọn
  • Cách áp dụng xsl vào trong xml. Có 3 cách
    • Cách 1: sử dụng processing instructions với lệnh

<?xml-stylesheet type="text/xsl" href=“đường_dẫn_và_tên_file"?>

      • Cách này chỉ áp dụng được 1 tài liệu xml cho 1 stylesheet
      • Thực hiện transform trực tiếp bằng cách view tài liệu xml bằng trình duyệt browser
    • Cách 2: sử dụng tool Netbeans để transform
      • Lệ thuộc vào tool
    • Cách 3: sử dụng code transformer API để áp dụng
      • Phù hợp với việc xử lý trong ứng dụng đang thực thi
      • Chúng tôi sẽ giới thiệu cách này trong một bài khác
  • Cách tạo tài liệu xsl sử dụng Netbeans
    • Bước 1: tạo tập tin XSL Stylesheet bằng cách chọn menu File, chọn new File, chọn XML trong categories và chọn XSL StyleSheet trong  File Types. Nhấn Next

      • Lưu ý: phải tạo project trước khi tạo file – và không tồn tại khái niệm là project xsl
    • Đặt tên file, xác định vị trí lưu trữ và nhấn Finish

      • Cấu trúc tài liệu sẽ được phát sinh

  • Các ví dụ cơ bản đầu tiên thể hiện định nghĩa về cơ chế thực hiện của xsl
    • Ví dụ 1
      • Cho tài liệu XML

      • Định nghĩa tài liệu XSL

      • Tài liệu đang định nghĩa template cho node firstname trong tài liệu xml. Khi gặp node này nó sẽ áp dụng được ra text là We found a first name!
      • Kết quả apply khi chúng ta view tài liệu xml bằng browser

      • Tại sao kết quả ra như nội dung trên, chúng ta thực hiện áp dụng định nghĩa của xsl xử lý như sau
        • Tài liệu XML được chuyển thành dạng hình cây trong bộ nhớ
        • XSL duyệt từ node root của cây vừa tạo xong
        • Thực hiện tìm template định nghĩa cho node root, không có template nào cả, XSL thực hiện áp dụng template mặc định cho root node là thực hiện apply template cho node con của root
        • Dưới node root là node process instructions, cũng không có template định nghĩa, dùng template mặc định là bỏ qua
        • Tiếp theo, là dấu enter xuống hàng là một ký tự, không có template định nghĩa, dùng template mặc định cho text là đưa ra dấu enter
        • Tiếp theo là root element – persons là một element (root theo định nghĩa là root của toàn bộ tài liệu xml – còn ở đây chỉ coi là 1 element), cũng không có template định nghĩa thực hiện apply template cho node con của root
        • Tương tự sau persons có dấu enter áp dụng như text nên tiếp tục in ra – nghĩa là xuống hàng
        • Tương tự cho node person, name
        • Đến node firstname, có template định nghĩa, trình bày ra We found a first name!
        •  XSL nhảy đến duyệt node text sau kết thúc tag firstname để in dấu enter
        • XSL tiếp tục duyệt lastname, không có template định nghĩa, chuyển sang con của lastname để áp dụng theo định nghĩa template mặc định
        • Chuỗi trị trong lastname là text, không có template định nghĩa, đưa text ra kết xuất
        • Tương tự như thế cho các node còn lại trong tài liệu văn bản tương tự như các mô tả như trên và chúng ta có kết xuất như hình vẽ
    • Ví dụ 2
      • Cho tài liệu XML

      • Cho tài liệu XSL

      • Kết xuất

Các cú pháp được áp dụng trong định nghĩa template thường dùng

  • value-of
    • Trích xuất giá trị của xml element, của biến - variables hay tham số - parameter và đưa kết quả vào output streams
    • Cú pháp: <xsl:value-of select=“mệnh đề XPath”/>
      • Đôi khi cú pháp này không phù hợp khi áp dụng trong một số trường hợp như nhúng vào trong các attribute của thẻ href trong html thì một cú pháp shorthand được áp dụng để đưa trị vào {biểu thức xpath}
    • Ví dụ 1:
      • XML

      • XSL

      • Kết xuất

    • Ví dụ 2
      • XML

      • XSL

      • Kết xuất

  • text
    • Bỏ đi các khoảng trắng, enter (whitespace) hay đưa thêm whitespace trong quá trình xử lý
    • Ví dụ 1
      • XML

      • XSL

      • Kết xuất

    • Ví dụ 2
      • XML

      • XSL

      • Kết xuất

  • output
    • Xác định kết xuất của XSL processor
    • Được định nghĩa ngay dưới xsl:stylesheet
    • Cú pháp: <xsl:output method=“xml|text|html” [indent=“no|yes”
                                                             omit-xml-declaration=“no|yes” version=“1.0”]/>
      • method: xác định output gồm 1 trong 3 loại xml, text, html. Không khai báo gì về output có thể hiểu mặc định là xml
      • indent: cho phép canh lề và phân cấp nội dung của tài liệu kết xuất
      • omit-xml-declaration: bỏ đi khai báo xml trong kết xuất
      • version: xác định version output nếu dùng xml
    • Ví dụ
      • XML

      • XSL

      • Kết xuất

    • element
      • Tạo ra element mới trong kết xuất
      • Cú pháp: <xsl:element name=“element_name”>…</xsl:element>
    • attribute
      • Tạo ra attribute cho một element bất kỳ trong quá trình kết xuất
      • Cú pháp: <xsl:attribute name=“attr_name”></xsl:attribute>
      • Ví dụ
        • XML

        • XSL

      • Ở đây, chúng ta thấy tài liệu xml không có chỉ thị lệnh processing instruction để áp dụng cho xsl bởi vì chúng tôi sẽ giới thiệu cách thứ 2 trong việc áp dụng xsl dùng tool Netbeans
        • Nhấn phải chuột trên tài liệu xsl, chọn XSL Transformation

        • Chọn tài liệu xml cần áp dụng

        • Chọn một trong các giá trị output như preview, output to file, … Nhấn OK, chúng ta sẽ có được kết xuất. Nếu là file sẽ có ngay trong thư mục hiện hành của project và output ra màn hình

      • Ví dụ 2
        • XML: sử dụng tài liệu của ví dụ 1
        • XSL

      • Áp dụng tool để kết xuất

  • Xử lý trong quá trình kết xuất dữ liệu phức tạp
    • for-Each
      • Duyệt tập các node mà biểu thức xpath truy vấn được trong quá trình xử lý
      • Cú pháp: <xsl:for-each select=“XPath”>…</xsl:for-each>
      • Ví dụ
        • XML

        • XSL

        • Kết xuất

    • if
      • Thực hiện nội dung nếu xpath trả ra kết quả là true
      • Cú pháp: <xsl:if test=“XPath”>…</xsl:if>
    • sort
      • Thực hiện sort các giá trị theo mệnh đề xpath
      • Cú pháp: <xsl:sort select=“pattern” [order=”ascending/descending”
                                                      data- type=“number|qname|text”]
        >…</xsl:sort>
    • Ví dụ
      • XML

      • XSL

      • Kết xuất

      • Chúng ta nhìn thấy trong ví dụ này việc sử dụng XPath đã tạo nên giao diện html theo ý muốn của chúng ta. Thứ tự sắp xếp theo lastname đã tạo nên thứ tự trong giao diện khác hoàn toàn so với thứ tự trong tài liệu xml và đặc biệt dưới sự hỗ trợ của XPath thì chỉ có một thành phần trong giao diện có link mà thôi. Chúng ta thấy được sự kết hợp giữa xml và xsl giúp chúng ta tạo ra các định dạng khác nhau về giao diện hay định dạng khác mà không cần thực hiện chỉnh sửa giao diện, theo quan điểm, dữ liệu là một nhưng định dạng có thể rất nhiều. Sử dụng XSL là một lựa chọn để đảm bảo tính linh hoạt
    • choose
      • Nếu như sử dụng nhiều hơn 2 điều kiện thì sử dụng mệnh if hơi rối và mệnh đề else không được hỗ trợ. Chúng ta thực hiện áp dụng mệnh đề choose – với khái niệm tương tự cấu trúc switch – case trong ngôn ngữ lập trình
      • Cú pháp

<xsl:choose>

  <xsl:when test=“condition”>…</xsl:when>

  …

  <xsl:otherwise>…</xsl:otherwise>

</xsl:choose>

      • Choose tương tự là switch, when tương tự như case nhưng mỗi trường hợp không cần phải break vì xslt sẽ hỗ trợ chúng ta điều này, và otherwise tương tự như default
      • Ví dụ
        • XML: tương tự như XML trong bài if
        • XSL

        • Kết xuất giống như kết quả của ví dụ if

Chúc mừng các bạn đã hoàn tất và nắm các khái niệm về sử dụng XSL cơ bản và ứng dụng nó trong việc áp dụng tài liệu XML với XSL để đưa ra định dạng mới theo mục đích của chúng ta với mức độ đơn giản. Tuy nhiên, chúng ta sẽ áp dụng nó trong việc sử dụng nó với các xsl có mức độ phức tạp, xử lý như ngôn ngữ lập trình để tạo ra các định dạng và trình bày giao diện theo ý muốn trong việc xây dựng ứng dụng

Rất mong sự góp ý chân thành và chia sẻ của quí vị về vấn đề này. Hẹn gặp lại quý vị ở các chủ đề liên quan đến XML, cụ thể sẽ là vấn đề liên quan là XSL – Extensible Style Language với nội dung nâng cao để tạo nên tính đa dạng và uyển chuyển trong định dạng ra kết xuất và giao diện theo đúng qui luật của xây dựng ứng dụng phù hợp với thực tế.

Không có nhận xét nào:

Đăng nhận xét