Phiên bản định dạng EXI

Một phần của tài liệu luận văn: tìm hiểu và so sánh một số kỹ thuật nén XML (Trang 58)

Phiên bản định dạng EXI EXI Format Version dùng để xác định phiên bản của định dạng EXI đang được sử dụng. Số phiên bản định dạng EXI là các số nguyên. Mỗi phiên bản tài liệu đặc tả định dạng EXI phải ghi rõ số phiên bản định dạng tương ứng. Bit đầu tiên của trường version chỉ ra đây là phiên bản preview hay final của định dạng EXI. Trong đó, 0 là phiên bản final c n 1 là phiên bản preview. Theo sau bit đầu tiên của version là một chuỗi bao gồm một hay nhiều 4 bit số nguyên không dấu biểu diễn số phiên bản version number .

Số phiên bản được xác định bằng cách tổng hợp các chuỗi số nguyên không dấu 4 bit, từ trái qua phải và cộng thêm 1. Chuỗi này sẽ bị chấm dứt bởi bất kỳ số nguyên không dấu có giá trị trong phạm vi 0 đến 14. Như vậy, 15 số phiên bản đầu tiên được biểu diễn bởi 4 bit, 15 số phiên bản tiếp theo được biểu diễn bởi 8 bit…

Số phiên bản định dạng EXI được tính theo các bước sau với số phiên bản ban đầu được khởi tạo bằng 1:

1. Đọc giá trị của 4 bit số nguyên không dấu tiếp theo. 2. Cộng giá trị vừa được đọc trong bước 1 vào số phiên bản.

3. Nếu giá trị là 15 thì thực hiện tiếp bước 1. Nếu không thì sử dụng giá trị hiện tại của số phiên bản là số phiên bản dịnh dạng EXI.

ảng 3.4: Một số phiên bản định dạng EXI EXI Format Version Mô tả

1 0000 Phiên bản xem trước 1

0 0000 Phiên bản cuối cùng 1 0 0001 Phiên bản cuối cùng 2 0 0010 - 0 1101 Phiên bản cuối cùng 3 - 14 0 1110 Phiên bản cuối cùng 15 0 1111 000 Phiên bản cuối cùng 16 0 1111 0001 Phiên bản cuối cùng 17 3.5.2.5. EXI Options

EXI Options là một trường tùy chọn trong EXI Header, cung cấp một cách thức để xác định các tùy chọn được sử dụng để mã hóa EXI Body. Bảng 3.5 mô tả các tùy chọn EXI và giá trị mặc định của chúng.

ảng 3.5: Các tuỳ chọn EXI [6]

EXI Options Mô tả Giá trị mặc định

alignment Điểu chỉnh, sắp xếp mã sự kiện (event code) và các mục nội dụng.

Bit-packed

compression Quá trình nén EXI được dùng false strict Sử dụng thông dịch chặt chẽ, nghiêm

ngặt của các lược đồ

false

fragment Thân body được mã hóa như là một EXI fragment.

false

preserve Các comment, pis… có được bảo toàn hay không.

all false

self Contained Cho phép các phần tử chứa bản thân nó.

schemaId Xác định thông tin lược đồ. no default value datatype RepresentationMap Các kiểu dữ liệu được sử dụng trong

EXI body

no default value

blockSize Kích thước khối được sử dụng trong quá trình nén EXI

1,000,000

valueMaxLength Độ dài của chuỗi lớn nhất có thể được thêm vào trong string table

unbounded

valuePartitionCapacity Tổng dung lượng tối đa của các phân vùng giá trị value partition của string table.

unbounded

[user defined meta-data] Bổ sung meta-data do người dùng định nghĩa

no default value

Chú ý:

