<lastName>Smith</lastName>
<address type="home">
<address1>200 Brattle Street</address1>
<city>Cambridge</city>
<state>MA</state>
<zip>02138</zip>
</address>
<hairColor>brown</hairColor>
<birthDate>11/30/1974</birthDate>
<favoriteColor>blue</favoriteColor>
Có thể bạn quan tâm!
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 18
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 19
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 20
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 22
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 23
- Lập trình web nâng cao XML - Trường CĐN Đà Lạt - 24
Xem toàn bộ 258 trang tài liệu này.
</person>
Mặc dù dữ liệu thực tế được chứa đựng trong cả hai tài liệu cùng, siêu dữ kiện trong phiên bản XML làm dễ dàng hơn hiểu. Chúng tôi thì đúng trong việc đoán tên của anh ấy và địa chỉ và ý nghĩa của “brown", 11/ 30/ 1974 ", và " blue ". Những phần tử XML có thể cũng là sắp xếp với không với tác động trên sự giải thích. Những phần tử trong tài liệu có thể được ra lệnh theo thứ tự abc .
<person>
<address type="home">
<address1>200 Brattle Street</address1>
<city>Cambridge</city>
<state>MA</state>
<zip>02138</zip>
</address>
<birthDate>11/30/1974</birthDate>
<favoriteColor>blue</favoriteColor>
<firstName>John</firstName>
<hairColor>brown</hairColor>
<lastName>Smith</lastName>
</person>
Các giản đồ và DTD
Những tài liệu XMl có thể cũng bao gồm một loại siêu dữ liệu hai trong mẫu của một giản đồ hay một DTD. Cả những mô hình lẫn DTDs đều phục vụ cùng mục đích nhưng sử dụng những cú pháp khác nhau. Họ khắc ở ngoài một ngôn ngữ, hay lớp, của những tài liệu XML mà điều khiển những kiểu những phần tử và thuộc tính mà có lẽ đã xuất hiện trong những tài liệu conformant. Những mô hình và DTDs có thể cũng đánh thuế một cấu trúc cứng rắn hay lỏng trên những tài liệu XML. Chẳng hạn, Một phần tử <person> có đầu tiên
<firstName> và <lastName> có thể cũng có một phần tử <favoriteColor>. Ví dụ sau là giản đồ định nghĩa một tài liệu XML cá nhân. Chú ý rằng kiểm tra tài liệu coreXMLPerson không cần phải bao gồm tất cả các định nghĩa phần tử trong giản đồ.
PersonSchema.xml: Giản đồ này cung cấp metadata diễn giải cấu trúc của một tài liệu XML coreXMLPerson
<?xml version="1.0"?>
<Schema name="coreXMLPerson" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="firstName" content="textOnly" model="closed"/>
<ElementType name="lastName" content="textOnly" model="closed"/>
<ElementType name="birthDate" content="textOnly" model="closed"/>
<ElementType name="hairColor" content="textOnly" model="closed"/>
<ElementType name="favoriteColor" content="textOnly" model="closed"/>
<ElementType name="address.address1" content="textOnly" model="closed"/>
<ElementType name="address.address2" content="textOnly" model="closed"/>
<ElementType name="address.address3" content="textOnly" model="closed"/>
<ElementType name="address.city" content="textOnly" model="closed"/>
<ElementType name="address.state" content="textOnly" model="closed"/>
<ElementType name="address.zip" content="textOnly" model="closed"/>
<ElementType name="address.country" content="textOnly" model="closed"/>
<ElementType name="address" order="many" content="eltOnly" model="closed">
<AttributeType name="type" />
<element type="address.address1" minOccurs="0" maxOccurs="1"/>
<element type="address.address2" minOccurs="0" maxOccurs="1"/>
<element type="address.address3" minOccurs="0" maxOccurs="1"/>
<element type="address.city" minOccurs="0" maxOccurs="1"/>
<element type="address.state" minOccurs="0" maxOccurs="1"/>
<element type="address.zip" minOccurs="0" maxOccurs="1"/>
<element type="address.country" minOccurs="0" maxOccurs="1"/>
</ElementType>
<ElementType name="person" order="many" content="eltOnly" model="closed">
<element type="firstName" minOccurs="0" maxOccurs="1"/>
<element type="lastName" minOccurs="0" maxOccurs="1"/>
<element type="address" minOccurs="0" maxOccurs="*"/>
<element type="hairColor" minOccurs="0" maxOccurs="1"/>
<element type="favoriteColor" minOccurs="0" maxOccurs="1"/>
</ElementType>
</Schema>
Sử dụng XML cho định nghĩa Metadata
Những thành phần phần mềm và phấn cứng sử dụng siêu dữ liệu để xác định tự mình khi liên lạc. Về lịch sử đây được làm trong một kiểu cách sở hữu nơi người gửi và thiết bị thu đầu tiên đồng ý trên một khuôn dạng trao đổi lẫn nhau trước khi họ đã có thể trao đổi siêu dữ kiện. XML thay đổi điều này.
Hôm nay, chúng ta có thể xây dựng cho những ứng dụng tìm và thực thi điều khiển các dịch vụ Web không cần có kiến thức trước sự tồn tại của họ. Chúng ta có thể cũng xuất bản những dịch vụ Web của mình không có việc biết ai sẽ sử dụng những dịch vụ đó, húng sẽ đến từ đâu, làm thế nào để sử dụng chúng, hoặc thậm chí loại phần mềm máy khách gì sẽ tạo yêu cầu. Những dịch vụ này bây giờ có thể những đối tượng dữ liệu giàu và trừu tượng trao đổi không ghép nối.
XML có nhiều lợi thế để tạo ý tưởng mang dữ liệu và metadata trên Internet:
Nó có thể được đọc và viết bởi những con người. Đây là một trong những lý do thành công củaHTML và nó làm việc bằng nhau tốt cho XML. Cái này làm ngôn ngữ có thể tiếp cận hơn đối với những người tập sự và hạ thấp sự những nhân tố sợ hãi của mọi người. Bạn có thể nhìn thấy nó, chạm nó, và sử dụng Notepad để tạo ra nó. Điều này hữu dụng.
Nó là mở. XML được định nghĩa bởi W3C. Không có công ty đơn sở hữu nó. Microsoft đã có công sức thêm vào thuyết minh W3C bởi việc cài đặt những bộ phân tích XML tương thích – chuẩn và đặt họ trong những bàn tay mong muốn của cộng đồng người phát triển nó. Tuy vậy, ngôn ngữ là người độc lập nền tảng. Những trình khách UNIX có thể trao đổi dữ liệu XML với các dịch vụ Web .NET .
Nó ở khắp nơi. Những bộ phân tích XML là bất cứ mọi nơi. Việc đưa những bàn tay của chúng ta trên một tập hợp công cụ XML và sử dụng công nghệ ngay lập tức dễ dàng.
Nó thì linh hoạt. Lý do hấp dẫn nhất để sử dụng XML là nó không có sự sử dụng qui định. Chúng ta quyết định rằng bạn muốn sử dụng nó như thế nào trong ứng dụng của chúng ta. Chúng ta xác định phạm vi của nó, có thể hạn chế từ việc tạo ra những tài liệu XML nhỏ đến việc truyền dữ liệu giữa những ứng dụng hay những lớp ứng dụng để tạo ra thân thể những tiêu chuẩn của riêng mình mà điều chỉnh sự sử dụng XML bên trong một toàn bộ công nghiệp.
Mô tả một đối tượng
Xem xét ví dụ sử dụng định nghĩa lớp C# cho một đối tượng <Person> person.cs:
using System;
namespace CSharpWebService
{
/// <summary>
/// A Simple Person Class Definition
/// </summary>
public class Person
{
public String firstName; public String lastName; public String birthDate; public String hairColor; public String favoriteColor; public Address address; public Person()
{
firstName = ""; lastName = ""; birthDate = ""; hairColor = ""; favoriteColor = "";
address = new Address();
}
public Person(String _firstName, String _lastName, String _birthDate, String
_hairColor, String _favoriteColor)
{
firstName = _firstName; lastName = _lastName; birthDate = _birthDate; hairColor = _hairColor; favoriteColor = _favoriteColor; address = new Address();
}
public void setFirstName(String _firstName)
{ firstName = _firstName; }
public void setLastName(String _lastName)
{ lastName = _lastName; }
public void setBirthDate(String _birthDate)
{ birthDate = _birthDate; }
public void setHairColor(String _hairColor)
{ hairColor = _hairColor; }
public void setFavoriteColor(String _favoriteColor)
{ favoriteColor = _favoriteColor; }
}
}
Định nghĩa đối tượng của chúng takhai báo những thuộc tính cho những trường,<firstName>, <lastName>, <birthDate>, <hairColor>, <favoriteColor>, và<address>. Bây giờ chúng ta hãy tạo ra một thể hiện của đối tượng này ở C#.
Person p = new Person("John", "Smith", "11/30/1974", "brown", "blue"); Đối tượng thể hiện tài liệu XML
Lời gọi này gọi đến khởi tạo Person để tạo một thể hiện Person trong bộ nhớ. Nếu chúng ta muốn tiết kiệm đối tượng này cho một tập tin hay truyền nó tới chương trình khác, chúng tôi phải đầu tiên xếp theo thứ tự nó. Chúng tôi làm điều này như thế nào? Giải pháp đơn giản nhất sẽ xây dựng một tài liệu XML thể hiện đối tượng giữ trạng thái của đối tượng trong bộ nhớ. Tài liệu này nhìn kinh ngạc tương tự như một hiện thân trước đây của dữ liệu này.
<Person>
<address type="home">
<address1>200 Brattle Street</address1>
<city>Cambridge</city>
<state>MA</state>
<zip>02138</zip>
</address>
<firstName>John</firstName>
<lastName>Smith</lastName>
<hairColor>brown</hairColor>
<birthDate>11/30/1973</birthDate>
<favoriteColor>blue</favoriteColor>
</Person>
Tài liệu XML định nghĩa lớp
Chương trình khác, tuy nhiên, không có khả năng để làm vì thế không có nhiều thông tin hơn về định nghĩa lớp Person. Trong trường hợp này chúng tôi cần tài liệu XML khác mô tả định nghĩa lớp Person. Mã nguồn sau là liệt kê trích đoạn:
Một trích đoạn từ createPerson.wsdl, một bộ mô tả dịch vụ Web XML, mô tả định nghĩa lớp Person.
<s:complexType name="Person">
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="firstName" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="lastName" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="birthDate" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="hairColor" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="favoriteColor" nillable="true" type="s:string" />
<s:element minOccurs="1" maxOccurs="1" name="address" nillable="true" type="s0:Address" />
</s:sequence>
</s:complexType>
Chú ý rằng tất cả thông tin thuộc tính trong định nghĩa lớp nguyên bản xuất hiện trong tài liệu XML này. Những đa số mẩu thông tin quan trọng là tên (của) thuộc tính và kiểu dữ liệu. Bạn có lẽ đã cũng đã chú ý thuộc tính địa chỉ đó được liệt kê như kiểu s0:Address. Đây là bởi vì thuộc tính address là một sự tham chiếu tới kiểu khác của Địa chỉ có tên đối tượng. Lớp này yêu cầu bộ mô tả XML của riêng mình, nhưng nó bị bỏ sót cho mục đích ngắn gọn.
Hai tài liệu XML này, tài liệu lớp và tài liệu thể hiện, cung cấp đủ thông tin cho chương trình khác để phát sinh một định nghĩa lớp có thể so sánh được và tạo ra một thể hiện của lớp này với trạng thái mong muốn. Quá trình của việc phát sinh những lớp mẩu này và khởi tạo những đối tượng từ xa trong .NET Developer Studiosẽ được bao trùm kỹ lưỡng sau hơn trong nội dung này.
Mô tả một dịch vụ
Tương lai của sự tính toán phân tán qua Internet đã được sôi nổi tranh đua trong những năm gần đây. Nhiều lập trình viên hướng đối tượng tin rằng, một ngày, những ứng dụng phân tán được xây dựng từ những đối tượng được định vị qua Internet. Máy tính có thể can dự vào một cộng đồng đối tượng toàn cầu bằng việc xuất bản những đối tượng mà có thể được chạy nội tại hay mà có mã có thể được truyền qua Internet. Không may, những tường lửa, những kết nối mạng không đáng tin cậy và những công nghệ cạnh tranh cho ngăn trở sự chuyển động này mọi thứ và đã dẫn dắt những người phát triển tìm kiếm một cách thực hành hơn để xây dựng những ứng dụng phân tán.
Mặc dù những công nghệ này khác trong cách tiếp cận và sự cài đặt, mọi thứ chia sẻ một vấn đề chung: làm sao để mô tả những phương thức và những dịc vụ từ xa vì thế họ có thể được khám phá và sử dụng động. Tất cả các công nghệ phân tán sử dụng loại nào đó của siêu dữ liệu để truyền thông những đặc tính và ngữ nghĩa học của các dịch vụ. Trước đây khuôn dạng của siêu dữ liệu này đã thường sở hữu. Hôm nay XML được sử dụng như một người mang lý tưởng cho siêu dữ liệu dịch vụ từ xa.
CORBA và IIOP
Khi CORBA (Common Object Request Broker Architecture) được giới thiệu trong thập niên 1990, sự nhiệt tình của nó là phân tán các đối tượng mịn để ngày một trở nên rộng rãi
hơn. Những ứng dụng sẽ có khả năng định vị và sử dụng những thành phần phần mềm kinh doanh qua một mạng rộng lớn của của Object Request Brokers (ORBs), và sau đó CORBA cho phép những đối tượng được cài đặt trong C++, Java, và thậm chí COBOL sẽ được cài đặt từ xa. Những đối tượng CORBA xuất bản hành vi của họ sử dụng mgôn ngữ định nghĩa giao diện (Interface Definition Language - IDL) và đăng ký thông tin này với một bộ thực thi ORB trên mạng cục bộ.
Những chương trình máy khách tương tác với những đối tượng này thông qua những giao diện con mà từ xa thực hiện một những phương thức của đối tượng trên máy chủ phần mềm. ORB ngồi trong điểm giữa và gửi đi tất cả truyền thông intermachine. Các ORB xung quanh Internet có thể chia sẻ thông tin về những đối tượng chúng quản lý. Giao thức liên ORB internet (Internet Inter-ORB Protocol – IIOP) được phát triển cho mục đích này. CORBA hỗ trợ khám phá thời gian thực hiện của đối tượng và là một kiến trúc linh hoạt để kết hợp những sự trao đổi của những thành phần phần mềm nhỏ mịn.
JAVA RMI
Giống như CORBA, hệ thống con RMI của Java cho phép các đối tượng phân tán thông qua mạng. Không giống như CORBA, Java RMI có thể chuyên chở lớp toàn bộ, phần mềm và mọi thứ, ngang qua những ranh giới ứng dụng. Điều này khả dĩ bởi vì tất cả các ứng dụng Java phải chạy trên máy ảo Java (Java Virtual Machine). Điều này cho phép những ứng dụng Java phân tán để an toàn tải xuống dòng byte đã biên dịch thực hiện chúng trên máy cục bộ. Bây giờ Java cho phép những đối tượng dùng chung bởi hoặc RMI hoặc giao thức IIOP.
Mặc dù khả năng chia sẻ những đối tượng có thể thực hiện động qua Internet mở một số khả năng hồi hộp, Java RMI có những khuyết điểm. Công nghệ duy nhất những công việc nếu những ứng dụng liên quan trong sự trao đổi là cả hai được viết trong Java. Những chương trình được viết để sử dụng RMI cũng yêu cầu một số lượng rõ ràng của sự chuẩn bị. Những lớp mẩu Từ xa cần được phát sinh một cách tĩnh hay tải xuống động cho những phương thức từ xa để làm việc đúng mức. Cuối cùng RMI sử dụng một giao thức sở hữu để trao đổi thông tin. Nhiều phần mềm người phục vụ những phương tiện này và sự điều hưởng tường lửa.
Sự nhận siêu dữ liệu
Metadata được chứa đựng trong những tài liệu WSDL, là thông tin quan trọng cho bất kỳ ứng dụng nào muốn sử dụng một dịch vu phân tán. Một vấn đề: Làm sao bạn tìm thấy thông tin này trong chỗ đầu tiên? Quá trình xử lý của tìm kiếm một dịch vụ trên Internet và thu được bộ mô tả WSDL của nó là một tìm kiếm top-down tương tự như dịch vụ tên miền (Domain Name Service - DNS) 6 làm việc. Hình sau minh họa thủ tục tìm kiếm dịch vụ Web:
.NET cung cấp cho Metadata và các dịch vụ Web
Microsoft thiết kế .NET developer studio để thân thiện đối với những tác giả dịch vụ Web và những khách hàng. Nó đưa ra một tập hợp giàu của những công cụ, những Wizard, và những lớp tiện ích để tự động hóa khám phá và sự thực hiện của những dịch vụ Web.
.Net Developer Studio cho phép những người phát triển dịch vụ để xây dựng nhanh các dịch vụ Web có thể triển khai trên cục bộ hoặc các dịch vụ Web điều khiển tử xa. .NET Developer Studio tự động hóa sự tạo thành của tất cả khám phá và những giao kèo WSDL. Nó thậm chí tạo ra những tài liệu Web đơn giản mà giúp đỡ bạn kiểm tra và gỡ lỗi mã của chúng ta. Mọi thứ mà chúng ta cần làm là viết mã cho logic kinh doanh! Studio cũng bao gồm một API giàu cho phép những lập trình viên làm những sự gọi cấp cao tới dịch vụ từ xa. Các tiện ích nắm giữ tất cả công việc chuyển đổi xuôi ngược tới những thông điệp SOAP.
Microsoft là không phải công ty duy nhất chào hàng tương lai của những dịch vụ Web. Sun tích cực làm việc tích hợp ý tưởng trong Java 2 Enterprise Edition. Điều này có nghĩa rằng Microsoft và các dịch vụ Web Sun sẽ một ngày có khả năng để làm việc cùng nhau.
Dịch vụ web createPerson( )
Dịch vụ Web createPerson() sẽ được cài đặt trong ngôn ngữ lập trình C#. Wizard dự án dịch vụ web Asp.net khởi tạo hầu hết cơ sở hạ tầng cần thiết để tạo ra một dịch vụ Web. Trong số những mục chọn khác, nó tạo ra vsdisco. và những tập tin WSDL (Giao kèo WSDL thật sự được sinh ra động bởi một sự gọi tới tập tin dịch vụ Web asmx) giữ tất cả các siêu dữ liệu trình khách sẽ cần định vị và truy nhập dịch vụ. Tập tin .vsdisco chứa đựng những mối liên kết để liên hệ những giao kèo WSDL. Wizard cũng tạo ra một tập tin mẫu .asmx là điểm xuất phát từ nơi việc viết mã logic kinh doanh của dịch vụ bắt đầu.
Trước khi họ có thể bắt đầu viết mã dịch vụ, đội cần để thêm vài lớp tới dự án. Lớp đầu tiên định nghĩa một đối tượng Person và hai định nghĩa một đối tượng Address. Mã sau lớp Person tương tự như định nghĩa lớp được cho thấy trước đó với ngoại lệ của thông tin địa chỉ. Liệt kê của tập tin như sau:
person.cs: Một tập tin nguồn C# chứa định nghĩa lớp Person using System;
namespace CSharpWebService
{
/// <summary>
/// A Simple Person Class Definition
/// </summary> public class Person
{
public String firstName; public String lastName; public String birthDate; public String hairColor; public String favoriteColor; public Address address; public Person()
{
firstName = ""; lastName = ""; birthDate = ""; hairColor = ""; favoriteColor = "";
address = new Address();
}
public Person(String _firstName, String _lastName, String _birthDate, String _hairColor, String _favoriteColor)
{
firstName = _firstName; lastName = _lastName; birthDate = _birthDate; hairColor = _hairColor;
favoriteColor = _favoriteColor; address = new Address();
}
public void setFirstName(String _firstName){ firstName = _firstName; } public void setLastName(String _lastName){ lastName = _lastName; } public void setBirthDate(String _birthDate) { birthDate = _birthDate; } public void setHairColor(String _hairColor) { hairColor = _hairColor; } public void setFavoriteColor(String _favoriteColor)
{ favoriteColor = _favoriteColor; }
public void setAddress(String address1, String address2, String city, String state, String postalCode, String country)
{
address.setAddress1(address1); address.setAddress2(address2); address.setCity(city); address.setState(state); address.setPostalCode(postalCode); address.setCountry(country);
}
}
}
Những thuộc tính được liệt kê trong định nghĩa lớp trên là thông tin nhân sự: tên của nhân viên, màu tóc, ngày tháng năm sinh, màu ưa thích và địa chỉ nhà. NNhững thuộc tính cần thiết sẽ được đánh dấu public vì thế họ có thể được trả lại qua một tài liệu SOAP. Những phương thức của lớp là accessors đơn giản mà thao tác những thuộc tính lớp. Phương thức setAddress()đặt những thuộc tính trên đối tượng phụ thuộc address.
Những nhà thiết kế quyết định tạo một người giúp đỡ lớp Address để cung cấp các API chung để lưu trữ các lớp. Lớp này có thể được mở rộng sau đó để hỗ trợ điều khiển những phương hướng hay những đặc tính khác. Nó chứa đựng một một ít những thuộc tính và những phương pháp accessor liên quan được yêu cầu để thao tác chúng.
address.cs: Một tập tin nguồn C# chứa định nghĩa lớp Address using System;
namespace CSharpWebService
{
/// <summary>
/// A simple address object
/// </summary> public class Address
{
public String address1; public String address2; public String address3; public String city; public String state;
public String postalCode; public String country; public Address()
{
address1 = ""; address2 = ""; address3 = ""; city = "";
state = ""; postalCode = ""; country = "";
}
public String getAddress1() { return address1; }
public String getAddress2() { return address2; } public String getAddress3() { return address3; } public String getCity() { return city; }
public String getState() { return state; }
public String getPostalCode() { return postalCode; } public String getCountry() { return country; }
public void setAddress1(String _address1){ address1 = _address1;} public void setAddress2(String _address2){ address2 = _address2;} public void setAddress3(String _address3){ address3 = _address3;} public void setCity(String _city){city = _city;}
public void setState(String _state){state = _state;}
public void setPostalCode(String _postalCode){postalCode = _postalCode;} public void setCountry(String _country){country = _country;}
}
}
Bây giờ nằm bên dưới mà những đối tượng có được xây dựng đội phát triển có thể bắt đầu phát triển lôgic dịch vụ We. Hầu hết mã trong tập tin này được phát sinh bởi .NET Web Service Wizard. Mã duy nhất những lập trình viên cần để lo lắng quanh đến sau khai báo C# [WebMethod]. Sau đây là mã ví dụ:
Service1.asmx.cs using System;
using System.Collections;
using System.ComponentModel; using System.Data;
using System.Diagnostics; using System.Web;
using System.Web.Services; namespace CSharpWebService
{
/// <summary>
/// Summary description for Service1.
/// </summary>
public class Service1 : System.Web.Services.WebService
{
public Service1()
{
//CODEGEN: This call is required by the ASP.NET Web Services Designer InitializeComponent();
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
}
#endregion
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
}
[WebMethod]
public Person CreatePerson(String firstName, String lastName,