U22 Databasestruktur. Format for XML o.a.

Referat fra uformelt møte mellom NB (Tjelta) og BIBSYS (Kofoed) 2003-09-17

Tilstede:
Torstein Tjelta (NB)
Jan Erik Kofoed (BIBSYS)
Revisjonshistorie
Revisjon 1.0 2003-10-20

Det vil være store fordeler med å komme fram til et felles format for utveksling av MARC-poster i xml. En klar kandidat er å bruke MARCXML fra LC. Det er bare en hake med denne: Pr. definisjon forutsetter den at innholdet er MARC21. Vi har behov for å kunne utveksle både MARC21, NORMARC og BIBSYSMARC. Vi må finne en metode for å kunne angi dette. På møtet diskuterte vi to mulige løsninger:

  1. Innføre en ekstra attributt som angir MARC-type.
  2. Skille mellom MARC-typene ved å bruke ulike navnerom.

MARCXML er formelt definert i et xml-skjema (XML Schema) kalt MARC21slim.xsd Skjemaet angir navnerommet (targetNamespace) til http://www.loc.gov/MARC21/slim

Det er mulig med utgansgpunkt i skjemaet MARC21slim.xsd å definere et nytt skjema der eneste endring blir å definere et nytt rotelement (marc) med en ny attributt (type):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.bibsys.no/ns" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.bibsys.no/ns" 
           xmlns:lc="http://www.loc.gov/MARC21/slim" 
           elementFormDefault="qualified" 
           attributeFormDefault="unqualified">
  <xs:import namespace="http://www.loc.gov/MARC21/slim"
             schemaLocation="MARC21slim.xsd"/>
  <xs:element name="marc">
    <xs:annotation>
      <xs:documentation>Tillater andre MARC-format enn MARC21.
      </xs:documentation>
    </xs:annotation>
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="lc:collection"/>
      </xs:sequence>
      <xs:attribute name="type" 
                    use="required">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="NORMARC"/>
            <xs:enumeration value="BIBSYSMARC"/>
            <xs:enumeration value="MARC21"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>

Forklaring:

  1. Det nye skjemaet opererer i navnerommet http://www.bibsys.no/ns
  2. Det nye rotelementet er marc
  3. Skjema for MARCXML importeres
  4. Som innhold i elementet marc refereres definisjonen for collection fra MARCXML-skjemaet.
  5. Attributten type defineres til å være required og det angis en liste med tillatte verdier.

En instans for en BIBSYSMARC-post kan da se slik ut:

