I Không gian tên (namespace)

Một phần của tài liệu Luận văn tìm hiểu WINDOWS SHAREPOINT SERVICES 3 0 (Trang 34 - 39)

Xml cho phép tự do định nghĩa và đặt tên cho các thẻ. Nếu tài liệu của ta chỉ sử

dụng riêng cho một mục đích nào đó và không cần kết hợp vào tài liệu XML khác thì

điều này không thành vấn đề. Tuy nhiên một khi các ứng dụng phát triển, tập định nghĩa các XML cần sống chung và kết hợp với nhau thì điều này là một vấn đề. Chẳng hạn nếu tài liệu của ta tự định nghĩa thẻ mang tên <Data> chứa dữ liệu phục vụ cho riêng ứng dụng của ta. Sau này chúng ta cần tích hợp tài liệu của mình với các ứng dụng khác như

VML hay MathML, chẳng may nếu các ứng dụng này cũng khai báo một phần tử mang tên <Data> thì sao? Trình phân tích nên hiểu thẻ <Data> của mình hay của VML hay MathML? Cần phải có sự phân biệt về phạm vi hay không gian tên (namespace) mà thẻ

có ý nghĩa. Ở đây ta vẫn có thể kết hợp hai thẻ <Data> vào một tài liệu XML duy nhất nhưng phân biệt chúng bằng không gian tên. Chúng ta dùng một định danh tài nguyên duy nhất (URI) để đặt cho không gian tên cần truy xuất. Tất cả các thẻđi theo không gian tên phải đặt sau tên miền và dấu hai chấm. Do URI chưa phổ dụng nên hiện nay ta vẫn thường dùng địa chỉ URL làm định danh duy nhất cho một không gian tên nào đó.

1. Tạo không gian tên

Tài liệu dưới đây là một thư viện sách. Chúng ta bắt đầu bằng phần tử gốc với tên thẻ là <library>, bên trong thẻ gốc chứa các phần tử sách <book> và tựa sách <title> như sau:

<Book>

<Title> XML Tutorial</Title> </Book>

</Library>

Để đưa định nghĩa không gian tên cho các thẻ, ta đưa thuộc tính xmlns:prefix vào phần tử gốc. prefix là tên miền hay không gian tên mà ta muốn chỉ định. Mỗi không gian tên cần mang một định danh URIs duy nhất. Ởđây chúng ta sử

dụng địa chỉ Web URLs thay cho URIs. Địa chỉ URLs được xem là duy nhất

đối với mọi tài nguyên trên Internet. Không gian tên NhuY được tạo ra cho thư

viện sau:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<Libraryxmlns:phuongduy="http://www.phuongduy.com.vn">

<Book>

<Title>XML Tutorial</Title>

</Book>

</Library>

Sau khi tạo ra không gian tên phuongduy, áp dụng tên này cho tất cả các thẻ

nào trong tài liệu XML mà ta muốn chúng duy nhất và độc quyền thuộc về

phuongduy. Ví dụ:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<phuongduy:Book>

<phuongduy:Title>XML Tutorial</phuongduy:Title> </phuongduy:Book>

</Library>

Tiếp theo nếu ta cần tham khảo đến các tựa sách của Amazon thì sao? Tài liệu XML của Amazon chắc chắn sẽ có phần tử thẻ mang tên <book> vậy để an toàn chúng ta cần tạo ra không gian tên cho Amazon như sau:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<Library xmlns:phuongduy="http://www.phuongduy.com.vn" xmlns:amazon="http://www.amazon.com/Lib">

<phuongduy:Book>

<phuongduy:Title> XML Tutorial</phuongduy:Title> </phuongduy:Book>

<amazon:Book>

<amazon:Title> XML Tutorial</amazon:Title> </amazon:Book>

</Library>

2. Không gian tên cục bộ (local namespace)

Chúng ta không chỉ có thể đặt thuộc tính xmlns ở phần tử gốc thuộc tính này có thể đặt ở bất kỳ thẻ nào. Trong ví dụ dưới đây ta di chuyển việc định nghĩa không gian tên amazon đến nơi mà nó bắt đầu sử dụng.

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<Libraryxmlns:phuongduy="http://www.phuongduy.com.vn" > <phuongduy:Book>

<phuongduy:Title> XML Tutorial</phuongduy:Title> </phuongduy:Book>

