mods strict

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:

Some Title article 2000 Some Journal academic journal 23 article Jane Doe Some Title 2001-10 magazine Some Magazine 23

This document validates against both schemas.

Bruce