MỞ ĐẦU Như đã giới thiệu trong phần trước, MPEG-7 bao gồm một tập hợp các công cụ: bộ mô tả, chương trình mô tả, ngôn ngữ định nghĩa mô tả và một số công cụ h ệ thống. Chương này giới thiệu về ngôn ngữ định nghĩa mô tả (Description Definition Language - DDL).2 NGÔN NGỮ ĐỊNH NGHĨA MÔ TẢ DDL DDL là nền móng của chuẩn MPEG-7. Nó cung cấp một bộ các công cụ để người dùng có thể tạo ra chương trình mô tả và bộ mô tả. Đồng thời DDL cung cấp các luật cú pháp để định nghĩa, kết hợp, mở rộng và chỉnh sữa chương trình mô tả và bộ mô tả.
Và để có thể thực hiện được điều đó, DDL cần phải đáp ứng được một số yêu cầu như sau: DDL phải có khả năng cấu trúc, kế thừa giữa các phần tử bên trong một chương trình mô tả và giữa các chương trình mô tả. Nó phải cung cấp nhiều mô hình để kết nối và tham chiếu giữa một hay nhiều mô tả và dữ liệu nó mô tả. Nó phải là platform và độc lập ứng dụng, machine-readable và tốt nhất là human-readable. Nó phải có khả năng xác định các loại dữ liệu của bộ mô tả như các loại cơ bản (số nguyên, text, ngày, giờ) và các loại kết hợp ( sơ đồ, các loại đếm).
Xuất phát từ các yêu cầu đó, các chuyên gia MPEG-7 đã quyết định lựa chọn ngôn ngữ lược đồ XML đồng thời mở rộng một số thuộc tính nhất định để đáp ứng yêu cầu của ngôn ngữ định nghĩa mô tả MPEG-7. Lược đồ XML bao gồm 3 thành phần lược đồ như sau: Các thành phần sơ cấp: 1. Không gian tên (namespace) và bộ đóng gói lược đồ (schema wrapper); 2. Khai báo phần tử (element declarations); 19 3.
Khai báo thuộc tính (attribute declarations); 4. Định nghĩa loại: đơn giản (simple), phức tạp (complex), dẫn xuất (derived) và nặc danh (anonymous). Các thành phần thứ cấp: 1. Các định nghĩa nhóm thuộc tính (attribute group definitions); 2.
Các định nghĩa nhóm mô hình (model group definitions); 3. Định nghĩa nhận dạng –ép buộc (identity-constraint definitions); 4. Các khai báo chú thích (notation declarations) Các thành phần “ help”: 1. Chú thích (annotations); 2.
Nhóm mô hình (model groups); 3. Các phần sau đây sẽ trình bày một số thành phần quan trọng nhất cho MPEG-7 DDL.1 KHÔNG GIAN TÊN VÀ BỘ ĐÓNG GÓI LƯỢC ĐỒ Như chúng ta biết, ngôn ngữ XML cho phép người dùng khai báo các phần tử và thuộc tính riêng của mình. Điều này giúp cho người dùng tạo ra cách mô tả dữ liệu một cách chủ động. Tuy nhiên, trong một hệ thống mà dữ liệu được thu thập từ nhiều nguồn khác nhau sẽ dẫn đến tình trạng xung đột tên.
Nghĩa là cùng một tên phân tử, nhưng mô tả hai đối tượng khác nhau. Ví dụ, ta xem hai khai báo phần tử sau: <table length=”2.9m”> <name> Italian coffee style </name> <material> training oval wood </material> </table> Và: 20 <table width=”100%” height=”80%”> <tr> <td>Orange</td> <td>Strawberry</td> </tr> </table> Ở tài liệu trên, phần tử table mô tả về một cái bàn, trong khi phần tử table ở bảng dưới là một bảng dữ liệu. Nếu hai tài liệu này cùng được sử dụng trong một hệ thống sẽ dẫn đến tình trạng trùng tên (conflict). Để giải quyết vấn đề đó, ta sử dụng namespace.
Namespace là tập hợp các tên dùng để cho phép kết hợp các phần tử và thuộc tính bên trong một tài liệu XML nhằm giải quyết nguy cơ xung đột về tên của các phần tử khi thông tin được tổng hợp từ nhiều nguồn khác nhau, thông qua Namespace, trình duyệt có thể kết hợp các file XML từ nhiều nguồn khác nhau, có thể truy xuất đến lược đồ XML để kiểm tra cấu trúc của XML nhận được có thực sự thích hợp, từ đó xác định được tính hợp lệ của XML tương ứng. Ví dụ, để sử dụng hai tài liệu XML ở trên chung trong một hệ thống ta làm như sau: <p:table length=”2.9m”> <p:name> Italian coffee style </p:name> <p:material> training oval wood </p:material> </p:table> <s:table width=”100%” height=”80%”> <s:tr> <s:td>Orange</s:td> <s:td>Strawberry</s:td> </s:tr> </s:table> 21 Các phần tử và thuộc tính ở table thứ nhất được nhóm lại thành nhóm, tên nhóm là p, và các phần tử và thuộc tính ở table thứ hai được nhóm vào nhóm s. Đối với MPEG-7, không gian tên cho phép các bộ mô tả và chương trình mô tả từ các biểu đồ MPEG-7 đa dạng khác nhau có thể được sử dụng lại và được kết hợp để tạo ra các biểu đồ mới.2 CÁC KHAI BÁO PHẦN TỬ Ở khai báo này, chúng ta dùng từ khóa element để khai báo phần từ, và dùng thuộc tính name để khai báo tên phần tử, thuộc tính type để khai báo kiểu dữ liệu cho phần từ. Ví dụ: <xsd:element name=“ten” type=“xsd:string”> Và cũng có thể cung cấp thêm khả năng xuất hiện (thông qua thuộc tính minOccurs và maxOccurs) và thông tin mặc định (thông qua thuộc tính default).
Ví dụ, khai báo phần tử dưới đây khai báo phần tử tên là Country loại countrycode, xác đinh mặc định cho phần tử Country là “en” (English) và phần tử Country có thể xảy ra 0 hoặc nhiều lần. <element name="Country" type="countryCode" default="en" minOccurs="0" maxOccurs="unbounded"/> Các giá trị minOccurs và maxOccurs được tính toán theo cách sau: minOccurs= • Giá trị thực tế của thuộc tính minOccurs, nếu có • Nếu không thì là 1. MaxOccurs= • Không giới hạn, nếu thuộc tính maxOccurs bằng vô hạn; • Nếu không thì là giá trị thực tế của thuộc tính maxOccurs, nếu có. • Nếu không thì bằng 1.
22 Thay vì khai báo một phần tử ta cũng có thể tham chiếu một phần tử đã có như ví dụ sau: <element ref="Country" minOccurs="l"/> Khai báo này tham khảo một phần tử đã có (counntry) mà đã được khai báo ở đâu đó trong biểu đồ. Giá trị của thuộc tính ref phải tham chiếu một phần tử global, tức là một phần tử đã được khai báo ở lược đồ chứ không phải là phần tử trong định nghĩa loại phức tạp (complex).3 KHAI BÁO THUỘC TÍNH Một thuộc tính có thể được khai báo dưới dạng một loại đơn giản, sử dụng từ khóa attribute, và sử dụng thuộc tính type để khai báo loại dữ liệu cho phần tử. Thuộc tính use để xác định sự có mặt của thuộc tính được khai báo, use có thể có các giá trị required, optional hay prohibited. Thuộc tính được khai báo có thể có giá trị cứng (fixed) hoặc mặc định (default).
Ví dụ: <xsd:element name="song"> <xsd:complexType> <xsd:attribute name="genre" type="xs:string" use="optional" default="rock"/> </xsd:complexType> </xsd:element> Ở ví dụ trên, thuộc tính thể loại (genre) đã được khai báo, kiểu dữ liệu là string, giá trị của use là optional, và giá trị của thuộc tính thể loại được mặc định là rock.4 ĐỊNH NGHĨA LOẠI Trong biểu đồ XML, có một sự khác biệt cơ bản giữa định nghĩa loại (tạo ra các loại mới) và khai báo, Sự định nghĩa loại xác định các thành phần biểu đồ bên trong, và có thể được sử dụng trong các thành phần biểu đồ khác như khai báo thuộc tính và phần tử hay các 23 định nghĩa loại khác. Ví dụ, dưới đây loại Postcode lần đầu tiên được định nghĩa (loại đơn giản) – là chuỗi có độ dài 7: <simpleType name="Postcode"/> <restriction base="string"> <length value="7"/> </restriction> </simpleType> Sau khi đã được định nghĩa, loại Postcode có thể được sử dụng để khai báo phần tử như ví dụ sau: <element name="MyPostcode" type="Postcode"/> Biểu đồ XML cung cấp định nghĩa loại simple (đơn giản), và loại complex (phức tạp) như trong hình 2. Định nghĩa loại đơn giản: Không chứa phần tử và không mang thuộc tính. Nó có thể được dùng để khai báo phần tử và khai báo thuộc tính.
Loại đơn giản bao gồm tập hợp các loại built-in và loại user-derived. Loại dữ liệu Primitive build-in được cung cấp sẵn, và bao gồm: 1) string; 2) boolean;3) float;4) double;5) decimal;6) timeDuration;7) recurringDuration;8) binary;9) uriReference;10) ID;11) IDREF;12) ENTITY;13) QName. Các loại dữ liệu Buil-in derived bao gồm : 1) CDATA; 2) token;3) language; 4) IDREFS; 5) ENTITIES; 6) NMTOKEN, NMTOKENS; 7) Name, NCName; 8) NOTATION; 9) integer, nonPositiveInteger, negativeInteger, nonNegativeInteger, positiveInteger; 10) long, unsignedLong; 11) int, unsignedInt; 12) short,unsignedShort; 13) byte, unsignedByte; 14) timeInstant, time, timePeriod; 15) date, month, year, century;16) recurringDate, recurringDay.1 Các loại trong lược đồ XML Các loại User-derived mới có thể được tạo ra bằng cách sử dụng các restriction như facet enumeration cho string, facet minInclusive, maxInclusive cho interger. Ngoài ra, lược đồ XML còn cung cấp các loại non-atomic như list và union.
Định nghĩa loại phức tạp: Có chứa các phần tử con và có thể mang thuộc tính. Loại phức tạp bao gồm các loại Empty, Simple Content và Complex Content. Empty chỉ chứa thuốc tính, không chứa bất kỳ một phần tử con nào. Ví dụ: <element name=“Price”> <complexType> <attribute name=“currency” type=“currencyCode”= > <attribute name=“value” type=“decimal”= > <complexType> <element> <Price currency=“EU” value=“423.46”= >: Simple content được sử dụng để định nghĩa loại phức tạp từ một loại đơn giản.Ví dụ: <complexType name=“RelationType”> <simpleContent> 25 <extension base=“string”> <attribute name=“source” type=“IDREF” use=“optional”= > <attribute name=“target” type=“IDREF” use=“optional”= > <extension> <simpleContent> <complexType> <element name=“Relation” type=“RelationType”= > <Relation source=“edge1” target=“dge2”> morph <Relation> Complex content chứa phần tử con và thuộc tính.5 ĐỊNH NGHĨA NHÓM Phần tử attributeGroup và group cung cấp cơ chế tạo ra và đặt tên các nhóm thuộc tính và nhóm phần tử.
Các nhóm như vậy sau đó có thể được kết hợp bằng cách tham chiếu vào trong các định nghĩa complexType. <attributeGroup name="person_attributes"> <attribute name="weight" type="decimal"/> <attribute name="height" type="decimal"/> <attribute name="age" type="integer"/> </attributeGroup> <complexType name="Person"> <sequence> <element ref="Name"/> </sequence> attributeGroup ref="person_attributes"/> </complexType> 26 Ba bộ kết hợp (sequence, choise, và all) cũng được cung cấp để xây dựng các nhóm phần tử không tên bên trong nội dung phức tạp. Trong ví dụ dưới đây, contactGroup được định nghĩa là sự lựa chọn giữa hai phần tử Organization và person. PublisherType sau đó được định nghĩa là một chuỗi của ContactGroup và Address với một thuộc tính id <group name="ContactGroup"> <choice> <element ref="Organization"/> <element ref="Person"/> </choice> </group> <complexType name="PublisherType"> <sequence> <group ref name="ContactGroup"/> <element ref="Address"/> </sequence> <attribute name="id" type="ID" use="optional"/> </comp1exType> Sau đây là một ví dụ về lược đồ XML, và lược đồ này được minh họa ở hình 2.
<xsd:element name="root"> <xsd:complexType> <xsd:sequence> <xsd:element name="parents"> <xsd:complexType> <xsd:sequence> <xsd:element name="child1" type="firstchild"/> <xsd:element name="child2" type="child"/> 27 <xsd:element name="child3" type="child"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="child"> <xsd:sequence> <xsd:element name="name"> <xsd:complexType> <xsd:simpleContent> <xsd:restriction base="xsd:string"> <xsd:attribute name="another_name" type="xsd:string" use="optional"/> </xsd:restriction> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="birthday" type="xsd:string"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="firstchild"> <xsd:complexContent> <xsd:extension base="child"> <xsd:sequence> 28 <xsd:element name="description" type="xsd:string"/> </xsd:sequence> <xsd:attribute name="IQ" type="xsd:string" use="optional"/> </xsd:extension> </xsd:complexContent> </xsd:complexType> Hình 2.2 Minh họa một lược đồ XML 2.3 CÁC MỞ RỘNG CHO MPEG-7 DDL Để đáp ứng các yêu cầu DDL MPEG-7, Ngoài các thuộc tính và các định nghĩa loại XML, cần thiết phải bổ sung thêm các thuộc tính sau đây: • Các loại dữ liệu array và matrix; • Các loại dữ liệu built-in derived.1 CÁC LOẠI DỮ LIỆU ARRAY VÀ MATRIX Có hai phương pháp để xác định kích thước của mảng một chiều và ma trận đa chiều sử dụng kiểu dữ liệu list.