RDFa requires two elements, meta and link. The main ways in which they change from normal XHTML are:
meta takes an attribute of property instead of name;meta and link can be nested inside themselves and each other;meta and link can take inline text;meta and link can appear anywhere within a document.Since there were so many changes to be made it got to the point where a redefinition of the existing elements left so little of the original intact, that new modules were created for each. However, once that was done it became clear that the two modules were almost complete copies of each other, so they have been merged into a new module called xhtml11-rdfa-1.xsd.
This means that in xhtml11-modules-1.xsd the references to xhtml-meta-1.xsd and xhtml-link-1.xsd have been removed, and replaced with this single module.
All of the attributes that were needed for RDFa were moved out to a separate module, and placed in the 'common attribute' collection (see next section). Then all that is needed is for meta and link to use this collection exactly like other elements do. (Note that all the other attributes have been left intact for now.):
<xs:attributeGroup name="meta.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="name" type="xs:NMTOKEN"/>
<xs:attribute name="scheme" type="xh11d:CDATA"/>
</xs:attributeGroup>
<xs:attributeGroup name="link.attlist">
<xs:attributeGroup ref="Common.attrib"/>
<xs:attribute name="media" type="xh11d:MediaDesc"/>
</xs:attributeGroup>
(At some point scheme may get deprecated since property is a CURIE, which means that the namespace prefix plays the role of a scheme.)
Defining the elements themselves then becomes a case of adding a common content model:
<xs:group name="rdfa.content">
<xs:choice>
<xs:element ref="meta" />
<xs:element ref="link" />
</xs:choice>
</xs:group>
And then making use of it in both elements:
<xs:complexType name="meta.type" mixed="true">
<xs:group ref="rdfa.content" minOccurs="0"
maxOccurs="unbounded" />
<xs:attributeGroup ref="meta.attlist"/>
</xs:complexType>
<xs:complexType name="link.type" mixed="true">
<xs:group ref="rdfa.content" minOccurs="0"
maxOccurs="unbounded" />
<xs:attributeGroup ref="link.attlist"/>
</xs:complexType>
<xs:element name="link" type="link.type"/>
<xs:element name="meta" type="meta.type"/>
Note that defining both elements in terms of each other fulfills the requirement that they can be nested to any depth. And by adding mixed="true" we also provide for inline text in both elements, although their meanings differ (inline text in meta sets the value for content, whilst inline text in link is the same as in a).
Finally, to allow the use of these two elements anywhere in the XHTML document we need to redefine the Misc.extra group in xhtml.xsd:
<xs:group name="Misc.extra">
<xs:choice>
<xs:group ref="xh11:Misc.extra" />
<xs:element ref="meta"/>
<xs:element ref="link"/>
</xs:choice>
</xs:group>