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 2)

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 2)

Mục đích: Chủ đề của bài này tiếp tục về chủ đề XSL với nội dung nâng cao để áp dụng tạo ra giao diện và định dạng mới có tính phức tạp và uyển chuyển. Hơn thế nữa, bài viết hướng tới tiếp cận XSL như là ngôn ngữ lập trình bình thường và tạo ra khái niệm sử dụng XSL như là xây dựng ứng dụng với cách chia sẻ tải, nhúng nội dung vào nhau làm giảm bớt phức tạp trong quá trình lập trình ứng dụng và tạo điều kiện thuận lơi cho việc chia nhóm trong quá trình xây dựng ứng dụng. Các nội dung trình bày sẽ thực hiện theo cách đã trình bày trong 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 2)

Mục đích: Chủ đề của bài này tiếp tục về chủ đề XSL với nội dung nâng cao để áp dụng tạo ra giao diện và định dạng mới có tính phức tạp và uyển chuyển. Hơn thế nữa, bài viết hướng tới tiếp cận XSL như là ngôn ngữ lập trình bình thường và tạo ra khái niệm sử dụng XSL như là xây dựng ứng dụng với cách chia sẻ tải, nhúng nội dung vào nhau làm giảm bớt phức tạp trong quá trình lập trình ứng dụng và tạo điều kiện thuận lơi cho việc chia nhóm trong quá trình xây dựng ứng dụng. Các nội dung trình bày sẽ thực hiện theo cách đã trình bày trong phần 1

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

Các cú pháp nâng cao trong XSL

  • apply-templates
    • Thay vì xứ lý từng node bằng cách định nghĩa template trong bài viết phần 1.
    • apply-templates được dùng để định nghĩa cho việc xử lý một tập các node
    • apply-templates sẽ thực hiện xử lý tập node con của node đang được xử lý và tìm template được định nghĩa cho chúng để áp dụng
    • Cơ chế thực hiện tương tự cho cơ chế xử lý template
    • Tuy nhiên,
      • Khi không có attribute nào trong câu lệnh này, bộ xử lý XSL sẽ tiếp tục tìm kiếm trong tài liệu XML và xử lý tất cả mọi node phù hợp điều kiện của template đang chứa đựng câu lệnh này
      • Khi có attribute select, bộ xử lý XSL sẽ xử lý chỉ node con của giá trị XPath trong mệnh đề select.
    • apply-template được dùng để xác định thứ tự các node con cần được xử lý và xác định các node được áp dụng template (nghĩa là sử dụng apply-template với thuộc tính select)
    • Cú pháp: <xsl:apply-templates [select=“pattern”] [mode=“value”] [priority=“1-5”]/>
      • Các giá trị select, mode và priority tương tự như định nghĩa của template
    • Ví dụ 1:
      • XML

      • XSL

      • Kết xuất

      • Chúng ta thấy kết xuất của bài ví dụ đâu tiên tương tự như sử dụng template bình thường vì khi gặp apply template mà không có thuộc tính select nó sẽ tìm kiếm và apply template cho các node con còn lại (ở đây là toàn tài liệu xml vì đang dùng /), và khi không có định nghĩa template nào thì default template được áp dụng
    • Ví dụ 2
      • XML: áp dụng tài liệu tương tự ví dụ 1
      • XSL

      • Kết xuất

      • Trong ví dụ này ta thấy sự phát huy của apply template đó là khi gặp apply template không có thuộc tính nó sẽ tìm template và áp dụng cho node con
      • Và trong quá trình tìm kiếm nó tìm thấy template áp dụng cho node CD
      • Tuy nhiên, trong template định nghĩa cho CD, có định nghĩa apply template áp dụng cho node Title và Article. Do vậy, nó chỉ tìm kiếm 02 template định nghĩa cho các node này để apply. Nếu không có apply template default cho 02 node này và dừng lại. Cho nên chúng ta có kết quả là giá trị của 02 node đó trong kết xuất
    • Ví dụ 3
      • XML áp dụng tài liệu của ví dụ 1
      • XSL và Kết xuất

    • Ví dụ 4
      • XML áp dụng tài liệu của ví dụ 1
      • XSL và kết xuất

    • Ví dụ 5
      • XML

      • XSL

      • Kết xuất

      • Khi gặp template match aaa và chỉ xử lý node bbb với apply template và xử lý liên tục 3 lần cùng một node thông qua khái niệm mode, chúng ta có kết quả như hình
  • call-template
    • template có thể được xem là một function trong ngôn ngữ lập trình và trong quá trình xử lý, chúng ta mong muốn xử dụng lại template nhiều lần với các mục đính giống nhau cho các node tương tự thì template cho phép áp dụng định nghĩa và chưa match mà đặt tên như tên hàm trong ngôn ngữ lập trình để khi cần sẽ gọi
    • call template là cú pháp dùng để gọi template khi cần áp dụng tại node hay điều kiện xpath mà chúng ta áp dụng trong ứng dụng của chúng ta
    • ngoài ra cũng giống như function trong ngôn ngữ lập trình, chúng ta vẫn có thể truyền tham số vào template và xử lý tham số trong quá trình xử lý
    • Cú pháp:
      • <xsl:call-template name=“template_name”/>
      • Hay

