A XML Connector Examples and Schemas

This appendix contains examples and schemas associated with the Oracle SES XML connector framework. This contains the following topics:

Configuration File XML Schema Definition

The following example shows the XSD for the configuration file.

<?xml version="1.0" encoding="windows-1252"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://xmlns.oracle.com/search/rsscrawlerconfig"
targetNamespace="http://xmlns.oracle.com/search/rsscrawlerconfig" elementFormDefault="qualified">

<xsd:element name="rsscrawler">
 
   <xsd:annotation>      
    <xsd:documentation>        
     RSS crawler configuration paramters      
    </xsd:documentation>    
   </xsd:annotation>
    
<xsd:complexType>      
 <xsd:sequence>
        
  <xsd:element name="sourceName" type="xsd:string" minOccurs="0"/>

  <xsd:element name="feedType" default="dataFeed">          
   <xsd:simpleType>
    <xsd:restriction base="xsd:string">              
     <xsd:enumeration value="controlFeed"/>              
     <xsd:enumeration value="dataFeed"/>              
     <xsd:enumeration value="directoryFeed"/>
    </xsd:restriction>          
   </xsd:simpleType>        
 </xsd:element>
        
<xsd:element name="feedLocation">          
 <xsd:complexType>            
  <xsd:simpleContent>              
   <xsd:extension base="xsd:anyURI"/>            
  </xsd:simpleContent>          
 </xsd:complexType>        
</xsd:element>
        
<xsd:element name="errorFileLocation" type="xsd:string" minOccurs="0">
 <xsd:annotation>            
  <xsd:documentation>
Optional. This should be the absolute path of a location to which the status feeds
are uploaded. This location should be in the same computer from where data feeds
are fetched. If not specified, the status feeds are uploaded to the same location
as the data feeds. If HTTP is used to fetch the data feed, the value of this tag
should be the HTTP URL to which the status feed can be posted. If this tag is not
specified, the status feed is posted to the HTTP URL of the data feed. 
  </xsd:documentation>          
 </xsd:annotation>        
</xsd:element>
        
<xsd:element name="securityType" default="noSecurity" maxOccurs="1" minOccurs="0">          
 <xsd:simpleType>
  <xsd:restriction base="xsd:string">              
   <xsd:enumeration value="identityBased"/>              
   <xsd:enumeration value="attributeBased"/>              
   <xsd:enumeration value="noSecurity"/>
  </xsd:restriction>         
 </xsd:simpleType>       
</xsd:element>
       
<xsd:element name="securityAttribute" minOccurs="0" maxOccurs="unbounded">
 <xsd:complexType>          
  <xsd:simpleContent>
   <xsd:extension base="xsd:string">              
    <xsd:attribute name="name" type="xsd:string" use="required"/>              
    <xsd:attribute name="grant" type="xsd:boolean" default="true"/>
   </xsd:extension>           
  </xsd:simpleContent>        
 </xsd:complexType>       
</xsd:element>
      
</xsd:sequence>    
</xsd:complexType>

</xsd:element> 
</xsd:schema> 

Control Feed Example

The following example shows a control feed used in an XML-connector based source.

<?xml version="1.0" encoding="windows-1252" ?> 
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
 <channel> 
   <title>Contacts</title> 
   <link>http://my.company.com/rss</link> 
   <description>The channel contains feed for contacts</description>
   <lastBuildDate>2006-04-03T12:20:20.00Z</lastBuildDate> 
   <channelDesc xmlns="http://xmlns.oracle.com/orarss">
     <feedType>control</feedType>
   </channelDesc>
   <item>
     <link>file://localhost/C:\project\rss_feeds\test.xml</link> 
   </item> 
   <item> 
     <link>file://localhost/C:\project\rss_feeds\test2.xml</link> 
   </item> 
   <item> 
     <link>http://my.host.com/contacts/control.xml</link>
     <itemDesc xmlns="http://xmlns.oracle.com/orarss" operation="control"</itemDesc>
   </item>
   <item>
     <link>file://localhost/C:\project\rss_feeds\test3.xml</link> 
   </item> 
 </channel> 
</rss> 

Control Feed XML Schema Definition

The following are the XSDs for the control feed.


