Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Tổng quát về những tiến bộ đối với Lược đồ XML 1.0 và xem xét cụ thể đối với các kiểu dữ liệu Neil Delima ([email protected]) Phát triển phần mềm IBM 20 05 2009 Sandy Gao ([email protected]) Phát triển phần mềm IBM Michael Glavassevich ([email protected]) Phát triển phần mềm IBM Khaled Noaman ([email protected]) Phát triển phần mềm IBM Do có nhiều ứng dụng và tính đa dạng của Lược đồ XML, nên người sử dụng đòi hỏi cần phải có các cải tiến và ứng dụng mới. Nhóm xây dựng Lược đồ XML W3C đã phát triển Lược đồ XML 1.1 nhằm giải quyết những đòi hỏi mới nảy sinh nói trên và kể cả những khiếm khuyết của Lược đồ XML 1.0. Trong phần đầu tiên của của loạt bài viết nhiều phần này các tác giả Neil Delima, Sandy Gao, Michael Glavassevich, và Khaled Noaman đã giới thiệu Lược đồ XML 1.1 với cái nhìn tổng quát đối với các đặc tính mới được phát triển nhằm đáp ứng với các tiêu chuẩn mới phát sinh và xem xét cụ thể đối với các nội dung bổ sung mới và các thay đổi đối với phần các dữ liệu của đặc tả này. Xem thêm bài trong loạt bài này Giới thiệu Các bài viết khác trong loạt bài viết này • Lược đồ XML 1.1, Phần 2: Đồng ràng buộc sử dụng XPath 2.0 © Copyright IBM Corporation 2009 Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Nhẫn hiệu đăng ký Trang 1 của 16 developerWorks® ibm.com/developerWorks/vn/ Từ khi Ký tự đại diện Lược đồ XML 1.0 trở thành một khuyến cáo của W3C trong năm 2001, nhóm phát triển đã thảo luận về các lợi ích và các khiếm khuyết của loại ngôn ngữ này. Nhóm xây dựng Lược đồ XML W3C đã tiếp tục nghiên cứu xây dựng Ký tự đại diện ngôn ngữ tiếp theo. Năm 2005, với việc chuẩn này đã được áp dụng rộng rãi trong lĩnh vực này và được lồng ghép vào nhiều chuẩn khác như XSLT, XQuery và WSDL, W3C tổ chức một hội thảo nhằm phản hồi những bài học kinh nghiệm của người sử dụng và thu thập các phản hồi nhằm giúp cho việc phát triển ngôn ngữ này. Hội thảo này cùng với các yêu cầu đặt ra từ phía người sử dụng trong ngành đã giúp cho nhóm xây dựng Lược đồ XML hình thành được phạm vi của Ký tự đại diện chuẩn 1.1. Các từ viết tắt hay dùng • • • • W3C: World Wide Web Consortium WSDL: Web Services Description Language XML: Extensible Markup Language XSLT: Extensible Stylesheet Language Transformations Trong phần này chúng ta bắt đầu bằng việc xem xét một số đặc điểm mới của Lược đồ XML 1.1 và sau đó đi sâu vào những cải tiến cho kiểu dự liệu của bản đặc tả này. Chuẩn này được biết đến với tên gọi Ngôn ngữ xác định Lược đồ XML hay viết tắt là XSD. Chúng tôi dùng từ viết tắt này cho bài báo này cũng như trong toàn bộ loạt bài viết. Đôi khi, nêu rõ nghĩa thì Lược đồ XML hay Lược đồ được dùng để nói đến ngôn ngữ này. Độc giả nên nhớ bài viết này được viết khi Lược đồ XML 1.1 vẫn đang trong quá trình xây dựng. Một vài chi tiết có thể sẽ thay đổi trước khi Lược đồ XML 1.1 trở thành Khuyến nghị W3C. Những khó khăn của Lược đồ XML 1.0 Các tác giả của Lược đồ thường gặp một số những khó khăn nhất định. Bạn có thể lẩn tránh một số vấn đề khó khăn và tạo ra các thiết kế lược đồ phản trực giác, hoặc bạn có thể xử lý một số vấn đề khó khăn khác bằng mã hóa trong các ngôn ngữ lập trình. Phần này sẽ xem xét những vấn đề dễ phát sinh nhất và thảo luận xem làm thế nào Lược đồ XML 1.1 có thể xử lý chúng. Chi tiết về thảo luận sẽ có ở các phần tiếp sau của bài báo này Giới hạn của mô hình nội dung Các kiểu phức tạp có thể có nhiều loại nội dung khác nhau. Những kiểu có phần tử (element) con có thể sẽ phải có một trong <xs:sequence>, <xs:choice>, hoặc <xs:all> như các mô hình nội dung của chúng. Khi một kiểu phức tạp dẫn xuất bởi giới hạn của một kiểu khác thì cả hai mô hình nội dung đều phải thỏa mãn một số ràng buộc nhất định. Những ràng buộc này phải thật cụ thể để đảm bảo cái đã được cho phép bởi kiểu ràng buộc cũng được cho phép đối với các kiểu cơ sở Trong Lược đồ XML 1.0, những ràng buộc này được cụ thể hóa nhờ bảng 25-case và các mô hình nội dung đều có vẻ giống nhau để thỏa mãn các ràng buộc này, điều này dẫn tới nẩy sinh các vấn đề sau: • Các luật chặt chẽ trong 25 cases bỏ đi một số dẫn xuất hợp lệ. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 2 của 16 ibm.com/developerWorks/vn/ developerWorks® • Luật cho phép một vài dẫn xuất không hợp lệ (đó là, các ràng buộc cho phép nhiều hơn cơ sở). Ví dụ, trong ví dụ 1 kiểu derived loại bỏ phần tử tùy chọn tns:a từ kiểu based. Đây rõ ràng là một giới hạn hợp lệ, nhưng lại không hợp lệ trong Lược đồ XML 1.0 Ví dụ 1. Một kiểu derived loại bỏ phần tử tùy chọn từ kiểu cơ sở <complexType name="base"> <complexContent> <sequence> <element ref="tns:a" minOccurs="0" maxOccurs="1"/> <choice minOccurs="0" maxOccurs="unbounded"> <element ref="tns:b"/> <element ref="tns:c"/> </choice> </sequence> </complexContent> </complexType> <complexType name="derived"> <complexContent> <restriction base="tns:base"> <sequence> <choice minOccurs="0" maxOccurs="unbounded"> <element ref="tns:b"/> <element ref="tns:c"/> </choice> </sequence> </restriction> </complexContent> </complexType> Trong Lược đồ XML 1.1, luật của 25-case được loại bỏ và thay bằng một khái niệm giản đơn nhằm phản ánh được mục tiêu “cái được cho phép bởi giới hạn thì cũng được cho phép bởi cơ sở". Ví dụ trên trở thành hợp lệ trong Lược đồ XML 1.1 Đồng ràng buộc Các tác giả Lược đồ thường muốn áp dụng các luật liên quan đến cho nhiều phần tử hay thuộc tính (attribute). Ví dụ "min cần bé hơn hoặc bằng với max", hoặc "số lượng các phần tử con cần phải phù hợp với đặc tính size. Các luật giống như vậy thường được gọi các đồng xuất hiện ràng buộc hoặc đơn giản là các đồng ràng buộc. Lược đồ XML 1.0 không cung cấp phương tiện để hỗ trợ cho các đồng ràng buộc. Người dùng đôi khi phải viết JAVA™ hoặc mã C để kiểm tra chúng sau khi tài liệu XML được tải về bộ nhớ. Điều này ảnh hưởng đến tính bền vững và làm lược đồ trở nên yếu đi. Một số người sử dụng tìm kiếm sự giúp đỡ từ các ngôn ngữ kiểm chuẩn XML (XML validation) khác như Schematron và Relax NG (xem Tài nguyên) cho sự hỗ trợ đồng ràng buộc, mà lại làm phức tạp kiến trúc dựa trên XSD của chúng. Lược đồ XML 1.1 hỗ trợ các đồng ràng buộc một cách tự nhiên. Cái mới được đưa ra là <xs:assert> nhân tố có thể bao gồm các ràng buộc được xác định cụ thể trong các biểu thức trong XPath 2.0 (xem Tài nguyên). Xem Ví dụ 2: Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 3 của 16 developerWorks® ibm.com/developerWorks/vn/ Ví dụ 2. Các đồng ràng buộc Lược đồ XML 1.1 <xs:complexType name="intRange"> <xs:attribute name="min" type="xs:int"/> <xs:attribute name="max" type="xs:int"/> <xs:assert test="@min <= @max"/> </xs:complexType> Phát triển lược đồ (Schema) Mọi người đều thấy cần phải phát triển lược đồ của mình, thêm các mở rộng đối với các thông tin mới. Ký tự đại diện (wildcard) là công cụ hữu hiệu được thiết kế cho mục đích này. Nó có thể dùng cho các Ký tự đại diện lược đồ cũ để cho phép các điểm mở rộng và trong các Ký tự đại diện sau này, các phần tử cụ thể có thể được đưa ra thay cho Ký tự đại diện này. Nhưng những Ký tự đại diện lại có các vấn đề đáng tiếc như sau: • Chính luật gây tranh cãi Unique Particle Attribution (UPA) gây khó khăn khi sử dụng các Ký tự đại diện tùy chọn • Các Ký tự đại diện không được đủ mạnh để miêu tả “mọi phần tử ngoại trừ những phần tử dưới đây" • Việc lặp đi lặp lại cùng một Ký tự đại diện đối cho mỗi kiểu phức tạp để làm cho toàn bộ lược đồ có tính mở rộng sẽ gây tẻ nhạt. Lược đồ XML 1.1 làm cho phát triển lược đồ dễ dàng hơn. Ngoài ra các Ký tự đại diện được cải tiến mạnh mẽ. Sẽ không còn vi phạm lỗi UPA khi mâu thuẫn với các phần tử được xác định cụ thể rõ ràng và chúng có thể loại trừ được một danh sách các không gian tên (namespaces) hay một danh sách các tên, chúng thậm chí có thể để tự mặc định. Điều này sẽ dễ dàng hơn bao giờ hết để viết các lược đồ mở rộng. Ví dụ, để trình bày một mô hình nội dung đối với "một và chỉ một phần tử gọi là userName và một số phần tử khác, trước và sau userName", bạn xác định mô hình nội dung như trong Ví dụ 3. Ví dụ 3. Mô hình nội dung trong Lược đồ XML 1.0 <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> <xs:element ref="tns:userName"/> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip"/> </xs:sequence> Nhưng lại không hợp lệ trong Lược đồ XML 1.0. Khi phần tử có tên userName lại bắt gặp, điều này không chắc chắn liệu có phù hợp với Ký tự đại diện <xs:any> hoặc lời gọi phần tử <xs:element> để giải quyết vấn đề này, một số người chèn phần tử ngăn cách giữa các phần tử và Ký tự đại diện. Việc này có hiệu quả nhưng làm cho cả lược đồ và các tài liệu XML rất xấu. Một vấn đề khác là Ký tự đại diện này cũng cho phép userName, vì thế luật "một và chỉ một " không thể áp dụng. Trong Lược đồ XML 1.1, lược đồ chia nhỏ trong ví dụ 3 trở nên hợp lệ do bởi các Ký tự đại diện đã được làm yếu đi, có nghĩa là khi một phần tử đã phù hợp với khai báo phần tử hoặc là một Ký tự đại diện thì khai báo phần tử luôn được ưu tiên trước. Điều này tránh được tồn tại của UPA. Với sự giúp đỡ của của Ký tự đại diện phủ định, bạn luôn có thể biểu diễn luật “một và chỉ một userName và bất kỳ điều nào khác" trong ví dụ 4. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 4 của 16 ibm.com/developerWorks/vn/ developerWorks® Ví dụ 4. Mô hình nội dung trong Lược đồ XML 1.1 <xs:sequence> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" notQName="tns:userName"/> <xs:element ref="tns:userName"/> <xs:any minOccurs="0" maxOccurs="unbounded" processContents="skip" notQName="tns:userName"/> </xs:sequence> Các kiểu dữ liệu Lược đồ XML Nội dung bản đặc tả của Lược đồ XML gồm 2 phần: Cấu trúc và kiểu dữ liệu (xem Tài nguyên). Trong phần này, chúng ta sẽ đề cập đến các thay đổi trong phần kiểu dữ liệu của bản đặc tả là một phần của Lược đồ XML 1.1 đã đưa ra. Trong các bài viết sau, chúng ta sẽ đi vào cụ thể các thay đổi với phần Cấu trúc. Phù hợp với các loại mô hình dữ liệu XQuery 1.0 và XPath 2.0 Kiểu hệ thống sử dụng bởi W3C XQuery 1.0, XPath 2.0, XSLT 2.0 và XQuery 1.0 và XPath 2.0 Data Model Recommendations (xem Tài nguyên) là phần mở rộng trong Khuyến nghị Lược đồ XML W3C 1.0. Ngoài các kiểu dữ liệu gốc đã có sẵn Lược đồ XML 1.0, những bản đặc tả này còn xác định 5 kiểu dữ liệu bổ sung thêm trong miền tên Lược đồ XML 1.0, gọi là: anyAtomicType, untyped, untypedAtomic, dayTimeDuration và yearMonthDuration. Để phù hợp với kiểu hệ thống của Lược đồ XML và các đặc tả này, đặc tả kiểu dữ liệu của Lược đồ XML 1.1 đưa ra 3 kiểu dữ liệu, gọi là: anyAtomicType, dayTimeDuration, và yearMonthDuration . anyAtomicType anyAtomicType là kiểu dữ liệu có sẵn đặc biệt của Lược đồ XML 1.1 bắt nguồn bởi ràng buộc từ anySimpleType. Từ khi anyAtomicType là cơ sở cho các kiểu dữ liệu gốc, giá trị và không gian ngôn ngữ (lexical space) của anyAtomicType là sự hợp nhất của giá trị và không gian ngôn ngữ của tất cả các kiểu dữ liệu gốc. Để giải thích rõ hơn, hãy xem Lược đồ XML ở ví dụ 5 và tài liệu hợp lệ của XML (ví dụ 6) dưới đây. Trong ví dụ này, phần tử kiểu anyAtomicType có thể hàm chứa một chuỗi hoặc số nguyên như một giá trị hợp lệ. Có thể áp dụng cho kiểu cụ thể được xuất dẫn từ anyAtomicType mà sử dụng xsi:type. Cần chỉ ra rằng anyAtomicType không xác định bất cứ phần tử ràng buộc nào do đó bạn không thể dùng nó như là kiểu cơ sở của kiểu giản đơn do người dùng xác định (user-defined simple type). Ví dụ 5. Ví dụ Lược đồ XML cho anyAtomicType <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="test" xmlns:pfx="test"> <element name="root"> <complexType> <sequence> <element name="elanyAtomicType" type="anyAtomicType" maxOccurs="unbounded"/> </sequence> </complexType> </element> </schema> Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 5 của 16 developerWorks® ibm.com/developerWorks/vn/ Ví dụ 6. Ví dụ về tài liệu XML cho anyAtomicType <pfx:root xmlns:pfx="test" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <elanyAtomicType>Test</elanyAtomicType> <elanyAtomicType>12345</elanyAtomicType> <elanyAtomicType xsi:type="xs:string">Test</elanyAtomicType> <elanyAtomicType xsi:type="xs:integer">12345</elanyAtomicType> </pfx:root> yearMonthDuration Kiểu dữ liệu duration (khoảng thải gian) trình bày trong XML Schema 1.0 Datatypes Recommendation (xem Tài nguyên) là một kiểu được xếp thứ tự một phần nào đó và đại diện cho một giai đoạn thời gian, ví dụ các giá trị duration P30D và P1M là không thể so sánh được do một tháng thì có thể bao gồm bất kỳ từ 28 đến 31 ngày. Để giúp cho các khoảng thời gian có thể so sánh được, Lược đồ XML 1.1 đưa ra hai kiểu dữ liệu thứ tự hoàn toàn mới, gọi là yearMonthDuration và dayTimeDuration bắt nguồn bởi ràng buộc từ duration. Trong Lược đồ XML 1.1, kiểu dữ liệu yearMonthDuration được bắt nguồn từ duration bằng cách giới hạn đối với trình bày ngôn từ để khống chế chỉ hai thành phần năm và tháng. Bạn có thể trình bày bằng một biểu thức thông thường: -?P[0-9]+(Y([0-9]+M)?|M) Giá trị của thành phần năm và tháng cho phép sử dụng một số nguyên không dấu (unsigned integer). Ký hiệu dấu trừ tùy chọn sẽ hiểu là một yearMonthDuration số âm. Không gian giá trị của kiểu dữ liệu duration bao gồm một số nguyên các tháng và một số thập phân các giây. Không gian giá trị của kiểu dữ liệu yearMonthDuration là giới hạn của không gian giá trị của kiểu dữ liệu duration với giá trị các giây là không (0). Một số dương yearMonthDuration của một năm và sáu tháng có thể biểu đạt về từ ngữ là P1Y6M hoặc P18M. Giá trị của yearMonthDuration là 18 tháng. Các ví dụ của các giá trị yearMonthDuration hợp lệ bao gồm P1Y2M, P12Y, -P20M, trong khi các trình bày dưới đây là không hợp lệ P-1Y , P1Y-1M và P1YM. Kiểu dữ liệu yearMonthDuration được xếp thứ tự toàn bộ, đối với bất kỳ 2 giá trị yearMonthDuration D1 và D2 mối quan hệ thứ tự giữa D1 và D2 có thể được thiết lập, có nghĩa hoặc là D1 > D2 hoặc D1 < D2. Kiểu dữ liệu người sử dụng xác định có thể dẫn xuất từ ràng buộc từ yearMonthDuration, bằng cách xác định các phần tử ràng buộc cho phép bởi duration. Từ khi yearMonthDuration dẫn xuất bởi giới hạn từ duration là phần tử cơ bản, có thứ tự và một phần cũng không bị thay đổi bởi dẫn xuất. Tuy nhiên, yearMonthDuration trên thực tế được sắp xếp hoàn toàn. dayTimeDuration Tương tự đối với yearMonthDuration, kiểu dữ liệu dayTimeDuration dẫn xuất từ duration bằng cách giới hạn cách biểu diễn ngôn từ để chỉ bao gồm các thành phần ngày và thời gian (giờ, phút, giây) từ kiểu dữ liệu duration. Điều này có thể trình bày bằng các khoảng thời gian phù hợp với các biểu thức thông thường [^YM]*[DT].*. Giá trị của các thành phần ngày, giờ, phút là bị giới hạn, nhưng vẫn cho một xs:integer không dấu tùy ý. Tương tự, các giá trị của thành phần giây cho phép một xs:decimal không dấu tùy ý. Dấu âm tự chọn phản ánh một số âm dayTimeDuration. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 6 của 16 ibm.com/developerWorks/vn/ developerWorks® Không gian giá trị của kiểu dữ liệu dayTimeDuration là ràng buộc về miền giá trị của kiểu dữ liệu duration với giá trị thuộc tính các tháng là 0 và giá trị các giây là phân số. Một số dương dayTimeDuration của một ngày, hai giờ, ba phút và 4,5 giây có thể diễn đạt dưới dạng ngôn từ là P1DT2H3M4.5S. Giá trị của yearMonthDuration là 93784.5 (1*24*60*60+2*60*60+3*60+4.5) phân số cho các giây. Chú ý rằng số lượng của ngày, giờ, phút và giây là 0, có thể bỏ qua trình bày dưới dạng ngôn từ miễn là nếu có ít nhất một trong chúng được thể hiện. Nếu như dayTimeDuration chỉ bao gồm các ngày, thì thiết kế cho T phải bỏ đi. Thêm một số ví dụ dayTimeDuration hợp lệ bao gồm P1D, PT25H, P22DT2H, PT1H99M5, 5S, -PT20M, -PT60.60S và một số ví dụ dayTimeDuration không hợp lệ là P-5D, P1D1M1H1S, PDT1M, P5H và P1DT. Giống như yearMonthDuration, kiểu dữ liệu dayTimeDuration hoàn toàn có thứ tự. Kiểu dữ liệu dẫn xuất từ ràng buộc từ dayTimeDuration có thể xác định các phần tử ràng buộc giống nhau ví dụ như kiểu dữ liệu duration. Chú ý rằng giá trị của vùng trảng(whitespace) các phần tử cho yearMonthDuration và dayTimeDuration được gắn với collapse và không thể thay đổi. Ví dụ 7 miêu tả một phần hợp lệ của Lược đồ XML 1.1 sử dụng kiểu dữ liệu yearMonthDuration và dayTimeDuration . Ví dụ 7. Ví dụ Lược đồ XML cho yearMonthDuration và dayTimeDuration <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="test" xmlns:pfx="test"> <simpleType name="ymdBase"> <restriction base="yearMonthDuration"> <minInclusive value="P1Y6M"/> </restriction> </simpleType> <simpleType name="ymdDerived"> <restriction base="ymdBase"> <minInclusive value="P19M"/> </restriction> </simpleType> <simpleType name="dtdBase"> <restriction base="dayTimeDuration"> <maxInclusive value="-P2DT2H"/> </restriction> </simpleType> <simpleType name="dtdDerived"> <restriction base="dtdBase"> <maxInclusive value="-P51H"/> </restriction> </simpleType> <element name="root"> <complexType> <sequence> <element name="elYearMonthDuration" type="ymdDerived"/> <element name="elDayTimeDuration" type="dtdDerived"/> </sequence> </complexType> </element> </schema> Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 7 của 16 developerWorks® ibm.com/developerWorks/vn/ Ví dụ 7 miêu tả một phần hợp lệ của Lược đồ XML 1.1 sử dụng các kiểu dữ liệu yearMonthDuration và dayTimeDuration. Kiểu đơn giản ymdDerived giới hạn kiểu cơ sở ymdBase, nó tiếp theo lại giới hạn kiểu dữ liệu dựng sẵn Lược đồ XML yearMonthDuration mà sử dụng phần tử minInclusive. Vì yearMonthDuration là được đặt thứ tự toàn bộ, giá trị P19M của kiểu dẫn xuất ymdDerived lớn hơn nhiều so với giá trị của P1Y6M kiểu cơ sở ymdBase tạo nên một ràng buộc có hiệu lực. Tương tự, kiểu đơn giản maxDerived giới hạn kiểu cơ sở dtdBase, nó đến lượt lại giới hạn kiểu dữ liệu dựng sẵn Lược đồ XML dayTimeDuration mà sử dụng phần tử maxInclusive. Trong trường hợp này, khoảng giá trị âm của -P51H của kiểu dẫn xuất maxDerived nhỏ hơn so với của kiểu cơ sở P2DT2H. Phần tử, gảc chứa phần tử con elyearMonthDuration và eldayTimeDuration của các kiểu ymdDerived và maxDerived riêng biệt. precisionDecimal là kiểu mới trong Lược đồ XML 1.1 nhằm hỗ trợ cho kiểu dấu phẩy động thập phân IEEE-754 mới. Nó khác với thảp phân trong đó các số thập phân chính xác không chỉ gồm các giá trị về số mà còn giữ lại được sự chính xác số học. precisionDecimal cũng bao gồm các giá trị đối với vô cực dương (+INF) và vô cực âm (-INF) và không đối với số (NaN). Cũng có sự khác biệt giữa dương không (+0) và âm không (-0). precisionDecimal Miền ngôn từ của precisionDecimal là một bộ của tất cả các số thập phân (có hay không có dấu thập phân), các số biểu diễn dưới dạng khoa học (số mũ), và chuỗi ký tự 'INF', '+INF', '-INF và 'NaN'. Kiểu dữ liệu do người sử dụng xác định dẫn xuất từ ràng buộc của precisionDecimal có thể xác định các phần tử ràng buộc giống nhau như của decimal. Ngoài ra, hai phần tử ràng buộc mới, maxScale và minScale được đưa ra để cho phép các kiểu dẫn xuất nhằm giới hạn lại các miền giá trị của precisionDecimal. Một maxScale đặt ra một giá trị giới hạn trên trong khi minScale đặt ra một giá trị giới hạn dưới về chính xác số học của các giá trị precisionDecimal. Trong ví dụ 8 chúng ta xác định kiểu price mới mà chấp nhận giá trị giữa -999,999.99 và 999,999.99. Ví dụ 8. Ví dụ của một bộ phận của Lược đồ XML sử dụng precisionDecimal <xs:simpleType name='price'> <xs:restriction base='xs:precisionDecimal'> <xs:totalDigits value='8'/> <xs:minScale value='2'/> <xs:maxScale value='2'/> </xs:restriction> </xs:simpleType> Nên ghi nhớ khi sử dụng NaN rằng không thể so sánh với bất kỳ giá trị nào khác kể cả chính nó, vì vậy nếu sử dụng NaN đối với bất kỳ các phần tử giới hạn nào (minInclusive, maxInclusive, minExclusive hoặc maxExclusive), kết quả là sẽ thu được một kiểu dữ liệu có miền giá trị rỗng. Tương tự, kể cả NaN trong một bảng liệt kê sẽ không chấp nhận các giá trị NaN . Nếu muốn có NaN là một phần của miền giá trị, xác định kiểu tổng hợp mà chỉ có kiểu dữ liệu NaN (bằng cách xác định một phần tử mẫu với giá trị của " NaN "). Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 8 của 16 ibm.com/developerWorks/vn/ developerWorks® Vùng thời gian (Timezone) đối với Vùng thời gian offset Các kiểu dữ liệu có liên quan đến date, time, và datemonth được xác định trong đặc tả của Lược đồ XML 1.0 bao gồm vùng thời gian tùy chọn dưới dạng (('+' | '-') hh ':' mm) | 'Z'. Khi một giá trị vùng thời gian được thêm vào một dateTime của Universal Coordinated Time (UTC), nó sẽ tạo ra date và time trong vùng thời gian đó. Mặc dù đặc tả của Lược đồ XML 1.0 có một vùng thời gian offset, nhưng nó sử dụng thuật ngữ vùng thời gian để miêu tả nó, điều này gây hiểu nhầm giữa vùng thời gian và vùng thời gian offset đây là hai khái niệm khác nhau. Một vùng thời gian xác định trong một vùng hoặc một khu vực cụ thể (ví dụ thời gian ở Thái bình Dương, Pacific Time) trong khi vùng thời gian offset là sự khác biệt về thời gian về giờ và phút giữa UTC và một vùng thời gian nhất định nào đó (ví dụ, 11:00-05:00). Đặc tả Lược đồ XML 1.1 đã giới hạn vấn đề này và đã phân biệt rõ giữa vùng thời gian và vùng thời gian offset. Những giây nhảy (leap) Một giây nhảy là một giây thêm vào ngày cuối cùng của tháng 3, tháng 6, 10 hoặc 12, có nghĩa rằng phút cuối cùng của ngày cuối của các tháng này có nhiều hơn 60 giây. Một giây nhảy được thêm vào nhằm giữ cho UTC trong vòng 0,9 giây của thời gian quan sát thiên văn. Do kiểu dữ liệu gắn với date và time đã xác định trong đặc tả của Lược đồ XML 1.1 không hỗ trợ các giây nhảy, do đó chúng không thể được sử dụng để đại diện cho các giây cuối cùng trong UTC hoặc trong bất kỳ ngày này mà có giây nhảy bổ sung vào chúng. Một ví dụ về những ngày như vậy là 1972-06-30. Người sử dụng phải điều chỉnh thích hợp ở mức ứng dụng nhằm giải quyết tình trạng thời gian này nếu thấy cần thiết phải tuân theo các giây nhảy này. Các kiểu đơn giản Implementation-defined và các phần tử Đặc tả Lược đồ XML xác định một số các kiểu gốc như string, boolean và double, đó chính là bộ xử lý hiểu và cung cấp phương tiện thực hiện. Rất nhiều hệ thống cần nhiều kiểu hơn so với số lượng đã có sẵn trong đặc tả. Có thể đáp ứng một số yêu cầu này bằng cách dẫn xuất từ nhưng cái đang có sẵn, nhưng không thể từ các cái khác. Các kiểu gốc Implementation-defined Lược đồ XML 1.1 hiện nay có thể cho phép các phần thực hiện của các bộ xử lý Lược đồ XML xác định các kiểu gốc riêng của chúng. Tùy theo từng bộ xử lý Lược đồ XML quyết định xem có nhận biết các kiểu này hay không. Phần thực hiện cần tuân theo các luật sau: • Sử dụng anyAtomicType là kiểu cơ sở • Quyết định phần tử ràng buộc nào sẽ sử dụng và với ý nghĩa như thế nào (CHÚ Ý: phải bao gồm cả phần tử vùng trảng). • Xác định cơ chế tham khảo kiểu mới với vùng tên mục tiêu khác biệt với http:// www.w3.org/2001/XMLSchema (được điều khiển bởi W3C). Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 9 của 16 developerWorks® ibm.com/developerWorks/vn/ • Xác định vùng ngôn từ, vùng giá trị, và bản đồ ngôn từ cho kiểu mới. • Xác định mức so sánh bình đẳng trong mối quan hệ. • Xác định các giá trị cho các phần tử cơ bản. Như một phần thực hiện của bộ xử lý XML, chúng ta cần phải xác định kiểu dữ liệu date đặc biệt tuân theo mẫu ngày-tháng-năm nhưng sử dụng nhiều dấu ngăn cách khác nhau không chỉ là dấu gạch ngang (-). Để tuân theo những luật đã xác định ở trên, chúng ta sử dụng anyAtomicType đối với kiểu cơ sở, và chúng ta xác định một miền tên mới có thể gọi là "http://www.example.com/ XMLSchema-primitiveTypes". Chúng ta muốn thời gian của chúng ta được thể hiện dưới dạng ngày, dấu cách, tháng, dấu cách, năm. Trong vùng ngôn từ cho kiểu dữ liệu date, những thể hiện cho ngày, tháng, năm sẽ có cùng cách biểu thị như các kiểu được xác định trong Lược đồ XML 1.1 và với cùng những luật. Chúng ta muốn dấu cách thể hiện là một trong ba giá trị dưới đây: dấu chấm (.), gạch ngang (-), gạch chéo (/). Chúng ta cũng xác định các phần tử mà chúng ta sẽ hỗ trợ trong phần thực hiện của chúng ta. Các phần tử cơ bản có thể gồm các phần tử và giá trị dưới đây: • • • • ordered: partial bounded: false cardinality: countably infinite numeric: false Theo các luật, chúng ta cần có một phần tử vùng trảng, chúng ta sẽ xác định nó với giá trị “collapsed” áp dụng cho date và tất cả các kiểu dữ liệu dẫn xuất. Với mỗi đặc tả của Lược đồ XML 1.1, chúng ta có thể xác định được các phần tử ràng buộc và các giá trị mà chúng ta đã chọn, ví dụ: • • • • • • • • pattern enumeration maxInclusive maxExclusive minInclusive minExclusive assertions dateSeparator (implementation-defined) Sử dụng sự xác định này, "2008-11-01", "2008.11.01", và "2008/11/01" tất cả đều là biểu diễn ngôn từ hợp lệ của ngày tháng, chúng thể hiện cùng ngày “1/11/2008”. Các phần tử Implementation-defined Đặc tả Lược đồ XML xác định một tập các phần tử ràng buộc (như là minInclusive hoặc là maxLength) có thể áp dụng các kiểu đơn giản. Một phần tử ràng buộc là một cấu trúc để khống chế vùng giá trị của các kiểu đơn giản khi dẫn xuất. Bộ xử lý nhận thức lược đồ hiểu và hỗ trợ các phần tử ràng buộc. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 10 của 16 ibm.com/developerWorks/vn/ developerWorks® Tương tự như các kiểu Implementation-defined, Lược đồ XML 1.1 cho phép các phần xử lý được xác định các phần tử ràng buộc riêng của chúng và tuỳ theo từng phần xử lý Lược đồ XML mà có hỗ trợ các phần tử này hay không. Đây là một số luật phải tuân thủ: • Xác định thuộc tính của phần tử • Xác định cách thức hoạt động của phần tử • Xác định cơ chế để tham khảo với các phần tử mới với không gian tên hơn là http:// www.w3.org/2001/XMLSchema (khi mà W3C quản lý không gian tên). • Xác định các kiểu dữ liệu gốc mà phần tử ràng buộc mới áp dụng. Trong ví dụ 9 sẽ thấy một bộ thực hiện bộ xử lý XML có thể xác định phần tử dateSeparator mà ràng buộc phân cách trong vùng giá trị của implementation-defined date và tất cả kiểu dữ liệu dẫn xuất từ nó. Ví dụ 9. Một ví dụ về phần tử implementation-defined <dateSeparator fixed = boolean : false id = ID value = '-' | '.' | '/' ... > (optional element content here) ... </dateSeparator> Xác định phần tử có thể xác định các đặc tính khác với không gian tên không - lược đồ ngoài fixed, id và value. Bất cứ kiểu dẫn xuất nào có thể giới hạn vùng giá trị của implementationdefined date bằng cách áp dụng phần tử dateSeparator. Bây giờ chúng ta xem xét làm thế nào một người sử dụng có thể dùng kiểu dữ liệu và các phần tử của nó. Trong ví dụ 10 chúng ta xác định một kiểu mới specialDate sử dụng một phần tử mới để giới hạn sự hiện diện của date để chỉ chấp nhận các giá trị có dấu (/) ngăn cách. Ví dụ 10. Một ví dụ về kiểu dẫn xuất dựa vào kiểu implementation-defined <xs:simpleType name="specialDate"> <xs:restriction base="xyz:date"> <xyz:dateSeparator value="/" /> <xs:restriction> </xs:simpleType> Bây giờ chỉ "2008/11/01" được cho phép bởi specialDate, và "2008-11-01" và "2008.11.01" thì không được. Kết luận Trong bài này chúng tôi đã đưa ra một cái nhìn tổng quan về Lược đồ XML 1.1, vạch ra các vấn đề của Lược đồ XML 1.0 và giới thiệu sơ qua làm thế nào Lược đồ XML 1.1 giải quyết những vấn đề đó Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 11 của 16 developerWorks® ibm.com/developerWorks/vn/ với một số ví dụ về giới hạn mô hình nội dung, đồng giới hạn và phát triển lược đồ qua các sử dụng của Ký tự đại diện. Chúng ta sau đó đã xem xét cụ thể các tiến bộ đối với phần kiểu dữ liệu của bản đặc tả bao gồm cả các kiểu dữ liệu mới và cho phép các kiểu gốc implementation-defined và các phần tử. Trong Phần 2 của loạt bài, chúng tôi sẽ xem xét kỹ hơn về đặc điểm các đồng ràng buộc mới, đặc biệt các xác nhận và cơ chế giao việc loại có điều kiện. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 12 của 16 ibm.com/developerWorks/vn/ developerWorks® Tài nguyên Học tập • Lược đồ XML 1.1, Phần 2: Giới thiệu Lược đồ XML 1.1: Đồng ràng buộc sử dụng XPath 2.0 (Neil Delima, Sandy Gao, Michael Glavassevich, Khaled Noaman; nhóm deveoperWorks; Tháng 12 2008): xem xét chi tiết cơ chế đồng ràng buộc đưa ra trong Lược đồ XML 1.1, đặc biệt là các cách thức xác nhận mới và các đặc điểm kiểu thay thế. • Đặc tả XML 1.0: Đọc về XML và làm thế nào nó có thể cho phép chung SGML được phục vụ, được nhận và được xử lý trên trang web. • XML Schema, phần 1: Structures Second Edition: Tìm hiểu thêm về ngôn ngữ Lược đồ XML W3C và cách thức nó miêu tả cấu trúc và ràng buộc nội dung các tài liệu của XML 1.0, bao gồm cả các tài liệu khai thác tính tiện ích của XML Namespace. Bản đặc tả này dựa vào phần 2 của Schema Phần 2: kiểu dữ liệu • Lược đồ XML, Phần 2: Ký tự đại diện thứ hai về kiểu dữ liệu: Tìm kiếm thông tin về các kiểu dữ liệu được sử dụng trong ngôn ngữ Lược đồ XML W3C • W3C XML Schema Definition Language (XSD) 1.1 Part 1: Structures: Tìm các bản đặc tả mới nhất của ngôn ngữ Lược đồ XML W3C. • W3C XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes: Tìm hiểu thêm thông tin về các kiểu dữ liệu mới bổ sung vào ngôn ngữ Lược đồ XML W3C. • XQuery 1.0: Tìm hiểu thêm về ngôn ngữ XML Query có sử dụng cấu trúc XML để phản ánh được các thắc mắc có liên quan đến các loại dữ liệu. • XML Path Language 2.0: Tìm hiểu thêm về ngôn ngữ XPath • XSL Transformations (XSLT) Version 2.0: Xem lại các bản đặc tả đã xác định các cú pháp và ngữ nghĩa của của ngôn ngữ XSLT 2.0 • XQuery 1.0 và XPath 2.0 Data Model (XDM): Đọc bản trình diễn đặc tả W3C với mô hình dữ liệu của ngôn ngữ XPath 2.0, XSLT 2.0, XQuery • Schematron: Kiểm tra ngôn ngữ để xác nhận có sự xuất hiện/vắng mặt của các mẫu chuẩn trong tài liệu của XML • RELAX NG: Khai thác ngôn ngữ lược đồ cho XML. • Chứng chỉ IBM XML: Tìm hiểu vì sao bạn có thể trở thành một nhà phát triển của IBM có chứng chỉ trong lĩnh vực XML và các công nghệ liên quan. • Thư viện công nghệ XML: Hãy xem vùng developerWorks XML với rất nhiều bài báo, mẹo, hướng dẫn, chuẩn và IBM Redbooks về công nghệ. • Các sự kiện về kỹ thuật developerWorks và webcasts: Theo kịp với công nghệ trong những phần này • Technology bookstore: Tìm kiếm sách về các chủ đề này và các chủ đề kỹ thuật khác. • developerWorks podcasts: Nghe các cuộc phỏng vấn thú vị và các cuộc thảo luận cho các nhà phát triển phần mềm. Lấy sản phẩm và công nghệ • trình phân tích XML Parser cho Java (Xerces2-J): Hãy thử bản parser do Apache phân phối. • IBM trial software for product evaluation: Thực hiện dự án tiếp theo của bạn với bản phần mềm thử nghiệm sẽ có để tải trực tiếp từ developerWorks kể cả các công cụ ứng dụng phát triển các các sản phẩm đang xây dựng từ DB2®, Lotus®, Rational®, Tivoli®, và WebSphere®. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 13 của 16 developerWorks® ibm.com/developerWorks/vn/ Thảo luận • Các diễn đàn thảo luận vùng XML: Tham gia vào một vài thảo luận liên quan đến XML. • Nhóm phát triển vùng XML: chia sẻ suy nghĩ: Sau khi đọc bài báo này, đăng bình luận ý kiến của bạn vào diễn đàn này. Các nhà biên tập vùng XML điều hành diễn đàn hoan nghênh ý kiến của bạn • Các blogs cho phát triển công việc: Tìm kiếm các blogs này và tham gia vào Cộng đồng phát triển công việc. Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 14 của 16 ibm.com/developerWorks/vn/ developerWorks® Đôi nét về các tác giả Neil Delima Neil Delima là nhân viên phát triển phần mềm của IBM tại phòng thí nghiệm Toronto. Là một thành viên của nhóm phát triển trình phân tích XML Parser, Neil đã làm việc với nhiệm vụ phát triển và kiểm tra công nghệ XML trong hơn 7 năm qua. Neil là thành viên của hội đồng kiểm duyệt dự án trình phân tích Apache’s Xerces – Java Parser và góp phần xây dựng các bộ kiểm tra cho W3C DOM và XML 1.1 Sandy Gao Sandy (Shudi) Gao là nhân viên phát triển phần mềm của IBM tại Toronto. Sandy đã là thành viên của hội đồng kiểm duyệt dự án trình phân tích Apache’s Xerces – Java Parser từ năm 2001 và là người đóng góp chủ chốt tới hỗ trợ lược đồ XML. Sandy đại diện IBM tham gia nhóm làm việc phát triển lược đồ XML của W3C từ năm 2003. Sandy đóng góp chính cho sự phát triển lược đồ XML 1.1 và trở thành chủ biên của đặc tả trong năm 2006. Sandy cũng đại diện IBM trong nhóm W3C SML Working Group Michael Glavassevich Michael Glavassevich thành viên của nhóm XML Parser Development (phát triển trình phân tích XML) tại phòng thí nghiệm của IBM Toronto và là một trong những người có đóng góp to lớn đối dự án Apache Xerces2 trong 5 năm vừa qua, ngoài ra anh còn tham gia xây dựng Lược đồ XML, XInclude, JAXP 1.3/1.4 và DOM Level 3. Michael cũng là đại diện của của IBM trong nhóm chuyên gia JAXP đã xây dựng JAXP 1.4 Khaled Noaman Khaled Noaman là thành viên của nhóm phát triển trình phân tích XML Parser của phòng thí nghiệm IBM tại Toronto và trong vòng hơn 5 năm đã tham gia xây dựng Apache Xerces-C++ parser và nhiều năm qua đã triển khai nhiều nội dung của trình phân tích kể cả hỗ trợ đối với các cấu trúc lược đồ XML © Copyright IBM Corporation 2009 (www.ibm.com/legal/copytrade.shtml) Nhẫn hiệu đăng ký (www.ibm.com/developerworks/vn/ibm/trademarks/) Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 Trang 15 của 16 developerWorks® Lược đồ XML 1.1, Phần 1: Lời giới thiệu đối với Lược đồ XML 1.1 ibm.com/developerWorks/vn/ Trang 16 của 16