<xsl:call-template name=“template_name”>

<xsl:with-param …/>

</xsl:call-template>

  • with-param
    • Cách thức để truyền tham số vào template
    • Có thể sử dụng trong call template hay apply template
    • Cú pháp

<xsl:with-param name=“tên tham số” select=“giá trị”/>

Hay, <xsl:with-param name=“ tên tham số”> giá trị </xsl:with-param>

  • param
    • Dùng để lấy trị của tham số trong template nhằm thực hiện xử lý
    • Trong quá trình lấy tham số, nếu tham số không tồn tại, cú pháp cho phép lấy giá trị mặc định thông qua mệnh đề select
    • Cú pháp:

<xsl:param name=“ tên tham số” select=“trị thiết lập mặc định”/>

Hay, <xsl:param name=“ tên tham số”> trị thiết lập mặc định </xsl:param>

    • Ví dụ 1
      • XML

      • XSL

      • Kết xuất

      • Chúng ta đang định nghĩa template StartHTML
      • Khi match /, gọi template StartHTML áp dụng và đưa ra kết xuất
      • Chúng ta thấy ví dụ cho thấy sự tái sử dụng template ở nhiều vị trí
    • Ví dụ 2
      • XML sử dụng lại ví dụ 1
      • XSL

        • Template StartHTML xử lý tham số Title qua param và nếu không tồn tại tham số này sẽ dùng trị No Parameter. Nếu có, giá trị tham số này được lấy dùng value-Of
        • Template StartHTML và được truyền trị tham số Title vào thông qua with-param với trị là Persons
      • Kết xuất

    • Ví dụ 3
      • XML dùng tài liệu của ví dụ 1
      • XSL

        • Không truyền tham số khi gọi template StartHTML
      • Kết xuất

      • Chúng ta nhìn thấy, khi không có tham số, giá trị tham số mặc định là No Paramater được lấy để đưa vào kết quả như kết xuất
  • variable
    • Cho phép khai báo biến trong XSL
    • Biến được khai báo và trị khởi gán sẽ không bao giờ được thay đổi được trong quá trình thực thi
    • Biến được dùng chứa giá trị hay mệnh đề XPath để có thể tái sử dụng trong XSL
    • Tầm vực sử dụng biến tương tự như ngôn ngữ lập trình đó là toàn cục và cục bộ
    • Cú pháp: <xsl:variable name=“tên_biến”>giá trị</xsl:variable>
    • Để truy cập được giá trị của biến, chúng ta dùng value-Of và ký hiệu $tên_biến
    • Ví dụ
      • XML

      • XSL

        • Kết xuất

        • Kết quả chúng ta nhận được là do chúng ta truyền 02 tham số vào template bbb nhưng chúng ta chỉ lấy có tham số A và định nghĩa biến B mới, không lấy tham số B
  • import
    • Nhằm hướng tơi việc xây dựng ứng dụng theo cách làm việc nhóm và giảm sự phức tạp trong tài liệu XSL, XSL đưa ra việc tách riêng các template ra thành các tập tin XSL riêng biệt để dễ dàng chỉnh sửa,bảo trì, súc tích đơn giản và có thể chia nhỏ công việc đang làm ra thành nhiều phần sau đó gộp lại
    • Dùng để import một style sheet vào một style sheet khác
    • Khi import nó tạo ra node con của style sheet hiện hành và đưa style sheet vào

    • Do vậy, với mức độ định nghĩa import ngang nhau (nghĩa là các node anh em trong mô hình cây) thì style sheet nào định nghĩa cuối cùng sẽ là style sheet hiệu lực theo nghĩa nó có độ ưu tiên cao nhất
    • Độ ưu tiên cao nhất thuộc về style sheet import các style sheet khác vào (nghĩa style sheet cha theo mô hình hình cây)
    • Import bắt buộc phải được khai báo ở đầu style sheet
    • Cú pháp: <xsl:import href=“fileName.xsl”/>
  • apply-import
    • Xác định style sheet sẽ được áp dụng tại một vị trí xác định trong tài liệu XSL trong quá trình xử lý
    • Cơ chế thực hiện apply import thực hiện xử lý node theo cơ chế thực hiện matching từ vị trí hiện hành thực hiện áp dụng template theo đúng qui tắc
  • Ví dụ 1
    • XML

    • XSL
      • XSL 1

      • XSL 2

    • Kết xuất

  • Ví dụ 2
    • XML

    • XSL
      • XSL1

      • XSL 2

        • XSL 3

    • Kết xuất

        • Kết quả cho thấy conflict 2 được định nghĩa cuối cùng nên giá trị matching bbb được lựa chọn từ conflict 2 còn ccc chỉ có trong conflict 1 nên được lựa chọn
  • Ví dụ 3
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

      • Kết xuất

      • Độ ưu tiên thuộc về style sheet import  02 style sheet còn lại – style sheet cha
  • Ví dụ 4
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

      • Kết xuất

      • Kết quả cho thấy in ra confict –bbb rồi sau đó thực hiện import tại vị trí tiếp theo sử dụng apply imports nên chúng ta có 3 trị - phân biệt ví dụ 3 là độ ưu tiên
      • Ví dụ này đó là chỉ định nơi bắt đầu nhúng style sheet vào tài liệu
      • Nói cách khác khi có apply imports thì 02 dòng import chỉ là khai báo, thời điểm được nhúng vào bắt đầu hiệu lực chính là apply imports được gọi
  • Ví dụ 5
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

      • Kết xuất

        • Không có bất kỳ định nghĩa gì apply template và apply import thì nghĩa là nhúng trực tiếp vào và bộ xử lý XSLT thực hiện cơ chế từ trên xuống dưới như định nghĩa để apply cho tài liệu
  • Ví dụ 6
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

      • Kết xuất

  • Ví dụ 6
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

      • Kết xuất

      • Ví dụ khác ví dụ 5 đó là apply cho node bbb thay vì cho node /. Cũng cho thấy khái niêm apply template áp dụng từ node con hay node tiếp theo của node hiện hành
  • Ví dụ 7
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3

    • Kết xuất

  • Ví dụ 8
    • XML dùng tài liệu ví dụ 2
    • XSL
      • XSL 1, XSL2 sử dụng lại conflict 1 và conflict 2 trong ví dụ 2
      • XSL 3 và kết xuất

  • include
    • Tương tự như import nhưng nhúng trực tiếp vào trong tài liệu. Trong một số trình duyệt thì import tương tự như include

    • Include không bắt buộc phải khai báo ở đầu, muốn include chỗ nào dùng cú pháp ở chỗ đó, do vậy không tồn tại apply-includes như apply-import
    • Độ ưu tiên được áp dụng như import
    • Cú pháp: <xsl:include href=“fileName.xsl”/>
    • Ví dụ
      • XML

      • XSL
        • XSL 1

        • XSL 2

      • Kết xuất

  • number
    • Thực hiện đếm số thứ tự trong quá trình chuyển đổi tự động
    • Cơ chế: tùy theo cú pháp sẽ tự động cấu hình stack để chứa trị và đếm tăng dần lên cho từng loại và trình bày vào trong kết quả
    • Hỗ trợ tất cả các định dạng format như trong trình bày văn bản