Tùy chọn alignment được dùng để điểu chỉnh, sắp xếp các mã sự kiện và hạng mục nội dung liên quan. Có ba tùy chọn là: bit-packed, byte-alignment và pre-compression. Trong đó, bit-packed là giá trị mặc định khi tùy chọn alignment không được thiết lập, chỉ ra rằng các mã sự kiện và nội dung liên quan được đóng gói trong các bit mà không có khoảng trống ở giữa. Tùy chọn byte-alignment chỉ ra rằng các mã sự kiện và nội dung liên quan được điều chỉnh, sắp xếp theo ranh giới byte byte boundaries . Tùy chọn này là cần thiết vì các kỹ thuật nén dựa trên văn bản đều làm việc trên các byte dữ liệu chuỗi, không phải các bit nhị phân thô. Tùy chọn pre-compression thực hiện tất cả các bước của quá trình mã hóa EXI xem phần 3.5.6 ngoại trừ bước cuối cùng mã hóa luồng nén bằng thuật toán DEFLATE.

Tùy chọn compression thực hiện tất cả các bước của quá trình mã hóa EXI như phân vùng xem phần 3.5.6 bao gồm cả bước cuối cùng mã hóa các luồng nén bằng thuật toán DEFLATE.

3.5.2.6. Padding bits

Các bít 0 và 1 sẽ được thêm vào nếu header không đủ giới hạn byte byte boundary .

Ví dụ 3.22: Cho một EXI Header như sau: 1001 000

Ta có:

Distinguishing Bits là 10 Presence Bit là 0

EXI Format Version là 1000

Padding Bits: không được chèn vào vì 1001 000 có 8 bit = 1 byte.

3.5.3. EXI Body

EXI Body bao gồm một chuỗi các sự kiện EXI Event biểu diễn một tài liệu EXI EXI Document với một phần tử gốc root duy nhất hay một phân mảnh EXI EXI

Fragment không có hoặc có nhiều hơn một phần tử gốc. EXI Event được phép ở bất kỳ vị trí nào trong một EXI Stream và được xác định bởi EXI Grammar.

ảng 3.6: EXI Events [7]

Loại EXI Event Event content Ký hiệu cú pháp (Grammar Notation)

Bắt đầu tài liệu SD

Kết thúc tài liệu ED Bắt đầu phần tử qname SE(qname) SE(*) SE(uri:*) Kết thúc phần tử EE

Thuộc tính qname, value

AT(qname) AT(*) AT(uri:*)

Các ký tự value CH

Khai báo không gian tên uri , prefix , local-element-ns NS

Chú thích text CM

Chỉ dẫn xử lý name, text PI

Khai báo loại tài liệu name, public, system, text DT

Tham chiếu thực thể name ER

Ví dụ 3.23: Xét tài liệu XML Notebook được biểu diễn như sau: <?xml version="1.0" encoding="UTF-8"?>

<notebook date="2007-09-12">

<note category="EXI" date="2007-07-23"> <subject>EXI</subject>

<body>Do not forget it!</body> </note> <note date="2007-09-12"> <subject>Shopping List</subject> <body>milk, honey</body> </note> </notebook>

Chuỗi các sự kiện EXI tương ứng với EXI Body của tài liệu XML Notebook được minh họa trong hình 3.21:

Hình 3.21: Minh họa EXI Stream Body của tài liệu Notebook trong ví dụ 3.23 [7] 3.5.3.1. Event Code

Mã sự kiện event code là một chuỗi từ 1 đến 3 số nguyên không âm. Các số nguyên này c n gọi là phần part . Mã sự kiện được dùng để xác định sự kiện trong một EXI Stream. EXI Grammar mô tả các sự kiện có thể xảy ra tại mỗi điểm trong một EXI stream và kết hợp mã sự kiện cho từng sự kiện đó.

Ví dụ 3.24: Đưa ra các ví dụ về mã sự kiện cơ bản:

Cú pháp Mã sự kiện (event code)

Content SE ("A") DocEnd 0 SE ("B") DocEnd 1 SE ("C") DocEnd 2 SE ("D") DocEnd 3 SE (*) DocEnd 4 DT DocContent 5.0 CM DocContent 5.1.0 PI DocContent 5.1.1 Quá trình mã h a mã sự kiện

