Re: [urn] -14
Keith Moore <moore@network-heretics.com> Tue, 03 November 2015 06:40 UTC
Return-Path: <moore@network-heretics.com>
X-Original-To: urn@ietfa.amsl.com
Delivered-To: urn@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 02D211B2E5E for <urn@ietfa.amsl.com>; Mon, 2 Nov 2015 22:40:12 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.6
X-Spam-Level:
X-Spam-Status: No, score=-2.6 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OSUy6JgsM6bZ for <urn@ietfa.amsl.com>; Mon, 2 Nov 2015 22:40:07 -0800 (PST)
Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 280D71B2E43 for <urn@ietf.org>; Mon, 2 Nov 2015 22:40:06 -0800 (PST)
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.nyi.internal (Postfix) with ESMTP id 1AFB5209A3 for <urn@ietf.org>; Tue, 3 Nov 2015 01:40:06 -0500 (EST)
Received: from frontend1 ([10.202.2.160]) by compute2.internal (MEProxy); Tue, 03 Nov 2015 01:40:06 -0500
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-sasl-enc:x-sasl-enc; s=smtpout; bh=LWbRQ3dGiyYzTtJ ysHJxQ9ffnL8=; b=i1BpZ67ilLUfT/x7RFTaYNqWDSbv5gfLDSVCiMQ9zYaAEcf BFpEceg+cJ/L/FnbwiZq3eJ4RwBlVP79P8fk1P/oLTUc63hpk8WyCYTxurljhifm 0O8SGGDchRKNfDinvcnGWT4Zks5UN5VV5FicdiNDFCcIeJwh0pVhG47bJmGI=
X-Sasl-enc: uaHTbsLAtBMrNsS0NvIm2HVsJBnWlsvyyxufDNNbHHAs 1446532805
Received: from [192.168.1.66] (108-221-180-15.lightspeed.knvltn.sbcglobal.net [108.221.180.15]) by mail.messagingengine.com (Postfix) with ESMTPA id 7B262C016F3; Tue, 3 Nov 2015 01:40:05 -0500 (EST)
To: John C Klensin <john-ietf@jck.com>, urn@ietf.org
References: <5636A2E2.90209@andyet.net> <5636A50D.3000700@gmail.com> <5636D564.8060009@network-heretics.com> <5636D7DD.2040906@andyet.net> <5636DAB2.8000002@network-heretics.com> <59AFC6A08A3B43A19489BFA9@JcK-HP8200.jck.com> <56376110.90203@network-heretics.com> <A026F3D1D65116E66514EDAA@JcK-HP8200.jck.com>
From: Keith Moore <moore@network-heretics.com>
Message-ID: <563856A9.6020509@network-heretics.com>
Date: Tue, 03 Nov 2015 01:39:37 -0500
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:38.0) Gecko/20100101 Thunderbird/38.3.0
MIME-Version: 1.0
In-Reply-To: <A026F3D1D65116E66514EDAA@JcK-HP8200.jck.com>
Content-Type: text/plain; charset="windows-1252"; format="flowed"
Content-Transfer-Encoding: 7bit
Archived-At: <http://mailarchive.ietf.org/arch/msg/urn/T6RznU4ISUUlbvKll-EDvPjgxY8>
Subject: Re: [urn] -14
X-BeenThere: urn@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: Revisions to URN RFCs <urn.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/urn>, <mailto:urn-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/urn/>
List-Post: <mailto:urn@ietf.org>
List-Help: <mailto:urn-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/urn>, <mailto:urn-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 03 Nov 2015 06:40:12 -0000
On 11/02/2015 10:37 AM, John C Klensin wrote: > > --On Monday, November 02, 2015 08:11 -0500 Keith Moore > <moore@network-heretics.com> wrote: > >> ... >>> I mostly agree with that too, but I think we need to be >>> careful and reasonable. Perfection is impossible and not >>> every detail is important (hugely or not) and I would hope >>> that any "this needs to be fully specified and/or fixed >>> before the document(s) can go into WGLC" statements would be >>> accompanied by an explanation for that particular case as to >>> why. In particular, if there are things we are going to >>> leave to the discretion and needs of individual namespaces (I >>> think, given the nature of URNs, that is inevitable and >>> consistent with 2141 and earlier documents), then it is >>> important to be clear about the boundary but anything we say >>> beyond that has to be in the form of non-normative examples. >> It's that kind of language that makes me worry. I am very >> skeptical that leaving things to "the discretion and needs of >> individual namespaces" is at all appropriate. It is >> essential that clients be able to process URNs without having >> to know details about specific namespaces. Saying we can >> leave things to namespace discretion seems basically like a >> failure to do our job in creating a standard. > This is precisely the kind of disagreement (whether apparent or > real) that I think needs to be exposed, discussed, resolved, and > then taken sufficiently off the table that attempts to reopen it > are strongly resisted by the WG. If we are to make progress, > that is true independent of which of us are correct. Naming is inherently a difficult topic to discuss because (as computer scientists like to say) all problems can be solved by adding another layer of indirection. It follows that any time someone proposes a new kind of name, particularly something as vaguely defined as "uniform resource name", anyone can imagine his particular problem being addressed by that naming and indirection scheme. What seems to have happened for the entire history of URN discussions is that different participants each imagined URNs addressing the particular problem that he or she wanted to solve. As long as the URN definition focused entirely on syntax and "persistence" (vaguely defined), the conflicts between those goals were not exposed. But as soon as we talk about resolution, the conflicts rear their ugly heads. Some would like to finesse those conflicts by simply declaring resolution a namespace-dependent behavior. I don't think that accomplishes anything because it doesn't facilitate interoperability. If we can't define URN standards with sufficient precision to permit interoperability, what's the point of this effort? I believe that we can do so, otherwise I wouldn't be investing time in this. I should define what I mean by interoperability in this space. A few things that immediately come to mind: a) interoperability across namespaces - a client that supports operations on URNs should be able to support those operations for URNs of any namespace, as long as resolution services for the namespace adhere to one of a hopefully-small number of standards, and those resolution services are advertised and accessible to the client. b) interoperability across clients - if two standards-conforming clients both support URNs, they should behave similarly when given the same URN and the same request for use of that URN (whether specified in the r-component of that URN, by context, or by some other means). c) interoperability across resolution services - it should be possible to design a resolution service protocol that serves the needs of most if not all NIDs, and also possible to implement a server for that protocol that serves the needs of most if not all NIDs. This, to me, implies that namespace-specific behavior should be kept to a minimum, or at least, that it should be possible for a client to implement common operations without relying on either specific knowledge of namespaces or nonstandard features of resolution services. If there are additional operations that are possible by exploiting such namespace-specific knowledge or nonstandard features, that's not a catastrophe especially if it there is a path that facilitates standardization of the necessary features. > Now, let me be sure that I understand what you are suggesting. > If a "client" has to be able to "process URNs without having to > know details about specific namespaces", that means to me that > one cannot have per-namespace "resolvers" or resolution > mechanisms, i.e., that, if any URN is resolvable, all URNs must > be, and that there must be a generic resolution mechanism that > works for all URNs and that, moreover, that there be no > namespace-specific resolution machinery to be applied for any > namespace after that generic resolution mechanism does its job. I don't believe that. In particular, I expect to have a DDDS-like database, that is distributed by various means (not necessarily or specifically DNS), that advertises (namespace-id, protocol, service-URL) tuples, where protocol is an IANA-registered URN resolution protocol identifier, and service-URL specifies how to contact the resolution service (the details can be protocol-specific). If DDDS is insufficient for this, replace it. But even if DDDS has some specific flaws, the core idea of distributing this database over the network is sound. (And maybe we need those tuples to be slightly more elaborate, or to be a different data structure, in order to facilitate earlier matching of resolution services with the assigned portion of URNs and the requested services. So this is more of a concept than a proposal. I'm trying to avoid having to draft protocol specifications for both the database and the resolution services just to answer this email.) > That, in turn, suggests to me that, from the following > category-descriptions, one can have valid URNs in only one of > them, not all three (or others) I don't believe this either. A resolution service advertised by the above means should be able to return both URLs of resource locations (when applicable) and various kinds of metadata about the resource (when applicable). > My impression was that the WG agreed to the validity of all of > those three casss as URNs long ago, at least for the second and > third probably about the time we decided that DDDS was _a_ way > to resolve _some_ URNs but not a necessary element of a generic > URN system. Well, of course _some_ URNs aren't resolvable, or even intended to be resolvable. So any time you ask a resolution service about a particular URN, one of the potential answers can always be "I don't know anything about that URN". The existence of a resolution service for a namespace doesn't assure that all URNs from that namespace are resolvable. > However, one doesn't even need to look to 2141bis and history > since 2141 (May 1997) or 2483 (January 1999) to have that > per-namespace problem. > > urn:ISSN:1046-8188 (from RFC 3044 Section 3.1) treats the NSS > at the identifier within the ISSN namespace but > > urn:example:sha-1:29ead03e784b2f636a23ffff95ed12b56e2f2637 > (RFC 6963, Section 5) involves a "sub-namespace" that much be > interpreted differently at some point rather than viewing the > NSS as atomic. Presumably urn:ISSN:foobar:9999-9999 would be > considered a syntax error. At least something > namespace-specific would want to reject it rather than passing > it on to some resolution machinery. URNs namespaces have always been able to have structure within the NSS. Also, each namespace has always been able to define its own particular syntax for its NSSs, and also particular equivalence rules for its NSSs. I'm not proposing to change those decisions. But it's not strictly necessary to advertise each namespace's structure, syntax, and equivalence rules to every client. If a client queries a resolution service about a URN that happens to be invalid, the resolution service can say "I don't know anything about that URN". Or it can say "that URN is malformed" if it knows enough to say that. Or it can say "I can't answer your query, but I can refer your query to resolution service X which should have specific information about that URN". Similarly, a client could ask a resolution service whether two URNs from the same namespace were equivalent according to that namespace's rules. As an optimization, some information about the structure of an NSS or how its queries are delegated, or the equivalence rules for a namespace could be advertised by some means. This might reduce load on the resolution servers. In the 1990s, we tried using regular expression rewrite rules to advertise those sorts of things; today we might try a different approach. Worst case, the namespace database could advertise a separate javascript library for each namespace that could be called to pick apart delegation structure and/or determine equivalence. It's not my favorite approach (and might even have more pitfalls than NAPTR records) but I'm open to considering different ways of doing it. > Because of that, I think 2141 itself works iff one uses generic > URN processing to identify the NID and then passes the NSS off > to an NID-family-specific processor (I say "family" because I > don't believe we will have, or should have, separate processors > for each NID even though I expect the total number of processors > will be much larger than one). I hope the total number of resolution protocols will be small, though I never expect it to be one. There can of course be a great many resolution services, both for redundancy and to serve multiple NIDs or subspaces within an NID. > > Now, if you agree with the above, I've very confused about what > you are talking about or where the boundaries lie. In > particular... > >> I do accept that different resolution services will probably >> recognize somewhat different sets of r-parameter facets and >> offer somewhat different kinds of metadata, if for no other >> reason than that these need to be able to evolve over time. >> But I don't think this is a namespace-specific attribute, but >> rather an attribute of the resolution service. > Again, that completely confuses me, at least in part because I > think that a generic URN processor can be expected to do only > three things: > > (i) Parse the namestring, identifying the elements of > <namestring> and <assigned-name>.[1] > > (ii) Try to find an appropriate resolution service based > on the NID. If it cannot find one, do something > reasonable [2]. > > (iii) If it can, identify a resolution service that it > understands [3], pass the NSS, and any of q-component, > r-component, and maybe f-component that are present, > to the resolution service [4]. I disagree that these are the only things that a generic URN client can be expected to do. I agree that (i) and (ii) are reasonable expectations. Beyond those things, I think a generic URN client should be able to (iv) request URLs that represent locations of the resource named by the URN (which will be returned by the resolution service only if the request is applicable to that kind of resource, the resolution service has the information, etc.) (v) obtain the content of the resource named by the URN (again, when applicable for the resource named by the URN, when a resolution service has that information). (vi) learn about the kinds of metadata that are available for that URN (vii) obtain any specific kind of metadata that is available for the URN This implies that the client needs to be able to parse the r-component to determine the type of service being requested, as well as any constraints that the r-component imposes on resource content. It's also possible to have a conflict between a service requested in an r-component and the service that's implied by the context in which the URN appears, so clients may need to detect some of those conflicts. I also disagree significantly about (iii). Neither the q-component nor the f-component should be passed to a resolution service UNLESS, perhaps, the resolution service is being requested to return the resource content - and even then, passing the f-component is dubious. You really don't want the resolution service trying to interpret q-component or f-component. It strikes me as the worst kind of layering violation, because it blurs an otherwise clean separation between the responsibilities of a URN namespace and the responsibilities of the resource owner/maintainer. (I'm also skeptical that resolution services should ever be entrusted to return resource content, though I recognize that there are probably corner cases for which this makes sense.) > Note that the above implies that the semantics and within-string > syntax of r-component and the handling of q-component are mostly > the problem of the resolution service. r-component - mostly but (unfortunately) not entirely. q-component - it's not for the resolution service at all, but exclusively for use by the named resource. > Because we expect the > resolution service to digest r-components, we don't need to be > as specific about its within-string syntax as we do about > q-component (or f-component), which, at least as I understand > our definitions so far, we expect to be passed more or less > intact from the resolution service. I believe we do need to be somewhat specific about r-components because clients will need to digest them to some degree. q-components and f-components should never be passed to the resolution service. > >> Can you cite examples of things that need to be left to >> namespace discretion? > Whether the namespace is resolved at all. I think I see your point, though I believe private "resolution" services will be very important. (Call them something other than resolution services if you want, but they should support the same protocols and operations.) So the namespace can decide whether or not it wants to advertise "authoritative" resolution services, but it can't forbid private resolution. > Whether sub-namespaces are allowed. Sure, each namespace determines the structure of its NSS (including whether there is any). Though I find myself wondering whether you're talking about NSS structure or delegation structure, which don't have to be along the same lines. > Whether q-component and/or f-components are consider valid. Disagree. Whether q-component is valid depends on the type of resource being named and/or the protocol being used to access it. A namespace can elect to not assign names to any resources for which a q-component could possibly be valid (e.g. it could only assign names to paper books or physical sound recording media), or it could elect to not return any URLs which support query syntax. But the meaning of the q-component is namespace independent, and it's important that this be made clear. Similarly, the meaning of the f-component is entirely dependent on the media type of the resource and the content itself, and is not within the purview of the namespace to define. Even if a namespace refuses to assign any of its names to any resources that contain fragment identifiers, there are fragments that are meaningful even in the absence of fragment identifiers in the resource content. For better or worse, this is the web architecture, and we aren't going to change that. > Whether r-components are accepted and what syntax and semantics they have. Disagree. R-components need to be standardized, at least in broad terms, because clients need to be able to interpret them to some degree. Furthermore, it appears that clients may need to be able to add r-components to URNs in order to request the services that they need (e.g. to get resource content or URLs or metadata) in the absence of an explicit request in the r-component. And even though there might inevitably be a need for some namespace-specific requests that can be included in an r-component, resolution services will need to support a "common core" of r-component requests and semantics. > (i) Parse the namestring, identifying the elements of > <namestring> and <assigned-name>.[1] > [1] Given the way URIs are defined, this is actually a rather > difficult problem because, whether there are generic URI parsers > or not, there is really no such thing as a generic URI (or even > URN) resolver that can encounter and generically report error > states. If I put "http:[[]]" into an href, any standardized > error-handling is part of the HTML spec (very much scheme and > content-specific) not part of either 3986 or, IIR, the http > spec. I hope we don't have a URK in our future named "fail" > whose hier-part is unspecified but might be an error message or > code, which it would be one way to deal with putative URNs that > cannot be parsed. Especially if we need to be as specific as I > gather you want (and as my instincts tell me will probably be > necessary), I don't see how to avoid saying something about this > in 2141bis but don't, at the moment, know what to say. I'm not sure what you're saying here. A URI parser might not be able to detect every possible kind of syntax error in a URI, but it can certainly detect some kinds of errors. That parser can do no more (and should do no less) than to pass the error indication to its caller. What the caller does with that error is up to either the protocol specification being implemented by that caller, or to the implementation itself. If some kinds of syntax errors effectively get interpreted by the caller as "resource not found", that's perhaps unfortunate, but it shouldn't preclude a parser reporting more precise errors just in case some caller will handle them intelligently. Anyway, having written generic URI parsers that seemed to be sufficient to the task, I don't really see the problem here. > (ii) Try to find an appropriate resolution service based > on the NID. If it cannot find one, do something > reasonable [2]. > > [2] This is obviously a mess. It is the mess that NAPTR and > DDDS were intended to solve by creating a DNS-based indirection > mechanism for binding resolution mechanisms for NIDs, but that > has failed to achieve wide adoption and the WG (and the DDDS > specs themselves) have decided that not all URNs are required to > be bound to DDDS. Maybe that was a mistake, but the horse has > left the barn and vanished over the horizon. Even when DDDS was being hashed out, I don't recall anyone who expected all URNs to be required to be bound to DDDS. It wasn't a mistake, it was simply a consequence of other decisions and painfully-acquired understanding, e.g. (a) URNs weren't only to be used for network-accessible resources; (b) even among network-accessible resources, there would always be URNs that you couldn't resolve without access rights (and some for which the existence of the resource wouldn't even be acknowledged without access rights -- if I recall correctly Ron Daniel argued this quite convincingly); (c) some URN namespaces which we thought desirable simply didn't lend themselves to centralized collection of either locations or metadata. Also, many of us realized that DDDS was more of a proof-of-concept than anything else. We hoped we could get something deployed enough to show what could be done with URNs even though we realized that if it were successful, it would have to either evolve or be replaced. Also, even though the DNS realization of DDDS was the most obvious one, DDDS is not and was not intended to be specific to DNS. > I'm sure, based on > experience, that "look the NID up in the IANA registry in real > time" is not going to be acceptable operationally (even if there > were no other issues). Well, no, not if we're using the current IANA servers that are only provisioned and maintained according to current expectations. But we should all know better than to assume that. I imagine that IANA would maintain the registry but not run the equivalent of the root servers for real-time lookup of NID space. There are other ways of distributing that information than having IANA provide the service directly. For example, it could outsource that via a large-scale DNS service provider if DNS were still used to advertise that information (which is perhaps not the best possible way, but certainly not the worst, and probably can be made sufficient). Alternatively, it could provide the top-level NID-to-service mapping information to the public on a rate-limited basis - anyone could get the information but the response would be slow enough that no client implementation would want to use it to do the lookup in real time. Publishers of software using URNs could obtain the information and distribute the information to their customers via normal software update channels. I'm not saying I have the best answer right off the bat. I am saying that arguments of the form "DDDS failed, therefore no net-based distribution of the NID mapping information can work" don't seem to have much merit. At the very least, they need more detail and/or supporting evidence to be convincing. > The result is that I don't see any > alternative to doing some handwaving around "find a resolver > based on the NID and do something intelligent if you can't find > one" and then either assuming that "can't find resolver with a > reasonable amount of effort" means "this NID does not resolve" > or "need to return some sort of 'fail' indication". That makes > me _very_ unhappy but, given where we have gotten, I'm having > trouble figuring out alternatives that do not require inventing > a somewhat more general and flexible successor to DDDS and > insisting that all URNs be able to use it. For reasons alluded to above, failure will always be a possible outcome where URN lookup is concerned. I don't know why that should bother us, because while we expected that URNs could be used to name (almost) anything, we never expected to be able to build an oracle that could find every resource that could possibly be named. So: general and flexible successor to DDDS - yes; insisting that all URNs be able to use it - no. Maybe insisting that it be potentially applicable to most namespaces is a reasonable goal, but we can't force namespaces to operate or advertise resolution services or even recommend some services operated by others. And even if every applicable namespace operated a resolution service, they won't necessarily be able to populate their services with information about every URN assigned under their namespace (again, because of confidentiality requirements). > > [4] If we were modeling a process, rather than syntax and (at > least some) semantics, we could specify the difference between > > generic-engine CALLS NID-resolver(NSS, r-component) > GETS BACK <string> > CONSTRUCTS (string, decoded-q-component, f-component) > and returns that to wherever it goes > > and > > generic-engine CALLS NID-resolver(NSS, r-component, > q-component, f-component) > GETS BACK a string that includes q-component and > f-component as appropriate > and returns that to wherever it goes > > with "string" in both cases being more or less the hier-part of > a URL for case (b) (and I don't know how to think about (a) and > (c), much less others). > > But we can't so, if we are are going to define a generic > resolution service, we are going to need to define what it can > return and probably the operations it performs to get there. I > don't think we can do that for the reasons that make the three > different URN cases identified above as (a), (b), and (c) (and > others) important. I don't see the problem. I think the NID-resolver gets called with the assigned-portion of the URN + the r-component, plus perhaps some additional client-supplied parameters indicating what the client wants and/or what protocol(s) and result data models the client supports (or maybe the client modifies the r-component to include its request). I think the NID-resolver returns either: - an error indication, - a redirect, - one of the types of result documents expected/requested by the client, which depending on the request might be a list of URLs, or a set of metadata, - or maybe even the resource content itself (though maybe that's a bad idea). So to me the resolution service is fairly simple in concept and can be defined as some HTTP FORM parameters: ?urn=urn:example:foo??some-r-component&request_type=xxx&result_types=(aaa,bbb,ccc) Of course, working out the details of the result documents and how the various kinds of results relate to one another is a huge task, though I expect that librarians and archivists are well along this path already. IETF will do well enough to establish a protocol framework, some basic request types, an IANA registry for result types, a generic syntax for r-components, and an IANA registry for r-component facet names. Defining client behavior is a bit trickier, because the client will need to handle several different scenarios in order to do what the user or requesting resource wants. To get resource content it might need to consult multiple resolution services, follow redirects, first get a list of URLs and then try to find one of those that satisfies its selection criteria (French language, PDF format). It might find that the requested resource isn't available but there is a related resource that is available (later version, HTML format instead), and determine whether that resource is acceptable. In some cases it can ask the user; in other cases it will have to decide based on predetermined preferences and/or heuristics. Keith
- [urn] -14 Peter Saint-Andre
- Re: [urn] -14 Melinda Shore
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Peter Saint-Andre
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 Peter Saint-Andre
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 Andrew Newton
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 Sean Leonard
- Re: [urn] -14 Julian Reschke
- Re: [urn] -14 Julian Reschke
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Andrew Newton
- Re: [urn] -14 Keith Moore
- Re: [urn] -14 Hakala, Juha E
- Re: [urn] -14 John C Klensin
- Re: [urn] -14 Andrew Newton
- Re: [urn] -14 Keith Moore