750 likes | 1k Views
CHƯƠNG 2. XML SCHEMA (LƯỢC ĐỒ XML). Chương 2 : XML Schema . Khái niệm cơ bản về lược đồ XML Cấu trúc lược đồ Các kiểu dữ liệu cho lược đồ. I. Khái niệm về lược đồ XML. Khái niệm Cú pháp Không gian tên Các loại khai báo phần tử cho lược đồ. Khái niệm lược đồ.
E N D
XML Sshema CHƯƠNG 2 XML SCHEMA (LƯỢC ĐỒ XML)
XML Sshema Chương 2 : XML Schema • Khái niệm cơ bản về lược đồ XML • Cấu trúc lược đồ • Các kiểu dữ liệu cho lược đồ
XML Sshema I. Khái niệm về lược đồ XML • Khái niệm • Cú pháp • Không gian tên • Các loại khai báo phần tử cho lược đồ
XML Sshema Khái niệm lược đồ • Schema là một giải pháp tổng quát hoá DTD. Nó mô tả cấu trúc một tài liệu XML. • Nó xác định: +Tập hợp các thành phần chứa bên trong tài liệu XML. +Cung cấp các qui tắc về cách kết hợp các phần tử.
XML Sshema Khái niệm lược đồ (tt) Cụ thể, nó định nghĩa: + Các phần tử và thứ tự xuất hiện của các phần tử trong tài liệu. + Các thuộc tính và kiểu dữ liệu của các thuộc tính xuất hiện trong tài liệu . + Có thể định nghĩa ra các kiểu dữ liệu mới.
XML Sshema Lịch sử • Schama được định nghĩa bởi tổ chức W3C. • Microsoft là nhà phát triển hổ trợ schema mạnh mẽ nhất.
XML Sshema Ưu điểm của schema • Tuy không đơn giản hơn DTD nhưng Schema tỏ ra mạnh mẽ và chính xác hơn. • Ưu điểm nổi bật của schema là nó cho phép định nghĩa và khai báo kiểu dữ liệu thực sự mà bạn muốn sử dụng.
XML Sshema Lưu ý về cú pháp • Phần tử không rỗng phải có tag mở và đóng • Phần tử rỗng phải kết thúc bằng <element/> • Thuộc tính phải có giá trị và giá trị được đặt trong cặp dấu nháy “” • Các phần tử lồng vào nhau phải đúng qui tắc
XML Sshema Không gian tên • Không gian tên : http://www.w3.org/2001/XMLSchema Khi đó dùng tiền tố xsd (XML Schema Definition) làm tiền tố cho các phần tử <xsd:element> • Không gian tên: http://www.w3.org/2001/XMLSchema-instance Khi đó dùng tiền tố xsi (XML Schema Instance) làm tiền tố cho các phần tử <xsi:element>
XML Sshema Các loại khai báo phần tử cho lược đồ • Các phần tử chứa các phần tử con và có thể chứa nhiều thuộc tính gọi là kiểu phức hợp (complex types). • Các phần tử chỉ chứa dữ liệu đơn giản như chuỗi, số, ngày tháng – không chứa các thuộc tính – không chứa các phần tử con gọi là kiểu đơn giản (simple types).
XML Sshema Complex type Cú pháp: <prefixNamespace:complexTypename=“NewType”> Định nghĩa nội dung mà phần tử có thể chứa </prefixNamespace:complexType>
XML Sshema Complex type (tt) • Ví dụ 1 • Ví dụ 2
XML Sshema Simple type • Các phần tử chỉ chứa dữ liệu đơn giản như chuỗi, số, ngày tháng – không chứa các thuộc tính – không chứa các phần tử con • Có thể xây dựng ra kiểu dữ liệu mới được dẫn xuất từ kiểu dữ liệu cơ bản (giới hạn miền giá trị, định nghĩa kiểu giá trị liệt kê)
XML Sshema Simple type (tt) Cú pháp: <prefixNamespace:simpleTypename=“TypeNew” > </prefixNamespace: simpleType >
XML Sshema Ví dụ simpleType <xs:simpleType name="Mark"> <xs:restriction base="xs:integer"> <xs:minInclusive value="0"/> <xs:maxInclusive value="10"/> </xs:restriction> </xs:simpleType>
XML Sshema II. Cấu trúc lược đồ XML • Cấu trúc của lược đồ • Khai báo phần tử • Mô hình nội dung cho phần tử chứa trong lược đồ • Khai báo thuộc tính • Khai báo phần tử và thuộc tính toàn cục và cục bộ • Một số phần tử có sẵn trong lược đồ • Một số thuộc tính có sẵn
XML Sshema Cấu trúc lược đồ Cú pháp: Dạng 1: <?xml version=“1.0” ?> <schemaxmlns=“URL” xmlns:namespace=“URL reference” targetNamespace=“URL reference”> Định nghĩa cấu trúc lược đồ </ schema >
XML Sshema Cấu trúc lược đồ (tt) Ví dụ: <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:dcs="http://bigblue/XML" targetNamespace="http://bigblue/XML"> <complexType> …… </complexType> </schema>
XML Sshema Cấu trúc lược đồ (tt) Cú pháp: Dạng 2: <?xml version=“1.0” ?> <prefixNamespace:schema xmlns:prefixNamespace=“URL” > Định nghĩa cấu trúc lược đồ </prefixNamespace:schema>
XML Sshema Cấu trúc lược đồ (tt) Ví dụ: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:complexType> …… </xsd:complexType> </xsd:schema>
XML Sshema Khai báo phần tử • Dùng từ khoá element để khai báo một phần tử trong lược đồ • Dùng thuộc tính name để đặt tên cho phần tử • Dùng thuộc tính type để chỉ định kiểu dữ liệu cho phần tử
XML Sshema Khai báo phần tử Cú pháp: <elementname=“ElementName” type=“typedata”/> Hoặc: <prefixNamespace:elementname=“ElementName” type=“typedata”/>
XML Sshema Mô hình nội dung của phần tử • Tuần tự (sequence) • Chọn lựa (choice) • Phần tử rỗng • Nội dung hỗn hợp • Giới hạn dữ liệu cho phần tử • Tạo giá trị liệt kê cho phần tử • Tạo nhóm • Nhóm all • Chú thích trong lược đồ
XML Sshema Tuần tự (sequence) • Xác định thứ tự xuất hiện các phần tử • sequence có thể chứa thuộc tính minOccurs và maxOccurs . • Cú pháp <sequence> Định nghĩa các phần tử con </sequence > • Ví dụ
XML Sshema Chọn lựa (choice) • Chỉ chọn 1 phần tử trong nhóm các phần tử được định nghĩa • choice có thể chứa thuộc tính minOccurs và maxOccurs . Cú pháp: <choice> Định nghĩa danh sách các phần tử có thể chọn </choice > • Ví dụ
XML Sshema Chứa nội dung hỗn hợp • Phần tử có thể chứa văn bản và phần tử con • Phải khai báo thuộc tính mixed=“true” trong khai báo kiểu dữ liệu cho phần tử
XML Sshema Chứa nội dung hỗn hợp • Cú pháp (ví dụ ) <xsd:element name=“ElementName"> <xsd:complexType mixed="true"> <xsd:sequence> Định nghĩa các phần tử con mà nó chứa </xsd:sequence> </xsd:complexType> </xsd:element>
XML Sshema Khai báo phần tử rỗng • Xây dựng phần tử rỗng bằng cách khai báo phần tử có kiểu là complexType nhưng không chứa nội dung Cú pháp: <xsd:element name=“ElementName”> <xsd:complexType></xsd:complexType> </xsd:element>
XML Sshema Ví dụ phần tử rỗng <xsd:element name="img"> <xsd:complexType> </xsd:complexType> </xsd:element>
XML Sshema Giới hạn dữ liệu cho phần tử • Là hình thức giới hạn miền giá trị cho một kiểu dữ liệu nào đó hoặc tạo ra một kiểu dữ liệu đơn giản được dẫn xuất từ các kiểu dữ liệu có sẵn. Cú pháp: <xsd:simpleType name="TypedataDefinition"> <xsd:restriction base="Typedata_base"></xsd:restriction> </xsd:simpleType>
XML Sshema Giới hạn dữ liệu cho phần tử Ví dụ: <xsd:simpleType name="phonoYear"> <xsd:restriction base="xsd:gYear"> <xsd:minInclusive value="1877"/> </xsd:restriction> </xsd:simpleType>
XML Sshema Tạo dữ liệu dạng liệt kê • Là hình thức tạo ra một số giá trị mà phần tử có thể nhận được Cú pháp: <xsd:simpleType name="TypedataDefinition"> <xsd:restriction base="Typedata_base"> <xsd:enumeration value="value"/> </xsd:restriction> </xsd:simpleType>
XML Sshema Ví dụ tạo dữ liệu liệt kê <xsd:simpleType name="direction"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="North"/> <xsd:enumeration value="East"/> <xsd:enumeration value="South"/> <xsd:enumeration value="West"/> </xsd:restriction> </xsd:simpleType>
XML Sshema Tạo nhóm Cú pháp: <xsd:group name=“GroupName"> <xsd:sequence> <xsd:element ref=“element1"/> <xsd:element ref=“element2"/> ……………… </xsd:sequence> </xsd:group>
XML Sshema Tạo nhóm (tt) • Ví dụ:
XML Sshema Nhóm all • Nhóm all: không có thứ tự, xuất hiện tối đa một lần Cú pháp: <xsd:complexType name=“TypedataDefinition"> <xsd:all> <xsd:element name="e1" type="xsd:datatype"/> <xsd:element name="e2" type="xsd:datatype"/> ……………………… </xsd:all> </xsd:complexType>
XML Sshema Chú thích trong lược đồ Cú pháp: <xsd:annotation> <xsd:documentation>Nội dung</xsd:documentation> <xsd:appinfo> Nội dung diễn giải tư liệu </xsd:appinfo> </xsd:annotation>
XML Sshema Khai báo thuộc tính • Dùng từ khoá attribute để khai báo và đặt trong phần khai báo kiểu dữ liệu cho phần tử • Cú pháp <prefixNameSpace:attribute name="attributeName" type=“prefixNameSpace:TypeData" use="value"/>
XML Sshema Ví dụ về khai báo thuộc tính <xs:element name="song"> <xs:complexType> <xs:attribute name="genre" type="xs:string" use="optional" default="rock"/> </xs:complexType> </xs:element>
XML Sshema Một số giá trị cho thuộc tính use + prohibited + optional + required + default + fixed
XML Sshema Thuộc tính nhóm • Là hình thức định nghĩa ra một danh sách các thuộc tính. • Muốn dùng nhóm thuộc tính này cho phần tử nào đó ta dùng thuộc tính ref để tham chiếu tới.
XML Sshema Thuộc tính nhóm (tt) Cú pháp: <xs:attributeGroup name="attributeNameGroup"> <xs:attribute name=“attName1" type="xs:typedata" use=“value"/> <xs:attribute name=“attName2" type="xs:typedata" use=“value"/> …………………………… </xs:attributeGroup>
XML Sshema Thuộc tính nhóm (tt) • Cú pháp: <xs:element name=“ElementName”> <xs:complexType> <xs:sequence> Define content </xs:sequence> <xs:attributeGroup ref=“attributeNameGroup"/> </xs:complexType> </xs:element>
XML Sshema PHẦN TỬ CHỨA DỮ LIỆU CƠ BẢN VÀ CÓ THUỘC TÍNH <xs:element name=“ElementName"> <xs:complexType> <xs:simpleContent> <xs:restriction base=“DataType"> <xs:attribute name=“AttribiteName" type=“DataType" use="optional/riquired/…"/> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element>
XML Sshema PHẦN TỬ CHỨA DỮ LIỆU CƠ BẢN VÀ CÓ THUỘC TÍNH – VÍ DỤ <xs:element name=“name"> <xs:complexType> <xs:simpleContent> <xs:restriction base=“xs:string"> <xs:attribute name=“given_name" type=“xs:string" use="optional"/> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element>
XML Sshema ĐỊNH NGHĨA KIỂU MỞ RỘNG <xs:complexType name=“elementName"> <xs:complexContent> <xs:extension base=“baseComplexType"> <xs:sequence> <xs:element name=“elementName" type=“dataType"/> </xs:sequence> <xs:attribute name=“attributeName" type=“dataType" use="optional"/> </xs:extension> </xs:complexContent> </xs:complexType>
XML Sshema <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="parents"> <xs:complexType> <xs:sequence> <xs:element name="child1" type="firstchild"/> <xs:element name="child2" type="child"/> <xs:element name="child3" type="child"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>
XML Sshema <xs:complexType name="child"> <xs:sequence> <xs:element name="name"> <xs:complexType> <xs:simpleContent> <xs:restriction base="xs:string"> <xs:attribute name="another_name" type="xs:string" use="optional"/> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="birthday" type="xs:string"/> </xs:sequence> </xs:complexType>
XML Sshema <!--Dinh nghia kieu firstchild mo rong tu kieu child --> <xs:complexType name="firstchild"> <xs:complexContent> <xs:extension base="child"> <xs:sequence> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="IQ" type="xs:string" use="optional"/> </xs:extension> </xs:complexContent> </xs:complexType>