Hi Pawel,

please find my comments inline prefixed with [ML].

Il 22/07/2025 18:23, Pawel Kowalik ha scritto:

Hi Mario,

Thanks for this update. The use of profiles would really make use of JSContact more feasible.

After reviewing the document I have few remarks, as indicated in today's IETF 123 WG session:

1) Some fields in the profile seems duplicated to other fields and I am not convinced we need them at all:

components    Name  -> we have full Name

[ML] It seems to me that you're referring to the EPP contact data model. However, while testing the implementation of an RDAP response validator, I discovered that some servers, particularly those in RIRs, only use the different format than the one used in EPP, or both.

For example, the response to the lookup query https://rdap.arin.net/registry/ip/199.0.0.0 returns both jCard n and fn elements.

In this case, I assumed that the property name was available and that the full name had been derived. Obviously, the structured name makes sense only for individuals.

full Address -> we have components of Address

[ML] Viceversa, here in the following examples where the postal address is represented only as an unstructured text.

https://rdap.arin.net/registry/ip/199.0.0.0 (again)

https://rdap.apnic.net/ip/133.0.0.0

https://rdap.db.ripe.net/ip/193.0.0.25

In these cases, I assumed that either only the unstructured postal address was available or mayve RIRs share the policy to display the full address (@Tom, @Jasdip you can shed a light here).

The above cases made me think that both formats should be allowed.

I think the list of available values for "kind" field of AddressComponent or "features" of Phone shall be limited by the profile and I will forward this feedback to the calsify WG, as I see this feature is now missing in the profiles draft.

[ML] Robert have already replied that we'll include this feature in the profiles draft.

2) 6.3. RDAP Reverse Search Mapping Registry

The draft is practically now proposing to replace the IANA entries, which actually make Property Path not covering the current expression of the contact as jCard.

I think either the proposed entries have to support both or list both in IANA. Other approach would be not to update IANA until the experiment is concluded.

[ML] The draft does not propose replacing existing entries for jCard elements, but rather adding new entries for JSContact properties.

Section 5 of RFC9536 allows a reverse search property to have multiple registered mappings.

3) 3.1.12. Map Keys

While I appreciate the predictability of labels in the map keys I am concerned about the choices made there.

The choice to have one special item of the map, like "email" and then "the rest" with a different notation "emails-1", "emails-2" etc. gives an impression that there is "primary" vs. "secondary" relation between the entries which might not exist or be even not wanted. I think having a uniform lists starting from 1, so just "email-1", "email-2" etc. The first item can be then always referred to using stable path $.emails.email-1.

One can argue, whether "<type>-" prefix is needed at all. Apart from "phones" map, all other carry the same kind of data, which could be also addressed by the numbers "1", "2", "3"...

[ML] As opposed to the answer above, it seems to me that you are not referring to the EPP contact data model.

The purpose to use specific map keys is multiple:

1) improve interoperability: almost all DNRs adopt the EPP contact data model so they handle a postal address, a email address, a voice number, a fax number. At most, they handle a language-dependent variant for some specific properties which in JSContact are represented via the localizations property.

2) simplify implementation: when keys are predefined, a JSON map can be deserialized into an object. Any unknown or additional members of a JSON map can be deserialized into a map member. For example, using the Jackson library annotations @JsonAnyGetter and @JsonAnySetter, the JSON "phones" map can be deserialized into the following "phones" object :

{

    Phone voice;

    Phone fax;

    Map<String,Phone> others;

    @JsonAnyGetter

    public Map<String,Phone> getOthers() { return others; }

    @JsonAySetter

    public void setOther(String key, Phone value) {

        if (others == null) others = new HashMap<>();

        others.putIfAbsent(key,value);

    }

}

3) speed up the retrieval: in the case of the example above, to get a fax number you don't have to iterate on the map items to look for the one including the "fax" feature.


That said, have no objection to removing the type from the additional keys, but I would keep the predefined keys.

After all, using only numbers as keys would still give the impression of sorting the entries by preference.

In contrast, JSContact uses maps to represent unordered collections, and preference order is passed via the pref property.

To avoid misunderstandings, I propose adding some text clarifying that the order of appearance of the map keys doesn't correspond to a preference order.

Would it be fine with you?

There is an interesting aspect of it which I think the draft should cover:

