OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

regrep message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Bug Fix to rim.xsd: Avoid xsi:type


Folks,

With help from Kohsuke Kawaguchi, an expert in XML Schema and Relax NG 
we have found a way to use XML Schema so that instance documents can 
avoid using xsi:type (type substitution).  Thanks Kohsuke for your help 
on ebXML Registry TC schema.

The change is minimal but it now allows our XML instance documents to 
look more natural and easier to understand.

Attached is a new proposed rim.xsd that refelects this change. Below is 
the diff showing how the file changed:

....

-  <element name="Association" type="tns:AssociationType1"/>
+  <element name="Association" type="tns:AssociationType1" 
substitutionGroup="tns:Identifiable"/>

....

-  <element name="AuditableEvent" type="tns:AuditableEventType"/>
+  <element name="AuditableEvent" type="tns:AuditableEventType" 
substitutionGroup="tns:Identifiable"/>

.....

-  <element name="ClassificationNode" type="tns:ClassificationNodeType"/>
+  <element name="ClassificationNode" type="tns:ClassificationNodeType" 
substitutionGroup="tns:Identifiable"/>
 
....

you get the idea.

We are adding substitutionGroup="tns:Identifiable" to element defs for 
RIM types derived from IdentifiableType.

This allows our instanvce docs to look like (note bold text in html 
capable mail viewer):

<SubmitObjectsRequest>
  <rim:RegistryObjectList>
    *<rim:ClassificationScheme* 
id="urn:uuid:7c07beae-c1c6-4a52-b1db-d3cf9b501b75" isInternal="true" 
nodeType="UniqueCode" objectType="ClassificationScheme">
      <rim:Name>
        <rim:LocalizedString charset="UTF-8" rim:lang="en-us" 
value="SubjectGroup"/>
      </rim:Name>
      <rim:Description>
        <rim:LocalizedString charset="UTF-8" rim:lang="en-us" 
value="Defines groups that may be used as subject groups in custom 
access control policies."/>
      </rim:Description>
    *</rim:ClassificationScheme>*
  </rim:RegistryObjectList>
</SubmitObjectsRequest>

Instead of the previous 2.5 form:

</SubmitObjectsRequest>
  <rim:RegistryObjectList>
    *<rim:Identifiable 
*id="urn:uuid:7c07beae-c1c6-4a52-b1db-d3cf9b501b75" isInternal="true" 
nodeType="UniqueCode" objectType="ClassificationScheme" 
*xsi:type="rim:ClassificationSchemeType"*>
      <rim:Name>
        <rim:LocalizedString charset="UTF-8" rim:lang="en-us" 
value="SubjectGroup"/>
      </rim:Name>
      <rim:Description>
        <rim:LocalizedString charset="UTF-8" rim:lang="en-us" 
value="Defines groups that may be used as subject groups in custom 
access control policies."/>
      </rim:Description>
    *</rim:Identifiable>*
  </rim:RegistryObjectList>
</SubmitObjectsRequest>

Summary of Proposal:

This simple proposal reverts our XML document syntax to the way it used 
to be before we added type substitution.
It is better to look at and understand. I consider this a minor bug fix 
and propose that we accept this for version 3.

Please let me know if you have any concerns.

-- 
Farrukh