Các phần part của mã sự kiện được mã hóa theo thứ tự, bắt đầu với phần part đầu tiên. Phần tử thứ i của mã sự kiện được mã hóa như là một số nguyên không dấu n-bit. Trong đó, n=[log2m] với m là tổng số các giá trị riêng distinct values được sử dụng trong EXI Grammar hiện thời.

Chú ý:

Nếu chỉ có một giá trị riêng cho một phần part đưa ra thì phần này sẽ bị bỏ qua vì [log21]=0).

Nếu giá trị của tùy chọn compression xem bảng 3.5) là false thì bit-packed alighment được sử dụng xem bảng 3.5 , các số nguyên không dấu n-bit được biểu diễn bằng cách sử dụng n bits. Trường hợp này được minh họa chi tiết trong ví dụ 3.25.

Nếu giá trị của tùy chọn compression là true thì tùy chọn byte-aligment hoặc pre- compression được sử dụng, các số nguyên không dấu n-bit được biểu diễn bằng cách sử dụng số lượng byte tối thiểu yêu cầu để lưu trữ n bits. Trường hợp này được minh họa chi tiết trong ví dụ 3.26.

Ví dụ 3.25: Mô tả quá trình mã hóa mã sự kiện khi EXI compression không được thiết lập và tùy chọn bit-packed aligment được sử dụng. Có 8 mã sự kiện được minh họa trong bảng 3.7. Phần đầu tiên có các giá trị từ 0 đến 5. Vậy phải cần có 6 giá trị riêng rẽ để xác định phần đầu tiên của các mã sự kiện. Do đó, phần đầu tiên được mã hóa như là một số nguyên không dấu n-bit với n=[log26]=3. Tương tự, phần hai và phần thứ ba được mã hóa như là một số nguyên không dấu n-bit với n=[log22]=1.

ảng 3.7: Quá trình mã hóa mã sự kiện khi EXI compression không được thiết lập và tùy chọn bit-packed aligment được sử dụng [6]

Event Part values Event code coding #bits

SE “A” 0 000 3 SE “B” 1 001 3 SE “C” 2 010 3 SE “D” 3 011 3 SE(*) 4 100 3 DT 5 0 101 0 4 CM 5 1 0 101 1 0 5 PI 5 1 1 101 1 1 5 #distinct values(m) 6 2 2 #bits per part

[log2m]

3 1 1

Ví dụ 3.26: Mô tả quá trình mã hóa mã sự kiện khi EXI compression được thiết lập bằng true và giá trị pre-compression của tùy chọn byte-aligment được sử dụng. Quá trình mã hóa được minh họa chi tiết trong bảng 3.8.

ảng 3.8: Quá trình mã hóa mã sự kiện khi EXI compression được thiết lập bằng true và giá trị pre-compression của tùy chọn byte-aligment được sử dụng [6]

Event Part values Event code coding #bytes

SE “A” 0 00000000 1

SE “B” 1 00000001 1

SE “C” 2 00000010 1

SE “D” 3 00000011 1

DT 5 0 00000101 00000000 2

CM 5 1 1 00000101 00000001 00000000 3

PI 5 1 1 00000101 00000001 00000001 3

#distinct values(m) 6 2 2 #bytes per part

[(log2m)/8]

3 1 1

3.5.3.2. Event Content

Hạng mục nội dung content item là một sự kiện được mô tả dựa theo các kiểu dữ liệu của nó. EXI sử dụng các đại diện kiểu dữ liệu đã được xây dựng sẵn built-in datatype representation để biểu diễn các hạng mục giá trị nội dụng. Hay nói cách khác, giá trị của thuộc tính và chuỗi giá trị được mã hóa dựa theo đại diện kiểu dữ liệu được gắn liền với nó. Thông tin kiểu dữ liệu có thể được lấy từ các thông tin lược đồ đã có sẵn. Bảng 3.9 liệt kê ánh xạ giữa các kiểu dữ liệu đã được xây dựng sẵn trong EXI và các kiểu dữ liệu tương ứng trong lược đồ XML.

