mods strict

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

mods strict

Bruce D'Arcus-3
As a result of recent discussions, I've decided to experiment with
writing a "MODS Strict" schema that both simplifies and much more
tightly controls the content of MODS metadata.  It is designed to
address the needs of scholars and students, and those who write
software for them, but are otherwise finding themselves overwhelmed by
MODS proper.

Primary differences are:

- rigorous control of structure, but also flexibility through RNG
features like interleave (which means in places element order is
unimportant)

- date-typing (on dates for example)

- a new genre authority (xbib), with values tightly controlled

I've just started, but here it is in case people have feedback now.

# a tighter version of MODS that takes
# advantage of some of the validation power of RELAX NG

default namespace mods = "http://www.loc.gov/mods/v3"

# The primary difficulty with MODS is that it is so
# loose that it is sometimes difficult for non-experts
# to know hoo to enter metadata. So the primary change we
# make is to introduce fairly rigorous structure.
start = element modsCollection { MODS+ }
MODS = element mods { (part-inSerial | monograph), attribute ID {
xsd:ID }}
Genres-part-inSerial = "article" | "legal case"
Genres-serial = "academic journal" | "magazine" | "newspaper"
Genres-monograph = "album" | "book" | "report"

div {
   Titles = element titleInfo { Title, SubTitle? }
   Title = element title { text }
   SubTitle = element subTitle { text }
}

div {
   Names = PersonalName*, OrganizationalName*
   PersonalName = element name { attribute type {"personal"},
NameParts-Person+ }
   OrganizationalName = element name { attribute type {"corporate"},
NameParts-Organization }
   NameParts-Person = GivenName | FamilyName | OtherName
   NameParts-Organization = OtherName+
   GivenName = element namePart { attribute type { "given" }, text }
   FamilyName = element namePart { attribute type { "family" }, text }
   OtherName = element namePart { text }
}

div {
   Origins = element originInfo {( DateIssued & Place? & Publisher? )}
   DateIssued = element dateIssued { Dates }
   Place = element place { PlaceTerm+ }
   PlaceTerm = element placeTerm { text }
   Publisher = element publisher { text }
}

div {
   Dates = FreeDate | YYYY-MM-DD | YYYY-MM | YYYY
   FreeDate = xsd:string { pattern = "(\w|\W)*" }
   YYYY-MM-DD = attribute encoding { "w3cdtf" }, xsd:date
   YYYY-MM = attribute encoding { "w3cdtf" }, xsd:gYearMonth
   YYYY = attribute encoding { "w3cdtf" }, xsd:gYear
}

monograph = (Titles? & Names? & genre-monograph)
part-inSerial = (Titles? & Names? & Origins & genre-part-inSerial),
isPartOf-serial
genre-part-inSerial =
   element genre {
     attribute authority { "xbib" }?,
     Genres-part-inSerial
   }
genre-serial =
   element genre {
     attribute authority { "xbib" }?,
     Genres-serial
   }
genre-monograph =
   element genre {
     attribute authority { "xbib" }?,
     Genres-monograph
   }
isPartOf-serial =
   element relatedItem {
     attribute type { "host" },
     (Titles & Names* & Origins? & genre-serial), parts-serial
   }
parts-serial = element part { VolumeNumber?, IssueNumber? }
VolumeNumber =
   element detail {
     attribute type { "volume" },
     Number
   }
IssueNumber =
   element detail {
     attribute type { "issue" },
     Number
   }
Number = element number { text }

====================

.... and an example instance:

<modsCollection xmlns="http://www.loc.gov/mods/v3">
   <mods ID="doe2000">
     <titleInfo>
       <title>Some Title</title>
     </titleInfo>
     <genre authority="xbib">article</genre>
     <originInfo>
       <dateIssued encoding="w3cdtf">2000</dateIssued>
     </originInfo>
     <relatedItem type="host">
       <titleInfo>
         <title>Some Journal</title>
       </titleInfo>
       <genre authority="xbib">academic journal</genre>
       <part>
         <detail type="volume">
           <number>23</number>
         </detail>
       </part>
     </relatedItem>
   </mods>
   <mods ID="smith2001">
     <genre authority="xbib">article</genre>
     <name type="personal">
       <namePart type="given">Jane</namePart>
       <namePart type="family">Doe</namePart>
     </name>
     <titleInfo>
       <title>Some Title</title>
     </titleInfo>
     <originInfo>
       <dateIssued encoding="w3cdtf">2001-10</dateIssued>
     </originInfo>
     <relatedItem type="host">
       <genre authority="xbib">magazine</genre>
       <titleInfo>
         <title>Some Magazine</title>
       </titleInfo>
       <part>
         <detail type="volume"><number>23</number></detail>
       </part>
     </relatedItem>
   </mods>
</modsCollection>

This document validates against both schemas.

Bruce