controlfeed.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:oss="http://xmlns.oracle.com/orarss"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" elementFormDefault="qualified">
<xsd:import namespace="http://xmlns.oracle.com/orarss" schemaLocation="orarss_controlfeed.xsd" />
  <xsd:element name="rss">
    <xsd:annotation>
      <xsd:documentation>RSS control feed</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="channel" type="rssChannelType"/>
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:decimal" use="required" fixed="2.0"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="rssChannelType">
    <xsd:sequence>
      <xsd:element name="title" type="xsd:string"/>
      <xsd:element name="link" type="xsd:anyURI"/>
      <xsd:element name="description" type="xsd:string"/>
      <xsd:element name="lastBuildDate" type="xsd:dateTime">
        <xsd:annotation>
          <xsd:documentation>
             This is the publishing date for this channel
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:any namespace="##other" minOccurs="0"/>
      <xsd:element ref="oss:channelDesc" />
      <xsd:element name="item" type="itemType" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:complexType name="itemType">
    <xsd:all>
      <xsd:element name="link" type="xsd:anyURI"/>
      <xsd:element name="title" type="xsd:string" minOccurs="0"/>
      <xsd:element name="description" type="xsd:string" minOccurs="0">
        <xsd:annotation>
          <xsd:documentation>
            The description is ignored as far as Oracle processing is concerned
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element ref="oss:itemDesc" minOccurs="0"/>
    </xsd:all>
  </xsd:complexType>
</xsd:schema>

orarss_controlfeed.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  targetNamespace="http://xmlns.oracle.com/orarss"
 xmlns:oss="http://xmlns.oracle.com/orarss"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  elementFormDefault="qualified">  
  <xsd:element name="channelDesc" type="oss:channelDescType" />
     <xsd:element name="itemDesc">
    <xsd:complexType>
          <xsd:attribute name="operation" type="oss:operationType"/>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="descriptionType" abstract="true"/>
  <xsd:complexType name="channelDescType">
    <xsd:complexContent>
      <xsd:extension base="oss:descriptionType">
        <xsd:all>
          <xsd:element name="sourceName" type="xsd:string" minOccurs="0">
            <xsd:annotation>
              <xsd:documentation>
                                The business Object that this channel corresponds to - if missing then the channel contains information from multiple objects.
              </xsd:documentation>
            </xsd:annotation>
          </xsd:element>
          <xsd:element name="feedType" maxOccurs="1" minOccurs="0">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="control"/>
              </xsd:restriction>
            </xsd:simpleType>
           </xsd:element>
           <xsd:element name="batchId" type="xsd:string" minOccurs="0"/>
           <xsd:element name="itemCount" type="xsd:positiveInteger" minOccurs="0"/>
        </xsd:all>
      </xsd:extension>
    </xsd:complexContent>   
</xsd:complexType>
<xsd:simpleType name="operationType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="control"/>
    </xsd:restriction>
</xsd:simpleType>
</xsd:schema>

Data Feed Example

When specifying a date-time value in an attribute for an RSS feed, use this format:

YYYY-MM-DDThh:mm:sstz[+|-offset]

Where:

YYYY is the year (4 digits).

MM is the month (2 digits).

DD is the day (2 digits).

T is a literal character used as a separator.

hh is the hour (2 digits in 24-hour time designation).

mm is the minute (2 digits).

ss is the second (2 digits).

tz is an RFC822 time zone. RFC822 supports UT, GMT, and Z for universal time, and the following North American time zones: EST, EDT, CST, CDT, MST, MDT, PST, and PDT.

offset is the difference between the local time zone and GMT in the format hh:mm.

All of these examples are correct:

2002-06-03T16:06:05.00GMT
2002-06-03T16:06:05.00UT
2002-06-03T16:06:05.00PDT
2002-06-03T16:06:05.00GMT-07:00
2002-06-03T16:06:05.00JST
2002-06-03T16:06:05.00GMT+09:00
2002-06-03T16:06:05.00Z

As shown by these date-time examples, you can specify numeric offsets in the date-time string. Thus, Greenwich Mean Time can be specified as either GMT or GMT+00:00 or UT or Z, and Eastern Standard Time can be specified as either EST or GMT-05:00.

Repositories that dispatch data feeds must explicitly specify the content type to avoid the filtering overhead required by Oracle SES to detect the content type. See the <contentLink> and <content> elements in the example.

The following example shows a data feed containing three documents.

