Re: [regext] Final review of draft-ietf-regext-org-06

"Gould, James" <jgould@verisign.com> Mon, 21 May 2018 13:40 UTC

Return-Path: <jgould@verisign.com>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 928361270A3 for <regext@ietfa.amsl.com>; Mon, 21 May 2018 06:40:51 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -4.29
X-Spam-Level:
X-Spam-Status: No, score=-4.29 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_MED=-2.3, SPF_PASS=-0.001, T_FILL_THIS_FORM_SHORT=0.01] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=verisign.com
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 9P3sVB8SrgOc for <regext@ietfa.amsl.com>; Mon, 21 May 2018 06:40:47 -0700 (PDT)
Received: from mail1.verisign.com (mail1.verisign.com [72.13.63.30]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 2188B127076 for <regext@ietf.org>; Mon, 21 May 2018 06:40:47 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=verisign.com; l=128974; q=dns/txt; s=VRSN; t=1526910047; h=from:to:date:message-id:references:in-reply-to: mime-version:subject; bh=iWhY12GJm7JMQ/iKa3mL32HxyFBQohGHW0PJlzrhFLs=; b=mBfpvxkeoqz1Cv2QQC9X4NbOXuoDNPfrYlC6zk8BZ0CyHGGZcPgDh8dW U071wYezUqlw3ApV6UV9a98k04wIZFc+T1tF4p+q2HM62Ns/JVbT5snJe pqtM/NH98ondNmxvF8xzSNo44SQBLV2/YGiCRvgXTWz3NictIkqcrp3ER QTSXQS6jemiy+b+6DVgS7FezFBWqYcguYxrMtzgjkAFN2nzvwYt2F/r1b Y8QZVNykzqH9iRHoD5ZgldbsodNtF3o95a2WACga1BUGBWPq9nR1dz0S4 VwS8xVOthWsjaOoROQ5f5Aj/ixZoR3EPCGsbv+Qs/BF6hi4SE2j1kHw/X A==;
X-IronPort-AV: E=Sophos;i="5.49,426,1520899200"; d="png'150?scan'150,208,217,150";a="6735472"
IronPort-PHdr: 9a23:f0WkaB9FAs0j0v9uRHKM819IXTAuvvDOBiVQ1KB+0+oUIJqq85mqBkHD//Il1AaPAd2Araocw8Pt8InYEVQa5piAtH1QOLdtbDQizfssogo7HcSeAlf6JvO5JwYzHcBFSUM3tyrjaRsdF8nxfUDdrWOv5jAOBBr/KRB1JuPoEYLOksi7ze+/94HdbglSmDaxfa55IQmrownWqsQYm5ZpJLwryhvOrHtIeuBWyn1tKFmOgRvy5dq+8YB6/ShItP0v68BPUaPhf6QlVrNYFygpM3o05MLwqxbOSxaE62YGXWUXlhpIBBXF7A3/U5zsvCb2qvZx1S+HNsDtU7s6RSqt4LtqSB/wiScIKTg58H3MisdtiK5XuQ+tqwBjz4LRZoyeKfhwcb7Hfd4CRWRPQNtfVzBPDI2/YYsADeQOPedEoIbyvFYOtweyBQy2Ce/z0DJFhHn71rA63eQ7FgHG2RQtE9wPvnTTsdX1MLodXfiox6fM1zrDau1Z2Szz5IPVdR0ho/6MXbVtccrV1EYiDB3FgUuKqYzkJDOV1+sNs26B4+V8UuKvjncqpgdsqTahwccsj5PGhoMTyl3c6yV23pw1JdyjSE56bt6kFoFcuD2dN4tzWs8iXX9nuDw7yr0duJ67cy4KyJUhxxHDcfCIb4+I4hf7WOaQPzh4mHxldKi4hxao/kitzPD3WMqs0FtSsyZJjsPAum0P2hHd8MSLV/tw80m71TuA0w3e7PxPL1oumqrBMZEhx6Y9lp8UsUveACD7gF72jKqKdkU8/eio9vjnbq3mppCCM490jRnzP7kylMKnHOg3MhAAUWea9uigyrHv51P5T6lNjv0siqnVqorVKtkBqq6nGQ9VyYAj5wyjADeh1dQUhXgHLFRbdxKbl4XlJk3CLOrlAfq9jVmgiipnyvDIM7H7DZjAKmDPkLL7crZ8705cxhAzzdda559MCLEBL/XzWlL1tNPFFRI5LRK7w/zmCNVm14MeVmSPDrWFP6PVtF+E/vgvLPWUZI8JpDb9LOAo5+bvjXAnhV8SY7Op0YEJaH+iGPRpPluWYWLtgtcdDWcFoBEzQ/HsiF2ZSjFceXKyX6095jEmDYKqF5zMSZ61irybwCi7BoFWZnxBCl2UC3fnaYqEVOkDaSKOOcJhkyILVaSvS4M70hGurgD6mPJbKb/s+yAEuIir6tFz6+DLlA0u+HQgF8WQz2yXCX99mG8FXz4qwK1XrUpmwFqH3qllhrpSGIoXr7lTXwg3JYL0zuFmBZb1QA2LNoOTRVmrUsmOADwtQJQ22dBYMGhnHND3xD/Ewi6mR/c3nrmGH9Z8pqDT2GX1K+5jxmzHz6guiR8tRc4ZZj7uvbJ26wWGX92BqE6ejav/MP1EhCM=
X-IPAS-Result: A2FWAABwywJb/zGZrQpZAxoBAQEBAQIBAQEBCAEBAQGCTUeBEIElCoNriASObIEPgWeRTxSBKRckCAECIwuEPgIagiA0GAECAQEBAQEBAgEBAoEEDII1JAEOSyEIATIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEIAggHNRIBARgBAQEBAwUBFAEIAggBQAQXAgEGAhEDAQIGAQEBGAEJAgICBRABDgwdCAIEAREBBgiDFAKCDotKm0OCHIRYg2eCAA8JAYoAPoEPI4JpgxEBAQIBgSoBEgEHAiILCQEmgjkwgiQCiCeDeYkWgxYDBgKFGAFPglWHTz6LCIdOghGGcQICAgIEBQIUgSUcgRpxcBU7KgGCGAmCFxeDRYUUhT5vAQELI41NgR+BGAEB
Received: from BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) by BRN1WNEX02.vcorp.ad.vrsn.com (10.173.153.49) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1466.3; Mon, 21 May 2018 09:40:43 -0400
Received: from BRN1WNEXCAS01.vcorp.ad.vrsn.com (10.173.152.205) by BRN1WNEX01.vcorp.ad.vrsn.com (10.173.153.48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1466.3 via Frontend Transport; Mon, 21 May 2018 09:40:43 -0400
Received: from BRN1WNEXMBX01.vcorp.ad.vrsn.com ([::1]) by brn1wnexcas01.vcorp.ad.vrsn.com ([::1]) with mapi id 14.03.0301.000; Mon, 21 May 2018 09:40:43 -0400
From: "Gould, James" <jgould@verisign.com>
To: Pieter Vandepitte <pieter.vandepitte@dnsbelgium.be>, "regext@ietf.org" <regext@ietf.org>
Thread-Topic: [EXTERNAL] [regext] Final review of draft-ietf-regext-org-06
Thread-Index: AQHT77Bp3Fc3l21BWkCvvW63SMuol6Q6Mz4A
Date: Mon, 21 May 2018 13:40:42 +0000
Message-ID: <887D9DD8-85BC-4BFB-A637-2EED0E35FF07@verisign.com>
References: <E833D336-8BA0-4EF5-ACF1-87CB3E0F9F63@dnsbelgium.be>
In-Reply-To: <E833D336-8BA0-4EF5-ACF1-87CB3E0F9F63@dnsbelgium.be>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: yes
X-MS-TNEF-Correlator:
user-agent: Microsoft-MacOutlook/10.d.0.180513
x-originating-ip: [10.173.153.49]
Content-Type: multipart/related; boundary="_004_887D9DD885BC4BFBA6372EED0E35FF07verisigncom_"; type="multipart/alternative"
MIME-Version: 1.0
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/CgG0hJbjAaK3FyNf93gGD3VvzO0>
Subject: Re: [regext] Final review of draft-ietf-regext-org-06
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Mon, 21 May 2018 13:40:52 -0000

Pieter,

Thanks for doing the detailed review.  I’ll let Linlin comment on the proposed wording changes.  I have feedback on some of the items below:


===

3.4<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.4>.  Organization Status Values

I think you forgot to specify that

"linked" status MUST NOT be combined with either "clientLinkProhibited" or "serverLinkProhibited" status.

Or is this in case you want to block linking while there are still links? If so, it's useful to specify this:

A client or server MAY combine linked with either clientLinkProhibited or serverLinkProhibited if new links must be prohibited [...]


The purpose of the [client/server]LinkProhibited statuses are to prohibit additional links without impacting the existing links, so you second proposal would be the most appropriate.


===

3.5<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.5>.  Role Status Values

[…]

o  ok: This is the normal status value for an role that has no
      pending operations or prohibitions.  This value is set and removed
      by the server as other status values are added or removed.

⇒ There are no pending statuses for role statuses, so remove that part

Also here, I think you forgot to specify that

"linked" status MUST NOT be combined with either "clientLinkProhibited" or "serverLinkedProhibited" status.

This is related to the proposal on 3.4 above.  There is no need for the sentence “"linked" status MUST NOT be combined with either "clientLinkProhibited" or "serverLinkedProhibited" status.” since the [client/server]LinkProhibited statuses only prohibit future links.


4.1.2<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-4.1.2>.  EPP <info> Command

Should we mention what happens in case the querying client is not the sponsoring client, or is too much policy?

Yes, I believe that returning the organization object and what organization object attributes to return is up to server policy.  Maybe it makes sense to add a sentence related to it being up to server policy.

[…]
   When an <info> command has been processed successfully, the EPP
   <resData> element MUST contain a child <org:infData> element that
   identifies the organization namespace.  The <org:infData> element
   contains the following child elements:
[…]
   o  Zero or more <org:status> elements that contains the operational
      status of the organization, as defined in Section 3.4<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.4>.

⇒ this conflicts with the XML schema and 3.4, which states:
   An organization object MUST always have at least one associated
   status value.  The default value is "ok".

I agree that it should it should be “One or more <org:status> elements...” to match the XML schema.

 4.2.5<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-4.2.5>. EPP <update> Command
[...]
Zero or more <org:role> elements that contains the role type, role
      statuses and optional role id of the organization

In my opinion the draft is still vague about which role sub-element of role is used for matching the role to be removed (I guess it is the role type, as it is the only required element). I would mention that:

E.g. in secDNS it is mentioned very explicit;

      The <secDNS:keyData> element is part of the Key Data Interface and
      is used to uniquely define the key data to be removed, by using
      all four elements -- <secDNS:flags>, <secDNS:protocol>, <secDNS:
      alg>, and <secDNS:pubKey> -- that are guaranteed to be unique.
      There can be more than one DS record created for each key, so
      removing a key could remove more than one DS record.

The role type is what is unique for the organization’s role.  There cannot be duplicate role types for an organization.  It would be clearer to specify “A <org:type> element contains the role type of the organization, as defined in Section 3.2.  The role type uniquely identifies the role to update.”.

Good instructions for how to remove a contact, I would also add these instructies to parentId, voice, fax email and url:
An empty <org:___> element is supported to allow a type of
      ___ to be removed

===

Maybe it would be best to adopt the language from IETF-98 “Contact Postal Info Elements Discussion”, which included the proposal:


  1.  The <contact:chg> sub-elements do have replace semantics

     *   Existing sub-element data deleted first and then set with updated data.

  1.  <contact:postalInfo> types treated independently

     *   Exclusion of a <contact:postalInfo> type does not implicitely delete it.

  1.  <contact:postalInfo> type deleted via empty element

     *   <contact:postalInfo type=”int/> or <contact:postalInfo type=”loc”/>

The elements supported by the <org:add> and <org:rem> are the list elements <org:contact>, <org:role>, and <org:status>.  The individual attributes (postalInfo can be considered two separate attributes “int” and “loc”) are updated using the <org:chg>.  Maybe the introduction sentence “An OPTIONAL <org:chg> element containing the following element, where at least one child element MUST be present”, can be revised to clarify how the simple elements and complex child elements added, updated, or removed via the <org:chg> element.  How about something like “An OPTIONAL <org:chg> element used to add, update, and delete non-list organization attributes.  An empty <org:chg> sub-element (<org:parentId>, <org:voice>, <org:fax>, <org:email>, and <org:url>, <org:postalInfo> with “type” attribute) is used to remove it and a non-empty sub-element is used to replace it.  For the <org:postalInfo> complex sub-element, the types (“int” and “loc”) are treated independently with replace semantics, where the <org:postalInfo> sub-element data is deleted first and then set with the update data.  The <org:chg> element MUST contain one of the following child elements:”.

There is one big item with my proposal in supporting the removal of the simple <org:postalInfo> sub-elements using empty elements in that the XSD does not support empty elements with the following type definitions:


  1.  parentId - eppcom:clIDType

     *     <simpleType name="clIDType">
     *       <restriction base="token">
     *         <minLength value="3"/>
     *         <maxLength value="16"/>
     *       </restriction>
     *     </simpleType>

  1.  voice – org: e164Type

     *     <complexType name="e164Type">
     *               <simpleContent>
     *                 <extension base="org:e164StringType">
     *                           <attribute name="x" type="token" />
     *                 </extension>
     *               </simpleContent>
     *     </complexType>
     *     <simpleType name="e164StringType">
     *               <restriction base="token">
     *                 <pattern value="(\+[0-9]{1,3}\.[0-9]{1,14})?" />
     *                 <maxLength value="17" />
     *               </restriction>
     *     </simpleType>

  1.  fax – org:e164Type

     *   Same as voice

  1.  email – eppcom:minTokenType

     *     <simpleType name="minTokenType">
     *       <restriction base="token">
     *         <minLength value="1"/>
     *       </restriction>
     *     </simpleType>

  1.  url – anyURI

     *   Does support empty element

The alternative is to make removal explicit with the <org:rem> element by supporting a list of empty elements to remove instead of using the <org:chg> element with empty elements.  For example, the <org:rem> element can support removing elements from the list attributes and can be used to remove the non-list attributes with empty elements (<org:parentId>, <org:voice>, <org:fax>, <org:email>, and <org:url>, <org:postalInfo> with “type” attribute).  This is different from the semantics for RFC 5733.  If this is the case, should the <org:add> element only be capable of adding list items or should it be used to add non-existing attributes.

Thoughts?


===

Shouldn't we have a section like RFC 5731, 5732, 5733 regarding offline review of requested actions?

===

Yes, that makes sense.

===

Do we need to remove the Change Log section?

===

The change log will get removed prior to publication by the RFC Editor.

===

XSD maxOccurs opinion:

<element name="status"
            type="org:statusType" maxOccurs="9"/>

Why 9? I would set this to unbounded. A client may send an org create with 10 times clientDeleteProbited. It should just work.

I thought the same thing, but if you do the math, the maximum number of unique statuses is 9.  The statuses are unique and there should be no duplicates.  If you look at the RFC 5733, the statuses are defined with a maximum, which is being mirrored here based on the unique set of organization statuses.


===

XSD sequence anti pattern


we keep on copying old XML schema's, and hence, for data structures we keep on using xsd:sequence (ordered) instead of xsd:choice. If order is not important (which is the case in this draft and a lot of other RFCs), don't enforce it. It makes implementation and testing often unnecessarily harder.

I don’t view the use of XSD sequence as an anti pattern.  I believe the sequence makes implementation and testing easier and not harder.


===

Model issue: because org:name is part of org:postalInfo, and org:addr is also part of org:postalInfo but required, it is impossible create an organization with a name, but without address... I think this must be possible as this was one of the first discussions in the mailing list: reseller in a separate object vs. or simply add ID and name to a domain.

Proposal: move org:name to a higher level (it's not the name belonging to the address of the org, but the name belonging to the org itself)

How about simply making the addr element in the org:postalInfoType optional (minOccurs=”0”) and add OPTIONAL to the references to <org:addr> in the text?

—

JG

[cid:image001.png@01D255E2.EB933A30]

James Gould
Distinguished Engineer
jgould@Verisign.com

703-948-3271
12061 Bluemont Way
Reston, VA 20190

Verisign.com<http://verisigninc.com/>

From: regext <regext-bounces@ietf.org> on behalf of Pieter Vandepitte <pieter.vandepitte@dnsbelgium.be>
Date: Saturday, May 19, 2018 at 4:31 PM
To: "regext@ietf.org" <regext@ietf.org>
Subject: [EXTERNAL] [regext] Final review of draft-ietf-regext-org-06

Hi Linlin,

I did a review with a magnifying glass. Some things should really be fixed (or rather MUST be fixed), some others are opinionated.

I'm preparing a review of the draft-ietf-regext-org-ext-06 too, but that's for tomorrow

===

3.1<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.1>.  Organization Identifier
All EPP organizations are identified by a server-unique identifier.
   Organization identifiers are character strings with a specific
   minimum length, a specified maximum length, and a specified format.
   Organization identifiers use the "clIDType" client identifier syntax
   described in [RFC5730<https://tools.ietf.org/html/rfc5730>].  Its corresponding element is <org:id>.

I would use "specified" instead of "specific". This is more in line with other RFCs (domain and contact). It's also a specific length, format etc… but the emphasis is on the fact that it's all in the specs (hence specified).

===

3.2<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.2>.  Organization Roles
The organization roles are used to represent the relationship an
   organization would have.  Its corresponding element is <org:role>.

⇒ MUST instead of would

An organization object MUST always have at least one associated role. Roles can be set only by the client that
Sponsors an organization object. A client can change the role of an organization object using the EPP <update> command.

===

3.2.1<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.2.1>.  Role Type
An organization would support a list of roles.  See Section 7.3<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-7.3> for a
   list of values.  Its corresponding element is <org:type>.

I think the sentence is wrong. You should talk about role type, not about "list of roles"

An organization role MUST have a type. […]

===

3.2.2<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.2.2>.  Role Status
A role of an organization object would have its own statuses.  Its
   corresponding element is <org:status>.  The values of the role status
   are defined in Section 3.5<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.5>.

I'm not sure if "would" is the best word to use here.

An organization role MAY have a status. […]

===

3.4<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.4>.  Organization Status Values

I think you forgot to specify that

"linked" status MUST NOT be combined with either "clientLinkProhibited" or "serverLinkProhibited" status.

Or is this in case you want to block linking while there are still links? If so, it's useful to specify this:

A client or server MAY combine linked with either clientLinkProhibited or serverLinkProhibited if new links must be prohibited [...]

===

3.5<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.5>.  Role Status Values

[…]

o  ok: This is the normal status value for an role that has no
      pending operations or prohibitions.  This value is set and removed
      by the server as other status values are added or removed.

⇒ There are no pending statuses for role statuses, so remove that part

Also here, I think you forgot to specify that

"linked" status MUST NOT be combined with either "clientLinkProhibited" or "serverLinkedProhibited" status.

===

4.1.2<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-4.1.2>.  EPP <info> Command

Should we mention what happens in case the querying client is not the sponsoring client, or is too much policy?

And a bit lower:

[…]
   When an <info> command has been processed successfully, the EPP
   <resData> element MUST contain a child <org:infData> element that
   identifies the organization namespace.  The <org:infData> element
   contains the following child elements:
[…]
   o  Zero or more <org:status> elements that contains the operational
      status of the organization, as defined in Section 3.4<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-3.4>.

⇒ this conflicts with the XML schema and 3.4, which states:
   An organization object MUST always have at least one associated
   status value.  The default value is "ok".

===

 4.2.5<https://tools.ietf.org/html/draft-ietf-regext-org-06#section-4.2.5>. EPP <update> Command
[...]
Zero or more <org:role> elements that contains the role type, role
      statuses and optional role id of the organization

In my opinion the draft is still vague about which role sub-element of role is used for matching the role to be removed (I guess it is the role type, as it is the only required element). I would mention that:

E.g. in secDNS it is mentioned very explicit;

      The <secDNS:keyData> element is part of the Key Data Interface and
      is used to uniquely define the key data to be removed, by using
      all four elements -- <secDNS:flags>, <secDNS:protocol>, <secDNS:
      alg>, and <secDNS:pubKey> -- that are guaranteed to be unique.
      There can be more than one DS record created for each key, so
      removing a key could remove more than one DS record.

===

Good instructions for how to remove a contact, I would also add these instructies to parentId, voice, fax email and url:
An empty <org:___> element is supported to allow a type of
      ___ to be removed

===

From the examples, I guess that a role is removed by only matching the type (recall my comments on deleting roles, it must be obvious by reading the text, not by deducing that from the examples). This implies that there's only one role with a specific type allowed. Mention this in 3.2.1. : An organization MUST only have one role for a specific role type.

===

Shouldn't we have a section like RFC 5731, 5732, 5733 regarding offline review of requested actions?

===

Not sure if there is a legalese paragraph required in 5. Formal Syntax

===

6. Internationalization Considerations

   As an extension of the EPP organization object mapping, the elements
   and element content described in this document MUST inherit the
   internationalization conventions used to represent higher-layer
   domain and core protocol structures present in an XML instance that
   includes this extension.

⇒ This RFC is not an extension of itself. I would use the same text as in RFC 5733, especially regarding usage of date and time and the use of int and loc address info:

   All date-time values presented via EPP MUST be expressed in Universal
   Coordinated Time using the Gregorian calendar.  The XML Schema allows
   use of time zone identifiers to indicate offsets from the zero
   meridian, but this option MUST NOT be used with EPP.  The extended
   date-time form using upper case "T" and "Z" characters defined in
   [W3C.REC-xmlschema-2-20041028<https://tools.ietf.org/html/rfc5733#ref-W3C.REC-xmlschema-2-20041028>] MUST be used to represent date-time
   values, as the XML Schema does not support truncated date-time forms
   or lower case "T" and "Z" characters.
Humans, organizations, and other entities often need to represent
   social information in both a commonly understood character set and a
   locally optimized character set.  This specification provides
   features allowing representation of social information in both a
   subset of UTF-8 for broad readability and unrestricted UTF-8 for
   local optimization.

I personally have issues with the above claim that "int" - or US-ASCII - is commonly understood, but I can live with that for now ;-)  ( I hope in future drafts we can just simply drop the address type )

===

Do we need to remove the Change Log section?

===

XSD maxOccurs opinion:

<element name="status"
            type="org:statusType" maxOccurs="9"/>

Why 9? I would set this to unbounded. A client may send an org create with 10 times clientDeleteProbited. It should just work.

===

XSD sequence anti pattern


we keep on copying old XML schema's, and hence, for data structures we keep on using xsd:sequence (ordered) instead of xsd:choice. If order is not important (which is the case in this draft and a lot of other RFCs), don't enforce it. It makes implementation and testing often unnecessarily harder.

===

Model issue: because org:name is part of org:postalInfo, and org:addr is also part of org:postalInfo but required, it is impossible create an organization with a name, but without address... I think this must be possible as this was one of the first discussions in the mailing list: reseller in a separate object vs. or simply add ID and name to a domain.

Proposal: move org:name to a higher level (it's not the name belonging to the address of the org, but the name belonging to the org itself)

===



Kind regards

Pieter