- whether these keys are stable? - meaning if "emails": { "1": "[email protected]", "2": "[email protected]" } can become "emails": { "1": "[email protected]", "2": "[email protected]" } on a consecutive request. Further, if the assumption would be that the keys won't change, whether after removing "[email protected]" would "[email protected]" stay at key "2" or then move to key "1".

Having these keys being not stable would technically make them having exactly same properties as an array, just with added complexity. This is only a side note, as I understand this is a design decision of JSContact, not the implementation decision for RDAP.

[ML] As I mentioned above, AFAIK in the large majority of cases, there is only one piece of information for each type. So there is no problem sorting the same information in a different order.

Nor I can imagine why a server should display the entries of a map in a different order for two subsequent queries.

On the other hand, I admit that map entries can change: they can be removed or replaced with other values (I'd argue that even in these cases maps work better than arrays because order matters in arrays not maps). However, using the predefined keys can still have advantages, e.g. if the fax number is removed, it's easy to discover that the "fax" key is missing and no fax number is available.

Additional note to that point is that some registry systems do not order these items in a deterministic way, so having a stable order may render hard to implement.

[ML] Having a stable order of values is not important. Registration data can be updated, so it's obvious that the property values of a JSContact representation in RDAP can change over time.

What really matters for both clients and servers is the stability of the propery names i.e. the keys.

Finally, having gaps in a theoretically continuous numbering has a minor data protection leak element as it reveals that some item was removed.

[ML] Does it match a real-world use case ? It doesn't seem so to me. The RDAP response is a snapshot of the information currenltly stored in the registriy database.

Don't think either servers or clients need to worry about preserving history.


Best,

Mario

Kind Regards,

Pawel

On 01.07.25 16:33, Mario Loffredo wrote:

Hi,

this version doesn't include support for the uid property as it refers to JSContact v2.0 which made uid optional (draft-ietf-calext-jscontact-uid <https://datatracker.ietf.org/doc/draft-ietf-calext-jscontact-uid/>).

Therefore, there is no longer any concern about the uid property being mandatory in RDAP.

It also includes  a section about registering the "rdap" JSContact profile (draft-ietf-calext-jscontact-profiles <https://datatracker.ietf.org/doc/draft-ietf-calext-jscontact-profiles/>).


Any feedback is appreciated.

Best,
Mario


-------- Messaggio Inoltrato --------
Oggetto:        [regext] I-D Action: draft-ietf-regext-rdap-jscontact-22.txt
Data:   Tue, 01 Jul 2025 07:14:48 -0700
Mittente:       [email protected]
Rispondi-a:     [email protected]
A:      [email protected]
CC:     [email protected]



Internet-Draft draft-ietf-regext-rdap-jscontact-22.txt is now available. It is a work item of the Registration Protocols Extensions (REGEXT) WG of the IETF.

Title: Using JSContact in Registration Data Access Protocol (RDAP) JSON Responses
Authors: Mario Loffredo
Gavin Brown
Name: draft-ietf-regext-rdap-jscontact-22.txt
Pages: 32
Dates: 2025-07-01

Abstract:

This document describes an RDAP extension which represents entity
contact information in JSON responses using JSContact.

The IETF datatracker status page for this Internet-Draft is:
https://datatracker.ietf.org/doc/draft-ietf-regext-rdap-jscontact/

There is also an HTMLized version available at:
https://datatracker.ietf.org/doc/html/draft-ietf-regext-rdap-jscontact-22

A diff from the previous version is available at:
https://author-tools.ietf.org/iddiff?url2=draft-ietf-regext-rdap-jscontact-22

Internet-Drafts are also available by rsync at:
rsync.ietf.org::internet-drafts


_______________________________________________
regext mailing list -- [email protected]
To unsubscribe send an email to [email protected]

_______________________________________________
regext mailing list [email protected]
To unsubscribe send an email [email protected]

--
Dott. Mario Loffredo
Senior Technologist
Technological Unit “Digital Innovation”
Institute of Informatics and Telematics (IIT)
National Research Council (CNR)
Address: Via G. Moruzzi 1, I-56124 PISA, Italy
Phone: +39.0503153497
Web:http://www.iit.cnr.it/mario.loffredo
_______________________________________________
regext mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to