RSD (Resource and Service Description) is a software architecture for specifying, registering and accessing resources and services in complex heterogeneous computing environments. It has three major components: a graphical resource editor, a compiler system for translating textual specifications, and an application programming interface. In this paper we focus on the language definition and the compiler system that generates portable data objects for registering and accessing distributed resources. We also present the mechanisms used by RSD to maintain information on the status of dynamic resources such as CPU load or network bandwidth. RSD is a purely descriptive tool that provides up-to-date information on system resources. Other tools, like resource brokers, mappers or job migrators, build on it.