Creating schemas for other people's namespaces - what can you do and what can't you do?

For whatever reason, some W3C WGs, as well as possibly other standards
setting organisations, do not provide normative schemas for their
specifications but, instead, simply define things that belong to a certain
namespace in text. In some cases non-normative schemas are provided but in
others no schemas are provided at all.
 
This leaves those trying to implement those standards with the task of
creating their own schemas, particularly in the case where no schemas are
provided at all by the authors of the specification/owners of the namespace
in question. I would like to share an example of this and the consequences
of so doing with this group so as to gain input on a) best practice and b)
anything even more rigorous than "best practice" that might apply when faced
with this situation.
 
Specifically the questions I seek input on are as follows:
 
1) Should implementers of specifications that do not provide normative
schemas for the namespaces they define confine themselves rigorously to
those things that are explicitly defined by the specification in question
2) Should specification authors provide NORMATIVE schemas for any namespaces
that their specifications define so as to avoid any possibility of
incompatible/non-interoperable implementations resulting.
 
To provide detailed background for this discussion lets take a specific
example - the case of the W3C XML Linking Language (XLink) 1.0 specification
- see http://www.w3.org/TR/xlink/
 
This specification defines the namespace http://www.w3.org/1999/xlink - see
http://www.w3.org/TR/xlink/#att-method and in doing so states "XLink's
namespace provides global attributes for use on elements that are in any
arbitrary namespace. The global attributes are type, href, role, arcrole,
title, show, actuate, label, from, and to." There is nothing in the
specification that defines anything else as belonging to this namespace.
 
Now, as users have attempted to implement this standard they have taken
various approaches. Let us look at a couple.
 
