MIM - METS api - PowerPoint PPT Presentation

About This Presentation
Title:

MIM - METS api

Description:

an API should be based on the data model and is (theoretically) ... catch (IOException e) { e.printStackTrace(); MetsDocument metsDoc=(MetsDocument) xml; ... – PowerPoint PPT presentation

Number of Views:34
Avg rating:3.0/5.0
Slides: 48
Provided by: end79
Learn more at: https://www.loc.gov
Category:
Tags: mets | mim | api | ioexception

less

Transcript and Presenter's Notes

Title: MIM - METS api


1
METS - API
application programming interface
METS Implementors Meeting, May 8th, 2007
Markus Enders, SUB Göttingen Jens Ludwig, SUB
Göttingen
2
Why?
necessity of an API
3
Why?
METS has a complex data model
the most common instantiation of METS is its XML
form
an API should be based on the data model and is
(theoretically) independent of its XML
representation
4
Why?
API should be focused on METS elements and their
appropriate attributes and relationships
API should support creation of METS as well
creation of invalid data should not be possible
(e.g. wrong order of elements...) 100 valid METS
data
5
Why?
Multi-Tier Applications
API connects application with serialization level.
API as a framework for METS creation / parsing
6
Why?
Applikation
METS API
Database
Repository
XML
7
Implementation Issues
Maintainance
Changes in METS-schema must be reflected by API
Programming language more than one language
should be supported
multi-level access
  • Granularity of access

8
Implementation Issues
Maintainance
Changes in METS-schema must be reflected by API
Derive classes from xml-schema e.g. Apache
xmlbeans or SUN JAXB provides java classes
for xml-schema
Programming language more than one language
should be supported
multi-level access
  • Granularity of access

9
Implementation Issues
Maintainance
Changes in METS-schema must be reflected by API
Programming language more than one language
should be supported
php-java bridge http//php-java-bridge.sourceforg
e.net Inline-Java perl module http//search.cpan.
org/patl/Inline-Java/
multi-level access
  • Granularity of access

10
Implementation Issues
Maintainance
Changes in METS-schema must be reflected by API
  • access to single elements / attributes
  • higher level for more widespread functionality

Programming language more than one language
should be supported
multi-level access
  • Granularity of access

11
Implementation Issues
Apache xmlbeans based API for java
Creates an interface for each schema object and
an implementation to read / write this object to
XML
Other implementations possible (repository)
Can create DOM tree at any time, e.g.
if non-schema based xml-data needs to be stored.
12
Implementation Issues
level one METSbeans
allows acces to single METS elements, attributes
and their relationships
xmlbeans based API for java
level two
more complex functions which are based on the
METSbeans
13
METSbeans
every type from schema becomes one class
classes are generated automatically from the
XML-schema
additional APIs can be generated and integrated
for any xml-schema based data format (e.g. MODS,
premis etc.)
14
METSbeans
internal architecture
for every type in the xml schema, an appropriate
java interface exists
every interface is implemented during automatic
generation process
additional implementations of an interface are
possible high flexibility to access mets-data
outside a file system
15
METSbeans
internal architecture
ltxsdcomplexType name"divType"gt
interface DivType
class DivTypeImpl
16
METSbeans
internal architecture
xmlbeans has a set of native data types
XMLObject, XMLString XMLShort, XMLTime
etc...
17
METSbeans
internal architecture
METSDocument as topmost class instantiates the
document.
All other objects cannot be created without this
object
Instance can be created by
  • parsing a file
  • using a factory class to create new
  • document

18
METSbeans
snippet MetsDocument
example factory class
MetsDocument metsMetsDocument.Factory.newInstance
()
example parsing a file
try xml XmlObject.Factory.parse(f) catch
(XmlException e) e.printStackTrace()
return false MetsDocument metsDoc(MetsDocument
) xml
19
METSbeans
DivType methods for accessing ltmprtrgt element
getMptrArray(), getMptrArray(int i),
sizeOfMptrArray(), setMptrArray(Mptr
mptrArray), setMptrArray(int i, Mptr
mptr), insertNewMptr(int i), addNewMptr() removeM
ptr(int i)
20
METSbeans
DivType methods for accessing ltdivgt element
getDivArray() getDivArray(int i) sizeOfDivArray()
setDivArray(DivType divArray) setDivArray(int
i, DivType div) insertNewDiv(int
i) addNewDiv() removeDiv(int i)
21
METSbeans
DivType very similar methods for handling file
pointers (ltfptrgt elements)
22
METSbeans
DivType methods to set attributes (id attribute)
getID() isSetID() setID(String
id) unsetID() xsetID(org.apache.xmlbeans.XmlID
id) xgetID()
23
METSbeans
snippet create a new ltdivgt element
MetsDocument metsMetsDocument.Factory.newIns
tance() MetsType myMetsmets.addNewMets() Struct
MapType smmyMets.addNewStructMap() DivType
divsm.addNewDiv() div.setTYPE("Monograph")
DivType firstchilddiv.addNewDiv() firstchild.se
tTYPE("TitlePage")
24
METSbeans
snippet saving a METS document
HashMap suggestedPrefixes new
HashMap() suggestedPrefixes.put("http//www.loc.g
ov/METS/",
"mets") suggestedPrefixes.put("http//www.w3.org/
1999/xlink",
"xlink") XmlOptions opts new
XmlOptions() opts.setSaveSuggestedPrefixes(sugges
tedPrefixes) File outputFilenew
File(filename) mets.save(outputFile,opts)
25
METSbeans
MdSecType
represents the METS elements
may contain MdRef or MdWrap object
ltdmdSecgt lttechMdgt ltdigiprovMdgt ltrightsMdgt ltsourceM
dgt
but not ltamdSecgt
26
METSbeans
snippet create an MdSecType object
MetsDocument metsMetsDocument.Factory.newIns
tance() MetsType myMetsmets.addNewMets() MdSecT
ype dmdSec myMets.addNewDmdSec() dmdSec.setID("D
MDID01") MdSecType.MdWrap mdwrapdmdSec.addNewMdW
rap() MdSecType.MdWrap.XmlData
xmldatamdwrap.addNewXmlData() xmldata.set(modsO
bject)
any XMLObject e.g XMLString
27
METSbeans
snippet create an MdSecType object
String
XmlString xsXmlString.Factory.newValue("ltmyd
ata/gt") xmldata.set(xs)
Document
ModsDocument modsObjectModsDocument.Factory
.newInstance() ModsType myModsmods.addNewMods()
IdentifierType identifiermyMods.addNewIdentifier
() .... xmldata.set(modsObject)
28
METSbeans
parse mets data
the API provides some parse-methods
parse(java.lang.String xmlAsString) parse(java.io.
File file) parse(java.net.URL u) parse(java.io.Inp
utStream is) parse(org.w3c.dom.Node node)
if the parsed data is NOT valid METS a
XmlException is thrown.
29
METSbeans
snippet parse mets data
File fnew File(filename) XmlObject xml try
xml XmlObject.Factory.parse(f) catch
(XmlException e) e.printStackTrace()
catch (IOException e) e.printStackTrace()
MetsDocument metsDoc(MetsDocument) xml
30
METSbeans
snippet get a DivType
MetsDocument metsDoc(MetsDocument) xml MetsType
metsinDoc.getMets() StructMapType
structsmets.getStructMapArray() for (int i0
iltstructs.lengthi) StructMapType
structstructsi String structtypestructsi
.getTYPE() if ((structtype!null)(
structtype.equals("LOGICAL"))) DivType div
struct.getDiv() String divtypediv.getTYPE()
return divtype
31
METSbeans
easy to create and parse valid METS data (much
easier than parsing DOM trees)
easy to combine with other xml data
quite fast compared to DOM
Drawback as based on xmlbeans it is only
available for java php-java / inlinejava modul
needed for php/perl
32
Helper-class
Functions
Need for additional high-level functions
Though the METSbeans allow access to every single
METS element, it is still a complex task to do
simple things e.g. adding metadata to a ltdivgt
Helper-class needed, which sits on top of
MetsBeans
33
Helper-class
Functions
Following examples are from experiences working
with METSbeans (based on METSbeans)
No official implementation, just an excerpt of
functions which a level 2 API could provide
34
Helper-class
Functions
Create DMDSec for common METS-objects
createDMDSec(XMLObject inMetadata,
DivType inDiv) createDMDSec(XMLObject
inMetadata, FileType
inFile) ...
35
Helper-class
Functions
Create adminsitrative metadata for common
METS-objects e.g.
createMDSectionInAMDSec( XMLObject
inMetadata, String type, DivType
inDiv, AmdSecType inAmdSec) ...
36
Helper-class
Functions
function to retrieve special metadata sections by
ID or TYPE
getMDSecTypeByID( String inID) getMDSecTypeByType
( String inType) ...
37
Helper-class
Functions
functions to get related files (to a ltdivgt
element)
getAllFilesForDivType( DivType
inDiv) getAllFilesForFileGroup( FileGrpType
inGrp) ...
38
Extension schema
Integration of extension schema
Export MetsBeans-objects as DOM tree.
Create Beans for extensions schema as
well Premis, MODS, MIX - Beans.
39
Extension schema
Example create MODS data
MdSecType dmdSecmets.addNewDmdSec()
dmdSec.setID(dmdid_string) MdSecType.MdWrap
mdwrapdmdSec.addNewMdWrap() MdSecType.MdWrap.Xml
Data xmlmdwrap.addNewXmlData() ModsDocument
modsModsDocument.Factory.newInstance() ModsType
myModsmods.addNewMods() xml.set(mods)
40
Extension schema
Example create ltpremisobjectgt data
MdSecType.MdWrap mdwrapdmdSec.addNewMdWrap()
MdSecType.MdWrap.XmlData xmlmdwrap.addNewXmlData(
) ObjectDocument objdocObjectDocument
.Factory.newInstance() ObjectDocument.Object
premis_objectobjdoc.addNewObject() xml.set
(objdoc)
41
Extension schema
Example parse MODS data
MdSecType dmdSec .... MdSecType.MdWrap mdw
dmdSec.getMdWrap() MdSecType.MdWrap.XmlData
xml_datamdw.getXmlData() String
resultxml_data.xmlText() ModsDocument
modsModsDocument.Factory.parse(result)
42
Problems?!
Quality of the API
API depends on XML-schema quality of API
depends on quality of schema.

MetsType fpr ltmetsgt DivType for
ltdivgt MdSecType for ltdmdSecgt,.... but not type
for METS-Header ltmetsHdrgt as it is defined
inline
43
Problems?!
Integration of extension schema
  • Problematic, if extension schema do not have a
    top-level element especially parsing is
    difficult
  • String resultxml_data.xmlText()
  • ModsDocument
  • modsModsDocument.Factory.parse(result)
  • result must always contain a valid XML-document!


e.g DublinCore simple
44
How to continue
Work with METSbeans
everybody can create METSbeans by him/herself -gt
see Apache xmlbeans Downloadable from GDZ
website Will provide a primer as a non-complete
documention for METSbeans.

45
How to continue
Identify necessary functions for helper-class
Over time we will identify additional methods
which might be useful and should be integrated in
the "helper-class".

46
Application Layer
can be build on top of METSbeans
Profile specific implementations can be build on
top of METSbeans and provide an API to the
underlying document/content model.

47
Application Layer
can be build on top of METSbeans
Applikation
Applikation
API for content model
METS API
helper class

XML serialization
Write a Comment
User Comments (0)
About PowerShow.com