There are two main kinds of web services

{{{
REST: URL -> XML
Doc:  XML -> XML
}}}

URL can be encoded as a string.

The key problem is how to encode XML. We propose
to use records.

One problem is that there are at least two different
ways to interpret XML. 

!! Markup

Must preserve order, allow arbitrary interleaving of
strings and tags. Does not normally need to support
direct/indexed access to sub-tags.

One good way to do this is:
   XML(tag, attributes, content)

- tag is a string
- attributes is a record
- content is a list of anything (strings or XML)

!! Database style

This should provide access to the attributes or
indexed names. 

Question: what should it do if there is a conflict
between named sub-tags and an attribute.
Proposal: give the sub-tag. To get the attribute
it should require explicit access to the attribute
record.

!! Access to web services

We need two web service creation applications.

{{{
Calendar = REST.create("http://calendar.calendar.com")

Calendar = WebService.create("http://calendar.calendar.com/cal.wsdl")
}}}

Normal web services need a WSDL which is interpreted on the fly.

!! Example

Here is a made-up example.

{{{
Calendar = REST.create("http://calendar.calendar.com")

Items = Calendar.get("/user/wcook/main/today") -- just made up URL

Each(Items) >item> 
    print(item.Date) >> print(item.Subject)
}}}

!!! Orc Web Services Enhancement Activities

! Goal of Subproject
To enhance Orc to treat arbitrary Web services as ordinary Orc sites.

!! Open Activities
* Update REST site to operate asynchronously 
* Re-write all existing Orc demos to run without using Java helper classes to invoke Web services
* Enhance Orc (engine or library) so that Orc programs can provide [REST-style Web services|http://www.w3.org/TR/ws-arch/#relwwwrest]
* Add capability to easily request and provide Web services using [SOAP|http://www.w3.org/TR/ws-arch/#SOAP] messages