Print

Print


Hi MODS folks,

A related entry may have its own record in a MODS infoset, so that the
<relatedItem> element referring to it needs no content, or at most
<part> elements.  For example, a record for a journal article might have
the subelement...

<relatedItem type="host" xlink:href="#issn0000-0000">
    <part>
        <detail type="volume">5</detail>
        <extent unit="pages">
            <start>5</start>
            <end>50</end>
        </extent>
    </part>
</relatedItem>

...where the journal title, publication information, etc would be
understood to come from the <mods> record in the same file with
attribute ID="issn0000-0000".

Since <relatedItem> is derived from <mods>, however, the example is not
schema valid (because <mods> has to have at least one top-level
subelement).  I've been using an empty <note/> element as filler, but
perhaps the content model of <relatedItem> could be changed.  One way is
to put the content of <mods> in a group and define both <mods> and
<relatedItem> in terms of this group (example below), but then the
"is-a" relationship of <relatedItem> to <mods> is lost.  I'm not enough
of a schema hacker to know if there's a better approach.

--Andy

        <xsd:group name="modsContent">
                <xsd:choice>
                        <xsd:element ref="titleInfo"/>
                        <xsd:element ref="name"/>
                        <xsd:element ref="typeOfResource"/>
                        <xsd:element ref="genre"/>
                        <xsd:element ref="originInfo"/>
                        <xsd:element ref="language"/>
                        <xsd:element ref="physicalDescription"/>
                        <xsd:element ref="abstract">
                                <xsd:annotation>
                                        <xsd:documentation>520</xsd:documentation>
                                </xsd:annotation>
                        </xsd:element>
                        <xsd:element ref="tableOfContents">
                                <xsd:annotation>
                                        <xsd:documentation>505</xsd:documentation>
                                </xsd:annotation>
                        </xsd:element>
                        <xsd:element ref="targetAudience"/>
                        <xsd:element ref="note"/>
                        <xsd:element ref="subject"/>
                        <xsd:element ref="classification"/>
                        <xsd:element ref="relatedItem"/>
                        <xsd:element ref="identifier"/>
                        <xsd:element ref="location">
                                <xsd:annotation>
                                        <xsd:documentation>852 $a $b $j
$e</xsd:documentation>
                                </xsd:annotation>
                        </xsd:element>
                        <xsd:element ref="accessCondition">
                                <xsd:annotation>
                                        <xsd:documentation>506,
540</xsd:documentation>
                                </xsd:annotation>
                        </xsd:element>
                        <xsd:element name="extension"
type="extensionType"/>
                        <xsd:element ref="recordInfo"/>
                </xsd:choice>
        </xsd:group>

        <xsd:complexType name="modsType">
                <xsd:group ref="modsContent" maxOccurs="unbounded"/>
                <xsd:attribute name="ID" type="xsd:ID" use="optional"/>
                <xsd:attribute name="version">
                        <xsd:simpleType>
                                <xsd:restriction base="xsd:string">
                                        <xsd:enumeration value="3.0"/>
                                </xsd:restriction>
                        </xsd:simpleType>
                </xsd:attribute>
        </xsd:complexType>

        <xsd:complexType name="relatedItemType">
                <xsd:sequence>
                        <xsd:group ref="modsContent" minOccurs="0"
maxOccurs="unbounded"/>
                        <xsd:element name="part" type="partType"
minOccurs="0" maxOccurs="unbounded"/>
                </xsd:sequence>
                <!-- Attributes omitted for clarity -->
        </xsd:complexType>