<?xml version = "1.0" encoding = "UTF-8"?>
<!-- $Header: /cvsroot/ebxmlrr/ebxmlrr-spec/misc/2.5/schema/rim.xsd,v 1.7 2003/10/18 04:28:24 farrukh_najmi Exp $ -->
<schema targetNamespace="urn:oasis:names:tc:ebxml-regrep:rim:xsd:2.5" xmlns="http://www.w3.org/2001/XMLSchema"; xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"; xmlns:tns="urn:oasis:names:tc:ebxml-regrep:rim:xsd:2.5">
  <annotation>
    <documentation xml:lang="en">The schema for OASIS ebXML Registry Information Model</documentation>
  </annotation>
  <!--import namespace="http://www.w3.org/XML/1998/namespace"; schemaLocation="xml.xsd"/-->
  <import namespace="http://www.w3.org/2000/09/xmldsig#"; schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
  <!-- Begin information model mapping from ebRIM. -->
  <!-- Define Data Types -->
  <simpleType name="String4">
    <restriction base="string">
      <maxLength value="4"/>
    </restriction>
  </simpleType>
  <simpleType name="String8">
    <restriction base="string">
      <maxLength value="8"/>
    </restriction>
  </simpleType>
  <simpleType name="String16">
    <restriction base="string">
      <maxLength value="16"/>
    </restriction>
  </simpleType>
  <simpleType name="String32">
    <restriction base="string">
      <maxLength value="32"/>
    </restriction>
  </simpleType>
  <simpleType name="ShortName">
    <restriction base="string">
      <maxLength value="64"/>
    </restriction>
  </simpleType>
  <simpleType name="LongName">
    <restriction base="string">
      <maxLength value="128"/>
    </restriction>
  </simpleType>
  <simpleType name="FreeFormText">
    <restriction base="string">
      <maxLength value="256"/>
    </restriction>
  </simpleType>
  <complexType name="SignatureListType">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="1" ref="dsig:Signature"/>
    </sequence>
  </complexType>
  <element name="SignatureList" type="tns:SignatureListType"/>
  <complexType name="AssociationType1">
    <annotation>
      <documentation xml:lang="en">
        Association is the mapping of the same named interface in ebRIM.
        It extends RegistryObject.
        An Association specifies references to two previously submitted
        registry entrys.
        The sourceObject is id of the sourceObject in association
        The targetObject is id of the targetObject in association
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <attribute name="associationType" type="anyURI" use="required"/>
        <attribute name="sourceObject" type="anyURI" use="required"/>
        <attribute name="targetObject" type="anyURI" use="required"/>
        <attribute name="isConfirmedBySourceOwner" type="boolean" use="optional"/>
        <attribute name="isConfirmedByTargetOwner" type="boolean" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Association" type="tns:AssociationType1" substitutionGroup="tns:Identifiable"/>
  <complexType name="AuditableEventType">
    <annotation>
      <documentation xml:lang="en">An Event that forms an audit trail in ebXML Registry.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence>
          <!-- List of all objects that have been effected by this event -->
          <element maxOccurs="1" minOccurs="1" name="affectedObject" type="tns:ObjectRefListType"/>
        </sequence>
        <!-- Was an enumeration in V2. Now is extensible -->
        <attribute name="eventType" type="tns:LongName" use="required"/>
        <attribute name="timestamp" type="dateTime" use="required"/>
        <attribute name="user" type="anyURI" use="required"/>
        <attribute name="requestId" type="anyURI" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="AuditableEvent" type="tns:AuditableEventType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ClassificationType">
    <annotation>
      <documentation xml:lang="en">
        Classification is the mapping of the same named interface in ebRIM.
        It extends RegistryObject.
        A Classification specifies references to two registry entrys.
        The classifiedObject is id of the Object being classified.
        The classificationNode is id of the ClassificationNode classying the object
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <attribute name="classificationScheme" type="anyURI" use="optional"/>
        <attribute name="classifiedObject" type="anyURI" use="required"/>
        <attribute name="classificationNode" type="anyURI" use="optional"/>
        <attribute name="nodeRepresentation" type="tns:LongName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Classification" type="tns:ClassificationType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ClassificationNodeType">
    <annotation>
      <documentation xml:lang="en">
        ClassificationNode is the mapping of the same named interface in ebRIM.
        It extends RegistryObject.
        ClassificationNode is used to submit a Classification tree to the Registry.
        The parent attribute is the id to the parent node. code is an optional code value for a ClassificationNode
        often defined by an external taxonomy (e.g. NAICS)
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:ClassificationNode"/>
        </sequence>
        <attribute name="parent" type="anyURI" use="optional"/>
        <!-- Why is this optional?? Needs to be discussed as an issue and fixed -->
        <attribute name="code" type="tns:LongName" use="optional"/>
        <attribute name="path" type="string" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="ClassificationNode" type="tns:ClassificationNodeType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ClassificationSchemeType">
    <annotation>
      <documentation xml:lang="en">
        ClassificationScheme is the mapping of the same named interface in ebRIM.
        It extends RegistryEntry.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:ClassificationNode"/>
        </sequence>
        <attribute name="isInternal" type="boolean" use="required"/>
        <attribute name="nodeType" use="required">
          <simpleType>
            <restriction base="NCName">
              <enumeration value="UniqueCode"/>
              <enumeration value="EmbeddedPath"/>
              <enumeration value="NonUniqueCode"/>
            </restriction>
          </simpleType>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <element name="ClassificationScheme" type="tns:ClassificationSchemeType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ExternalIdentifierType">
    <annotation>
      <documentation xml:lang="en">
        ExternalIdentifier is the mapping of the same named interface in ebRIM.
        It extends RegistryObject.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <attribute name="registryObject" type="anyURI" use="optional"/>
        <attribute name="identificationScheme" type="anyURI" use="required"/>
        <attribute name="value" type="tns:LongName" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="ExternalIdentifier" type="tns:ExternalIdentifierType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ExternalLinkType">
    <annotation>
      <documentation xml:lang="en">
        ExternalLink is the mapping of the same named interface in ebRIM.
        It extends RegistryObject.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <attribute name="externalURI" type="anyURI" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="ExternalLink" type="tns:ExternalLinkType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ExtrinsicObjectType">
    <annotation>
      <documentation xml:lang="en">
        ExtrinsicObject are attributes from the ExtrinsicObject interface in ebRIM.
        It inherits RegistryEntryAttributes
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <attribute default="application/octet-stream" name="mimeType" type="tns:LongName"/>
        <attribute default="false" name="isOpaque" type="boolean"/>
      </extension>
    </complexContent>
  </complexType>
  <!-- Following element decl nneds to be lower case but using upper camel case for backward compatibility -->
  <element name="ExtrinsicObject" type="tns:ExtrinsicObjectType" substitutionGroup="tns:Identifiable"/>
  <element name="Address" type="tns:PostalAddressType"/>
  <complexType name="OrganizationType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence maxOccurs="1" minOccurs="1">
          <element maxOccurs="1" minOccurs="1" ref="tns:Address"/>
          <element maxOccurs="unbounded" minOccurs="1" ref="tns:TelephoneNumber"/>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:EmailAddress"/>
        </sequence>
        <attribute name="parent" type="anyURI"/>
        <attribute name="primaryContact" type="anyURI" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Organization" type="tns:OrganizationType" substitutionGroup="tns:Identifiable"/>
  <complexType name="SlotType1">
    <sequence>
      <element maxOccurs="1" minOccurs="1" ref="tns:ValueList"/>
    </sequence>
    <attribute name="name" type="tns:LongName" use="required"/>
    <attribute name="slotType" type="tns:LongName" use="optional"/>
  </complexType>
  <element name="Slot" type="tns:SlotType1"/>
  <complexType name="ValueListType">
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:Value"/>
    </sequence>
  </complexType>
  <element name="ValueList" type="tns:ValueListType"/>
  <element name="Value" type="tns:LongName"/>
  <complexType name="SlotListType">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" ref="tns:Slot"/>
    </sequence>
  </complexType>
  <element name="SlotList" type="tns:SlotListType"/>
  <complexType name="PersonNameType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:Slot"/>
    </sequence>
    <attribute name="firstName" type="tns:ShortName" use="optional"/>
    <attribute name="middleName" type="tns:ShortName" use="optional"/>
    <attribute name="lastName" type="tns:ShortName" use="optional"/>
  </complexType>
  <element name="PersonName" type="tns:PersonNameType"/>
  <complexType name="EmailAddressType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:Slot"/>
    </sequence>
    <attribute name="address" type="tns:ShortName" use="required"/>
    <attribute name="type" type="tns:String32" use="optional"/>
  </complexType>
  <element name="EmailAddress" type="tns:EmailAddressType"/>
  <complexType name="PostalAddressType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:Slot"/>
    </sequence>
    <attribute name="city" type="tns:ShortName" use="optional"/>
    <attribute name="country" type="tns:ShortName" use="optional"/>
    <attribute name="postalCode" type="tns:ShortName" use="optional"/>
    <attribute name="stateOrProvince" type="tns:ShortName" use="optional"/>
    <attribute name="street" type="tns:ShortName" use="optional"/>
    <attribute name="streetNumber" type="tns:String32" use="optional"/>
  </complexType>
  <element name="PostalAddress" type="tns:PostalAddressType"/>
  <complexType name="RegistryEntryType">
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <attribute name="expiration" type="dateTime" use="optional"/>
        <attribute default="1" name="majorVersion" type="integer"/>
        <attribute default="0" name="minorVersion" type="integer"/>
        <attribute name="stability" use="optional">
          <simpleType>
            <restriction base="NCName">
              <enumeration value="Dynamic"/>
              <enumeration value="DynamicCompatible"/>
              <enumeration value="Static"/>
            </restriction>
          </simpleType>
        </attribute>
        <attribute name="userVersion" type="tns:ShortName" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name = "RegistryEntry" type = "tns:RegistryEntryType"/>
  <complexType name="InternationalStringType">
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:LocalizedString"/>
    </sequence>
  </complexType>
  <element name="InternationalString" type="tns:InternationalStringType"/>
  <complexType name="LocalizedStringType">
    <!--attribute ref="xml:lang" default="en-US"/--> 
    <attribute name = "lang" default = "en-US" form = "qualified" type = "language"/>
    <attribute default="UTF-8" name="charset"/>
    <attribute name="value" type="tns:FreeFormText" use="required"/>
  </complexType>
  <element name="LocalizedString" type="tns:LocalizedStringType"/>
  <complexType name="RegistryObjectType">
    <annotation>
      <documentation xml:lang="en">
        id may be empty. If specified it may be in urn:uuid format or be in some
        arbitrary format. If id is empty registry must generate globally unique id.
        If id is provided and in proper UUID syntax (starts with urn:uuid:)
        registry will honour it.
        If id is provided and is not in proper UUID syntax then it is used for
        linkage within document and is ignored by the registry. In this case the
        registry generates a UUID for id attribute.
        id must not be null when object is being retrieved from the registry.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:IdentifiableType">
        <sequence maxOccurs="1" minOccurs="0">
          <element maxOccurs="1" minOccurs="0" ref="tns:Name"/>
          <element maxOccurs="1" minOccurs="0" ref="tns:Description"/>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:Slot"/>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:Classification"/>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:ExternalIdentifier"/>
        </sequence>
        <attribute name="objectType" type="anyURI" use="optional"/>
        <attribute name="status">
          <simpleType>
            <restriction base="NCName">
              <enumeration value="Submitted"/>
              <enumeration value="Approved"/>
              <enumeration value="Deprecated"/>
              <enumeration value="Withdrawn"/>
            </restriction>
          </simpleType>
        </attribute>
      </extension>
    </complexContent>
  </complexType>
  <element name="RegistryObject" type="tns:RegistryObjectType"/>
  <element name="Name" type="tns:InternationalStringType"/>
  <element name="Description" type="tns:InternationalStringType"/>
  <complexType name="RegistryPackageType">
    <annotation>
      <documentation xml:lang="en">
        RegistryPackage is the mapping of the same named interface in ebRIM.
        It extends RegistryEntry.
        A RegistryPackage is a named collection of objects.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <sequence>
          <element maxOccurs="1" minOccurs="0" ref="tns:RegistryObjectList"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="RegistryPackage" type="tns:RegistryPackageType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ServiceType">
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:ServiceBinding"/>
        </sequence>
      </extension>
    </complexContent>
  </complexType>
  <element name="Service" type="tns:ServiceType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ServiceBindingType">
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:SpecificationLink"/>
        </sequence>
        <attribute name="service" type="anyURI" use="optional"/>
        <attribute name="accessURI" type="anyURI" use="optional"/>
        <attribute name="targetBinding" type="anyURI" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="ServiceBinding" type="tns:ServiceBindingType" substitutionGroup="tns:Identifiable"/>
  <complexType name="SpecificationLinkType">
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence maxOccurs="1" minOccurs="0">
          <element maxOccurs="1" minOccurs="0" ref="tns:UsageDescription"/>
          <element maxOccurs="unbounded" minOccurs="0" ref="tns:UsageParameter"/>
        </sequence>
        <attribute name="serviceBinding" type="anyURI" use="optional"/>
        <attribute name="specificationObject" type="anyURI" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="SpecificationLink" type="tns:SpecificationLinkType" substitutionGroup="tns:Identifiable"/>
  <element name="UsageDescription" type="tns:InternationalStringType"/>
  <element name="UsageParameter" type="tns:FreeFormText"/>
  <complexType name="TelephoneNumberType">
    <annotation>
      <documentation xml:lang="en">TelephoneNumber is the mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <attribute name="areaCode" type="tns:String8" use="optional"/>
    <attribute name="countryCode" type="tns:String8" use="optional"/>
    <attribute name="extension" type="tns:String8" use="optional"/>
    <attribute name="number" type="tns:String16" use="optional"/>
    <attribute name="phoneType" type="tns:String32" use="optional"/>
    <attribute name="url" type="anyURI" use="optional"/>
  </complexType>
  <element name="TelephoneNumber" type="tns:TelephoneNumberType"/>
  <element name="FaxNumber" type="tns:TelephoneNumberType"/>
  <element name="MobileTelephoneNumber" type="tns:TelephoneNumberType"/>
  <element name="PagerNumber" type="tns:TelephoneNumberType"/>
  <complexType name="TelephoneNumberListType">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" ref="tns:TelephoneNumber"/>
    </sequence>
  </complexType>
  <complexType name="UserType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence maxOccurs="1" minOccurs="1">
          <element maxOccurs="unbounded" minOccurs="1" ref="tns:Address"/>
          <element maxOccurs="1" minOccurs="1" ref="tns:PersonName"/>
          <element maxOccurs="unbounded" minOccurs="1" ref="tns:TelephoneNumber"/>
          <element maxOccurs="unbounded" minOccurs="1" ref="tns:EmailAddress"/>
        </sequence>
        <attribute name="url" type="anyURI" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="User" type="tns:UserType" substitutionGroup="tns:Identifiable"/>
  <complexType name="RegistryType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <attribute name="operator" type="anyURI" use="required"/>
        <attribute name="specificationVersion" type="string" use="required"/>
        <attribute default="P1D" name="replicationSyncLatency" type="duration"/>
        <attribute default="P1D" name="catalogingLatency" type="duration"/>
        <!-- Optional features supported -->
        <attribute default="false" name="sqlQuerySupported" type="boolean"/>
        <attribute default="false" name="eventNotificationSupported" type="boolean"/>
        <attribute default="false" name="objectReplicationSupported" type="boolean"/>
        <attribute default="false" name="objectRelocationSupported" type="boolean"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Registry" type="tns:RegistryType" substitutionGroup="tns:Identifiable"/>
  <complexType name="FederationType">
    <annotation>
      <documentation xml:lang="en">Mapping of the same named interface in ebRIM.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryEntryType">
        <sequence>
          <element name="Members" type="tns:ObjectRefListType"/>
        </sequence>
        <attribute name="replicationSyncLatency" type="duration" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Federation" type="tns:FederationType"  substitutionGroup="tns:Identifiable"/>
  <complexType abstract="true" name="AdhocQueryType">
    <annotation>
      <documentation xml:lang="en">The common base type for all types of Adh hoc queries.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType"/>
    </complexContent>
  </complexType>
  <element name="Action" type="tns:ActionType"/>
  <complexType name="SubscriptionType">
    <annotation>
      <documentation xml:lang="en">A Subscription for specified Events in an ebXML V3+ registry.</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:RegistryObjectType">
        <sequence>
          <element ref="tns:Action" minOccurs="1" maxOccurs="unbounded"/>
        </sequence>
        <!-- Ref to a AdhocQueryType instance -->
        <attribute name="selector" type="anyURI" use="required"/>
        <attribute name="startDate" type="dateTime" use="optional"/>
        <attribute name="endDate" type="dateTime" use="optional"/>
        <attribute name="notificationInterval" type="duration" use="optional"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="Subscription" type="tns:SubscriptionType" substitutionGroup="tns:Identifiable"/>
  <complexType abstract="true" name="ActionType">
    <annotation>
      <documentation>Abstract Base type for all types of Actions.</documentation>
    </annotation>
  </complexType>
  <complexType name="NotifyActionType">
    <annotation>
      <documentation xml:lang="en">Abstract Base type for all types of Notify Actions</documentation>
    </annotation>
    <complexContent>
      <extension base="tns:ActionType">
        <attribute default="ObjectRefs" name="notificationOption">
          <simpleType>
            <restriction base="NCName">
              <enumeration value="ObjectRefs"/>
              <enumeration value="Objects"/>
            </restriction>
          </simpleType>
        </attribute>
        <attribute name="endPoint" type="anyURI" use="required"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="NotifyAction" type="tns:NotifyActionType" substitutionGroup="tns:Action"/>
  <complexType name="IdentifiableType">
    <annotation>
      <documentation xml:lang="en">Common base class for all types that have unique identity.</documentation>
    </annotation>
    <attribute name="id" type="anyURI" use="required"/>
    <!-- home attribute is required only for remote ObjectRef -->
    <attribute name="home" type="anyURI" use="optional"/>
  </complexType>
  <element name="Identifiable" type="tns:IdentifiableType"/>
  <complexType name="ObjectRefType">
    <annotation>
      <documentation xml:lang="en">
        Use to reference an Object by its id.
        Specifies the id attribute of the object as its id attribute.
        id attribute in ObjectAttributes is exactly the same syntax and semantics as
        id attribute in RegistryObject.
      </documentation>
    </annotation>
    <complexContent>
      <extension base="tns:IdentifiableType">
        <!-- When true and is a remote ObjectRef then the registry must create a replica for this ObjectRef -->
        <attribute default="false" name="createReplica" type="boolean"/>
      </extension>
    </complexContent>
  </complexType>
  <element name="ObjectRef" type="tns:ObjectRefType" substitutionGroup="tns:Identifiable"/>
  <complexType name="ObjectRefListType">
    <sequence maxOccurs="unbounded" minOccurs="0">
      <element ref="tns:ObjectRef"/>
    </sequence>
  </complexType>
  <element name="ObjectRefList" type="tns:ObjectRefListType"/>
  <complexType name="RegistryObjectListType">
    <sequence>
      <element maxOccurs="unbounded" minOccurs="0" ref="tns:Identifiable"/>
    </sequence>
  </complexType>
  <element name="RegistryObjectList" type="tns:RegistryObjectListType"/>
</schema>


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]