Các Kiến Thức, Ví Dụ Cơ Bản Về XML Schema

Thảo luận trong 'Mã Nguồn' bắt đầu bởi Pussy, Thg 11 8, 2016.

  1. Pussy

    Pussy New Member Chuyển tiền Tìm chủ đề

    Bài viết:
    Tìm chủ đề
    955
    XML Schema là dạng tài liệu chuẩn XML được đề xuất bởi tổ chức W3C năm 2001. XML Schema được dùng để mô tả cấu trúc và các kiểu dữ liệu của một tài liệu XML, nó thay thế cho chuẩn DTD (Document Type Definition ) trước đây. Việc này giúp định nghĩa một tài liệu XML hợp lệ cũng như các metadata cần thiết để sử dụng trong nhiều loại ứng dụng và công nghệ hiện nay như XAML , ADO.NET, WebService,...

    XML Namespace

    Các tài liệu XML có thể sử dụng cùng một tên thẻ để định nghĩa dữ liệu. Điều này dẫn đến dữ liệu có thể bị nhận dạng sai khi được sử dụng . Vì vậy việc xuất hiện một định danh toàn cục là cần thiết để xác định tính duy nhất của một tài liệu XML, định danh này được gọi là namespace

    [​IMG]

    Để thêm một XML namspace vào tài liệu, bạn sử dụng attribute xmlns (XML namspace) , nó được theo sau bởi dấu ":" và sau đó là tên prefix được gán cho namspace.

    Ví dụ : Gán namespace "http://www.w3.org/2001/XMLSchema” cho prefix xs

    xmlns:xs="http://www.w3.org/2001/XMLSchema”

    Ví dụ XML schema

    [​IMG]

    Các phần tử được định nghĩa trong XML Schema ở ví dụ trên gồm có "note", "from", "to", "message". Trong đó "note" là kiểu dữ liệu phức hợp (Complex Type) do chứa các phần tử con bên trong, còn các phần tử "from","to","message" là kiểu dữ liệu đơn giản (Simple Type).

    Cấu trúc một tài liệu XML Schema

    Complex Elementvà Simple Element:

    Complex Type: -có thể có các thuốc tính.

    - Nó có thể trống, có thể chứa văn bản, các phần tử khác hoặc bao gồm cả văn bản và các phần tử khác.

    Simple Type: - Có thể chứa văn bản hoặc không có gì.

    - Nó không thể có các thuộc tính.
    - Không thể chứa các thành phần khác.
    - Nó không thể để trống.
    - Tuy nhiên các văn bản có nhiều loại khác nhau và có thể có những hạn chế khác nhau áp dụng cho nó.

    Định nghĩa một phần tử đơn giản (Simple Element) :

    Một phần tử đơn giản được khai báo như sau:

    <xs:element name="nameElement" type="Type" />

    Ta có : nameElement là tên phần tử.

    Type là kiểu phần tử. Ta có các kiểu giá trị hay dùng như: xs:boolean, date, decimal, integer, time, string,...

    Các thuộc tính khác của một phần từ đơn giản
    Default = "default value" - Nếu không có giá trị khác, ta để mặc định.
    Fixed="value" - cố định một giá trị xác định.

    Định nghĩa một thuộc tính (Attribute):

    Các thuộc tính luôn thuộc loại đơn giản - Simple Type

    Khái báo như sau:

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

    Trong đó:

    Tên và loại giống như Simple Element

    Các thuộc tính khác của một phần tử element có thể có :

    Default = "default value" - Nếu không có giá trị khác, để giá trị mặc định .

    Fixed="value" - cố định một giá trị xác định.

    Use="optional" - thuộc tính không cần thiết, có thể có hoặc không.

    Use="Required" - thuộc tính bắt buộc phải có.

    Đặt giới hạn (Restriction):

    Hình thức tổng quát đặt giới hạn cho một giá trị text;

    [​IMG]

    Ví dụ như đặt giới hạn cho phần tử "age" giá trị từ "0" đến "140"

    [​IMG]

    Ta có các giới hạn trên các dạng text sau:

    Giới hạn cho số:

    minInclusive - Số phải lớn hơn hoặc bằng value.

    maxInclusive - Số phải nhỏhơn hoặc bằng value .

    minExclusive - Số phải lớn bằng value.

    minExclusive - Số phải nhỏhơn value.

    totalDigits- Số phải đúng bằng value đó.

    FractionDigits- không được nhiều hơn value chữ số thập phân.

    Giới hạn cho xâu kí tự (String):

    length - Xâu phải chứa chính xác value kí tự.

    minlength - Xâu phải chứa ít nhất value kí tự

    maxlength - Xâu không được chứa value kí tự

    Ví dụ:

    Phần tử Password1 phải có độ dài chính xác 8 kí tự

    [​IMG]

    Phần tử Password2 có độ dài ít nhất 5 kí tự và không quá 8 kí tự

    [​IMG]

    Pattern - Xác định chuỗi reguilar Expression ứng dụng cho giá trị trong XML.

    Ví dụ: Ràng buộc cho phần tử "letter " chỉ chấp nhận duy nhất một kí tự chữ thường từ a đến z

    [​IMG]

    Một trường hợp khác chấp nhận nhiều hơn 2 kí tự nhưng kí tự thường phải đứng trước theo sau là kí tự hoa ví dụ như "sToP"

    [​IMG]

    Ràng buộc cho phần tử "initials" chỉ chấp nhận 3 kí tự chữ thường hoặc chữ in hoa từ a đến z

    [​IMG]

    Tương tự đối với chữ số: phần tử prodid chỉ chấp nhận 5 chữ số có giá trị từ 0 -9

    [​IMG]

    Chỉ chấp nhận một trong các giá trị được liệt kê:

    Ví dụ: phần tử chọn chỉ chọn một trong các kí tự x ,y, hoặc z.

    [​IMG]

    Chọn male hoặc female

    [​IMG]

    Phải có chính xác 8 kí tự trong password có thể là chữ hoa hay chữ thường hoặc số.

    [​IMG]

    WhiteSpace - Nó không hẳn là một dàng buộc, nói về làm những gì với khoảng trắng. Loại bỏ hay để whitespace. Có 3 giá trị bao gồm: Preserve ( giữ nguyên giá trị chuỗi), replace (thay thế tất cả cấc khoảng trắng để trống), collapse ( thay thế các khoảng trắng bằng 1 khoảng trắng duy nhất, bỏ khoảng trắng đầu và cuối xâu kí tự )

    Ràng buộc lựa chọn :

    Enumeration

    Một ràng buộc lựa chọn được hiểu như là chọn một trong tập các giá trị cố định cho trước.

    Ví dụ như khi ta chọn các mùa:

    [​IMG]

    Complex Elements ( phần tử phức tạp)

    Complex elements được khai báo như sau:

    [​IMG]

    Ví dụ như "Person" bao gồm các phần tử con "FirstName" và "LastName"

    [​IMG]

    <xs:sequence/> có nghĩa rằng các phần tử phải xuất hiện 1 cách tuần tự "FirstName" trước và "LastName" sau.

    Bạn hãy nhớ rằng các thuộc tính luôn luôn là loại đơn giản - Simple Type.

    Định nghĩa toàn cục và cục bộ:

    Phần tử được khai báo ở "cấp cao" của một <schema> thì khả dụng trên toàn <schema> .

    Phần tử được khai báo trong vòng một xs:complex type chỉ là khai báo cục bộ, khả dụng trong xs:complex đó.

    Ví dụ: trong một phần tử xs:complesType "Person" các phần tử được khai báo trong đó sẽ chỉ khả dụng , gọi các phần tử tương tự nó trong phạm vi 1 element đó thôi.

    Các phần tử firstName và lastName là định nghĩa cục bộ.

    [​IMG]

    Schema XML không phân biệt thứ tự cấp của các phần tử được khai báo "cấp cao" nó có nghĩa là các định nghĩa toàn cục được sử dụng như nhau.

    Khai báo và sử dụng

    Khi ta muốn sử dụng lại phần tử đã khai báo ở trên trước đó ta sẽ sử dụng Type=" "

    Ví dụ ta có phần tử student có các thuộc tính tương tự như Person đã khai báo trước đó ta sẽ sử dụng chúng bằng cách.

    [​IMG]

    Hay professor cũng vậy.

    Chú ý: Phạm vi sử dụng rất quan trọng, ta không thể sử dụng loại cục bộ cho một số loại khác.

    Các kiểu dữ liệu trong XML schema

    Ta nhắc lại cách khai báo kiểu dữ liệu trong schema XML:

    <xs:element name="name" type="type"/>

    [​IMG]

    [​IMG]

    Một số kiểu chuỗi định sẵn

    Dưới đây là một vài chuỗi có thể sử dụng:

    xs:string : Một chuỗi.

    xs:normalizedString : một chuỗi không chứa các tab, dòng mới,...

    xs:token : Một chuỗi không chứa bất kì khoảng trống nào khác ngoài không gian đơn.

    Lưu ý: cho phép thực hiện các giới hạn (Restriction) trên chuỗi.

    Các kiểu ngày giờ được xác định trước

    xs:date: Ngày có định dạng kiểu CCYY-MM-DD, ví dụ 2002-11-05.

    xs:time: Định dạng thời gian kiểu hh:mm:ss (hours, minutes, seconds).

    xs:dateTime : có dạng CCYY-MM-DDThh:mm:ss

    T là một phần của cú pháp

    Cho phép ràng buộc với thời gian:

    enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, pattern, whiteSpace.

    Kiểu dữ liệu số định sẵn

    Dưới đây là một số kiểu dữ liệu số được định sẵn

    [​IMG]

    Các ràng buộc có thể thực hiện trên số:

    Enumeration, minInclusive, minExclusive, maxInclusive, maxExclusive, fractionDigits, totalDigits, pattern, whiteSpace

    Định nghĩa kiểu dữ liệu mới

    Nếu kiểu dữ liệu không có sẵn, bạn có thể tự tạo kiểu dữ liệu cho riêng mình.

    Có 2 cách để xác định kiểu dữ liệu của bạn:

    + Kiểu dữ liệu được đặt tên.

    + Kiểu dữ liệu ẩn danh.

    Ví dụ:

    Kiểu dữ liệu đã được đặt tên ở 1 phần tử trong tài liệu

    [​IMG]

    Kiểu dữ liệu ẩn danh.

    [​IMG]

    Thứ tự của các phần tử

    Sequence: Các phần tử xuất hiện theo thứ tự trong cùng một Schema.

    [​IMG]

    All: các yếu tố có thể xuất hiện bất kì vị trí nào.

    [​IMG]

    Choice: một phần tử trong danh sách lựa chọn có thể xuất hiện.

    [​IMG]

    Referencing (tham khảo| gọi phần tử)

    Nếu bạn đã khai báo phần tử hoặc thuộc tính với ( Name= "...") bạn có thể tham khảo|| gọi nó với Ref=".."
    việc này khá hữu ích và tiết kiệm thời gian khi bạn không phải làm nhiều đối với các phần tử giống nhau về hình thức.

    [​IMG]

    Phần tử văn bản với thuộc tính

    Đối với một phần tử text có thêm thuộc tính thì nó không còn là một phần tử đơn giản (simpleType) nữa mà nó trở thành complexType

    [​IMG]

    Các kiểu phần tử

    Phần tử chống (Empty elements).

    Phần tử hỗn hợp ( Mixed elements): Nó có thể bao gồm cả văn bản hoặc phần tử

    Chúng ta thêm mixed="true" vào trong xs:complexType

    [​IMG]

    Phần tử mở rộng (extentions)

    Bạn có thể căn cứ vào một kiểu phức tạp trên một kiểu phức tạp khác

    [​IMG]
    Trên đây mình đã giới thiệu khá chi tiết về Schema XML cũng như các thuộc tính phần từ, cách sử dụng chúng.

    Bài khá dài hy vọng các bạn theo dõi từ đầu đến cuối và hiểu được phần nào đó, phục vụ cho việc học tập của mọi người.

    Thân!
     
    Last edited by a moderator: Thg 8 9, 2018
  2. Đang tải...
Trả lời qua Facebook

Chia sẻ trang này