<amazon:Bookxmlns:amazon="http://www.amazon.com/Lib">> <amazon:Title> XML Tutorial</amazon:Title>

</amazon:Book>

</Library>

Chương III: ĐỊNH NGHĨA KIỂU TƯ LIỆU (DTD) & KIỂM TRA TÍNH HỢP LỆ (VALID) CỦA XML KIỂM TRA TÍNH HỢP LỆ (VALID) CỦA XML I.Định nghĩa kiểu tư liệu DTD là gì?

Ở phần trước chúng ta đã tìm hiểu về cú pháp và cách xây dựng một tài liệu XML hợp khuôn dạng (well-formed). Tuy nhiên tài liệu XML còn được kiểm tra bởi một quy định nữa đó là tính hợp lệ (valid) mà ở phần đầu ta đã đề cập đến.

Khi định nghĩa thẻ XML, ta tùy ý quyết định cách sử dụng chúng ví dụ như phần tử

<Name> chỉ chứa hai phần tử con là <FirstName> và <LastName>.

Một tài liệu XML được xem là hợp lệ và có giá trị khi toàn bộ các phần tử trong tài liệu được định nghĩa kiểu (type definition) mà nó sẽ chứa. Việc định nghĩa kiểu dữ

liệu cho các phần tử thẻ còn được gọi là kiểu định nghĩa tư liệu (DTD Document Type Definition). Vi dụ:

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!ELEMENTDocument(Greeting,Message)> <!ELEMENTGreeting(#PCDATA)>

<!ELEMENTMessage(#PCDATA)> ]>

<Document>

<Greeting>Hello XML</Greeting>

<Message>Welcome to XML</Message> </Document>

Theo ví dụ trên, rõ ràng chưa cần xem qua nội dung tài liệu chúng ta cũng biết

được ý nghĩa và cấu trúc của toàn bộ tài liệu. Chẳng hạn Document được định nghĩa ( bằng khai báo <!DOCTYPE) là phần tử thẻ gốc. Phần tử gốc chứa các phần tử con như Greeting, Message hai phần tử còn này dùng chứa dữ liệu (#PCDATA).

Ở ví dụ này chúng ta cần lưu ý đến phần tử <!DOCTYPE> thật sự về mặt kỹ thuật mà nói, đây không hoàn toàn là một phần tử. Đây chỉ là phần chỉ thị bắt

đầu khai báo kiểu tư liệu DTD, cú pháp định nghĩa và khai báo kiểu tư liệu cho các phần tử thẻ tổng quát như sau:

<!DOCTYPE root-name[DTD]>

Trong đó DTD là các định nghĩa cho phần tử trong tài liệu. DTD có thể là

định nghĩa nội (internal) hoặc ngoại (external). Trong trường hợp này chúng ta sử

dụng định nghĩa kiểu dữ liệu nội.

<?xmlversion="1.0"encoding="utf-8" ?>

<?xml-stylesheettype="text/xsl" href="hello.xslt"?>

<!DOCTYPEDocument [

<!ELEMENTGreeting(#PCDATA)> <!ELEMENTMessage(#PCDATA)> ]>

<Documen>

</Document>

Định nghĩa DTD cần theo cú pháp quy định của tổ chức XML W3C. Trong ví dụ

trên chúng ta định nghĩa thành phần DTD bằng chỉ thị khai báo <!ELEMENT>. Với khai báo này ta có thể cho biết một phần tử trong tài liệu sẽ mang dữ liệu text #PCDATA hoặc sẽ chứa các phần tử con khác.

<!ELEMENTDocument(Greeting, Message)>

Phần tử Document là phần tử dùng chứa hai phần tử con Greeting và Message. Hai phần tử này được định nghĩa chứa dữ liệu bằng văn bản và được khai báo:

<!ELEMENTGreeting(#PCDATA)> <!ELEMENTMessage(#PCDATA)>

Định nghĩa #PCDATA cho phép chứa các dữ liệu văn bản thuần túy không thuộc phần

định dạng.

Hơn nữa dựa vào khai báo đầu tiên của định nghĩa chúng ta có thể biết được thêm thông tin rằng Document là phần tử gốc (root).

Một phần của tài liệu Luận văn tìm hiểu WINDOWS SHAREPOINT SERVICES 3 0 (Trang 34 - 39)