<?xml version="1.0" encoding="UTF-8"?>
<bib:marc xmlns:bib="http://www.bibsys.no/ns" 
          xmlns="http://www.loc.gov/MARC21/slim" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://www.loc.gov/MARC21/slim MARC21slim.xsd 
                              http://www.bibsys.no/ns marc01.xsd" type="BIBSYSMARC">
  <collection>
    <record>
      <leader>01142cam  2200301 a 4500</leader>
      <controlfield tag="001">   92005291 </controlfield>
      <controlfield tag="003">DLC</controlfield>
      <controlfield tag="005">19930521155141.9</controlfield>
      <controlfield tag="008">920219s1993    caua   j      000 0 eng  </controlfield>
      <datafield tag="010" ind1=" " ind2=" ">
        <subfield code="a">   92005291 </subfield>
      </datafield>
      <datafield tag="020" ind1=" " ind2=" ">
        <subfield code="a">0152038655 :</subfield>
        <subfield code="c">$15.95</subfield>
      </datafield>
      <datafield tag="040" ind1=" " ind2=" ">
        <subfield code="a">DLC</subfield>
        <subfield code="c">DLC</subfield>
        <subfield code="d">DLC</subfield>
      </datafield>
      <datafield tag="042" ind1=" " ind2=" ">
        <subfield code="a">lcac</subfield>
      </datafield>
      <datafield tag="050" ind1="0" ind2="0">
        <subfield code="a">PS3537.A618</subfield>
        <subfield code="b">A88 1993</subfield>
      </datafield>
      <datafield tag="082" ind1="0" ind2="0">
        <subfield code="a">811/.52</subfield>
        <subfield code="2">20</subfield>
      </datafield>
      <datafield tag="100" ind1="1" ind2=" ">
        <subfield code="a">Sandburg, Carl,</subfield>
        <subfield code="d">1878-1967.</subfield>
      </datafield>
      <datafield tag="245" ind1="1" ind2="0">
        <subfield code="a">Arithmetic /</subfield>
        <subfield code="c">Carl Sandburg ; 
           illustrated as an anamorphic adventure by Ted Rand.</subfield>
      </datafield>
      <datafield tag="250" ind1=" " ind2=" ">
        <subfield code="a">1st ed.</subfield>
      </datafield>
      <datafield tag="260" ind1=" " ind2=" ">
        <subfield code="a">San Diego :</subfield>
        <subfield code="b">Harcourt Brace Jovanovich,</subfield>
        <subfield code="c">c1993.</subfield>
      </datafield>
      <datafield tag="300" ind1=" " ind2=" ">
        <subfield code="a">1 v. (unpaged) :</subfield>
        <subfield code="b">ill. (some col.) ;</subfield>
        <subfield code="c">26 cm.</subfield>
      </datafield>
      <datafield tag="500" ind1=" " ind2=" ">
        <subfield code="a">One Mylar sheet included in pocket.</subfield>
      </datafield>
      <datafield tag="520" ind1=" " ind2=" ">
        <subfield code="a">A poem about numbers and their characteristics. 
           Features anamorphic, or distorted, drawings which can be 
           restored to normal by viewing from a particular angle or 
           by viewing the image's reflection in the provided Mylar cone.</subfield>
      </datafield>
      <datafield tag="650" ind1=" " ind2="0">
        <subfield code="a">Arithmetic</subfield>
        <subfield code="x">Juvenile poetry.</subfield>
      </datafield>
      <datafield tag="650" ind1=" " ind2="0">
        <subfield code="a">Children's poetry, American.</subfield>
      </datafield>
      <datafield tag="650" ind1=" " ind2="1">
        <subfield code="a">Arithmetic</subfield>
        <subfield code="x">Poetry.</subfield>
      </datafield>
      <datafield tag="650" ind1=" " ind2="1">
        <subfield code="a">American poetry.</subfield>
      </datafield>
      <datafield tag="650" ind1=" " ind2="1">
        <subfield code="a">Visual perception.</subfield>
      </datafield>
      <datafield tag="700" ind1="1" ind2=" ">
        <subfield code="a">Rand, Ted,</subfield>
        <subfield code="e">ill.</subfield>
      </datafield>
    </record>
  </collection>
</bib:marc>

Forklaring:

  1. Xml-instansen refererer til to navnerom. Standard navnerom er http://www.loc.gov/MARC21/slim. I tillegg angis navneromet http://www.bibsys.no/ns som gis prefikset bib. Valg av dette navnerommet og prefikset bib er et tenkt eksempel. Det virkelige navnerommet kan gis et mer generelt navn.
  2. Rotelementet er angitt som bib:marc og blir derved koplet til korrekt navnerom.
  3. Attributten type angir at det her dreier seg om BIBSYSMARC.
  4. Innholdet i bib:marc er elementet collection . Det har ikke noe prefiks og er derved knyttet til standard navnerom (http://www.loc.gov/MARC21/slim).
  5. Innholdet i collection har en oppbygning, syntaks nøyaktig lik med en xml-instans fra MARCXML.

Validering blir her ryddig og enkelt siden MARCXML-skjema brukes uendret i tillegg til et eget skjema som har et rent minimalistisk innhold. Hvis MARCXML-skjemaet endres, trengs ikke det lokale skjemaet å endres med mindre elementnavnet collection i MARCXML blir endret.

Løsningen vil med litt tilpasning tillate bruk av verktøy laget for MARCXML. Man må anta at elementet collection må skilles ut før verktøyene brukes. Å skille ut collection er en triviell oppgave enten man bruker XSL eller andre metoder.