ảng 3.9: Các kiểu dữ liệu đã được xây dựng sẵn trong EXI [6] Built-in EXI

Data type EXI Data type ID XML Schema Datatypes

Binary exi:base64Binary base64Binary exi:hexBinary hexBinary Boolean exi:boolean boolean

Date-Time exi:dateTime dateTime exi:time time exi:date date exi:gYearMonth gYearMonth exi:gYear gYear exi:gMonthDay gMonthDay exi:gDay gDay exi:gMonth gMonth Decimal exi:decimal decimal Float exi:double float, double Integer exi:integer integer

String exi:string string, anySimpleType và tất cả các kiểu được kế thừa trực tiếp từ kiểu union.

List Tất cả các kiểu dữ liệu kế thừa trực tiếp bởi list như là NMTOKENS, IDREFS và ENTITIES. n-bit unsigned

integer

Số nguyên nhỏ hơn bằng 4096 và được xác định bởi các giá trị minInclusive,

minExclusive, maxInclusive và maxExclusive.

Unsigned integer

Số nguyên không âm hoặc một số nguyên với giá trị của minInclusive >=0 hoặc

minExclusive >=1. QName

Chú ý:

Kiểu dữ liệu EXI có sẵn QName được sử dụng cho quá trình mã hóa cấu trúc, chẳng hạn như tên tiêu chuẩn qualified name của phần tử và thuộc tính.

3.5.4. String Table

String Table được sử dụng để mã hóa giá trị của những chuỗi ký tự lặp lại. Khi giá trị của chuỗi ký tự xuất hiện lặp lại thì nó sẽ được biểu diễn bằng một định danh nén compact identifier hơn là mã hóa chuỗi ký tự đó lần nữa. Khi giá trị của một chuỗi được tìm thấy trong String Table, nó sẽ được mã hóa bằng định danh nén. Nếu không tìm thấy trong bảng kết hợp thì chuỗi này sẽ được mã hóa như là một String và một định danh nén mới được tạo ra và bổ sung thêm vào String Table.

EXI sẽ đưa 4 hạng mục thông tin vào trong 4 phân vùng của String Table dựa vào ngữ cảnh xuất hiện của chúng:uri, prefix, local-name và value.

Phân vùng URI và Prefix được tối ưu hóa theo định danh nén compact identifier trong khi phân vùng LocalName và Value được mã hóa theo các hằng chuỗi string literal).

Phần uri của hạng mục nội dung qname và hạng mục thông tin uri được đưa vào trong URI partition. Phân vùng này luôn được khởi tạo trước 3 giá trị đầu vào 3 d ng đầu tiên của bảng trong hình 3.22).

Phần local-name của hạng mục thông tin qname và hạng mục thông tin local-name được đưa vào LocalName partition. Tương tự, hạng mục thông tin prefix được đưa vào Prefix partition.

Bảng 3.10 minh họa các hạng mục thông tin, sự kiện được sử dụng trong EXI Body và các phân vùng String Table liên quan.

ảng 3.10: Quá trình thiết lập phân vùng của String Table [7] Hạng mục thông tin

(Information item)

Sự kiện (EXI Event)

Phân vùng String Table (String Table Partition)

local-name SE (uri:*), AT (uri:*) LocalName

prefix NS, SE, AT Prefix

qname SE ( * ), AT ( * )

URI

phần uri của qname LocalName

phần local-name của qname

value CH, AT Value

Trong ví dụ 3.27 không có prefix vì vậy không gian tên mặc định URI “” [empty string] được sử dụng. Nếu lược đồ được cung cấp, các phân vùng LocalName cũng được sinh ra trước local-name cho mỗi thuộc tính attribute , phần tử element và kiểu type được khai báo trong lược đồ và được sắp xếp theo thứ tự từ điển. Nếu không có thông tin lược đồ, các đầu vào local-name được bổ sung theo thứ tự mà chúng xuất hiện trong tài liệu XML quá trình sắp xếp không được áp dụng . Trong hình 3.24 có 7 locale-name đầu vào là: Note, body, category, date, note, notebook, subject và được sắp xếp theo thứ tự từ điển.