<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  version="2.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<channel> 
<title>Contacts</title> 
<link>http://my.company.com/rss</link> 
<description>The channel contains feed for contacts</description>
<lastBuildDate>2006-04-03T12:20:20.00Z</lastBuildDate> 
<channelDesc xmlns="http://xmlns.oracle.com/orarss"> 
     <feedType>full</feedType> 
</channelDesc> 
<item> 
     <link>http://my.company.com/contacts?id=paul</link> 
     <itemDesc xmlns="http://xmlns.oracle.com/orarss" operation="insert"> 
     <documentMetadata> 
       <author>Administrator</author> 
       <accessURL>http://foo.com</accessURL>
       <lastModifiedDate>2009-12-12T12:22:22.00Z</lastModifiedDate>
       <keywords>Content Contact</keywords> 
       <summary>This is the summary of the document.</summary> 
       <sourceHierarchy> 
           <path>company</path>
           <path>department</path>
           <path>group</path>
       </sourceHierarchy>
       <docAttr name="organization">Reports</docAttr>
       <docAttr name="country">Germany</docAttr>
     </documentMetadata>
     <documentAcl>
       <securityAttr name="EMPLOYEE_ID">0R9NH</securityAttr> 
     </documentAcl> 
     <documentInfo> 
       <status>STATUS_OK_FOR_INDEX</status>
     </documentInfo>
     <documentContent>
       <contentLink contentType="text/html">http://my.company.com/reports.html</contentLink> 
       <content contentType="text/plain">Paul Robinson, A240, Westland Drive</content> 
     </documentContent> 
   </itemDesc> 
</item> 
<item> 
   <link>http://my.company.com/contacts?id=tom</link> 
   <itemDesc xmlns="http://xmlns.oracle.com/orarss" operation="delete"/> 
</item> 
<item> 
   <link>http://my.company.com/contacts?id=robert</link> 
   <itemDesc xmlns="http://xmlns.oracle.com/orarss" operation="insert"> 
   <documentMetadata> 
     <author>Administrator</author> 
     <accessURL>http://foo.com</accessURL>
     <lastModifiedDate>2009-12-12T12:22:22.00Z</lastModifiedDate> 
     <keywords>Content Contact </keywords> 
     <summary>This is the summary of the document</summary> 
     <sourceHierarchy> 
       <path>company</path>
       <path>department</path>
       <path>group</path>
     </sourceHierarchy>
     <docAttr name="organization">Sales</docAttr>
     <docAttr name="country">China</docAttr>
     </documentMetadata>
     <documentAcl>
       <securityAttr name="EMPLOYEE_ID">I23489</securityAttr> 
     </documentAcl> 
     <documentInfo> 
       <status>STATUS_OK_FOR_INDEX</status>
     </documentInfo>
     <documentContent>
       <contentLink contentType="text/html">http://my.company.com/sales.html</contentLink > 
       <content contentType="text/plain">Robert Mogambo, C318, Lakeside Avenue</content> 
     </documentContent> 
   </itemDesc> 
</item> 
</channel> 
</rss> 

Data Feed XML Schema Definition

The following are the XSDs for the data feed.


datafeed.xsd

<?xml version="1.0" encoding="windows-1252"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
 xmlns:oss="http://xmlns.oracle.com/orarss"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  elementFormDefault="qualified">
<xsd:import namespace="http://xmlns.oracle.com/orarss" schemaLocation="orarss_datafeed.xsd" />
  <xsd:element name="rss">
    <xsd:annotation>
      <xsd:documentation>RSS data feed</xsd:documentation>
    </xsd:annotation>
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="channel" type="rssChannelType"/>
      </xsd:sequence>
      <xsd:attribute name="version" type="xsd:decimal" use="required" fixed="2.0"/>
    </xsd:complexType>
  </xsd:element>
      <xsd:complexType name="rssChannelType">
    <xsd:sequence>
      <xsd:element name="title" type="xsd:string"/>
      <xsd:element name="link" type="xsd:anyURI"/>
      <xsd:element name="description" type="xsd:string"/>
      <xsd:element name="lastBuildDate" type="xsd:dateTime">
        <xsd:annotation>
          <xsd:documentation>
            This is the publishing date for this channel
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element ref="oss:channelDesc" />
      <xsd:element name="item" type="itemType"  maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>
   <xsd:complexType name="itemType"> 
    <xsd:all>
      <xsd:element name="link" type="xsd:anyURI">
        <xsd:annotation>
          <xsd:documentation>
            Display URL of the item. This URL should be UTF-8 encoded.
          </xsd:documentation>
        </xsd:annotation>
      </xsd:element>
      <xsd:element name="title" type="xsd:string" minOccurs="0"/>
      <xsd:element name="description" type="xsd:string" minOccurs="0"/>
      <xsd:element ref="oss:itemDesc"/>
    </xsd:all>
  </xsd:complexType>
