MicroXML, bản đơn giản hóa tương thích lùi của XML, là đặc tả mới nổi lên. Trong phần 1 của loạt bài viết này, hãy khám phá các nguyên tắc cơ bản của MicroXML, bạn đã học được những khái niệm cơ sở của MicroXML và nó khác với XML 1.x và các tiêu chuẩn liên quan như thế nào. MicroXML đã được James Clark đề xuất và được John Cowan nâng cao, ông cũng đã tạo ra trình phân tích cú pháp đầu tiên của nó là MicroLark. MicroLark là mã nguồn mở (giấy phép Apache 2.0), được viết...
Giới thiệu MicroXML, Phần 2: Xử lý MicroXML MicroLark MicroXML, đơn giản hóa tương thích lùi XML, đặc tả lên Trong phần loạt viết này, khám phá nguyên tắc MicroXML, bạn học khái niệm sở MicroXML khác với XML 1.x tiêu chuẩn liên quan MicroXML James Clark đề xuất John Cowan nâng cao, ơng tạo trình phân tích cú pháp MicroLark MicroLark mã nguồn mở (giấy phép Apache 2.0), viết ngôn ngữ Java thực số chế độ phân tích cú pháp: chế độ kéo, chế độ đẩy chế độ Trong viết này, học phân tích định dạng MicroXML Hãy khám phá khía cạnh khác API trình phân tích cú pháp MicroLark cách sử dụng dịng lệnh mã mẫu Bắt đầu Để làm theo ví dụ viết này, bạn cần phải tải (xem phần Tài nguyên): microLark.jar, mã nguồn bạn thích Trình thơng dịch Jython mã nguồn mở Bạn bắt đầu cách chạy MicroLark dòng lệnh với tập tin MicroXML đầu vào Liệt kê thay đổi nhỏ tập tin đơn giản từ phần Liệt kê Tập tin đơn giản Welcome pageWelcome to IBM developerWorks.
Ghi lưu mẫu listing1.xml đưa MicroLark cách sử dụng mã liệt kê Liệt kê MicroLark java -jar microlark.jar listing1.xml Bạn nhận đầu liệt kê Liệt kê Đầu (html Alang en -\n -\n (head -\n (title -Welcome page )title -\n )head -\n (body -\n (p -Welcome to (a Ahref http://ibm.com/developerworks/ -IBM developerWorks )a - )p -\n )body -\n )html Có phải trơng lạ? Liệt kê có định dạng gọi PYX, biểu diễn theo dòng tài liệu XML, dẫn xuất từ quy ước biểu diễn tài liệu SGML PYX biểu tất thông tin tài liệu XML theo cách giảm thiểu gánh nặng phân tích cú pháp Đây cơng cụ hữu ích mà đáng buồn bị nhà phát triển XML bỏ rơi Hoạt động mặc định MicroLark chuyển đổi tài liệu MicroXML sang PYX, hay tập hợp PYX, dựa thực tế MicroXML tập hợp XML (Để biết thêm PYX, đọc "Các vấn đề XML: Giới thiệu PYX" phần Tài nguyên.) Định dạng PYX đơn giản Ký tự dòng xác định kiểu nội dung dịng Nội dung khơng trực tiếp lan nhiều dòng, dòng chứa kiểu nội dung Trong trường hợp thuộc tính thẻ, tên thuộc tính giá trị đơn giản tách khoảng trắng, mà không cần sử dụng thêm dấu ngoặc kép Liệt kê cho thấy ký tự tiền tố Liệt kê Các ký tự tiền tố ( ) A ? start-tag end-tag attribute character data (content) processing instruction Chú giải tương ứng với đầu vào Vẻ đẹp PYX sử dụng với lệnh xử lý văn hữu ích có từ lâu UNIX grep, awk, sort, sed, awk vân vân Xử lý lỗi Như với trình phân tích cú pháp XML MicroXML nào, điều quan trọng hiểu xảy trường hợp đầu vào có lỗi Liệt kê ví dụ XML khơng khn dạng từ Phần Liệt kê XML không khuôn dạng Hello, I claim to be MicroXML Nếu bạn ghi lưu liệt kê thành tệp badxml.xml cho chạy qua MicroLark, bạn nhận đầu liệt kê Liệt kê Xử lý lỗi $ java -jar microlark.jar badxml.xml (para -Hello, I claim to be (strong -MicroXML !1:50:Unexpected end-tag MicroLark bắt đầu cách phát dịng PYX sau dừng lại đột ngột với thông báo lỗi gặp thẻ không khớp Đầu rõ hàng cột tập tin nguồn, nơi lỗi xảy Về đầu trang API trình phân tích cú pháp Hầu hết người dùng muốn gắn bó chặt chẽ vào trình phân tích cú pháp MicroLark Để làm mà không sâu vào mã Java phức tạp, bạn sử dụng Jython, công cụ tạo sản phẩm mẫu ban đầu xuất sắc Jython triển khai thực ngôn ngữ Python, tạo thực thi mã byte Java Jython cho phép bạn tương tác với lớp Java API cách sử dụng ngôn ngữ đơn giản nhiều Trình phân tích cú pháp đẩy Nếu bạn quen thuộc với API đơn giản cho XML (SAX) bạn quen thuộc với giao diện đẩy Để sử dụng giao diện đẩy MicroLark, bạn cung cấp cho lớp phương thức giống SAX để xử lý cấu kiện khác phần tử, thuộc tính liệu ký tự Hãy sử dụng giao diện ContentHandler để cung cấp lớp MicroLark có vài lớp tiện ích với giao diện đó, bao gồm PyxWriter, lớp tạo PYX liệt kê Liệt kê chương trình Jython đơn giản để lặp lại hoạt động dòng lệnh MicroLark Liệt kê PYX from org.ccil.cowan.microlark import PyxWriter, Parser from java.lang import System pw = PyxWriter(System.out) f = open(System.in) p = Parser() p.parse(f, pw) Ghi lưu đầu listing4.py gọi thực liệt kê Liệt kê Gọi thực mẫu jython -Dpython.path=microlark.jar listing3.py < listing1.xml Trình xử lý nội dung chun dùng Thơng thường, bạn muốn cung cấp lớp trình xử lý nội dung bạn, làm chun biệt Liệt kê định nghĩa lớp link_finder kiểm tra phần tử để xem liệu có phải phần tử a (một liên kết kiểu HTML) hay khơng Sau trình xử lý nội dung in giá trị thuộc tính href Liệt kê Trình xử lý chuyên dùng from org.ccil.cowan.microlark import ContentHandler, Parser class link_finder(ContentHandler): def startElement(self, elem): if elem.getName() == u'a': print elem.getAttributeValue(u'href') f = open('listing1.xml') p = Parser() p.parse(f, link_finder()) Nếu bạn chạy mã liệt kê 9, bạn thấy liên kết tài liệu, đến địa chỉ: http://ibm.com/developerworks/ Trình phân tích cú pháp kéo Một cách tiếp cận khác để phân tích cú pháp phương thức kéo, bạn yêu cầu mẩu tài liệu thời điểm sử dụng phương thức tiện ích để làm việc với kiện đại diện cho thẻ phần tử nội dung Liệt kê 10 sử dụng API kéo để xử lý tệp tin tương tự phiên đẩy liệt kê Liệt kê 10 API kéo from org.ccil.cowan.microlark import Parser f = open('listing1.xml') p = Parser() #Start the pull parse p.parse(f) event = None #Run through all the events in the document while event != p.END_DOCUMENT: #Pull the next event event = p.next() #Is it an element start tag? if event == p.START_ELEMENT: #Get the element's information elem = p.getElement() #Is it an a element? if elem.getName() == u'a': #Then print the link value print elem.getAttributeValue(u'href') Liệt kê thích theo phong cách tự để hướng dẫn bạn hiểu logic Đầu giống đầu từ liệt kê Trình xây dựng Bạn sử dụng MicroLark để xây dựng tương tự mơ hình đối tượng tài liệu (Document Object Model -DOM) Để làm vậy, sử dụng phương thức buildTree() đối tượng trình phân tích cú pháp Về đầu trang Trình diễn Phần giải thích cách MicroXML trì việc nhận biết khơng gian tên XML đơn giản hóa vấn đề nhiều tốt MicroLark theo vết không gian tên gắn với phần tử thuộc tính nào, bạn truy cập với phương thức getNamespace getAttributeNamespace Khơng cịn việc vơ nghĩa với tiền tố qnames (tên đầy đủ phân biệt) Liệt kê 11 chương trình đơn giản để phân tích tệp tin báo hiệu bắt gặp không gian tên mặc định Liệt kê 11 Gặp phải không gian tên mặc định from org.ccil.cowan.microlark import Parser from java.lang import System p = Parser() #Start the pull parse p.parse(System.in) event = None current_namespace = None #Run through all the events in the document while event != p.END_DOCUMENT: #Pull the next event event = p.next() #Is it an element start tag? if event == p.START_ELEMENT: #Get the element's information elem = p.getElement() #Has the namespace changed? if elem.getNamespace() != current_namespace: current_namespace = elem.getNamespace() #Print the new namespace print "Entering default namespace: ", current_namespace Liệt kê 12 tài liệu Atom ví dụ mẫu theo định dạng MicroXML Không gian tên mặc định đặt Atom cho phần tử feed đặt XHTML cho phần tử div Liệt kê 12 Tài liệu Atom ví dụ mẫu http://copia.ogbuji.net/atom1.0 Copia 2005-07-15T12:00:00Z Uche Ogbuji http://uche.ogbuji.net http://copia.ogbuji.net/blog/2005-09-16/xhtml XHTML tutorial pubbed 2005-07-15T12:00:00Z"XHTML, step-by-step"
Start working with Extensible Hypertext Markup Language In this tutorial, author Uche Ogbuji shows you how to use XHTML in practical Web sites.
In this tutorial
- Tutorial introduction
- Anatomy of an XHTML Web page
- Understand the ground rules
- Replace common HTML idioms
- Some practical considerations
- Wrap up