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.

I utgangspunktet er restriksjonene i skjemaet ganske myke, da vi har hatt en gjennomgang av dokumentasjonen for å basere oss hva som er forventet i mappingen til PNX. For eksempel ble verdiene i display seksjonen definert som optional(0 eller 1), da Ex-libris dokumentasjonen spesifiserer at seksjonen skal slå sammen felter til ett i seksjonen. Se utdrag:
<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.