diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 |
commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc3367.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc3367.txt')
-rw-r--r-- | doc/rfc/rfc3367.txt | 2355 |
1 files changed, 2355 insertions, 0 deletions
diff --git a/doc/rfc/rfc3367.txt b/doc/rfc/rfc3367.txt new file mode 100644 index 0000000..66bef44 --- /dev/null +++ b/doc/rfc/rfc3367.txt @@ -0,0 +1,2355 @@ + + + + + + +Network Working Group N. Popp +Request for Comments: 3367 M. Mealling +Category: Standards Track VeriSign, Inc. + M. Moseley + Netword, Inc. + August 2002 + + + Common Name Resolution Protocol (CNRP) + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Copyright Notice + + Copyright (C) The Internet Society (2002). All Rights Reserved. + +Abstract + + People often refer to things in the real world by a common name or + phrase, e.g., a trade name, company name, or a book title. These + names are sometimes easier for people to remember and type than URLs. + Furthermore, because of the limited syntax of URLs, companies and + individuals are finding that the ones that might be most reasonable + for their resources are being used elsewhere and so are unavailable. + For the purposes of this document, a "common name" is a word or a + phrase, without imposed syntactic structure, that may be associated + with a resource. + + This effort is about the creation of a protocol for client + applications to communicate with common name resolution services, as + exemplified in both the browser enhancement and search site + paradigms. Although the protocol's primary function is resolution, + it is also intended to address issues of internationalization and + localization. Name resolution services are not generic search + services and thus do not need to provide complex Boolean query, + relevance ranking or similar capabilities. The protocol is a simple, + minimal interoperable core. Mechanisms for extension are provided, + so that additional capabilities can be added. + + + + + + + +Popp, et. al. Standards Track [Page 1] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +Table of Contents + + 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . 3 + 2. Important Notes . . . . . . . . . . . . . . . . . . . . . 4 + 2.1 Terminology . . . . . . . . . . . . . . . . . . . . . . . 4 + 2.2 DTD is Definitive . . . . . . . . . . . . . . . . . . . . 4 + 2.3 Uniform Resource Identifiers . . . . . . . . . . . . . . . 5 + 3. Interaction Model . . . . . . . . . . . . . . . . . . . . 5 + 3.1 Services, Servers, Datasets and Referrals . . . . . . . . 5 + 3.2 Requests and Responses . . . . . . . . . . . . . . . . . . 5 + 3.3 Transport Independence . . . . . . . . . . . . . . . . . . 6 + 3.4 Character encoding . . . . . . . . . . . . . . . . . . . . 6 + 3.5 Queries . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 3.6 Hints . . . . . . . . . . . . . . . . . . . . . . . . . . 7 + 4. Object Model . . . . . . . . . . . . . . . . . . . . . . . 8 + 4.1 Properties . . . . . . . . . . . . . . . . . . . . . . . . 8 + 4.1.1 Core properties . . . . . . . . . . . . . . . . . . . . . 8 + 4.1.2 Abstract and custom properties . . . . . . . . . . . . . . 9 + 4.1.3 Base properties . . . . . . . . . . . . . . . . . . . . . 9 + 4.1.4 Common name string encoding and equivalence rules . . . . 11 + 4.2 Objects . . . . . . . . . . . . . . . . . . . . . . . . . 11 + 4.2.1 Query . . . . . . . . . . . . . . . . . . . . . . . . . . 11 + 4.2.1.1 Logical operations within a Query . . . . . . . . . . . . 12 + 4.2.2 Results . . . . . . . . . . . . . . . . . . . . . . . . . 13 + 4.2.2.1 ResourceDescriptor . . . . . . . . . . . . . . . . . . . . 13 + 4.2.3 Service . . . . . . . . . . . . . . . . . . . . . . . . . 14 + 4.2.3.1 Datasets . . . . . . . . . . . . . . . . . . . . . . . . . 14 + 4.2.3.2 Servers . . . . . . . . . . . . . . . . . . . . . . . . . 16 + 4.2.4 Status Messages . . . . . . . . . . . . . . . . . . . . . 19 + 4.2.4.1 Status of CNRP, Not the Transport . . . . . . . . . . . . 19 + 4.2.4.2 Codes and Description . . . . . . . . . . . . . . . . . . 19 + 4.2.4.3 Status Codes . . . . . . . . . . . . . . . . . . . . . . . 19 + 4.2.5 Referral . . . . . . . . . . . . . . . . . . . . . . . . . 21 + 4.2.5.1 Loop Detection and Dataset Handling in Servers . . . . . . 22 + 4.2.6 Discoverability: ServiceQuery and Schema . . . . . . . . . 24 + 5. XML DTD for CNRP . . . . . . . . . . . . . . . . . . . . . 26 + 6. Examples . . . . . . . . . . . . . . . . . . . . . . . . . 28 + 6.1 Service Description Request . . . . . . . . . . . . . . . 28 + 6.2 Sending A Query and Getting A Response . . . . . . . . . . 29 + 7. Transport . . . . . . . . . . . . . . . . . . . . . . . . 30 + 7.1 HTTP Transport . . . . . . . . . . . . . . . . . . . . . . 30 + 7.2 SMTP Transport . . . . . . . . . . . . . . . . . . . . . . 31 + 8. Registration: application/cnrp+xml . . . . . . . . . . . . 31 + 9. Security Considerations . . . . . . . . . . . . . . . . . 32 + 10. IANA Considerations . . . . . . . . . . . . . . . . . . . 32 + References . . . . . . . . . . . . . . . . . . . . . . . . 33 + + + + + +Popp, et. al. Standards Track [Page 2] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + A. Appendix A: Well Known Property and Type Registration + Templates . . . . . . . . . . . . . . . . . . . . . . . . 35 + A.1 Properties . . . . . . . . . . . . . . . . . . . . . . . . 35 + A.2 Types . . . . . . . . . . . . . . . . . . . . . . . . . . 35 + B. Status Codes . . . . . . . . . . . . . . . . . . . . . . . 37 + B.1 Level 1 (Informative) Codes . . . . . . . . . . . . . . . 37 + B.2 Level 2 (Success) Codes . . . . . . . . . . . . . . . . . 38 + B.3 Level 3 (Partial Success) Codes . . . . . . . . . . . . . 38 + B.4 Level 4 (Transient Failure) Codes . . . . . . . . . . . . 40 + B.5 Level 5 (Permanent Failures) Codes . . . . . . . . . . . . 40 + Authors' Addresses . . . . . . . . . . . . . . . . . . . . 41 + Full Copyright Statement . . . . . . . . . . . . . . . . . 42 + +1. Introduction + + Services are arising that offer a mapping from common names to + Internet resources (e.g., as identified by a URI). These services + often resolve common name categories such as company names, trade + names, or common keywords. Thus, such a resolution service may + operate in one or a small number of categories or domains, or may + expect the client to limit the resolution scope to a limited number + of categories or domains. For example, the phrase "Internet + Engineering Task Force" is a common name in the "organization" + category, as is "Moby Dick" in the book category. + + Two classes of clients of such services are being built, browser + improvements and web accessible front-end services. Browser + enhancements modify the "open" or "address" field of a browser so + that a common name can be entered instead of a URL. Internet search + sites integrate common name resolution services as a complement to + search. In both cases, these may be clients of back-end resolution + services. In the browser case, the browser must talk to a service + that will resolve the common name. The search sites are accessed via + a browser. In some cases, the search site may also be the back-end + resolution service, but in others, the search site is a front-end to + a collection of back-end services. + + This effort is about the creation of a protocol for client + applications to communicate with common name resolution services, as + exemplified in both the browser enhancement and search site + paradigms. Name resolution services are not generic search services + and thus do not need to provide complex Boolean query, relevance + ranking or similar capabilities. The protocol is a simple, minimal + interoperable core. Mechanisms for extension are provided, so that + additional capabilities can be added. + + + + + + +Popp, et. al. Standards Track [Page 3] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + Several other issues, while of importance to the deployment of common + name resolution services, are outside of the resolution protocol + itself and are not in the initial scope of the proposed effort. + These include discovery and selection of resolution service + providers, administration of resolution services, name registration, + name ownership, and methods for creating, identifying or insuring + unique common names. + + For the purposes of this document, a "common name" is a word or a + phrase, without imposed syntactic structure, that may be associated + with a resource. These common names will be used primarily by + humans, as opposed to machine agents. A common name "resolution + service" handles these associations between common names and data + (resources, information about resources, pointers to locations, + etc.). A single common name may be associated with different data + records, and more than one resolution service is expected to exist. + Any common name may be used in any resolution service. + + Common names are not URIs (Uniform Resource Identifiers) in that they + lack the syntactic structure imposed by URIs; furthermore, unlike + URNs, there is no requirement of uniqueness or persistence of the + association between a common name and a resource. (Note: common + names may be expressed in a URI, the syntax for which is described in + RFC 3368 [9].) + + This document will define a protocol for the parameterized resolution + necessary to make common names useful. "Resolution" is defined as + the retrieval of data associated (a priori) with descriptors that + match the input request. "Parameterized" means the ability to have a + multi-property descriptor. Descriptors are not required to provide + unique identification, therefore 0 or more records may be returned to + meet a specific input query. + +2. Important Notes + +2.1 Terminology + + The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", + "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this + document are to be interpreted as described in RFC 2119 [7]. + +2.2 DTD is Definitive + + The descriptive portions of this document contain pieces of XML that + are *illustrative examples only*. Section 5 of this document + contains the XML DTD for CNRP, which is definitive. If any + discrepancies are found, the DTD wins. + + + + +Popp, et. al. Standards Track [Page 4] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +2.3 Uniform Resource Identifiers + + All URIs used within the CNRP protocol MUST adhere to the + 'absoluteURI' production found in the ABNF of [3]. CNRP does not + define the semantics of a Base and therefore is not capable of + expressing the 'URI-Reference' production. + +3. Interaction Model + +3.1 Services, Servers, Datasets and Referrals + + CNRP assumes a particular interaction model where a generalized + "service" provides common name resolution at one or more actual + "servers". If the data contained in all its servers is identical + (mirrors), the service need not identify any particular subset of + data. If, however, the service provides different collections of + data through different servers (e.g., subsets, specialized + collections, etc.), it SHOULD indicate what subsets of its data that + each server offers. This is done by using URIs to uniquely + disambiguate one dataset from another. If the service offers a copy + of a collection of data on agreement with a foreign service, the + foreign service SHOULD provide a dataset URI to allow the collection + to be identified as related to its own offerings. + + CNRP supports the concept of referrals. This is where a server can + know that another Service exists, within the same Service or + elsewhere, that can provide further answers to a particular query but + decides to forward that fact onto the client instead of chaining the + query for the client. A referral is sent along with the rest of the + results from a server (if any). Referrals to a service SHOULD + indicate the particular dataseturi that triggered the referral, if it + is known. See Section 4.2.5 for details on referrals and loop + detection. + +3.2 Requests and Responses + + The protocol consists of a simple request/response mechanism. A + client sends one of a few types of requests to a server which + responds with the results of that request. All requests and + responses are encoded with XML [8] using the DTD found in Section 5. + There are two types of requests. One is a general query for a + common-name. The other is a request for an object that describes the + service and its capabilities. There is only one type of response + which is a set of results. Results can contain actual result items, + referrals and/or status messages. + + + + + + +Popp, et. al. Standards Track [Page 5] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +3.3 Transport Independence + + CNRP is completely encapsulated within its XML definition, and is + therefore transport-independent in its specification. However, + clients need to have a clearly defined means of bootstrapping a + connection with a server. + + It is possible to define special-purpose applications that use CNRP + but which never need the HTTP bootstrapping method outlined below; + those applications MUST define how to find the appropriate + server/port/protocol. CNRP servers dedicated to those applications + may provide service only on the ports/transport protocols defined by + the application. + + All other (generic) CNRP clients and servers MUST support the HTTP + (Section 7.1) transport on the default CNRP port of 1096. + + Note that a particular service may choose to change to a different + transport or port via statements within a CNRP service description + request, but with initial contacts between a client and a server + being over HTTP on port 1096. For a short explanation of how CNRP + employs HTTP, see Section 7.1 of this document. If other transports + are used, they MUST be handled over a port other than the default + CNRP port. + +3.4 Character Encoding + + To guarantee interoperability, the following provisions apply: + + o XML queries and responses MUST be encoded as UTF-8. + + Note: As in any XML document, numeric character references may be + used. + + o The encoding of characters in the CNRP URI is based on UTF-8; for + details, please see [9]. + + Any interfaces electing to present/accept protocol elements in other + representations are responsible for accurate transcoding for use in + CNRP protocol elements, per the above provisions. + + + + + + + + + + + +Popp, et. al. Standards Track [Page 6] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +3.5 Queries + + Queries are sent by the client to the server. There are two types of + queries. + + 1. A `special' initial query that establishes the schema for a + particular CNRP database and communicates that to the client. + The CNRP client will send this query, and in turn receive an XML + document defining the query properties that the database + supports. (In CNRP, XML [8] is used to define and express all + objects.) This query is called the 'servicequery' in the DTD. + In the case where a client does not know anything about the + Service, the client MAY assume that it can at least issue the + request via HTTP. + + 2. A `standard' query, which is the submission of the CNRP search + string to the database. The query will conform to the schema + that MAY have been previously retrieved from the service. + + There will be a set of query properties, listed below, treated as + hints by the server. Note: a CNRP database will accept any correctly + encoded CNRP query property; the extent to which a query result is + responsive to those properties is a service differentiator. The base + properties that are always supported are common name, language, + geography, category, and range (start and length of the result set). + CNRP allows database service providers to create unique data types + and expose them to any CNRP client via the CNRP schema XML documents. + +3.6 Hints + + A hint is an assertion by the user about himself, herself or itself + and the context in which he/she/it is operating. There is no data + type `hint'; a hint is expressed within the structure of the query + itself and is limited or enabled by the richness of the defined query + namespace. In effect, a query and any property within it is a hint. + + For example, the "language" property can be given as a hint in a + query; this may be used to order search results. If one wants + results first in US English followed by European French and finally + South American Spanish, the following can be included in the query: + + <property name="language" type="rfc1766">en-US</property> + + <property name="language" type="rfc1766">fr-FR</property> + + <property name="language" type="rfc1766">sp-MX</property> + + + + + +Popp, et. al. Standards Track [Page 7] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + Note that the property statements say nothing about whether the + language is primary, secondary, etc. In this example, the ordering + of the statement controls that--the first statement, being first, + means that US English is the primary language. The second statement + specifies the second region/language, and so on. *But this is only + an example.* The extent to which hints are supported (or not) is a + service differentiator. + + The fact that a hint exists does not mean that a CNRP database must + respond to it. This best-effort approach is similar to relevance + ranking in a search engine (high precision, low recall); hints are + similar to a search engine's selection criteria. CNRP services will + attempt to return the results "closest" to the selection criteria. + This is quite different from a SQL database approach where a SQL + query returns the entire results set and each result in the set must + match all the requirements expressed by the qualifier (the SQL WHERE + clause). + +4. Object Model + +4.1 Properties + + In CNRP, objects are property lists. A property is a named + attribute. A property also has a well-defined type. Some properties + can be part of the query or the results list or both. For + simplicity, CNRP is limiting property values to string values. + +4.1.1 Core Properties + + CNRP introduces a set of core properties. Core properties are the + minimal set of properties that all CNRP services MUST support in + order to reach CNRP compliance. Hence, the core properties define + the level of interoperability between all CNRP services. The core + properties are: + + 1. CommonName: the common name associated with a resource. + + 2. ID: an opaque string that serves as a unique identifier for a + result from a Service (typically a database ID). The ID is not + globally unique, nor necessarily persistent (e.g., between + queries at a given Service). + + 3. resourceURI: An 'absoluteURI' as defined in the collected ABNF + found in RFC 2396 [3]. + + 4. description: A free text description of the resource. + + + + + +Popp, et. al. Standards Track [Page 8] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +4.1.2 Abstract and Custom Properties + + In addition to core properties, CNRP introduces the notion of + abstract properties. The abstract property element provides schema + extensibility beyond the core properties. The notion of abstract + property is extremely important in CNRP since it enables a wider + range of CNRP based services than those based on the core properties. + + To create concrete custom properties, a CNRP service must define a + property name and a property type. Therefore, there are really two + ways to create a custom property. The first way is to create a new + property name and define at least one type for it. Another way is to + extend an existing property by defining a new type. The "geography" + property discussed in the next section is an example of a multi-type + property. Note that a type is only applicable to the property it is + defined for. If a new property is defined, a new type MUST be + defined even though the value set for that type may be identical to + an existing type for an existing property. In other words, types are + scoped to a given property. Custom properties MUST be registered + with IANA. Details about the registration process for new properties + can be found in Section 10. + + For example, let us assume that a CNRP service specialized on online + books would like to introduce the ISBN property of type "number". + This property would encapsulate the ISBN number of the book online + and would have he following XML representation: + + <property name="isbn" type="number">92347231</property> + +4.1.3 Base Properties + + Illustrating the use of abstract property to extend the core schema, + CNRP also defines a set of custom properties called base properties. + In order to keep the requirements extremely simple, these properties + are not mandatory to implement to reach CNRP compliance. Although, + these properties are not required, it is expected that many services, + especially large ones, will implement them. An equally important + goal for introducing additional properties is to provide a results + filtering mechanism. This is a requirement for large namespaces that + contain several million names. + + + + + + + + + + + +Popp, et. al. Standards Track [Page 9] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + The base properties and their types are defined in Appendix A but + listed here for clarity: + + o Language: + The language associated with a resource. The default type of this + property is 'RFC1766' and the vocabulary is drawn from the list of + languages in RFC 1766 [4]. If RFC 1766 is updated, then the + values listed in the updated version are also valid for this type. + + o Geography: + The geographical region or location associated with a resource. + Some of the possible types are listed below. See Appendix A for a + complete list of types specified by this document. + + * 'freeform': a free form expression for a geographical location + (e.g., "palo alto in california"). + + * 'ISO3166-1': geographical region expressed using a standard + country code as defined by ISO3166-1 (e.g., "US"). + + * 'ISO3166-2': value = a geographical region expressed using a + standard region and country codes as defined by ISO3166-2 + (e.g., "US-CA"). + + * 'lat-long': the latitude and longitude of a geographical + location. + + o Category: + The category associated with a resource. There are large numbers + of possible types for this property. Two possible ones are: + + 1. 'freeform': a free form expression for a category (e.g., + "movies"). + + 2. 'NAICS': The North American Industry Code System. + + o Range: + The range is a results set control property. The range property + is used to specify the starting point and the length of a results + set (e.g., I want 5 records starting at the 10th record). It + should only ever have one type but, in the interest of + extensibility and consistency, others can be created if there is a + need. The default type is 'start-length' which takes the form of + two integers separated by a dash. The first integer is the + starting number and the second is the number of values to include. + + + + + + +Popp, et. al. Standards Track [Page 10] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + o Dataseturi: An absoluteURI (as defined in [3] that identifies a + defined set of Common Names and associated data. + + Note: For many properties the default "type" is "freeform". The free + form type value is important because it allows very simple user + interface where the user can enter a value in a text field. It is up + to the service to interpret the value correctly and take advantage of + it to increase the relevance of results (using specialized + dictionaries for instance). + +4.1.4 Common Name String Encoding and Equivalence Rules + + CNRP specifies that common name strings should be encoded using UTF- + 8. CNRP does not specify any string equivalence rules for matching a + common name in the query against a common name of a Resource. String + equivalence rules are language and service dependent. They are + specific to relevance ranking algorithms, hence treated as CNRP + services. Consequently, string equivalence rules are not part of the + CNRP protocol specification. For example, the query member: + + <commonname>bmw</commonname> + + should be read as a selection criterion for a resource with a common + name LIKE (similar to) the string "bmw" where the exact definition of + the LIKE operator is intuitive, yet specific to the queried CNRP + service. + + It is also important to note that XML treats whitespace as a special + case in many situations. In some cases, it collapses whitespace into + a single space. Both client and server Implementors are warned to + reference the XML standard for the various ramifications of using + whitespace in queries and/or results. + +4.2 Objects + +4.2.1 Query + + The Query object encapsulates all the query components such as + CommonName, ID, and any properties. A Query cannot be empty. A + Query must contain either one and only one common name, or one and + only one ID. A Query can also contain the custom properties defined + by a specific CNRP service. + + + + + + + + + +Popp, et. al. Standards Track [Page 11] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + For example, a query for the first 5 resources whose common name is + like "bmw" would be expressed as: + + <query> + <commonname>bmw</commonname> + <property name="range" type="start-length">1-5</property> + </query> + +4.2.1.1 Logical Operations Within a Query + + The Query syntax is extremely simple. CNRP does not extensively + support Boolean logic operator such as OR, AND or NOT. However, + there exist two implicit logical operations that can be expressed + through the Query object and its properties. First, a query with + multiple property-value pairs implicitly expresses an AND operation + on the query terms. For instance, the CNRP query to request all the + resources whose common name is like "bmw", AND whose language is + "German" can be expressed as: + + <query> + <commonname>bmw</commonname> + <property name="language" type="rfc1766"> + de-DE + </property> + </query> + + Note however, that because the server is only trying to best match + the Query criteria, there is no guarantee that all or any of the + resources in the results match both requirements. + + In addition, CNRP allows the client to express a logical OR by + specifying multiple values for the same property within the Query. + For example, the logical expression: + + property = value1 OR property = value2 OR property = valueN + + Will be expressed as: + + <property>value1</property> + <property>value2</property> + <property>valueN</property> + + So if there are different properties expressed, CNRP ANDs them; if + there are multiples instances of the same property expressed, CNRP + ORs them. + + + + + + +Popp, et. al. Standards Track [Page 12] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + It is important to underline that this form is only applicable to + properties (with the exception of the CommonName itself which, even + though it is a property, is the entire point of the query). In + particular, logical OR operations on the common name are not + supported. Note that the ordering or the property-value pairs in the + query implies a precedence. As a consequence, CNRP also introduces + one special string value: "*". Not surprisingly, "*" means all + admissible values for the typed property. For example, the following + query requests all the resources whose common name is like BMW and + whose language is preferably in German or French or any other + language. + + <query> + <commonname>bmw</commonname> + <property name="language" type="rfc1766">de-DE</property> + <property name="language" type="rfc1766">fr-FR</property> + <property name="language" type="rfc1766">*</property> + </query> + +4.2.2 Results + + The results object is a container for CNRP results. The type of + objects contained in Results can be: ResourceDescriptor, Error, + Referral and Schema. Results from a CNRP service are ordered by + decreasing relevance. When the results set contains results from + multiple CNRP services, the results can no longer be ordered (since + relevance ranking is specific to a given service). In that case, + however, note that results originating from the same service remain + ordered. + +4.2.2.1 ResourceDescriptor + + The ResourceDescriptor object describes an Internet resource (e.g., a + Web page, a person, any object identified by a URI). Therefore, the + ResourceDescriptor MUST always include the resourceURI property. The + ResourceDescriptor can also contain the commonname, URI, ID (the ID + of this entry in the service's database), description, language, + geography, and category of the resource. A ResourceDescriptor can + also be augmented using custom properties and can reference a service + object to indicate its origin (using the serviceRef element). As + with referrals, a resourcedescriptor block can also contain an ID + attribute that is used by a status message to refer to a particular + resourcedescriptor. Be careful not to confuse this ID with the id + tag itself which refers to the database id of the actual database + entry. + + + + + + +Popp, et. al. Standards Track [Page 13] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <results> + <service id="i0"> + <serviceuri>http://cnrp.bar.com/</serviceuri> + </service> + <resourcedescriptor id="i1"> + <commonname>bmw</commonname> + <id>foo.com:234364</id> + <resourceuri>http://www.bmw.de/</resourceuri> + <serviceref ref="i0" /> + <description>BMW Motorcycles, International</description> + <property name="language" type="rfc1766">de-DE</property> + </resourcedescriptor> + <referral> + <serviceref ref="i0" /> + </referral> + </results> + +4.2.3 Service + + The Service object provides an encapsulation of an instance of a CNRP + service. A service is uniquely identified through the serviceuri tag + which MUST be included in the Service object. A Service object MAY + include a a brief textual description of the service. It MAY include + datasets, servers and custom properties. + + <service> + <serviceuri>http://cnrp.foo.com</serviceuri> + <description>foo.com is a CNRP service specialized on cocktail + recipes</description> + </service> + + The service object MAY also be extended by including existing + properties to further describe the service. For instance, a service + that focuses on French companies could be expressed as: + + <service> + <serviceuri>http://cnrp.foo.com</serviceuri> + <property name="category" type="freeform">companies</property> + <property name="geography" type="ISO3166-1">FR</property> + </service> + +4.2.3.1 Datasets + + The dataset object represents a set of CN-to-URI mappings. For + example, the database of AOL keywords and their URIs constitute a + dataset. The dataset object allows a CNRP implementation to uniquely + identify the database(s) of mappings that it resolves. In that + respect, the notion of dataset allows a separation between resolution + + + +Popp, et. al. Standards Track [Page 14] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + and data, providing the mechanism for a CNRP service to resolve + common-names on behalf of another CNRP service or even multiple + services. Conversely, the same dataset can be served by two distinct + CNRP services. Since a CNRP service can resolve names within one or + more datasets, the service object can contain one or more dataset + objects (zero if the dataset is not formally declared). + + Within the service object, a dataset is uniquely defined using the + dataseturi property. Other properties, such as language and + description, can describe the dataset further. Like the service + object, the dataset object has an ID attribute associated with it + that is unique within a particular XML message. Like the service + object's ID attribute, this ID is used by resourcedescriptors and + referrals to specify which service and/or dataset they came from or + are referring to. + + Any service can be said to have a 'default dataset' which is the + dataset that considered to have been used if a server simply responds + to a client's query that didn't contain a dataset. The 'default + dataset' can also be said to be the only dataset that is used by + Services that don't support datasets at all. This concept is useful + for clients that intend on doing rigorous loop detection by way of + keeping a list of visited service/dataset nodes. + + This example illustrates how the service object would look as it + defines two datasets: + + <service id="i0"> + <serviceuri>http://acmecorp.com</serviceuri> + <dataset id="i1"> + <property name="dataseturi"> + urn:oid:1.2.3.4.666.5.4.3.1 + </property> + <property name="language">en-us</property> + <property name="language">en-gb</property> + </dataset> + <dataset id="i2"> + <property name="dataseturi"> + urn:oid:1.2.3.4.666.10.9.8.7.6 + </property> + <property name="language">fr</property> + </dataset> + </service> + + The dataseturi property can also be used within the query as a hint + to the service for the dataset within which the commonname should be + resolved: + + + + +Popp, et. al. Standards Track [Page 15] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <query> + <commonname>toys r us</commonname> + <property name="dataseturi">urn:oid:1.2.3.4.666.5.4.3.1</property> + </query> + + It is important to note that resolution rules (i.e., string + equivalence, relevance ranking, etc.) are likely to be dataset + specific. This is true even if the resolution is provided by the + same service. + + Another use of the dataseturi property is in a referral. In that + case, the datasetref tag is used to pinpoint a specific dataset + within the service. + + <referral> + <serviceref ref="i0" /><datasetref ref="i1" /> + </referral> + + While the concept of datasets is important for services wishing to + make their data available via other services, it is important to + remember that the declaration and use of datasets is completely + optional. Compliance with the CNRP protocol does not require a + service object to define or reference any dataset object. The only + requirement for compliance is that a client and/or server know the + format of the particular XML tags and deal with them syntactically. + If it chooses to ignore them, then this is well within its rights. + +4.2.3.2 Servers + + The service object also encapsulates a list of server objects. The + server object is used to describe a CNRP server or set of servers. A + server is identified through its serveruri. The URI used to identify + a server is not a CNRP URI [9], but instead, is a URI of the scheme + used as the CNRP transport mechanism. I.e., for a CNRP server that + will communicate via the HTTP protocol to the host foo.com on port + 6543, the serveruri would be http://foo.com:6543. If some other + information is required in order for the correct transport to be + used, then that information can be communicated via other properties. + Note that a Service MUST have at least one Server that responds on + the default CNRP port in order for a client to get the initial + Service object. + + A server can serve one or more datasets declared by its service. The + served databases are specified using the dataseturi property. As for + other objects, a server can be further described using descriptive + properties such as geography and description. The following XML + completes the service definition from the previous example by + defining two CNRP servers. One server is located in the US and the + + + +Popp, et. al. Standards Track [Page 16] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + other is located in France. The US server is specialized and only + serves the French dataset. + + <servers> + <server> + <serveruri>cnrp://router.us.widgetco.com:4321</serveruri> + <property name="geography" type="ISO3166-1">US</property> + </server> + <server> + <serveruri>cnrp://router.fr.acmeco.com:4321</serveruri> + <property name="geography" type="ISO3166-1">FR</property> + </server> + </servers> + + As we will see in a following section, the Service object can contain + Schema objects. These Schema objects fully describe the query and + response interfaces implemented by a CNRP service. In that regard, + the Service object is essential to discoverability. It constitutes + the main entry point for a CNRP client to dynamically discover the + capabilities of a resolution service. For that purpose, the Service + object can be returned as part of the response to any resolution + query. Furthermore, the Service object is the dedicated response to + the specialized servicequery (see Section 4.2.6). + + Another use of Service is for other objects to indicate their CNRP + service of origin. System messages, referrals and + resourcedescriptors can include a reference to their Service object. + For example, imagine a CNRP service that acts as a proxy for multiple + CNRP services. For example, it is a requirement that CNRP allows + aggregation of results from different sources. Consider one such + CNRP service that acts as a proxy for multiple CNRP services. In + this mode, the proxy service contacts each CNRP sub-service in + parallel or serially. Then, the proxy combines the individual result + sets into a unique response returned to the CNRP client. Since the + aggregate result set contains resourcedescriptors from different + services, the proxy adds a servicereference tag within each + individual result to indicate their service of origin. In the event + one of the referred services resolves names within multiple datasets, + it is possible for these objects to refer to a specific dataset + within the service by using the datasetref tag. This example is of a + hybrid result set with resourcedescriptors referencing their service + and dataset of origin: + + + + + + + + + +Popp, et. al. Standards Track [Page 17] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <?xml version="1.0"?> + <!DOCTYPE cnrp PUBLIC "-//IETF//DTD CNRP 1.0//EN" + "http://ietf.org/dtd/cnrp-1.0.dtd"> + <cnrp> + <results> + <service id="i0"> + <serviceuri>http://acmecorp.com</serviceuri> + <dataset id="i1"> + <property name="dataseturi"> + urn:oid:1.2.3.4.666.5.4.3.1 + </property> + </dataset> + <dataset id="i2"> + <property name="dataseturi"> + urn:oid:1.2.3.4.666.10.9.8.7.6 + </property> + </dataset> + </service> + <service id="i3"> + <serviceuri>http://serverfarm.acmecorp.com</serviceuri> + </service> + <service id="i4"> + <serviceuri>http://servers.acmecorp.co.uk</serviceuri> + <dataset id="i5"> + <property name="dataseturi"> + urn:oid:1.2.3.4.666.5.4.3.1 + </property> + </dataset> + </service> + <resourcedescriptor> + <commonname>Fidonet</commonname> + <id>1333459455</id> + <resourceuri>http://www.fidonet.ca</resourceuri> + <serviceref ref="i0" /><datasetref ref="i1" /> + <description>This is ye olde Canadian + Fidonet</description> + </resourcedescriptor> + <resourcedescriptor> + <commonname>Fidonet</commonname> + <id>1333459455</id> + <resourceuri>http://host:port/bla</resourceuri> + <serviceref ref="i3" /> + <description>An old Fidonet node</description> + </resourcedescriptor> + <referral> + <serviceref ref="i0" /><datasetref ref="i2" /> + </referral> + </results> + + + +Popp, et. al. Standards Track [Page 18] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + </cnrp> + +4.2.4 Status Messages + +4.2.4.1 Status of CNRP, Not the Transport + + The status messages defined here are only applicable to operations + defined by CNRP itself. If some feature or operation is defined by + the transport (security via HTTP, mail failure via SMTP, etc.), then + any status messages about that operation MUST be sent in accordance + with that transport's reporting mechanism and not via CNRP. + +4.2.4.2 Codes and Description + + A Status object indicates a message to the client in the results set. + The object encapsulates two values: a status code and a description. + The description can contain a textual description of the status being + communicated. In many cases, additional diagnostic information can + also be included. No attempt is made to standardize the description + of a given status code since the only programmatic element that + matters is the actual code. + + A status message can also specify which other CNRP element it refers + to by including a reference to the ID of the element in question. + For example, if a Service block has an ID of "i2" and a status + message refers to that block, then it can put that ID in its ref + attribute. + + <status code="x.y.z" ref="i2"> + The CNRP foo.com database is temporarily unreachable + </status> + +4.2.4.3 Status Codes + + The organization of status codes is taken from RFC 1893 [10] which + structures its codes in the form of x.yyy.zzz. Taken from RFC 1893 + is the ABNF for the codes: + + status-code = class "." subject "." detail + class = "2"/"3"/"4"/"5" + subject = 1*3digit + detail = 1*3digit + + + + + + + + + +Popp, et. al. Standards Track [Page 19] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + The top level codes denote levels of severity of the status: + + o 1.X.X Informational + + * The information conveyed by the code has no bearing or + indication of the success or failure of any request. It is + strictly for informational purposes only. + + o 2.X.X Success + + * The request was processed and results were returned. In most + cases, this status class won't be sent since actual results + themselves denote success. In other cases, results were + returned but some information needs to be returned to the + client. + + o 3.X.X Partial Success + + * The request was processed and results were returned. In this + case though, some values sent with the request were either + invalid or ignored but in a way that the server still considers + the response to be a successful one and not indicative of any + true error condition. + + o 4.X.X Transient Failure + + * The request was valid as sent, but some temporary event + prevents the successful completion of the request and/or + sending of the results. Sending in the future may be possible. + + o 5.X.X Permanent Failure + + * A permanent failure is one which is not likely to be resolved + by re-sending the request in its current form. Some change to + the request or the destination must be made for successful + request. + + The second level codes denote the subject of the status messages. + This value applies to each of the five classifications. The subject + sub-code, if recognized, must be reported even if the additional + detail provided by the detail sub-code is not recognized. The + enumerated values for the subject sub-code are: + + + + + + + + + +Popp, et. al. Standards Track [Page 20] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + o X.0.X Other or Undefined Status + + + * No specific information is available about what subject class + this message belongs to. + + o X.1.X Query Related + + * Any status related to some specific way in which the query was + encoded or its values with the exception of properties. + + o X.2.X Service Related + + * Any status related to the service in which this server is + cooperating in providing. + + Appendix B contains a list of all predefined status codes + +4.2.5 Referral + + A Referral object in the results set is a place holder for un-fetched + results from a different service and possibly dataset. Referrals + typically occur when a CNRP server knows of another service capable + of providing relevant results for the query and wants to notify the + client about this possibility. The client can decide whether it + wants to follow the referral and resolve the extra results by + contacting the referred-to service using the information contained + within the Referral object (a Service object and possible + properties). The Referral is a simple mechanism to enable + hierarchical resolution as well as to join multiple resolution + services together. + + + + + + + + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 21] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <results> + <service id="i0"> + <serviceuri>http://cnrp.bar.com/</serviceuri> + <dataset id="i1"> + <property name="dataseturi"> + urn:oid:1.3.6.1.4.1.782.1 + </property> + </dataset> + <dataset id="i2"> + <property name="dataseturi"> + urn:oid:1.3.6.1.4.1.782.2 + </property> + </dataset> + </service> + <resourcedescriptor> + <commonname>bmw</commonname> + <id>foo.com:234364</id> + <resourceuri>http://www.bmw.de/</resourceuri> + <serviceref ref="i0" /><datasetref ref="i1" /> + <description>BMW Motorcycles, International</description> + <property name="language" type="iso646">de-DE</property> + </resourcedescriptor> + <referral> + <serviceref ref="i0" /><datasetref ref="i2" /> + </referral> + </results> + + Like other CNRP objects, a referral can be further described using + custom properties. Like a resourcedescriptor, a referral can have an + ID attribute that is used by a status message to talk about a + particular referral block. + +4.2.5.1 Loop Detection and Dataset Handling in Servers + + Referrals in CNRP can be handled in three ways: + + o application specific, + + o as hints only, + + o rigorous loop detection. + + In the first two cases, the behavior of the client, when it receives + a referral, is not defined in this memo. The client can chase the + referral in such a way as to treat it as a hint only. In this case, + datasets may or may not be handled. Loop detection can be nothing + more than, "Have I talked to this hostname before?" or "Stop after + the 3rd referral". These two cases are most likely to apply to + + + +Popp, et. al. Standards Track [Page 22] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + simple or constrained implementations where the clients and servers + have some a priori knowledge of their capabilities. Without such + knowledge there is too much ambiguity vis-a-vis services and datasets + for clients to do reliable loop detection. + + The last case is where the client expects to talk to multiple servers + that may know nothing about each other. This case expresses the + basic semantics of what a server should tell a client if it + understands datasets or referrals. Since a referral specifies the + exact dataset to which it is referring, a node in the list of visited + nodes is made up of a serviceuri and a dataseturi. Both of these + values need to be considered during loop detection. In the case + where a service does not support datasets, the visited node is made + up of the service and the 'default dataset'. + + The major thing to remember when doing loop detection across servers + is that some servers may not understand datasets at all, while others + specifically rely on them. To help determine how loop detection + nodes should be marked, three specific status messages have been + defined: + + The 3.1.3 (Datasets not supported) status message is used to denote + that the server does not support datasets at all. It is sent in + response to a query containing datasets. The client should consider + that the server ignored the datasets and the client should consider + this node to have been visited for all possible datasets (including + the 'default' dataset). + + The 3.1.4 (First dataset only supported) status message is used by a + server to indicate the situation where a client has included several + dataseturis in its query and the server can only support one at a + time. In this case, the server is explicitly stating that it used + the first dataseturi only. The client should consider that only the + first dataseturi specified was processed correctly. The client + should consider that the remaining datasets in the query were ignored + completely. They would need to be sent individually as referrals if + the client really cares about those results. Only the first + serviceuri/dataseturi pair should be marked as visited. + + The 3.1.5 (This dataset not supported) status message is used to + indicate that a specific dataseturi sent in a query by a client is + not supported by the server. This serviceuri/dataseturi pair should + be considered as visited by the client. If this message is sent in + reply to a query specifying multiple datasets, the client should + behave the same as if it received the 3.1.3 message from above. It + should be considered bad form for a server to send this status + message back in response to a query with multiple datasets because it + is ambiguous. + + + +Popp, et. al. Standards Track [Page 23] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + While there is no exact algorithm for loop detection that clients are + encouraged to support, these status messages can be used by the + server to be clear about what Services and Datasets it considers to + have been queried. It is up to the client to decide what to do with + these messages and how closely it attempts to do loop detection. + +4.2.6 Discoverability: ServiceQuery and Schema + + A subclass of Query, the ServiceQuery object supports the dynamic + discovery of a specific CNRP service's characteristics. Note that + CNRP compliance does not require that a service fully implements + discoverability. In particular, returning the Service object with + its serviceuri constitutes a minimal yet sufficient compliant + implementation. Nevertheless, we expect that advanced CNRP services + will choose to return a full description of their supported + interfaces. + + The complete response to a servicequery returns the Service object + described in section 5.3.2 with the following schema information: + + 1. The base and custom properties used by the CNRP service (Property + schema), + + 2. The properties used to describe the Service object (Service + schema), + + 3. The properties that belong to the query interface (Query schema), + + 4. The properties that belong to a resource within the results + (Resource schema). + + These leads to the following new object definitions: + + o propertyschema -- A property schema describes all the custom + properties that are part of the service. + + o propertydeclaration -- A property declaration describes a base or + custom property used by the CNRP service. A property declaration + has a name and a type (the name and the type of the property that + it refers to). Note that as part of the property schema, one MUST + declare both existing and newly defined properties. + + o propertyreference -- A property reference is a reference to a + property declaration so that a given schema (a service, query or + resource schema) can declare the property within its interface. + Note that a property reference specify whether the use of the + property is required or optional only. + + + + +Popp, et. al. Standards Track [Page 24] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + o serviceschema -- The service schema defines the properties used to + describe the service. + + o queryschema -- A query schema describes the structure of a query + handled by the CNRP service. The properties referred within the + query schema are part of the query interface of the resolution + service. + + o resourcedescriptorschema -- A ResourceDescriptor schema describes + the resource returned as a result by the CNRP service. + + For example, a CNRP query to discover a service's capabilities will + be in the form: + + <cnrp> <servicequery/> </cnrp> + + And for a CNRP service for cocktail recipes in French, the + corresponding response would be: + + <service> + <serviceuri>http://cnrp.recipe.com</serviceuri> + <propertyschema> + <propertydeclaration id="i1"> + <propertyname>language</propertyname> + <propertytype>rfc1766</propertytype> + </propertydeclaration> + <propertydeclaration id="i2"> + <propertyname>cocktailrecipe</propertyname> + <propertytype>freeform</propertytype> + </propertydeclaration> + </propertyschema> + <queryschema> + <propertyreference required="yes" ref="i1"/> + </queryschema> + <resourcedescriptorschema> + <propertyreference required="yes" ref="i1"/> + <propertyreference required="yes" ref="i2"/> + </resourcedescriptorschema> + </service> + + This response stipulates that the service accepts the property + language as part of the query interface and returns + resourcedescriptors that contain both the language and cocktailRecipe + properties. + + + + + + + +Popp, et. al. Standards Track [Page 25] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +5. XML DTD for CNRP + + <!-- The document tag --> + <!ELEMENT cnrp (query|results|servicequery)> + + <!-- Used to request a Service object --> + <!ELEMENT servicequery EMPTY> + + <!-- A query can either request a schema, a specific record by --> + <!-- id, or a common-name with a set of properties (or --> + <!-- assertions) about the entity doing the query. --> + <!ELEMENT query (id|(commonname,property*))> + <!ELEMENT id (#PCDATA)> + + <!ELEMENT commonname (#PCDATA)> + <!-- NOTE: CNRP defines several well known properties --> + <!-- and types. See Appendix A for details. --> + <!ELEMENT property (#PCDATA)> + <!-- The name of the property --> + <!ATTLIST property name CDATA #REQUIRED> + <!-- The type of the property --> + <!ATTLIST property type CDATA "freeform"> + + <!ELEMENT results (status? | + ( service+, + ( status | resourcedescriptor | referral )* + )* + )> + + <!ELEMENT resourcedescriptor (commonname,id,resourceuri, + serviceref, datasetref?, + description, + property*)> + <!ATTLIST resourcedescriptor id ID #IMPLIED> + + <!-- The entire point of all this... --> + <!ELEMENT resourceuri (#PCDATA)> + <!ELEMENT description (#PCDATA)> + + <!ELEMENT referral (serviceref, datasetref?)> + <!ATTLIST referral id ID #IMPLIED> + + <!ELEMENT status (#PCDATA)> + <!ATTLIST status code CDATA #REQUIRED> + <!ATTLIST status ref IDREF #IMPLIED> + + <!-- serviceRef is used to point to one of a set of provided --> + <!-- service objects. This is so that a resource can point to --> + + + +Popp, et. al. Standards Track [Page 26] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <!-- which service it came from. We could include the entire --> + <!-- service object but then we would be repeating large --> + <!-- amounts of information. --> + + <!ELEMENT serviceref EMPTY> + <!ATTLIST serviceref ref IDREF #IMPLIED> + + <!ELEMENT service (serviceuri, dataset*, + servers?, + description?, + property*,propertyschema?,queryschema?,resourcedescriptorschema?, + serviceschema?)> + <!-- The time to live of the schema in seconds since it was --> + <!-- retrieved --> + <!ATTLIST service ttl CDATA "0"> + <!ATTLIST service id ID #IMPLIED> + <!ELEMENT serviceuri (#PCDATA)> + <!ELEMENT servers (server+)> + <!ELEMENT server (serveruri, property*)> + <!ELEMENT serveruri (#PCDATA)> + + <!ELEMENT dataset (property*)> + <!ATTLIST dataset id ID #IMPLIED> + + <!ELEMENT datasetref EMPTY> + <!ATTLIST datasetref ref IDREF #IMPLIED> + + <!ELEMENT propertyschema (propertydeclaration*)> + <!ELEMENT propertydeclaration (propertyname, propertytype*)> + <!ATTLIST propertydeclaration id ID #IMPLIED> + + <!ELEMENT propertyname (#PCDATA)> + <!ELEMENT propertytype (#PCDATA)> + <!-- This specifies if the type is meant to be the default --> + <!-- type. This is usually reserved for "freeform". --> + <!ATTLIST propertytype default (no|yes) "no"> + + <!-- The properties you can use in a query --> + <!ELEMENT queryschema (propertyreference*)> + + <!-- The properties you can expect to see in an Resource --> + <!ELEMENT resourcedescriptorschema (propertyreference*)> + + <!-- The properties you can expect to find in a Service --> + <!-- definition --> + <!ELEMENT serviceschema (propertyreference*)> + + <!ELEMENT propertyreference EMPTY> + + + +Popp, et. al. Standards Track [Page 27] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <!-- This specifies if a property is required as part of --> + <!-- the query. --> + <!ATTLIST propertyreference ref IDREF #REQUIRED> + <!ATTLIST propertyreference required (no|yes) "no"> + +6. Examples + +6.1 Service Description Request + + This is what the client sends when it is requesting a servers schema. + + <?xml version="1.0"?> + <!DOCTYPE cnrp PUBLIC "-//IETF//DTD CNRP 1.0//EN" + "http://ietf.org/dtd/cnrp-1.0.dtd"> + <cnrp> + <servicequery /> + </cnrp> + + This is the result. Notice how the Service tag is used to allow the + service to describe itself in its own terms. + + <?xml version="1.0"?> + <!DOCTYPE cnrp PUBLIC "-//IETF//DTD CNRP 1.0//EN" + "http://ietf.org/dtd/cnrp-1.0.dtd"> + <cnrp> + <results> + <service ttl="43200"> + <serviceuri>urn:foo:bar</serviceuri> + <servers> + <server> + <serveruri>http://host1.acmecorp.com:4321/foo?</serveruri> + </server> + <server> + <serveruri>smtp://host2.acmecorp.com:4321/foo?</serveruri> + </server> + </servers> + <description>This is the Acme CNRP Service</description> + <!-- This property means that Acme specializes in + tradename services --> + <property name="category" type="naics">544554</property> + <property name="BannerAdServer" type="uri"> + http://adserver.acmecorp.com/ + </property> + <propertyschema> + <propertydeclaration id="i1"> + <propertyname>workgroupID</propertyname> + <propertytype default="yes">freeform</propertytype> + <propertytype default="no">domainname</propertytype> + + + +Popp, et. al. Standards Track [Page 28] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + </propertydeclaration> + <propertydeclaration id="i2"> + <propertyname>BannerAdServer</propertyname> + <propertytype default="yes">URI</propertytype> + </propertydeclaration> + </propertyschema> + <queryschema> + <propertyreference ref="i1" required="yes" /> + </queryschema> + <resourcedescriptorschema> + <propertyreference ref="i1" required="yes" /> + </resourcedescriptorschema> + <serviceschema> + <propertyreference ref="i2" required="yes" /> + </serviceschema> + </service> + </results> + </cnrp> + +6.2 Sending A Query and Getting A Response + + This is the query that is sent from the client to the server: + + <?xml version="1.0"?> + <!DOCTYPE cnrp PUBLIC "-//IETF//DTD CNRP 1.0//EN" + "http://ietf.org/dtd/cnrp-1.0.dtd"> + <cnrp> + <query> + <commonname>Fido</commonname> + <property name="geography" type="iso3166-2"> + CA-QC</property> + <property name="geography" type="iso3166-1">CA</property> + <property name="language" type="rfc1766">fr-CA</property> + </query> + </cnrp> + + This is the result set. It is sent back in response to the query. + This result set includes a referral and a non-fatal error. + + <?xml version="1.0"?> + <!DOCTYPE cnrp PUBLIC "-//IETF//DTD CNRP 1.0//EN" + "http://ietf.org/dtd/cnrp-1.0.dtd"> + <cnrp> + <results> + <service id="i0"> + <serviceuri>http://acmecorp.com</serviceuri> + </service> + <service id="i1"> + + + +Popp, et. al. Standards Track [Page 29] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + <serviceuri>http://serverfarm.acmecorp.com</serviceuri> + </service> + <service id="i2"> + <serviceuri>http://servers.acmecorp.co.uk</serviceuri> + </service> + <resourcedescriptor> + <commonname>Fidonet</commonname> + <id>1333459455</id> + <resourceuri>http://www.fidonet.ca</resourceuri> + <serviceref ref="i0" /> + <description>This is ye olde Canadian Fidonet</description> + </resourcedescriptor> + <resourcedescriptor> + <commonname>Fidonet</commonname> + <id>1333459455</id> + <resourceuri>http://host:port/bla</resourceuri> + <serviceref ref="i1" /> + <description>An old Fidonet node</description> + </resourcedescriptor> + <referral><serviceref ref="i2" /></referral> + <status code="3.1.1"> + The language property 'fr-CA' was ignored + </status> + </results> + </cnrp> + +7. Transport + + Two CNRP transport protocols are specified. HTTP is used due to its + popularity and ease of integration with other web applications. SMTP + is also used as a way to illustrate a protocol that has a much + different range of latency than most protocols. + + In the cases where transports use MIME Media Types (HTTP and SMTP + being examples of such), the CNRP payload MUST use the + 'application/cnrp+xml' media type. See Section 8 for the + registration template for this media type. One important note about + this media type is that, since CNRP always uses UTF-8, there is no + charset attribute. + +7.1 HTTP Transport + + The HTTP transport is fairly simple. The client connects to an HTTP + based CNRP server and issues a request using the POST method to the + "/" path with the Content-type and Accept header set to + "application/cnrp+xml". The content of the POST body is the CNRP XML + document that is being sent. All HTTP 1.1 features are allowed + during the request. + + + +Popp, et. al. Standards Track [Page 30] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + The results are sent back to the client with a Content-Type of + "application/cnrp+xml". The body of the result is the CNRP XML + document being sent to the client. + +7.2 SMTP Transport + + The SMTP transport is very similar to the HTTP transport. Since + there is no method to specify, the CNRP XML document is simply sent + to a particular SMTP endpoint with its Content-Type set to + "application/cnrp+xml". The server responds by sending a response to + the originator of the request with the results in the body and the + Content-Type set to "application/cnrp+xml". The Service MUST specify + at least one SMTP target (email address) to contact. + +8. Registration: application/cnrp+xml + + This is the registration template for 'application/cnrp+xml' per [6]. + + MIME media type name: application + + MIME subtype name: cnrp+xml + + Required parameters: none + + Optional parameters: none + + Encoding considerations: This media type consists of 8bit text which + may necessitate the use of an appropriate content transfer + encoding on some transports. Since these considerations are the + same as XML in general, RFC3023's [6] discussion of XML and MIME + is applicable. + + Security considerations: none specific to this media type. See + Section 9 for general CNRP considerations. + + Interoperability considerations: n/a + + Published specification: This media type is a proper subset of the + the XML 1.0 specification [8] except for the limitations placed on + tags and encodings by this document. + + Applications which use this media type: any CNRP client/server + wishing to send or receive CNRP requests or responses + + Additional Information: none + + Contact for further information: c.f., the "Author's Address" section + of this memo + + + +Popp, et. al. Standards Track [Page 31] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + Intended usage: limited use + + Author/Change controller: the IESG + +9. Security Considerations + + Three security threats exist for CNRP or applications that depend on + it: Man in the Middle attacks, malicious agents posing as a service + by spoofing a Service object, and denial of service attacks caused by + adding a new level of indirection for resolution of a resource. + + The proposed solution for man in the middle attacks is to utilize + transport level authentication and encryption, where available. In + the case where the transport can't provide the level of required + authentication, individual entries or the entire response can be + signed/encrypted using XML signature methods being developed by the + XMLDSIG Working Group. + + In the case of where a service attempts to pose as another by + spoofing the serviceuri in the Service object, the Service object + should be signed. A client can then verify the Service object's + veracity by verifying the signature. How the client obtains that + authoritative public key is out of scope since it depends on the + service discovery problem. + + While this document cannot propose a solution for Denial Of Service + (DOS) attacks, it can illustrate that, like many other cases, any + time a new level of indirection is created, an opportunity for a DOS + attack is created. Service providers are encouraged to be aware of + this and to act accordingly to mitigate the effects of a DOS attack. + +10. IANA Considerations + + The major consideration for the IANA is that the IANA will be + registering well known properties, property types and status + messages. It will not register values. Since this document does not + discuss CNRP service discovery, the IANA will not be registering the + existence of servers or Server objects. + + There are three types of entities the IANA can register: properties, + property types, and status messages. If a property or type is not + registered with the IANA, then they must start with "x-". Status + messages can be created for local consumption and not registered. + There is no requirement that new status messages are mandatory to + implement unless this document is updated. Status message + registrations are more for informational purposes. + + + + + +Popp, et. al. Standards Track [Page 32] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + The required information for the registration of a new property is + the property's name, its default type, and a general description. A + new type requires the type's name, what properties it is valid for, + and a description. A new status message requires the X.Y.ZZZ code + and a brief description of the state being communicated. + + All properties, types and status messages are registered on a First + Come First Served basis with no review by the IANA or any group of + experts. The consensus opinion of the CNRP Working Group is that + review of property registrations should occur once there is + operational experience with the protocol and an actual need for the + review. If, at some future date, this policy needs to change, this + document will be updated. + + The property and type registration templates found in Appendix A + should be registered by the IANA at publication time of this + document. + + The IANA is also directed to register the Media Type specified in + Section 8. + +References + + [1] United States, "North American Industry Classification System", + January 1997, <http://www.census.gov/epcd/www/naics.html>. + + [2] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., + Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol -- + HTTP/1.1", RFC 2616, June 1999. + + [3] Berners-Lee, T., Fielding, R. and L. Masinter, "Uniform + Resource Identifiers (URI): Generic Syntax", RFC 2396, August + 1998. + + [4] Alvestrand, H., "Tags for the Identification of Languages", RFC + 1766, March 1995. + + [5] Moats, R., "URN Syntax", RFC 2141, May 1997. + + [6] Murata, M., St. Laurent, S. and D. Kohn, "XML Media Types", RFC + 3023, January 2001. + + [7] Bradner, S., "Key words for use in RFCs to Indicate Requirement + Levels", BCP 14, RFC 2119, March 1997. + + [8] Bray, T., Paoli, J. and C. Sperberg-McQueen, "Extensible Markup + Language (XML) 1.0", February 1998. + + + + +Popp, et. al. Standards Track [Page 33] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + [9] Mealling, M., "The 'go' URI Scheme for the Common Name + Resolution Protocol", RFC 3368, August 2002. + + [10] Vaudreuil, G., "Enhanced Mail System Status Codes", RFC 1893, + January 1996. + + [11] "Country and Region Codes", ISO 3166, January 1996. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 34] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +Appendix A. Well Known Property and Type Registration Templates + +A.1 Properties + + Property Name: geography + Default Type: iso3166-1 + Description: A geographic location + + Property Name: language + Default Type: rfc1766 + Description: A language specification + + Property Name: category + Default Type: freeform + Description: A node in some system of semantic relationships that is + considered relevant to the common-name. + + Property Name: range + Default Type: range + Description: A range given in the format "x,y" where x is the + starting point and y is the length. This property is used by the + client to tell the server that is is requesting a subrange of the + results. + + Property Name: dataseturi + Default Type: uri + Description: A URI used to disambiguate between two Datasets offered + by the same Service. + +A.2 Types + + Type: freeform + Property: category + Description: The value is to be interpreted by the server the best + way it knows how. This value has no defined structure. + + + + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 35] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + Type: freeform + Property: geography + Description: The value is to be interpreted by the server the best + way it knows how. This value has no defined structure. + + Type: freeform + Property: language + Description: The value is to be interpreted by the server the best + way it knows how. This value has no defined structure. + + Type: iso3166-2 + Property: geography + Description: The combination of country and sub-region codes found in + ISO 3166-2 [11]. + + Type: iso3166-1 + Property: Geography + Description: Country Codes found in ISO 3166-1 [11]. + + Type: postalcode + Property: Geography + Description: A postal code that is valid for some region. A good + example is the Zip code system used in the US. + + Type: lat-long + Property: Geography + Description: + + Values for latitude and longitude shall be expressed as decimal + fractions of degrees. Whole degrees of latitude shall be + represented by a two-digit decimal number ranging from 0 through + 90. Whole degrees of longitude shall be represented by a decimal + number ranging from 0 through 180. When a decimal fraction of a + degree is specified, it shall be separated from the whole number + of degrees by a decimal point. Decimal fractions of a degree may + be expressed to the precision desired. + + Latitudes north of the equator shall be specified by a plus sign + (+), or by the absence of a minus sign (-), preceding the + designating degrees. Latitudes south of the Equator shall be + designated by a minus sign (-) preceding the two digits + designating degrees. A point on the Equator shall be assigned to + the Northern Hemisphere. + + Longitudes east of the prime meridian shall be specified by a plus + sign (+), or by the Longitudes west of the meridian shall be + designated by minus sign (-) preceding the digits designating + degrees. A point on the prime meridian shall be assigned to the + + + +Popp, et. al. Standards Track [Page 36] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + Eastern Hemisphere. A point on the 180th meridian shall be + assigned to the Western Hemisphere. One exception to this last + convention is permitted. For the special condition of describing + a band of latitude around the earth, the East Bounding Coordinate + data element shall be assigned the value +180 (180) degrees. + + Any spatial address with a latitude of +90 (90) or -90 degrees + will specify the position at the North or South Pole, + respectively. The component for longitude may have any legal + value. + + With the exception of the special condition described above, this + form is specified in Department of Commerce, 1986, Representation + of geographic point locations for information interchange (Federal + Information Processing Standard 70-1): Washington, Department of + Commerce, National Institute of Standards and Technology. + + DEGREES = *PLUSMINUS DIGITS '.' DIGITS + PLUSMINUS = + | - + DIGITS = DIGIT *DIGIT + DIGIT = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 + + + Type: rfc1766 + Property: Language + Description: language codes as defined by RFC 1766 [4] + + Type: naics + Property: Category + Description: North American Industry Code System [1] + + Type: uri + Property: dataseturi + Description: A URI adhering to the 'absoluteURI' production of the + Collected ABNF found in [3] + +Appendix B. Status Codes + +B.1 Level 1 (Informative) Codes + + 1.0.0 -- Undefined Information + This code is used for any non-categorizable and informative + message. If, for example, the server wanted to tell the client + that the systems administrator's cat has blue hair, then this code + would be the appropriate place for this information. + + + + + + +Popp, et. al. Standards Track [Page 37] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + 1.1.0 -- Query related information + This code is used for any informative information concerning the + query that client sent. For example, "The query you sent was + rather interesting!". + + 1.2.0 -- An informative message pertaining to the Service + This message concerns the Service in the general sense. + +B.2 Level 2 (Success) Codes + + 2.0.0 -- Something undefined succeeded + There was success but the situation that this message concerns is + undefined. + + 2.1.0 -- Query succeeded + The query succeeded. This message MUST be returned when there + were no results that matched the query. I.e., the query was + successfully handled and the correct set of results contained no + resources or referrals. The lack of results is not an error but a + successful statement about the common-name. + + Note: The apparent lack of 2.X.X level codes is caused by success + usually being indicated not by a status message but by the server + returning only the objects that the client requested. + +B.3 Level 3 (Partial Success) Codes + + 3.0.0 -- Something undefined was only partially successful + Some request by the client was only partially successful. The + exact situation or cause of that partial failure is not defined. + + 3.1.0 -- The query was only partially successful. + + 3.1.1 -- The query contained invalid or unsupported properties + The query contained invalid or unsupported property names, types + or values. The invalid properties were ignored and the query + processed. + + 3.1.2 -- The XML was well formed but invalid + The XML sent by the client was well formed but invalid. The + server was smart enough to figure out what the client was talking + about and return some results. + + + + + + + + + +Popp, et. al. Standards Track [Page 38] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + + 3.1.3 Server does not support datasets + This status should be generated by servers that do not handle + datasets. A server can send this status message at any time, but + it especially useful for when a server receives a query from a + client that contains a dataseturi. In this case and if the client + is doing rigorous loop detection, the client should consider this + entire service to have been visited. + + 3.1.4 The first dataset in the list of datasets you gave in the + query was the only one used. + This status message is used by a server to indicate the situation + where a client has included several dataseturis in its query and + the server can only support one at a time. In this case the + server is explicitly stating that it used the first dataseturi + only. The client should consider that only the first dataseturi + specified was processed correctly. The client should consider + that the remaining datasets in the query were ignored completely. + + They would need to be sent individually as referrals if the client + really cares about those results. Only the first + serviceuri/dataseturi pair should be marked as visited if loop + detection is being handled. + + 3.1.5 This dataset not supported. + This message is used to indicate that a specific dataseturi sent + in a query by a client is not supported by the server. This + serviceuri/dataseturi pair should be considered as visited by the + client. If this message is sent in reply to a query specifying + multiple datasets, the client should behave the same as if it + received the 3.1.3 message from above. It should be considered + bad form for a server to send this status message back in response + to a query with multiple datasets because it is ambiguous. + + 3.2.0 -- The server caused a partially successful event + Due to some internal server error, the results returned were + incomplete. + + 3.2.1 -- Some referral server was unavailable + This status message is used to denote that one or more of the + referral services that are normally queried was unavailable. + Results were generated, but they may not be representative of a + complete answer. + + + + + + + + + +Popp, et. al. Standards Track [Page 39] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +B.4 Level 4 (Transient Failure) Codes + + 4.0.0 -- Something undefined caused a persistent transient failure. + + 4.1.0 -- There was an error in the query that made it unable to be + interpreted. + + 4.2.0 -- The query was to complex + The query as specified was too complex for this Service to handle. + + 4.2.1 -- The Service was too busy + Due to resource constraints, the entire service is too busy to + handle requests. This means that any of the Servers cooperating + in providing this Service would have also returned this same + message. + + 4.2.2 -- The Server is in maintenance + This server is now in maintenance mode. Try another server from + this service or try again at a later time. + + 4.2.3 -- The Server had an internal error + There was an internal error that caused the server to fail + completely. + +B.5 Level 5 (Permanent Failures) Codes. + + 5.0.0 -- Something undefined caused a permanent failure. + + 5.1.0 -- The query permanently failed. + + 5.2.0 -- The service had a permanent failure. + + 5.2.1 -- This Service is no longer available. + This Service has decided to no longer make itself available. + + 5.2.2 -- The Server had a permanent failure. + This server has permanently failed. Try another server from this + service. + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 40] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +Authors' Addresses + + Nico Popp + VeriSign, Inc. + 487 East Middlefield Road + Mountain View, CA 94043 + + Phone: (650) 426-3291 + EMail: npopp@verisign.com + + + Michael Mealling + VeriSign, Inc. + 21345 Ridgetop Circle + Sterling, VA 20166 + US + + EMail: michael@verisignlabs.com + + + Marshall Moseley + Netword, Inc. + 702 Russell Avenue + Gaithersburg, MD 20877-2606 + US + + Phone: (240) 631-1100 + EMail: marshall@netword.com + + + + + + + + + + + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 41] + +RFC 3367 Common Name Resolution Protocol (CNRP) August 2002 + + +Full Copyright Statement + + Copyright (C) The Internet Society (2002). All Rights Reserved. + + This document and translations of it may be copied and furnished to + others, and derivative works that comment on or otherwise explain it + or assist in its implementation may be prepared, copied, published + and distributed, in whole or in part, without restriction of any + kind, provided that the above copyright notice and this paragraph are + included on all such copies and derivative works. However, this + document itself may not be modified in any way, such as by removing + the copyright notice or references to the Internet Society or other + Internet organizations, except as needed for the purpose of + developing Internet standards in which case the procedures for + copyrights defined in the Internet Standards process must be + followed, or as required to translate it into languages other than + English. + + The limited permissions granted above are perpetual and will not be + revoked by the Internet Society or its successors or assigns. + + This document and the information contained herein is provided on an + "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING + TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION + HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF + MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. + +Acknowledgement + + Funding for the RFC Editor function is currently provided by the + Internet Society. + + + + + + + + + + + + + + + + + + + +Popp, et. al. Standards Track [Page 42] + |