Ví dụ 3.27: Minh họa quá trình thiết lập phân vùng cho một String Table của tài liệu Notebook. Notebook Schema <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="notebook"> <xs:complexType> <xs:sequence maxOccurs="unbounded">

<xs:element name="note" type="Note"/> </xs:sequence> <xs:attribute ref="date" /> </xs:complexType> </xs:element> <xs:complexType name="Note"> <xs:sequence>

<xs:element name="subject" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence>

<xs:attribute ref="date" use="required" />

<xs:attribute name="category" type="xs:string"/> </xs:complexType>

<xs:attribute name="date" type="xs:date" /> </xs:schema>

Notebook Document

<?xml version="1.0" encoding="UTF-8"?> <notebook date="2007-09-12">

<note category="EXI" date="2007-07-23"> <subject>EXI</subject>

<body>Do not forget it!</body> </note>

<note date="2007-09-12">

<body>milk, honey</body> </note>

</notebook>

Hình 3.22: Các đầu vào khởi tạo trong phân vùng URI [7]

Hình 3.23: Các đầu vào khởi tạo trong phân vùng Prefix [7]

Hình 3.25: Các đầu vào được khởi tạo trong phân vùng Value [7]

Hình 3.25 cho thấy rằng, các hạng mục thông tin giá trị có thể được tham chiếu theo hai cách nhau: giá trị toàn cục global value và giá trị cục bộ local value . Khi giá trị một chuỗi không tìm thấy trong cả phần giá trị toàn cục lẫn phần giá trị cục bộ thì hằng chuỗi của nó string literal được mã hóa là kiểu String và chuỗi giá trị được thêm vào cả phần giá trị toàn cục lẫn phần giá trị cục bộ.

Trong ví dụ 3.27, giá trị “EXI” được xuất hiện 2 lần. Do đó, lần xuất hiện thứ 2 trong phần giá trị toàn cục, “EXI” được mã hóa như là một định danh nén 3 bít vì có 6 đầu vào trong phần giá trị toàn cục 3=[log26]).

3.5.5. EXI Grammar

EXI là một quá trình mã hóa dựa trên tri thức, sử dụng một tập hợp các cú pháp grammar để xác định các sự kiện đang xảy ra tại bất kỳ điểm nào trong một EXI Stream và mã hóa với phương thức khác ít bit hơn. Nó thực hiện bằng cách ánh xạ các sự kiện với một tập hợp các giá trị đại diện và mã hóa các giá trị này bằng cách sử dụng một tập hợp variable-length codes [5] hoặc thuật toán nén EXI.

EXI tận dụng ưu thế về tri thức của loại tài liệu được mã hóa XML Document hoặc XML Fragment). EXI Grammar tận dụng những phần tử XML xuất hiện thường xuyên, phổ biến hơn phần tử khác và mã hóa nó với mã sự kiện ngắn hơn. Ví dụ, các thuộc tính xuất hiện nhiều hơn so với các chỉ dẫn xử lý và do đó thuộc tính được mã hóa với mã sự kiện ngắn hơn. Nếu thông tin lược đồ đã có, EXI Grammar không những tận dụng những tri thức XML chung mà có thể tận dụng được tri thức của từng loại tài liệu được mã hóa làm tăng tốc độ và hiệu quả xử lý.

3.5.5.1. Built-In Grammar

Built-In Grammar được dùng khi EXI không có thông tin về lược đồ và có thể tự động mở rộng bằng cách sử dụng thông tin từ các phần tử đang được mã hóa. Sự kiện của

Một phần của tài liệu luận văn: tìm hiểu và so sánh một số kỹ thuật nén XML (Trang 58)

Tải bản đầy đủ (PDF)

(83 trang)