The first generation of the Web was about human-readable data.
Technologies such as URI, HTTP and HTML allowed the creation of a
shared information space accessible from a variety of computing
environments. No prior coordination was needed to publish new
information or to have it link to other information. This allowed
the information space to scale virtually infinitely and form the
World Wide Web as we know it today.
In his PhD
dissertation "Architectural Styles and the Design of
Network-based Software Architectures", Roy T. Fielding analyzed and
studied the Web's architectural style. He identified certain
architectural elements which he coined with the term
REST (Representational State Transfer).
REST hypothesizes that having a limited but uniform interface
between components that can be applied to a potentially infinite
number of data elements is what let the Web achieve its success. In
the Web architecture the interface is HTTP and the methods are the
familiar GET/PUT/DELETE and POST (in practice only GET and POST are
commonly used). The data elements called resources have names,
furthermore these names can be used to locate the resource.
Resources are not necessarily static data, in fact often they are
services that produce data dynamically. [For further discussion on
REST visit the RESTwiki.]
While HTML (and to a lesser degree standards such as GIF and
JPEG)was crucial in the success of the web as a human-readable
information space, it was the URI and HTTP technologies that gave
to the Web its scalability and versatility. Using the same
technologies (URI and HTTP) as foundations to create a
machine-readable information space is not only interesting but also
highly desirable.
The second generation Web is slowly emerging. XML, Schema and related technologies
allow us to describe structured and typed data. XPath and XPointer allow us to address XML
fragments using normal URIs. XInclude and XLink allow XML documents to
embed and refer to other XML documents. W3C's Semantic Web is an effort to
attach meaning to data. Some people hypothesize that the URI, HTTP
and XML technologies will make current RPC-over-the-web
technologies such as SOAP and XML-RPC irrelevant. [See Paul
Prescod's Second Generation
Web Services.]
Clearly the Web is undergoing a transformation from a
human-readable Web to a machine-readable (and potentially
universally machine-understandable) Web. What is needed to realize
this potential is software that allows the storing, accessing and
manipulating of XML data using standard and proven Web
technologies. In particular we need Web servers that can store and
efficiently query and manipulate XML data. We also need Web clients
(browsers, application libraries, applications, etc.) that
can meaningfully deal with XML.
With current Web server software one can make this document available under a URL, for example:<addresses>
<address id="Home">
<street>000 Davis Ct.</street>
<city>San Francisco</city>
<zip>94111</zip>
</address>
<address id="Work">
<street>466 Ellis St.</street>
<city>Mountain View</city>
<zip>94043</zip>
</address>
</addresses>
http://addressbook.example.com/bill.xml. Client
software that attempts to fetch the resource pointed to by the URL
will fetch all of the person's addresses. There is no way to
perform a query that fetches a specific address or addresses and
minimizes the amount of transferred data. More importantly if the
software wishes to update the details of a single address element
it must update the whole document.http://addressbook.example.com/bill.xml#xpointer(//address[city%3D'San%20Francisco'])
[XPath: //address[city='San Francisco']]. Only the San
Francisco addresses are returned. Similarly if one wanted to change
the home address, the client software would issue an update of the
resource pointed to by the URL:
http://addressbook.example.com/bill.xml#xpointer(//address[%40id%3D'Home'])
[XPath: //address[@id='Home']]. Only the home address
would be updated.