Token

Description

1

       1, 2, 3, 4, ....

01

        01, 02, 03, 04, ....

A

       A, B, ..., AA, AB, ...

a

       a, b,...  , aa, ab, ...

I

       I, II,... ,

i

       i, ii, …

1-a

       1-a, 1-b,... , 2-a, 2-b, ...

1)

       1), 2), 3), ...

 

    • Cú pháp:

<xsl:number level=“single|any|multiple count=“pattern” [format=“token”]  
                                                                                                          [from=“pattern”]
/>

      • Level: cách đếm.
        • Single: nhóm thành nhóm và đếm trong nhóm
        • Any: đếm tất cả không phân biệt nhóm
        • Multiple: đếm và phân cấp dạng như tạo bullet and numbering trong word
      • Count: xác định mệnh đề XPath là điều kiện để đếm
      • From: xác định node bắt đầu được đếm, có thể sử dụng regular expression
    • Ví dụ
      • XML

      • XSL

      • Kết xuất

    • Ví dụ 2
      • XML

      • XSL

      • Kết xuất

      • Chúng ta nhìn thấy single được áp dụng và đếm theo group được xác định trong count là nhóm theo nhóm person hay xPerson
    • Ví dụ 3
      • XML như ví dụ 2
      • XSL: thay thế single bằng any

      • Kết xuất

        • Sự khác nhau giữa ví dụ 2 và 3 đó là đếm hết
    • Ví dụ 4
      • XML

      • XSL

      • Kết xuất

      • Tạo kết xuất áp dụng multiple đếm nhiều cấp nhưng dùng count=* và không có from nghĩa là đếm từ outline vì chúng ta đang apply template từ outline. Cho nên để cải tiến việc đếm từ nội dung sau outline mới bắt đầu đếm, chúng ta thực hiện dùng thuộc tính from trong xsl

      • Kết xuất

Chúc mừng các bạn đã hoàn tất và nắm toàn bộ các khái niệm về sử dụng XSL cơ bản đến nâng cao thông qua cả phần 1 và phần 2. Thông qua các ví dụ, chúng tôi hy vọng quí vị sẽ áp dụng nó trong việc xây dựng ứng dụng

Ý tưởng kết thúc của XSL thể hiện tổng quát qua hình ảnh

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 XSL ở mức độ nâng cao hơn nữa khi áp dụng trực tiếp vào trong ứng dụng sử dụng các API và lập trình trên các trang web trong JSTL và tạo khái niệm lập trình ngay trong XSL.

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

Đăng nhận xét