XBRL (www.xbrl.org) has defined a schema as follows (a non-normative version
is available at http://www.xbrl.org/2003/xlink-2003-12-31.xsd ):
 

xlink-2003-12-31.xsd (normative)


<?xml version="1.0" encoding="UTF-8"?>

<!-- (c) XBRL International. See www.xbrl.org/legal -->

<schema targetNamespace="http://www.w3.org/1999/xlink" 

  xmlns:xlink="http://www.w3.org/1999/xlink" 

  xmlns="http://www.w3.org/2001/XMLSchema" 

  elementFormDefault="qualified"

  attributeFormDefault="qualified">

  

  <annotation>

    <documentation>

    XLink attribute specification

    </documentation>

  </annotation>

  

  <simpleType name="nonEmptyURI">

    <annotation>

      <documentation>

      A URI type with a minimum length of 1 character.

      Used on role and arcrole and href elements.

      </documentation>

    </annotation>

    <restriction base="anyURI">

      <minLength value="1"/>

    </restriction>

  </simpleType>

  

  <simpleType name="typeEnum">

    <annotation>

      <documentation>

    Enumeration of values for the type attribute

    </documentation>

    </annotation>

    <restriction base="string">

      <enumeration value="simple"/>

      <enumeration value="extended"/>

      <enumeration value="locator"/>

      <enumeration value="arc"/>

      <enumeration value="resource"/>

      <enumeration value="title"/>

    </restriction>

  </simpleType>

 

  <attributeGroup name="simpleType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="simple"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <attributeGroup name="extendedType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="extended"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <attributeGroup name="locatorType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="locator"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <attributeGroup name="arcType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="arc"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <attributeGroup name="resourceType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="resource"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <attributeGroup name="titleType">

    <attribute name="type" use="required">

      <simpleType>

        <restriction base="token">

          <enumeration value="title"/>

        </restriction>

      </simpleType>

    </attribute>

  </attributeGroup>

 

  <simpleType name="showEnum">

    <annotation>

      <documentation>

      Enumeration of values for the show attribute

      </documentation>

    </annotation>

    <restriction base="string">

      <enumeration value="new"/>

      <enumeration value="replace"/>

      <enumeration value="embed"/>

      <enumeration value="other"/>

      <enumeration value="none"/>

    </restriction>

  </simpleType>

 

  <simpleType name="actuateEnum">

    <annotation>

      <documentation>

      Enumeration of values for the actuate attribute

      </documentation>

    </annotation>

    <restriction base="string">

      <enumeration value="onLoad"/>

      <enumeration value="onRequest"/>

      <enumeration value="other"/>

      <enumeration value="none"/>

    </restriction>

  </simpleType>

  

  <attribute name="type" type="xlink:typeEnum"/>

  <attribute name="role" type="xlink:nonEmptyURI"/>

  <attribute name="arcrole" type="xlink:nonEmptyURI"/>

  <attribute name="title" type="string"/>

  <attribute name="show" type="xlink:showEnum"/>

  <attribute name="actuate" type="xlink:actuateEnum"/>

  <attribute name="label" type="NCName"/>

  <attribute name="from" type="NCName"/>

  <attribute name="to" type="NCName"/>

  <attribute name="href" type="anyURI"/>

  

</schema>

 
and this is complemented by a schema in an xbrl owned namespace as follows
(non-normative version is available at
http://www.xbrl.org/2003/xl-2003-12-31.xsd ):
 

xl-2003-12-31.xsd (normative)


<?xml version="1.0" encoding="UTF-8"?>

<!-- (c) XBRL International.  See www.xbrl.org/legal -->

<schema targetNamespace="http://www.xbrl.org/2003/XLink" 

  xmlns:xlink="http://www.w3.org/1999/xlink" 

  xmlns:xl="http://www.xbrl.org/2003/XLink" 

  xmlns="http://www.w3.org/2001/XMLSchema" 

  elementFormDefault="qualified" 

  attributeFormDefault="unqualified">

 

  <import namespace="http://www.w3.org/1999/xlink"
schemaLocation="xlink-2003-12-31.xsd"/>

 

  <complexType name="documentationType">

    <annotation>

      <documentation>

      Element type to use for documentation of 

      extended links and linkbases.

      </documentation>

    </annotation>

    <simpleContent>

      <extension base="string">

        <anyAttribute namespace="##other" processContents="lax"/>

      </extension>

    </simpleContent>

  </complexType>

 

  <element name="documentation" type="xl:documentationType" abstract="true">

    <annotation>

      <documentation>

      Abstract element to use for documentation of 

      extended links and linkbases.

      </documentation>

    </annotation>

  </element>

  

  <annotation>

    <documentation>

    XBRL simple and extended link schema constructs

    </documentation>

  </annotation>

  

  <complexType name="titleType">

    <annotation>

      <documentation>

      Type for the abstract title element - 

      used as a title element template.

      </documentation>

    </annotation>

    <complexContent>

      <restriction base="anyType">

        <attributeGroup ref="xlink:titleType"/>

      </restriction>

    </complexContent>

  </complexType>

  <element name="title" type="xl:titleType" abstract="true">

    <annotation>

      <documentation>

      Generic title element for use in extended link documentation.

      Used on extended links, arcs, locators.

      See http://www.w3.org/TR/xlink/#title-element for details.

      </documentation>

    </annotation>

  </element>

 

  <complexType name="locatorType">

    <annotation>

      <documentation>

      Generic locator type.

      </documentation>

    </annotation>

    <complexContent>

      <restriction base="anyType">

        <sequence>

          <element ref="xl:title" minOccurs="0" maxOccurs="unbounded" />

        </sequence>

        <attributeGroup ref="xlink:locatorType"/>

        <attribute ref="xlink:href" use="required" />

        <attribute ref="xlink:label" use="required" />

        <attribute ref="xlink:role" use="optional" />

        <attribute ref="xlink:title" use="optional" />

      </restriction>

    </complexContent>

  </complexType>

  <element name="locator" type="xl:locatorType" abstract="true">

    <annotation>

      <documentation>

      Abstract locator element to be used as head of locator substitution
group

      for all extended link locators in XBRL.

      </documentation>

    </annotation>

  </element>

 

  <simpleType name="useEnum">

    <annotation>

      <documentation>

      Enumerated values for the use attribute on extended link arcs.

      </documentation>

    </annotation>

    <restriction base="NMTOKEN">

      <enumeration value="optional" />

      <enumeration value="prohibited" />

    </restriction>

  </simpleType>

 

  <complexType name="arcType">

    <annotation>

      <documentation>

      basic extended link arc type - extended where necessary for specific
arcs

      Extends the generic arc type by adding use, priority and order
attributes.

      </documentation>

    </annotation>

    <complexContent>

      <restriction base="anyType">

        <sequence>

          <element ref="xl:title" minOccurs="0" maxOccurs="unbounded" />

        </sequence>

        <attributeGroup ref="xlink:arcType"/>

        <attribute ref="xlink:from" use="required" />

        <attribute ref="xlink:to" use="required" />

        <attribute ref="xlink:arcrole" use="required" />

        <attribute ref="xlink:title" use="optional" />

        <attribute ref="xlink:show" use="optional" />

        <attribute ref="xlink:actuate" use="optional" />

        <attribute name="order" type="decimal" use="optional" />

        <attribute name="use" type="xl:useEnum" use="optional" />

        <attribute name="priority" type="integer" use="optional" />

        <anyAttribute namespace="##other" processContents="lax" />

      </restriction>

    </complexContent>

  </complexType>

  <element name="arc" type="xl:arcType" abstract="true">

    <annotation>

      <documentation>

      Abstract element to use as head of arc element substitution group.

      </documentation>

    </annotation>

  </element>

 

  <complexType name="resourceType">

    <annotation>

      <documentation>

      Generic type for the resource type element

      </documentation>

    </annotation>

    <complexContent mixed="true">

      <restriction base="anyType">  

        <attributeGroup ref="xlink:resourceType"/>

        <attribute ref="xlink:label" use="required" />

        <attribute ref="xlink:role" use="optional" />

        <attribute ref="xlink:title" use="optional" />

        <attribute name="id" type="ID" use="optional" />

      </restriction>

    </complexContent>

  </complexType>

  <element name="resource" type="xl:resourceType" abstract="true">

    <annotation>

      <documentation>

      Abstract element to use as head of resource element substitution
group.

      </documentation>

    </annotation>

  </element>

 

  <complexType name="extendedType">

    <annotation>

      <documentation>

      Generic extended link type

      </documentation>

    </annotation>

    <complexContent>

      <restriction base="anyType">

        <choice minOccurs="0" maxOccurs="unbounded">

          <element ref="xl:title" />

          <element ref="xl:documentation" />

          <element ref="xl:locator" />

          <element ref="xl:arc" />

          <element ref="xl:resource" />

        </choice>

        <attributeGroup ref="xlink:extendedType"/>

        <attribute ref="xlink:role" use="required" />

        <attribute ref="xlink:title" use="optional" />

        <attribute name="id" type="ID" use="optional" />

        <anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="lax"/>

      </restriction>

    </complexContent>

  </complexType>

  <element name="extended" type="xl:extendedType" abstract="true">

    <annotation>

      <documentation>

      Abstract extended link element at head of extended link substitution
group.

      </documentation>

    </annotation>

  </element>

 

  <complexType name="simpleType">

    <annotation>

      <documentation>

      Type for the simple links defined in XBRL

      </documentation>

    </annotation>

    <complexContent>

      <restriction base="anyType">

        <attributeGroup ref="xlink:simpleType"/>

        <attribute ref="xlink:href" use="required" />

        <attribute ref="xlink:arcrole" use="optional" />

        <attribute ref="xlink:role" use="optional" />

        <attribute ref="xlink:title" use="optional" />

        <attribute ref="xlink:show" use="optional" />

        <attribute ref="xlink:actuate" use="optional" />

        <anyAttribute namespace="http://www.w3.org/XML/1998/namespace"
processContents="lax"/>

      </restriction>

    </complexContent>

  </complexType>

  <element name="simple" type="xl:simpleType" abstract="true">

    <annotation>

      <documentation>

      The abstract element at the head of the simple link substitution
group.

      </documentation>

    </annotation>

  </element>

 

</schema>


These schemas do work nicely together and a few years of implementation
experience of the XBRL 2.1 Specification has shown them to be functional.
However, it is worth noting that there are things defined in the
http://www.w3.org/1999/xlink namespace that are nowhere mentioned in the
defining specification. Notably a set of global type declarations and some
attribute groups.
 
Now let us look at a schema produced by another standards body, the OASIS
CIQ Technical Committee
(http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ciq). In the
latest draft version of this specification, available from
http://tinyurl.com/qkcsb the http://www.w3.org/1999/xlink namespace has been
implemented as follows:
 
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 rel. 3 U ( <http://www.altova.com>
http://www.altova.com) by Ram Kumar -->
<!--This schema is a definition of xLink attributes that can be used for
linking and referencing Parties, Party Names and Addresses.-->
<!--See  <http://www.w3.org/XML/Linking> http://www.w3.org/XML/Linking for
more information on xLink-->
<!--Copyright 2005 OASIS CIQ TC-->
<xsd:schema xmlns:xsd=" <http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" xmlns:xlink="
<http://www.w3.org/1999/xlink> http://www.w3.org/1999/xlink"
targetNamespace=" <http://www.w3.org/1999/xlink>
http://www.w3.org/1999/xlink" elementFormDefault="qualified"
attributeFormDefault="qualified">
 <xsd:annotation>
  <xsd:documentation> 
  Specification Name: OASIS CIQ TC - xLink
  Description: Defines the W3C schema for establishing links between
entities
  Produced by: OASIS Customer Information Quality Technical Committee
  Version: 3.0  
  Status: Public Review Draft
  Copyright: W3C/OASIS
  Last Modified: 05 April 2006
  Last Modified by: Ram Kumar 
  NOTE: Do not modify this schema as it will break specifications
compatibility 
  </xsd:documentation>
 </xsd:annotation>
 <xsd:attributeGroup name="grLocator">
  <xsd:annotation>
   <xsd:documentation>Defines a set of attributes for an element of type
LOCATOR</xsd:documentation>
  </xsd:annotation>
  <xsd:attribute name="type" fixed="locator">
   <xsd:annotation>
    <xsd:documentation>Indicates this a xLink 'locator'
element</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="href" type="xsd:anyURI">
   <xsd:annotation>
    <xsd:documentation>Identifies the remote resource or its location. E.g.
a full URL to the resource or a #some_id for local resources with xml:id
attribute.</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="grResource">
  <xsd:annotation>
   <xsd:documentation>Defines a set of attributes for an element of type
RESOURCE</xsd:documentation>
  </xsd:annotation>
  <xsd:attribute name="type" fixed="resource">
   <xsd:annotation>
    <xsd:documentation>Indicates this a xLink 'resource'
element</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="label" type="xsd:NMTOKEN">
   <xsd:annotation>
    <xsd:documentation>An identifier of an element of type 'resource' or
'locator'. The identifier is used by xlink:from and
xlink:to</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="grLocatorOrResource">
  <xsd:annotation>
   <xsd:documentation>Defines a set of attributes for an element of type
LOCATOR (href is required) or RESOURCE (href is ignored)</xsd:documentation>
  </xsd:annotation>
  <xsd:attribute name="type">
   <xsd:annotation>
    <xsd:documentation>Indicates the type of the element for linking
purposes as per the enumeration.</xsd:documentation>
   </xsd:annotation>
   <xsd:simpleType>
    <xsd:restriction base="xsd:NMTOKEN">
     <xsd:enumeration value="locator"/>
     <xsd:enumeration value="resource"/>
    </xsd:restriction>
   </xsd:simpleType>
  </xsd:attribute>
  <xsd:attribute name="label" type="xsd:NMTOKEN">
   <xsd:annotation>
    <xsd:documentation>An identifier of an element of type 'resource' or
'locator'. The identifier is used by xlink:from and
xlink:to</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="href" type="xsd:anyURI">
   <xsd:annotation>
    <xsd:documentation>Identifies the remote resource or its location. E.g.
a full URL to the resource or a #some_id for local resources with xml:id
attribute.</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
 <xsd:attributeGroup name="grArc">
  <xsd:annotation>
   <xsd:documentation>Defines a set of attributes for an element of type
ARC</xsd:documentation>
  </xsd:annotation>
  <xsd:attribute name="type" fixed="arc">
   <xsd:annotation>
    <xsd:documentation>Indicates this is a xLink 'arc'
element</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="arcrole" type="xsd:anyURI">
   <xsd:annotation>
    <xsd:documentation>Identifies the relationship type between elements
referenced by FROM and TO.</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="from" type="xsd:NMTOKEN">
   <xsd:annotation>
    <xsd:documentation>Points at an element of xlink:type='resource' or
'locator' from any namespace within the same addressable XML where
xlink:label has a matching value</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="to" type="xsd:NMTOKEN">
   <xsd:annotation>
    <xsd:documentation>Points at an element of xlink:type='resource' or
'locator' from any namespace within the same addressable XML where
xlink:label has a matching value</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
  <xsd:attribute name="title" type="xsd:string">
   <xsd:annotation>
    <xsd:documentation>A human-readable description of the
relationship</xsd:documentation>
   </xsd:annotation>
  </xsd:attribute>
 </xsd:attributeGroup>
</xsd:schema>

Here we have a DIFFERENT set of attribute groups that have been added to
this namespace such as grResource, grLocatororResource. Not only that but
the definitions   <xsd:attribute name="to" type="xsd:NMTOKEN">,
<xsd:attribute name="from" type="xsd:NMTOKEN"> and <xsd:attribute
name="label" type="xsd:NMTOKEN"> use NMTOKEN for these traversal attributes
whereas these are defined in the text at
http://www.w3.org/TR/xlink/#traversal-atts as being NCName.
 
 
When we come to use these two systems together we encounter a namespace
clash given the differeing implementations and the additions made
independently to the namespace.
 
So - if we were to reorganise the XBRL schemas as follows:
 
<?xml version="1.0" encoding="UTF-8"?>
<!-- (c) XBRL International.  See  <http://www.xbrl.org/legal>
www.xbrl.org/legal  
 
This is a test of a minimal implementation of the
<http://www.w3.org/1999/xlink> http://www.w3.org/1999/xlink namespace
 
This is not an official XBRL International schema
 
-->
<schema targetNamespace=" <http://www.w3.org/1999/xlink>
http://www.w3.org/1999/xlink" 
  xmlns:xlink=" <http://www.w3.org/1999/xlink> http://www.w3.org/1999/xlink"

  xmlns=" <http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified"
  attributeFormDefault="qualified">
  
  <annotation>
    <documentation>
    XLink attribute specification
    </documentation>
  </annotation>
  
   
  <attribute name="type">
    <simpleType>
     <annotation>
       <documentation>
     Enumeration of values for the type attribute
     </documentation>
     </annotation>
     <restriction base="string">
       <enumeration value="simple"/>
       <enumeration value="extended"/>
       <enumeration value="locator"/>
       <enumeration value="arc"/>
       <enumeration value="resource"/>
       <enumeration value="title"/>
     </restriction>
   </simpleType>
  </attribute>
  
  <attribute name="role">
    <simpleType>
     <annotation>
       <documentation>
       A URI with a minimum length of 1 character.
       </documentation>
     </annotation>
     <restriction base="anyURI">
       <minLength value="1"/>
     </restriction>
  </simpleType>
  </attribute>
 
  <attribute name="arcrole">
      <simpleType>
     <annotation>
       <documentation>
       A URI with a minimum length of 1 character.
       </documentation>
     </annotation>
     <restriction base="anyURI">
       <minLength value="1"/>
     </restriction>
  </simpleType>
  </attribute>
 
  <attribute name="title" type="string"/>
  
  <attribute name="show">
    <simpleType>
     <annotation>
       <documentation>
       Enumeration of values for the show attribute
       </documentation>
     </annotation>
     <restriction base="string">
       <enumeration value="new"/>
       <enumeration value="replace"/>
       <enumeration value="embed"/>
       <enumeration value="other"/>
       <enumeration value="none"/>
     </restriction>
   </simpleType>
 </attribute>
 
  <attribute name="actuate">
    <simpleType>
    <annotation>
      <documentation>
      Enumeration of values for the actuate attribute
      </documentation>
    </annotation>
    <restriction base="string">
      <enumeration value="onLoad"/>
      <enumeration value="onRequest"/>
      <enumeration value="other"/>
      <enumeration value="none"/>
    </restriction>
  </simpleType>
 </attribute>
 
  <attribute name="label" type="NCName"/>
  
  <attribute name="from" type="NCName"/>
  
  <attribute name="to" type="NCName"/>
  
  <attribute name="href" type="anyURI"/>
  
</schema>

 
and
 
 
<?xml version="1.0" encoding="UTF-8"?>
<!-- (c) XBRL International.  See  <http://www.xbrl.org/legal>
www.xbrl.org/legal  
 
This is a test of implementing the  <http://www.xbrl.org/2003/XLink>
http://www.xbrl.org/2003/XLink namespace using
only a minimal implementation of the  <http://www.w3.org/1999/xlink>
http://www.w3.org/1999/xlink namespace which
restricts itself to defining the attributes specified in the XLink 1.0
specification
 
This is not an official XBRL International schema
 
-->
<schema targetNamespace=" <http://www.xbrl.org/2003/XLink>
http://www.xbrl.org/2003/XLink" 
  xmlns:xlink=" <http://www.w3.org/1999/xlink> http://www.w3.org/1999/xlink"

  xmlns:xl=" <http://www.xbrl.org/2003/XLink>
http://www.xbrl.org/2003/XLink" 
  xmlns=" <http://www.w3.org/2001/XMLSchema>
http://www.w3.org/2001/XMLSchema" 
  elementFormDefault="qualified" 
  attributeFormDefault="unqualified">
 
  <import namespace=" <http://www.w3.org/1999/xlink>
http://www.w3.org/1999/xlink"
schemaLocation="xlink-2003-12-31-revised.xsd"/>
 
  <complexType name="documentationType">
    <annotation>
      <documentation>
      Element type to use for documentation of 
      extended links and linkbases.
      </documentation>
    </annotation>
    <simpleContent>
      <extension base="string">
        <anyAttribute namespace="##other" processContents="lax"/>
      </extension>
    </simpleContent>
  </complexType>
 
  <element name="documentation" type="xl:documentationType" abstract="true">
    <annotation>
      <documentation>
      Abstract element to use for documentation of 
      extended links and linkbases.
      </documentation>
    </annotation>
  </element>
  
  <annotation>
    <documentation>
    XBRL simple and extended link schema constructs
    </documentation>
  </annotation>
  
  <complexType name="titleType">
    <annotation>
      <documentation>
      Type for the abstract title element - 
      used as a title element template.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="anyType">
     <attribute ref="xlink:type" use="required" fixed="title"/>
      </restriction>
    </complexContent>
  </complexType>
  <element name="title" type="xl:titleType" abstract="true">
    <annotation>
      <documentation>
      Generic title element for use in extended link documentation.
      Used on extended links, arcs, locators.
      See  <http://www.w3.org/TR/xlink/#title-element>
http://www.w3.org/TR/xlink/#title-element for details.
      </documentation>
    </annotation>
  </element>
 
  <complexType name="locatorType">
    <annotation>
      <documentation>
      Generic locator type.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="anyType">
        <sequence>
          <element ref="xl:title" minOccurs="0" maxOccurs="unbounded" />
        </sequence>
    <attribute ref="xlink:type" use="required" fixed="locator"/>
        <attribute ref="xlink:href" use="required" />
        <attribute ref="xlink:label" use="required" />
        <attribute ref="xlink:role" use="optional" />
        <attribute ref="xlink:title" use="optional" />
      </restriction>
    </complexContent>
  </complexType>
  <element name="locator" type="xl:locatorType" abstract="true">
    <annotation>
      <documentation>
      Abstract locator element to be used as head of locator substitution
group
      for all extended link locators in XBRL.
      </documentation>
    </annotation>
  </element>
 
  <simpleType name="useEnum">
    <annotation>
      <documentation>
      Enumerated values for the use attribute on extended link arcs.
      </documentation>
    </annotation>
    <restriction base="NMTOKEN">
      <enumeration value="optional" />
      <enumeration value="prohibited" />
    </restriction>
  </simpleType>
 
  <complexType name="arcType">
    <annotation>
      <documentation>
      basic extended link arc type - extended where necessary for specific
arcs
      Extends the generic arc type by adding use, priority and order
attributes.
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="anyType">
        <sequence>
          <element ref="xl:title" minOccurs="0" maxOccurs="unbounded" />
        </sequence>
        <attribute ref="xlink:type" use="required" fixed="arc"/>
        <attribute ref="xlink:from" use="required" />
        <attribute ref="xlink:to" use="required" />
        <attribute ref="xlink:arcrole" use="required" />
        <attribute ref="xlink:title" use="optional" />
        <attribute ref="xlink:show" use="optional" />
        <attribute ref="xlink:actuate" use="optional" />
        <attribute name="order" type="decimal" use="optional" />
        <attribute name="use" type="xl:useEnum" use="optional" />
        <attribute name="priority" type="integer" use="optional" />
        <anyAttribute namespace="##other" processContents="lax" />
      </restriction>
    </complexContent>
  </complexType>
  <element name="arc" type="xl:arcType" abstract="true">
    <annotation>
      <documentation>
      Abstract element to use as head of arc element substitution group.
      </documentation>
    </annotation>
  </element>
 
  <complexType name="resourceType">
    <annotation>
      <documentation>
      Generic type for the resource type element
      </documentation>
    </annotation>
    <complexContent mixed="true">
      <restriction base="anyType">  
    <attribute ref="xlink:type" use="required" fixed="resource"/>
        <attribute ref="xlink:label" use="required" />
        <attribute ref="xlink:role" use="optional" />
        <attribute ref="xlink:title" use="optional" />
        <attribute name="id" type="ID" use="optional" />
      </restriction>
    </complexContent>
  </complexType>
  <element name="resource" type="xl:resourceType" abstract="true">
    <annotation>
      <documentation>
      Abstract element to use as head of resource element substitution
group.
      </documentation>
    </annotation>
  </element>
 
  <complexType name="extendedType">
    <annotation>
      <documentation>
      Generic extended link type
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="anyType">
        <choice minOccurs="0" maxOccurs="unbounded">
          <element ref="xl:title" />
          <element ref="xl:documentation" />
          <element ref="xl:locator" />
          <element ref="xl:arc" />
          <element ref="xl:resource" />
        </choice>
    <attribute ref="xlink:type" use="required" fixed="extended"/>
        <attribute ref="xlink:role" use="required" />
        <attribute ref="xlink:title" use="optional" />
        <attribute name="id" type="ID" use="optional" />
        <anyAttribute namespace=" <http://www.w3.org/XML/1998/namespace>
http://www.w3.org/XML/1998/namespace" processContents="lax"/>
      </restriction>
    </complexContent>
  </complexType>
  <element name="extended" type="xl:extendedType" abstract="true">
    <annotation>
      <documentation>
      Abstract extended link element at head of extended link substitution
group.
      </documentation>
    </annotation>
  </element>
 
  <complexType name="simpleType">
    <annotation>
      <documentation>
      Type for the simple links defined in XBRL
      </documentation>
    </annotation>
    <complexContent>
      <restriction base="anyType">
        <attribute ref="xlink:type" use="required" fixed="simple"/>
        <attribute ref="xlink:href" use="required" />
        <attribute ref="xlink:arcrole" use="optional" />
        <attribute ref="xlink:role" use="optional" />
        <attribute ref="xlink:title" use="optional" />
        <attribute ref="xlink:show" use="optional" />
        <attribute ref="xlink:actuate" use="optional" />
        <anyAttribute namespace=" <http://www.w3.org/XML/1998/namespace>
http://www.w3.org/XML/1998/namespace" processContents="lax"/>
      </restriction>
    </complexContent>
  </complexType>
  <element name="simple" type="xl:simpleType" abstract="true">
    <annotation>
      <documentation>
      The abstract element at the head of the simple link substitution
group.
      </documentation>
    </annotation>
  </element>
 
</schema>

 
Then we have created a schema for the http://www.w3.org/1999/xlink that
confines itself to those things specified in the relevant specification,
thus avoiding any incompatibility problems IF others do the same. Of course,
if the WG had made this a normative schema in the first place we wouldn't be
having this issue.
 
As just one more point on this - the XLinking WG has been working on version
1.1 of the specification and in this they have created a non-normative
schema which seems to be a step in the right direction. Comments posted by
David vun Kannon at
http://lists.w3.org/Archives/Public/www-xml-linking-comments/2006AprJun/0002
.html (pointing out that they have made the same mistake as the CIQ folks in
respect of the NMTOKEN vs. NCName for traversal attributes) and myself at
http://lists.w3.org/Archives/Public/www-xml-linking-comments/2006AprJun/0007
.html raising the interoperability question vis à vis normative schemas have
received no response and so I am bringing the issue to a wider audience of
the XML cognoscenti to seek broader input.
 
Thanks for your time and apologies for the length of this e-mail.
 
Hugh Wallis

Received on Monday, 19 June 2006 15:38:53 UTC