</xsd:schema>

orarss_datafeed.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  targetNamespace="http://xmlns.oracle.com/orarss"
 xmlns:oss="http://xmlns.oracle.com/orarss"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  elementFormDefault="qualified">  
  <xsd:element name="channelDesc" type="oss:channelDescType"/>
  <xsd:element name="itemDesc">
    <xsd:complexType>
      <xsd:complexContent>
        <xsd:extension base="oss:itemDescType">
          <xsd:attribute name="operation" type="oss:operationType" default="insert"/>
        </xsd:extension>
      </xsd:complexContent>
    </xsd:complexType>
  </xsd:element>
  <xsd:complexType name="descriptionType" abstract="true"/>
  <xsd:complexType name="channelDescType">
    <xsd:complexContent>
      <xsd:extension base="oss:descriptionType">
        <xsd:all>
          <xsd:element name="sourceName" type="xsd:string" minOccurs="0">
            <xsd:annotation>
              <xsd:documentation>
                                The business Object that this channel corresponds to - if missing then the channel contains information from multiple objects.
              </xsd:documentation>
            </xsd:annotation>
          </xsd:element>
          <xsd:element name="feedType" default="incremental" maxOccurs="1" minOccurs="0">
            <xsd:simpleType>
              <xsd:restriction base="xsd:string">
                <xsd:enumeration value="incremental"/>
                <xsd:enumeration value="full"/>
              </xsd:restriction>
            </xsd:simpleType>
           </xsd:element>
           <xsd:element name="batchId" type="xsd:string" minOccurs="0"/>
           <xsd:element name="itemCount" type="xsd:positiveInteger" minOccurs="0"/>
        </xsd:all>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:complexType name="itemDescType">
    <xsd:complexContent>
      <xsd:extension base="oss:descriptionType">
        <xsd:all>
          <xsd:element name="documentMetadata" type="oss:metadataType" minOccurs="0"/>
          <xsd:element name="documentAcl" type="oss:securityType" minOccurs="0"/>
          <xsd:element name="documentInfo" type="oss:infoType" minOccurs="0"/>
          <xsd:element name="documentContent" type="oss:bodyType" minOccurs="0"/>
        </xsd:all>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>
  <xsd:simpleType name="operationType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="insert"/>
      <xsd:enumeration value="replace"/>
      <xsd:enumeration value="delete"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:group name="authorgroup">
    <xsd:sequence>    </xsd:sequence>
  </xsd:group>
  <xsd:group name="docattrgroup">
      <xsd:sequence>         </xsd:sequence>
  </xsd:group>
  <xsd:complexType name="metadataType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="author" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
      <xsd:element name="accessURL" type="xsd:string" minOccurs="0"/>
      <xsd:element name="lastModifiedDate" type="xsd:string" minOccurs="0"/>
      <xsd:element name="keywords" type="xsd:string" minOccurs="0"/>
      <xsd:element name="summary" type="xsd:string" minOccurs="0"/>
      <xsd:element name="language" type="xsd:string" minOccurs="0"/>
      <xsd:element name="sourceHierarchy" type="oss:sourceHierType" minOccurs="0"/>
      <xsd:element name="docAttr" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
                <xsd:simpleContent>
                        <xsd:extension base="oss:docAttrType">
                                <xsd:attribute name="name" type="xsd:string" use="required" />
                                <xsd:attribute name="type" use="optional" default="string">
                                        <xsd:simpleType>
                                                <xsd:restriction base="xsd:string">
                                                        <xsd:enumeration value="string"></xsd:enumeration>
                                                        <xsd:enumeration value="decimal"></xsd:enumeration>
                                                        <xsd:enumeration value="dateTime"></xsd:enumeration>
                                                </xsd:restriction>
                                        </xsd:simpleType>
                                </xsd:attribute>
                        </xsd:extension>
                </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType>
  <xsd:complexType name="sourceHierType">
    <xsd:sequence>
      <xsd:element name="path" type="xsd:string" maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
  <xsd:simpleType name="statusType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="STATUS_OK_FOR_INDEX"/>
      <xsd:enumeration value="STATUS_BAD_REQUEST"/>
      <xsd:enumeration value="STATUS_AUTH_REQUIRED"/>
      <xsd:enumeration value="STATUS_ACCESS_FORBIDDEN"/>
      <xsd:enumeration value="STATUS_NOTFOUND"/>
      <xsd:enumeration value="STATUS_PROXY_REQUIRED"/>
      <xsd:enumeration value="STATUS_REQUEST_TIMEOUT"/>
      <xsd:enumeration value="STATUS_SERVER_ERROR"/>
      <xsd:enumeration value="STATUS_BAD_GATEWAY"/>
      <xsd:enumeration value="STATUS_FETCH_ERROR"/>
      <xsd:enumeration value="STATUS_READ_TIMEOUT"/>
      <xsd:enumeration value="STATUS_FILTER_ERROR"/>
      <xsd:enumeration value="STATUS_OUT_OF_MEMORY"/>
      <xsd:enumeration value="STATUS_IO_EXCEPTION"/>
      <xsd:enumeration value="STATUS_CONNECTION_REFUSED"/>
      <xsd:enumeration value="STATUS_DUPLICATE_DOC"/>
      <xsd:enumeration value="STATUS_EMPTY_DOC"/>
      <xsd:enumeration value="STATUS_LOGIN_FAILED"/>
      <xsd:enumeration value="STATUS_OK_BUT_NO_INDEX"/>
      <xsd:enumeration value="STATUS_OK_CRAWLED"/>
      <xsd:enumeration value="STATUS_CANNOT_READ"/>
      <xsd:enumeration value="STATUS_DOC_SIZE_TOO_BIG"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="docAttrType">
    <xsd:union memberTypes="xsd:decimal xsd:string"/>
  </xsd:simpleType>
      <xsd:complexType name="infoType">
    <xsd:sequence>
      <xsd:element name="status" type="oss:statusType"/>
    </xsd:sequence>
  </xsd:complexType>
    <xsd:complexType name="securityType">
    <xsd:choice>
      <xsd:element name="principal" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:string">
              <xsd:attribute name="idType" type="oss:idAttrType" use="optional" default="user">
                <xsd:annotation>
                  <xsd:documentation>
                    User or group. 
                  </xsd:documentation>
                </xsd:annotation>
              </xsd:attribute>
              <xsd:attribute name="format" type="xsd:string" use="required"/>
              <xsd:attribute name="grant" type="xsd:boolean" use="optional" default="true"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="securityAttr" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:string">
              <xsd:attribute name="name" type="xsd:string" use="required"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
    <xsd:attribute name="ownerGuid" type="xsd:string">
      <xsd:annotation>
        <xsd:documentation>
          OwnerGUID - useful if the principal includes OWNER
        </xsd:documentation>
      </xsd:annotation>
    </xsd:attribute>
  </xsd:complexType>
      <xsd:simpleType name="idAttrType">
    <xsd:restriction base="xsd:string">
      <xsd:enumeration value="user"/>
      <xsd:enumeration value="group"/>
      <xsd:enumeration value="owner"/>
    </xsd:restriction>
  </xsd:simpleType>
    <xsd:complexType name="bodyType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
      <xsd:element name="contentLink" minOccurs="0" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:anyURI">
              <xsd:attribute name="contentType" default="text/html"/>
              <xsd:attribute name="inline" type="xsd:string" default="false"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="content" minOccurs="0">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:string">
              <xsd:attribute name="contentType" type="xsd:string" default="text/plain"/>
              <xsd:attribute name="inline" type="xsd:string" default="true"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="xhtmlContent" minOccurs="0" maxOccurs="1">
        <xsd:complexType>
          <xsd:complexContent>
            <xsd:extension base="xsd:anyType">
              <xsd:attribute name="lang" type="xsd:string"/>
              <xsd:anyAttribute namespace="##other"/>
            </xsd:extension>
          </xsd:complexContent>
        </xsd:complexType>
      </xsd:element>
    </xsd:choice>
  </xsd:complexType></xsd:schema>