Skip to content

Commit

Permalink
added module for generating jaxb-annotated classes (#627)
Browse files Browse the repository at this point in the history
* added module for generating jaxb-annotated classes based on xsd schema files

* skip check task all together for code generating module
  • Loading branch information
ketilaa authored Jan 9, 2025
1 parent f9fcd79 commit ff7c7c5
Show file tree
Hide file tree
Showing 8 changed files with 1,173 additions and 0 deletions.
12 changes: 12 additions & 0 deletions oai-pmh/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
plugins {
id("com.github.bjornvester.xjc") version "1.8.2"
}

xjc {
defaultPackage.set('org.openarchives.oai.v2.generated')
}

// effectively skip all tests and verifications for this module
tasks.named("check").configure {
dependsOn = []
}
317 changes: 317 additions & 0 deletions oai-pmh/src/main/resources/OAI-PMH-2_0.xsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,317 @@
<schema targetNamespace="http://www.openarchives.org/OAI/2.0/"
xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:oai="http://www.openarchives.org/OAI/2.0/"
elementFormDefault="qualified"
attributeFormDefault="unqualified">

<annotation>
<documentation>
XML Schema which can be used to validate replies to all OAI-PMH
v2.0 requests. Herbert Van de Sompel, 2002-05-13.
Validated with XML Spy v.4.3 on 2002-05-13.
Validated with XSV 1.203.2.45/1.106.2.22 on 2002-05-13.
Added definition of protocolVersionType instead of using anonymous
type. No change of function. Simeon Warner, 2004-03-29.
Tightened definition of UTCdatetimeType to enforce the restriction
to UTC Z notation. Simeon Warner, 2004-09-14.
Corrected pattern matches for setSpecType and metadataPrefixType
to agree with protocol specification. Simeon Warner, 2004-10-12.
Spelling correction. Simeon Warner, 2008-12-07.
$Date: 2004/10/12 15:20:29 $
</documentation>
</annotation>

<element name="OAI-PMH" type="oai:OAI-PMHtype"/>

<complexType name="OAI-PMHtype">
<sequence>
<element name="responseDate" type="dateTime"/>
<element name="request" type="oai:requestType"/>
<choice>
<element name="error" type="oai:OAI-PMHerrorType" maxOccurs="unbounded"/>
<element name="Identify" type="oai:IdentifyType"/>
<element name="ListMetadataFormats" type="oai:ListMetadataFormatsType"/>
<element name="ListSets" type="oai:ListSetsType"/>
<element name="GetRecord" type="oai:GetRecordType"/>
<element name="ListIdentifiers" type="oai:ListIdentifiersType"/>
<element name="ListRecords" type="oai:ListRecordsType"/>
</choice>
</sequence>
</complexType>

<complexType name="requestType">
<annotation>
<documentation>Define requestType, indicating the protocol request that
led to the response. Element content is BASE-URL, attributes are arguments
of protocol request, attribute-values are values of arguments of protocol
request</documentation>
</annotation>
<simpleContent>
<extension base="anyURI">
<attribute name="verb" type="oai:verbType" use="optional"/>
<attribute name="identifier" type="oai:identifierType" use="optional"/>
<attribute name="metadataPrefix" type="oai:metadataPrefixType" use="optional"/>
<attribute name="from" type="oai:UTCdatetimeType" use="optional"/>
<attribute name="until" type="oai:UTCdatetimeType" use="optional"/>
<attribute name="set" type="oai:setSpecType" use="optional"/>
<attribute name="resumptionToken" type="string" use="optional"/>
</extension>
</simpleContent>
</complexType>

<simpleType name="verbType">
<restriction base="string">
<enumeration value="Identify"/>
<enumeration value="ListMetadataFormats"/>
<enumeration value="ListSets"/>
<enumeration value="GetRecord"/>
<enumeration value="ListIdentifiers"/>
<enumeration value="ListRecords"/>
</restriction>
</simpleType>

<!-- define OAI-PMH error conditions -->
<!-- =============================== -->

<complexType name="OAI-PMHerrorType">
<simpleContent>
<extension base="string">
<attribute name="code" type="oai:OAI-PMHerrorcodeType" use="required"/>
</extension>
</simpleContent>
</complexType>

<simpleType name="OAI-PMHerrorcodeType">
<restriction base="string">
<enumeration value="cannotDisseminateFormat"/>
<enumeration value="idDoesNotExist"/>
<enumeration value="badArgument"/>
<enumeration value="badVerb"/>
<enumeration value="noMetadataFormats"/>
<enumeration value="noRecordsMatch"/>
<enumeration value="badResumptionToken"/>
<enumeration value="noSetHierarchy"/>
</restriction>
</simpleType>

<!-- define OAI-PMH verb containers -->
<!-- ============================== -->

<complexType name="IdentifyType">
<sequence>
<element name="repositoryName" type="string"/>
<element name="baseURL" type="anyURI"/>
<element name="protocolVersion" type="oai:protocolVersionType"/>
<element name="adminEmail" type="oai:emailType" maxOccurs="unbounded"/>
<element name="earliestDatestamp" type="oai:UTCdatetimeType"/>
<element name="deletedRecord" type="oai:deletedRecordType"/>
<element name="granularity" type="oai:granularityType"/>
<element name="compression" type="string" minOccurs="0" maxOccurs="unbounded"/>
<element name="description" type="oai:descriptionType"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>

<complexType name="ListMetadataFormatsType">
<sequence>
<element name="metadataFormat" type="oai:metadataFormatType" maxOccurs="unbounded"/>
</sequence>
</complexType>

<complexType name="ListSetsType">
<sequence>
<element name="set" type="oai:setType" maxOccurs="unbounded"/>
<element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
</sequence>
</complexType>

<complexType name="GetRecordType">
<sequence>
<element name="record" type="oai:recordType"/>
</sequence>
</complexType>

<complexType name="ListRecordsType">
<sequence>
<element name="record" type="oai:recordType" maxOccurs="unbounded"/>
<element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
</sequence>
</complexType>

<complexType name="ListIdentifiersType">
<sequence>
<element name="header" type="oai:headerType" maxOccurs="unbounded"/>
<element name="resumptionToken" type="oai:resumptionTokenType" minOccurs="0"/>
</sequence>
</complexType>

<!-- define basic types used in replies to
GetRecord, ListRecords, ListIdentifiers -->
<!-- ======================================= -->

<complexType name="recordType">
<annotation>
<documentation>A record has a header, a metadata part, and
an optional about container</documentation>
</annotation>
<sequence>
<element name="header" type="oai:headerType"/>
<element name="metadata" type="oai:metadataType" minOccurs="0"/>
<element name="about" type="oai:aboutType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>

<complexType name="headerType">
<annotation>
<documentation>A header has a unique identifier, a datestamp,
and setSpec(s) in case the item from which
the record is disseminated belongs to set(s).
the header can carry a deleted status indicating
that the record is deleted.</documentation>
</annotation>
<sequence>
<element name="identifier" type="oai:identifierType"/>
<element name="datestamp" type="oai:UTCdatetimeType"/>
<element name="setSpec" type="oai:setSpecType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="status" type="oai:statusType" use="optional"/>
</complexType>

<simpleType name="identifierType">
<restriction base="anyURI"/>
</simpleType>

<simpleType name="statusType">
<restriction base="string">
<enumeration value="deleted"/>
</restriction>
</simpleType>

<complexType name="metadataType">
<annotation>
<documentation>Metadata must be expressed in XML that complies
with another XML Schema (namespace=#other). Metadata must be
explicitly qualified in the response.</documentation>
</annotation>
<sequence>
<any namespace="##other" processContents="strict"/>
</sequence>
</complexType>

<complexType name="aboutType">
<annotation>
<documentation>Data "about" the record must be expressed in XML
that is compliant with an XML Schema defined by a community.</documentation>
</annotation>
<sequence>
<any namespace="##other" processContents="strict"/>
</sequence>
</complexType>

<complexType name="resumptionTokenType">
<annotation>
<documentation>A resumptionToken may have 3 optional attributes
and can be used in ListSets, ListIdentifiers, ListRecords
responses.</documentation>
</annotation>
<simpleContent>
<extension base="string">
<attribute name="expirationDate" type="dateTime" use="optional"/>
<attribute name="completeListSize" type="positiveInteger" use="optional"/>
<attribute name="cursor" type="nonNegativeInteger" use="optional"/>
</extension>
</simpleContent>
</complexType>

<complexType name="descriptionType">
<annotation>
<documentation>The descriptionType is used for the description
element in Identify and for setDescription element in ListSets.
Content must be compliant with an XML Schema defined by a
community.</documentation>
</annotation>
<sequence>
<any namespace="##other" processContents="strict"/>
</sequence>
</complexType>

<simpleType name="UTCdatetimeType">
<annotation>
<documentation>Datestamps are to either day (type date)
or to seconds granularity (type oai:UTCdateTimeZType)</documentation>
</annotation>
<union memberTypes="date oai:UTCdateTimeZType"/>
</simpleType>

<simpleType name="UTCdateTimeZType">
<restriction base="dateTime">
<pattern value=".*Z"/>
</restriction>
</simpleType>

<!-- define types used for Identify verb only -->
<!-- ======================================== -->

<simpleType name="protocolVersionType">
<restriction base="string">
<enumeration value="2.0"/>
</restriction>
</simpleType>

<simpleType name="emailType">
<restriction base="string">
<pattern value="\S+@(\S+\.)+\S+"/>
</restriction>
</simpleType>

<simpleType name="deletedRecordType">
<restriction base="string">
<enumeration value="no"/>
<enumeration value="persistent"/>
<enumeration value="transient"/>
</restriction>
</simpleType>

<simpleType name="granularityType">
<restriction base="string">
<enumeration value="YYYY-MM-DD"/>
<enumeration value="YYYY-MM-DDThh:mm:ssZ"/>
</restriction>
</simpleType>

<!-- define types used for ListMetadataFormats verb only -->
<!-- =================================================== -->

<complexType name="metadataFormatType">
<sequence>
<element name="metadataPrefix" type="oai:metadataPrefixType"/>
<element name="schema" type="anyURI"/>
<element name="metadataNamespace" type="anyURI"/>
</sequence>
</complexType>

<simpleType name="metadataPrefixType">
<restriction base="string">
<pattern value="[A-Za-z0-9\-_\.!~\*'\(\)]+"/>
</restriction>
</simpleType>

<!-- define types used for ListSets verb -->
<!-- =================================== -->

<complexType name="setType">
<sequence>
<element name="setSpec" type="oai:setSpecType"/>
<element name="setName" type="string"/>
<element name="setDescription" type="oai:descriptionType"
minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>

<simpleType name="setSpecType">
<restriction base="string">
<pattern value="([A-Za-z0-9\-_\.!~\*'\(\)])+(:[A-Za-z0-9\-_\.!~\*'\(\)]+)*"/>
</restriction>
</simpleType>

</schema>
Loading

0 comments on commit ff7c7c5

Please sign in to comment.