Tim,

The type element value references a type definition in one of the namespaces 
defined at the top of the XML schema.  In the case of EPP RFC 5730, the 
<schema> element defines the namespaces:

<schema targetNamespace="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:epp="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns=”http://www.w3.org/2001/XMLSchema”
        elementFormDefault="qualified">

The “epp” element with <element name="epp" type="epp:eppType"/> references the 
eppType in the “epp” namespace that matches the targetNamespace, with the 
definition:

  <complexType name="eppType">
    <choice>
      <element name="greeting" type="epp:greetingType"/>
      <element name="hello"/>
      <element name="command" type="epp:commandType"/>
      <element name="response" type="epp:responseType"/>
      <element name="extension" type="epp:extAnyType"/>
    </choice>
  </complexType>


Another namespace could define the type eppType, such as the “eppcom” 
namespace, where the inclusion of the namespace in the type value enables the 
XML parser to know which type applies.  See later that this is referred to as a 
QName.


For your example:

<something xmlns:foo="urn:ietf:params:xml:ns:epp-1.0”><element name="epp" 
type=“foo:eppType”/>

This would work if the xmlns:foo is included in the <schema> element, like:

<schema targetNamespace="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:foo="urn:ietf:params:xml:ns:epp-1.0"
        xmlns:eppcom="urn:ietf:params:xml:ns:eppcom-1.0"
        xmlns=”http://www.w3.org/2001/XMLSchema”
        elementFormDefault="qualified">

<element name="epp" type=“foo:eppType”/>

  <complexType name="eppType">
    <choice>
      <element name="greeting" type="epp:greetingType"/>
      <element name="hello"/>
      <element name="command" type="epp:commandType"/>
      <element name="response" type="epp:responseType"/>
      <element name="extension" type="epp:extAnyType"/>
    </choice>
  </complexType>


In looking at https://www.w3.org/TR/xmlschema11-1/#Schemas, in states in 
section 3.17.2.1 “References to Schema Components”:

Reference to schema components from a schema document is managed in a uniform 
way, whether the component corresponds to an element information item from the 
same schema document or is imported (References to schema components across 
namespaces (<import>) 
(§4.2.6)<https://www.w3.org/TR/xmlschema11-1/#composition-schemaImport>) from 
an external schema (which may, but need not, correspond to an actual schema 
document). The form of all such references is a 
·QName·<https://www.w3.org/TR/xmlschema11-1/#gloss-QName>.

[Definition:]  A QName is a name with an optional namespace qualification, as 
defined in [XML Namespaces 
1.1]<https://www.w3.org/TR/xmlschema11-1/#ref-xml-namespaces-1.1>. When used in 
connection with the XML representation of schema components or references to 
them, this refers to the simple type 
QName<https://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/datatypes.html#QName>
 as defined in [XML Schema: 
Datatypes]<https://www.w3.org/TR/xmlschema11-1/#ref-xsp2>. For brevity, the 
term ·QName·<https://www.w3.org/TR/xmlschema11-1/#gloss-QName> is also used to 
refer to ·actual values·<https://www.w3.org/TR/xmlschema11-1/#key-vv> in the 
value space of the 
QName<https://www.w3.org/TR/2012/REC-xmlschema11-2-20120405/datatypes.html#QName>
 simple type, which are expanded 
names<https://www.w3.org/TR/2004/REC-xml-names11-20040204/#dt-expname> with a 
[Definition:]  local name and a [Definition:]  namespace name.

There are many examples in https://www.w3.org/TR/xmlschema11-1/#Schemas of the 
type attribute value referencing a namespace, such as the following examples:

<xs:attribute name="age" type="xs:positiveInteger" use="required"/>

<xs:element name="birthday" type="xs:date"/>

<xs:element name="facet" type="xs:facet" abstract="true"/>


--

JG

[cid87442*image001.png@01D960C5.C631DA40]

James Gould
Fellow Engineer
jgo...@verisign.com<applewebdata://13890C55-AAE8-4BF3-A6CE-B4BA42740803/jgo...@verisign.com>

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

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

From: Tim Bray <tb...@textuality.com>
Date: Friday, January 17, 2025 at 11:12 AM
To: James Gould <jgo...@verisign.com>
Cc: "m...@lowentropy.net" <m...@lowentropy.net>, "regext@ietf.org" 
<regext@ietf.org>, "drafts-expert-review-comm...@iana.org" 
<drafts-expert-review-comm...@iana.org>
Subject: [EXTERNAL] Re: [regext] Re: [IANA #1410981] expert review for 
draft-ietf-regext-epp-eai (xml-registry)


Caution: This email originated from outside the organization. Do not click 
links or open attachments unless you recognize the sender and know the content 
is safe.

On Jan 17, 2025 at 6:22:32 AM, "Gould, James" 
<jgo...@verisign.com<mailto:jgo...@verisign.com>> wrote:
Tim,

Thank you for the review.  In your note, is the concern that the namespace 
prefix is being used for the element name (e.g., “addlEmail”)?  I found similar 
definitions in the following EPP RFCs, which are broadly implemented:

•         EPP RFC 5730 with xmlns:epp="urn:ietf:params:xml:ns:epp-1.0" and 
<element name="epp" type="epp:eppType"/>.

No, the element name is fine, it’s the value of the “type” attribute that is 
troublesome.  The namespace prefix “epp" is really only designed to prefix 
element & attribute names, not to be used inside the element content or the 
attribute value.  There aren’t any standards (afaik) that require a standard 
off-the-shelf XML processor to make those prefix/URI mappings available.

For example, would you expect this to work?

<something xmlns:foo="urn:ietf:params:xml:ns:epp-1.0”><element name="epp" 
type=“foo:eppType”/>

I mean, it’s probably OK, enough people do this that most XML software can 
handle it. It’s just that as the designated XML pedant, I feel I should point 
out departures from the letter of the standard.

 -T

_______________________________________________
regext mailing list -- regext@ietf.org
To unsubscribe send an email to regext-le...@ietf.org

Reply via email to