Primo Normalized Xml RelaxNg schema
For å lage et skjema for Primo Normalized XML (PNX), er det tatt utgangspunkt i Primo sin dokumentasjon av PNX som finnes i Technical Guide. En PNX er delt opp i seksjonene adddata, browse, control, delivery, display, dedup, enrichment, facets, frbr, links, ranking,search og sort. Med hjelp fra bibsys som identifiserte hvilke seksjoner og felter som bør være med i en post, er det tatt utgangspunkt i å generere skjemaet basert på tabellene som Ex-libris har på de tekniske hjelpsidene. For å generere skjemaet har vi valgt å bruke RelaxNG og xml-syntaks utgaven av denne. Skjemaet er egentlig en definisjon på en OAI-PMH post, med ListRecords og så en PNX definisjon inne i hver enkelt Record. Vi kopierte da tabellene for hver enkelt seksjon og har tatt et regex-søk for å dele opp i elementnavn og dokumentasjon for feltnavn.
<optional>
<a:documentation>The contributor is an entity that is responsible for making a
contribution to the content of the resource. Multiple occurrences are
concatenated with a semicolon. Example of source data: *MARC21: 700/710/711
fields, stripping subfield $$d, and stripping from subfield $$t to the end. It
is possible to reverse the author's last and first name by using a special
routine (for example, Stephans, Mary to Mary Stephans). *The display form of the
contributor also serves as a hyperlink to search for additional records. It is
important that all the strings in the display also be added to the
creatorcontrib field in the Search section.</a:documentation>
<element name="contributor">
<text/>
</element>
</optional>
De aller fleste av definisjonene våre i Relax NG har den myke definisjonen <zeroOrMore>, hvor vi kun forventer noe av type <text>.
Det ville også vært fornuftig å definere faste verdier, der Primo forventer et spesifikt sett av tekststrenger, som for pre-filter:
<zeroOrMore>
<a:documentation>The search pre-filter that is available in the Primo UI and
must be mapped as a facet. The default list of pre-filters is based on the
Resource Type field in the display: *Book -> Books (books) *Journal ->
Journals (journals) *Article -> Articles (articles) *Text Resource -> Books
(books) *Image -> Images (images) *Video -> Audio-Video (audio-video) *Audio
-> Audio-Video (audio-video) *Maps -> Maps (maps) *Score -> Scores
(scores)</a:documentation>
<element name="prefilter">
<text/>
</element>
</zeroOrMore>
Men det går utenfor rammen av prosjektet, og er noe en kan forbedre senere.Skjemaet brukes for to formål i dette prosjektet: Det brukes til å generere named templates for enkeltseksjonene, som brukes til å mappe input-data til PNX. Det brukes også til validering av output mot skjemaet fra marcus2oria.