dor-services 2.2.4 → 4.4.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/bin/dor-indexer +108 -0
- data/bin/dor-indexerd +73 -0
- data/bin/nokogiri +19 -0
- data/bin/rake +19 -0
- data/bin/ruby_noexec_wrapper +14 -0
- data/bin/solrizer +19 -0
- data/bin/solrizerd +19 -0
- data/config/certs/README +1 -0
- data/config/config_defaults.yml +62 -0
- data/config/dev_console_env.rb.example +67 -0
- data/config/predicate_mappings.yml +55 -0
- data/lib/dor-services.rb +152 -19
- data/lib/dor/config.rb +133 -35
- data/lib/dor/datastreams/administrative_metadata_ds.rb +84 -0
- data/lib/dor/datastreams/content_metadata_ds.rb +337 -0
- data/lib/dor/datastreams/datastream_spec_solrizer.rb +18 -0
- data/lib/dor/datastreams/default_object_rights_ds.rb +52 -0
- data/lib/dor/datastreams/desc_metadata_ds.rb +39 -0
- data/lib/{datastreams → dor/datastreams}/embargo_metadata_ds.rb +25 -20
- data/lib/{datastreams → dor/datastreams}/events_ds.rb +14 -9
- data/lib/dor/datastreams/identity.xsl +8 -0
- data/lib/dor/datastreams/identity_metadata_ds.rb +112 -0
- data/lib/dor/datastreams/role_metadata_ds.rb +51 -0
- data/lib/dor/datastreams/simple_dublin_core_ds.rb +45 -0
- data/lib/dor/datastreams/version_metadata_ds.rb +214 -0
- data/lib/dor/datastreams/workflow_definition_ds.rb +113 -0
- data/lib/dor/datastreams/workflow_ds.rb +103 -0
- data/lib/dor/exceptions.rb +0 -1
- data/lib/dor/migrations/content_metadata_ds/change_content_type.rb +7 -0
- data/lib/dor/migrations/identifiable/assert_adminPolicy.rb +9 -0
- data/lib/dor/migrations/identifiable/fix_model_assertions.rb +13 -0
- data/lib/dor/migrations/identifiable/record_remediation.rb +18 -0
- data/lib/dor/migrations/identifiable/uriify_augmented_contentlocation_refs.rb +18 -0
- data/lib/dor/migrations/identifiable/uriify_contentlocation_refs.rb +18 -0
- data/lib/dor/migrations/processable/unify_workflows.rb +17 -0
- data/lib/dor/migrations/versionable/add_missing_version_md.rb +9 -0
- data/lib/dor/models/admin_policy_object.rb +16 -0
- data/lib/dor/models/assembleable.rb +14 -0
- data/lib/dor/models/collection.rb +14 -0
- data/lib/dor/models/contentable.rb +227 -0
- data/lib/dor/models/describable.rb +194 -0
- data/lib/dor/models/discoverable.rb +66 -0
- data/lib/dor/models/editable.rb +267 -0
- data/lib/dor/models/embargoable.rb +97 -0
- data/lib/dor/models/eventable.rb +12 -0
- data/lib/dor/models/governable.rb +162 -0
- data/lib/dor/models/identifiable.rb +211 -0
- data/lib/dor/models/item.rb +44 -0
- data/lib/dor/models/itemizable.rb +66 -0
- data/lib/dor/{mods2dc.xslt → models/mods2dc.xslt} +39 -12
- data/lib/dor/models/preservable.rb +50 -0
- data/lib/dor/models/processable.rb +229 -0
- data/lib/dor/models/publishable.rb +74 -0
- data/lib/dor/models/set.rb +12 -0
- data/lib/dor/models/shelvable.rb +27 -0
- data/lib/dor/models/upgradable.rb +74 -0
- data/lib/dor/models/versionable.rb +94 -0
- data/lib/dor/models/workflow_object.rb +54 -0
- data/lib/dor/services/cleanup_service.rb +47 -0
- data/lib/dor/services/digital_stacks_service.rb +55 -0
- data/lib/dor/services/merge_service.rb +96 -0
- data/lib/dor/{metadata_handlers → services/metadata_handlers}/catalog_handler.rb +0 -2
- data/lib/dor/{metadata_handlers → services/metadata_handlers}/mdtoolkit_handler.rb +0 -2
- data/lib/dor/{metadata_service.rb → services/metadata_service.rb} +1 -3
- data/lib/dor/services/registration_service.rb +181 -0
- data/lib/dor/services/sdr_ingest_service.rb +181 -0
- data/lib/dor/services/search_service.rb +131 -0
- data/lib/dor/services/suri_service.rb +32 -0
- data/lib/dor/services/technical_metadata_service.rb +226 -0
- data/lib/dor/{tei2dc.xslt → services/tei2dc.xslt} +0 -0
- data/lib/dor/utils/ng_tidy.rb +37 -0
- data/lib/dor/utils/predicate_patch.rb +23 -0
- data/lib/dor/utils/solr_doc_helper.rb +9 -0
- data/lib/dor/utils/utc_date_field_mapper.rb +7 -0
- data/lib/dor/version.rb +3 -0
- data/lib/dor/workflow/document.rb +131 -0
- data/lib/dor/workflow/graph.rb +166 -0
- data/lib/dor/workflow/process.rb +99 -0
- data/lib/gsearch/demoFoxmlToSolr.xslt +340 -122
- data/lib/tasks/dor.rake +39 -0
- metadata +494 -384
- data/lib/datastreams/content_metadata_ds.rb +0 -12
- data/lib/datastreams/identity_metadata_ds.rb +0 -28
- data/lib/datastreams/ng_tidy.rb +0 -19
- data/lib/datastreams/simple_dublin_core_ds.rb +0 -23
- data/lib/datastreams/workflow_definition_ds.rb +0 -105
- data/lib/datastreams/workflow_ds.rb +0 -16
- data/lib/dor/admin_policy_object.rb +0 -11
- data/lib/dor/base.rb +0 -81
- data/lib/dor/cleanup_service.rb +0 -32
- data/lib/dor/digital_stacks_service.rb +0 -82
- data/lib/dor/druid_utils.rb +0 -41
- data/lib/dor/embargo.rb +0 -41
- data/lib/dor/item.rb +0 -141
- data/lib/dor/provenance_metadata_service.rb +0 -65
- data/lib/dor/registration_service.rb +0 -87
- data/lib/dor/rsolr.rb +0 -27
- data/lib/dor/sdr_ingest_service.rb +0 -117
- data/lib/dor/search_service.rb +0 -86
- data/lib/dor/suri_service.rb +0 -37
- data/lib/dor/workflow_object.rb +0 -13
- data/lib/dor/workflow_service.rb +0 -111
- data/lib/xml_models/foxml.rb +0 -261
- data/lib/xml_models/identity_metadata/dublin_core.rb +0 -119
- data/lib/xml_models/identity_metadata/identity_metadata.rb +0 -288
@@ -1,18 +1,21 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<!-- $Id: demoFoxmlToLucene.xslt 5734 2006-11-28 11:20:15Z gertsp $ -->
|
3
|
-
<xsl:stylesheet
|
3
|
+
<xsl:stylesheet version="1.0"
|
4
|
+
exclude-result-prefixes="dc dt ex exts fedora-model fedora-types fn foxml hydra oai_dc rdf rel uvalibadmin uvalibdesc xsl"
|
4
5
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
5
6
|
xmlns:exts="xalan://dk.defxws.fedoragsearch.server.GenericOperationsImpl"
|
7
|
+
xmlns:ex="http://exslt.org/common"
|
8
|
+
xmlns:dt="http://exslt.org/dates-and-times"
|
6
9
|
xmlns:fedora-model="info:fedora/fedora-system:def/model#"
|
7
10
|
xmlns:fedora-types="http://www.fedora.info/definitions/1/0/types/"
|
8
|
-
xmlns:
|
9
|
-
xmlns:
|
11
|
+
xmlns:fn="http://www.w3.org/TR/xpath-functions/"
|
12
|
+
xmlns:foxml="info:fedora/fedora-system:def/foxml#"
|
13
|
+
xmlns:hydra="http://projecthydra.org/ns/relations#" xmlns:mods="http://www.loc.gov/mods/v3"
|
10
14
|
xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/"
|
11
15
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
12
16
|
xmlns:rel="info:fedora/fedora-system:def/relations-external#"
|
13
17
|
xmlns:uvalibadmin="http://dl.lib.virginia.edu/bin/admin/admin.dtd/"
|
14
18
|
xmlns:uvalibdesc="http://dl.lib.virginia.edu/bin/dtd/descmeta/descmeta.dtd"
|
15
|
-
xmlns:fn="http://www.w3.org/TR/xpath-functions/"
|
16
19
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:zs="http://www.loc.gov/zing/srw/">
|
17
20
|
<xsl:output encoding="UTF-8" indent="yes" method="xml"/>
|
18
21
|
<!--
|
@@ -21,27 +24,42 @@
|
|
21
24
|
Options for tailoring:
|
22
25
|
- generation of fields from other XML metadata streams than DC
|
23
26
|
- generation of fields from other datastream types than XML
|
24
|
-
|
25
|
-
|
26
|
-
-->
|
27
|
+
- from datastream by ID, text fetched, if mimetype can be handled
|
28
|
+
currently the mimetypes text/plain, text/xml, text/html, application/pdf can be handled.
|
29
|
+
-->
|
30
|
+
<xsl:variable name="INDEXVERSION">2.2.0</xsl:variable>
|
31
|
+
|
32
|
+
<xsl:param name="INCLUDE_EXTERNALS" select="true()"/>
|
27
33
|
<xsl:param name="REPOSITORYNAME" select="repositoryName"/>
|
28
34
|
<xsl:param name="FEDORASOAP" select="repositoryName"/>
|
29
35
|
<xsl:param name="FEDORAUSER" select="repositoryName"/>
|
30
36
|
<xsl:param name="FEDORAPASS" select="repositoryName"/>
|
31
37
|
<xsl:param name="TRUSTSTOREPATH" select="repositoryName"/>
|
32
38
|
<xsl:param name="TRUSTSTOREPASS" select="repositoryName"/>
|
33
|
-
<xsl:variable name="scheme" select="substring-before($FEDORASOAP,'//')"/>
|
34
|
-
<xsl:variable name="path" select="substring-before(substring-after($FEDORASOAP,'//'),'/services')"/>
|
35
|
-
<xsl:variable name="FEDORAROOT">
|
36
|
-
<xsl:value-of select="concat($scheme,'//',$FEDORAUSER,':',$FEDORAPASS,'@',$path)"/>
|
37
|
-
</xsl:variable>
|
38
39
|
<xsl:variable name="PID" select="/foxml:digitalObject/@PID"/>
|
39
40
|
<xsl:variable name="docBoost" select="1.4*2.5"/>
|
41
|
+
<xsl:variable name="OBJECTTYPE"
|
42
|
+
select="//foxml:datastream/foxml:datastreamVersion[last()]//identityMetadata/objectType/text()"/>
|
43
|
+
<xsl:variable name="first-workflow-url">
|
44
|
+
<xsl:value-of select="//foxml:contentLocation[@TYPE='URL' and contains(@REF, 'workflow/dor/objects')]/@REF"/>
|
45
|
+
</xsl:variable>
|
46
|
+
<xsl:variable name="workflow-stem">
|
47
|
+
<xsl:value-of select="substring-before($first-workflow-url, $PID)"/>
|
48
|
+
</xsl:variable>
|
49
|
+
<xsl:variable name="DATASTREAM_LIST">
|
50
|
+
<ds name="RELS-EXT"/>
|
51
|
+
<ds name="DC"/>
|
52
|
+
<ds name="identityMetadata"/>
|
53
|
+
<ds name="descMetadata"/>
|
54
|
+
<ds name="embargoMetadata"/>
|
55
|
+
<ds name="administrativeMetadata"/>
|
56
|
+
<ds name="roleMetadata"/>
|
57
|
+
<ds name="contentMetadata"/>
|
58
|
+
<ds name="rightsMetadata"/>
|
59
|
+
<ds name="workflows"/>
|
60
|
+
<!--<ds match="WF"/>-->
|
61
|
+
</xsl:variable>
|
40
62
|
|
41
|
-
<xsl:variable name="OBJECTTYPE" select="//foxml:datastream/foxml:datastreamVersion[last()]//identityMetadata/objectType/text()"/>
|
42
|
-
|
43
|
-
<xsl:variable name="INDEXVERSION">1.3.2011102001</xsl:variable>
|
44
|
-
|
45
63
|
<!-- or any other calculation, default boost is 1.0 -->
|
46
64
|
<xsl:template match="/">
|
47
65
|
<add>
|
@@ -50,7 +68,7 @@
|
|
50
68
|
</doc>
|
51
69
|
</add>
|
52
70
|
</xsl:template>
|
53
|
-
|
71
|
+
|
54
72
|
<xsl:template match="/foxml:digitalObject">
|
55
73
|
<field name="index_version_field">
|
56
74
|
<xsl:value-of select="$INDEXVERSION"/>
|
@@ -66,64 +84,111 @@
|
|
66
84
|
</field>
|
67
85
|
<field name="link_text_display">
|
68
86
|
<xsl:choose>
|
69
|
-
<xsl:when test="//dc:title"
|
70
|
-
|
87
|
+
<xsl:when test="//dc:title">
|
88
|
+
<xsl:value-of select="//dc:title/text()"/>
|
89
|
+
</xsl:when>
|
90
|
+
<xsl:otherwise>
|
91
|
+
<xsl:value-of select="$PID"/>
|
92
|
+
</xsl:otherwise>
|
71
93
|
</xsl:choose>
|
72
94
|
</field>
|
95
|
+
<xsl:call-template name="lifecycle"/>
|
73
96
|
<xsl:apply-templates select="*"/>
|
97
|
+
<xsl:call-template name="workflows"/>
|
74
98
|
</xsl:template>
|
75
99
|
|
76
100
|
<xsl:template match="foxml:objectProperties/foxml:property">
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
<xsl:
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
</field>
|
101
|
+
<field>
|
102
|
+
<xsl:attribute name="name">
|
103
|
+
<!-- if this is a data field, append with date, otherwise field -->
|
104
|
+
<xsl:choose>
|
105
|
+
<xsl:when test="contains(@NAME, 'Date')">
|
106
|
+
<xsl:value-of select="concat('fgs_', substring-after(@NAME,'#'), '_date')"/>
|
107
|
+
</xsl:when>
|
108
|
+
<xsl:otherwise>
|
109
|
+
<xsl:value-of select="concat('fgs_', substring-after(@NAME,'#'), '_field')"
|
110
|
+
/>
|
111
|
+
</xsl:otherwise>
|
112
|
+
</xsl:choose>
|
113
|
+
</xsl:attribute>
|
114
|
+
<xsl:value-of select="@VALUE"/>
|
115
|
+
</field>
|
93
116
|
</xsl:template>
|
94
117
|
|
95
118
|
<xsl:template match="foxml:datastream">
|
96
|
-
|
97
|
-
|
98
|
-
<xsl:value-of select="@ID"/>
|
119
|
+
<field name="fedora_datastream_version_field">
|
120
|
+
<xsl:value-of select="foxml:datastreamVersion[last()]/@ID"/>
|
99
121
|
</field>
|
100
|
-
|
101
|
-
|
102
|
-
|
122
|
+
<xsl:apply-templates select="foxml:datastreamVersion[last()]"/>
|
123
|
+
</xsl:template>
|
124
|
+
|
125
|
+
<!-- Index inline datastreams -->
|
126
|
+
<xsl:template match="foxml:datastream[foxml:datastreamVersion/foxml:xmlContent]/foxml:datastreamVersion[last()]">
|
127
|
+
<xsl:variable name="datastream-name" select="../@ID"/>
|
128
|
+
<xsl:apply-templates select="foxml:xmlContent/*">
|
129
|
+
<xsl:with-param name="datastream-name" select="$datastream-name"/>
|
130
|
+
</xsl:apply-templates>
|
131
|
+
</xsl:template>
|
132
|
+
|
133
|
+
<!-- Index managed/external datastreams -->
|
134
|
+
<xsl:template match="foxml:datastream[foxml:datastreamVersion/foxml:contentLocation]/foxml:datastreamVersion[last()]">
|
135
|
+
<xsl:if test="$INCLUDE_EXTERNALS">
|
136
|
+
<xsl:variable name="ds" select="."/>
|
137
|
+
<xsl:call-template name="process-datastream">
|
138
|
+
<xsl:with-param name="ds" select="$ds"/>
|
139
|
+
<xsl:with-param name="datastreams" select="ex:node-set($DATASTREAM_LIST)"/>
|
140
|
+
</xsl:call-template>
|
141
|
+
</xsl:if>
|
103
142
|
</xsl:template>
|
104
143
|
|
144
|
+
<xsl:template name="process-datastream">
|
145
|
+
<xsl:param name="ds"/>
|
146
|
+
<xsl:param name="datastreams"/>
|
147
|
+
<xsl:variable name="datastream-name" select="$ds/../@ID"/>
|
148
|
+
<xsl:variable name="datastream-ts" select="$ds/@CREATED"/>
|
149
|
+
<xsl:variable name="content-location" select="$ds/foxml:contentLocation/@REF"/>
|
150
|
+
<xsl:for-each select="$datastreams/*">
|
151
|
+
<xsl:if test="(@name and (@name = $datastream-name)) or (@match and contains($datastream-name,@match))">
|
152
|
+
<xsl:variable name="content-uri">
|
153
|
+
<xsl:choose>
|
154
|
+
<xsl:when test="contains($content-location, '/fedora/get/')">http://localhost:8080/fedora/<xsl:value-of select="substring-after($content-location,'/fedora/')"/></xsl:when>
|
155
|
+
<xsl:otherwise><xsl:value-of select="$content-location"/></xsl:otherwise>
|
156
|
+
</xsl:choose>
|
157
|
+
</xsl:variable>
|
158
|
+
<xsl:message>Retrieving <xsl:value-of select="$content-uri"/></xsl:message>
|
159
|
+
<xsl:apply-templates select="document($content-uri)/*">
|
160
|
+
<xsl:with-param name="datastream-name" select="$datastream-name"/>
|
161
|
+
</xsl:apply-templates>
|
162
|
+
</xsl:if>
|
163
|
+
</xsl:for-each>
|
164
|
+
</xsl:template>
|
165
|
+
|
166
|
+
<xsl:template name="workflows">
|
167
|
+
<xsl:variable name="combined-workflow-stream" select="document(concat($workflow-stem,$PID,'/workflows'))"/>
|
168
|
+
<xsl:apply-templates select="$combined-workflow-stream/workflows/workflow"/>
|
169
|
+
</xsl:template>
|
170
|
+
|
105
171
|
<!-- Index RELS-EXT -->
|
106
|
-
<xsl:template match="rdf:RDF
|
172
|
+
<xsl:template match="rdf:RDF/rdf:Description">
|
107
173
|
<!-- Grab the cmodel -->
|
108
174
|
<xsl:for-each select="./fedora-model:hasModel">
|
109
175
|
<field name="fedora_has_model_field">
|
110
176
|
<xsl:value-of select="@rdf:resource"/>
|
111
177
|
</field>
|
112
178
|
</xsl:for-each>
|
113
|
-
|
114
179
|
<xsl:for-each select="*[@rdf:resource]">
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
180
|
+
<xsl:variable name="doc-pid" select="substring-after(./@rdf:resource,'info:fedora/')"/>
|
181
|
+
<field name="{local-name(.)}_id_field">
|
182
|
+
<xsl:value-of select="$doc-pid"/>
|
183
|
+
</field>
|
184
|
+
<field name="{local-name(.)}_id_facet">
|
185
|
+
<xsl:value-of select="$doc-pid"/>
|
186
|
+
</field>
|
187
|
+
</xsl:for-each>
|
123
188
|
</xsl:template>
|
124
189
|
|
125
190
|
<!-- Index DC -->
|
126
|
-
<xsl:template match="oai_dc:dc
|
191
|
+
<xsl:template match="oai_dc:dc">
|
127
192
|
<xsl:for-each select="dc:title|dc:creator|dc:identifier">
|
128
193
|
<field name="dc_{local-name(.)}_text">
|
129
194
|
<xsl:value-of select="text()"/>
|
@@ -135,9 +200,11 @@
|
|
135
200
|
</field>
|
136
201
|
</xsl:for-each>
|
137
202
|
</xsl:template>
|
203
|
+
|
138
204
|
|
205
|
+
|
139
206
|
<!-- Index identity metadata -->
|
140
|
-
<xsl:template match="identityMetadata
|
207
|
+
<xsl:template match="identityMetadata">
|
141
208
|
<xsl:for-each select="./objectType">
|
142
209
|
<field name="object_type_field">
|
143
210
|
<xsl:value-of select="./text()"/>
|
@@ -148,7 +215,7 @@
|
|
148
215
|
<xsl:value-of select="concat(@source, ':', normalize-space(./text()))"/>
|
149
216
|
</field>
|
150
217
|
<field name="source_id_field">
|
151
|
-
<xsl:value-of select="normalize-space(./text())"/>
|
218
|
+
<xsl:value-of select="concat(@source, ':', normalize-space(./text()))"/>
|
152
219
|
</field>
|
153
220
|
<field name="identifier_text">
|
154
221
|
<xsl:value-of select="concat(@source, ':', normalize-space(./text()))"/>
|
@@ -177,7 +244,9 @@
|
|
177
244
|
<xsl:variable name="tag-name"
|
178
245
|
select="normalize-space(substring-before($text-value, ':'))"/>
|
179
246
|
<xsl:variable name="field-name">
|
180
|
-
<xsl:call-template name="valid-field-name"
|
247
|
+
<xsl:call-template name="valid-field-name">
|
248
|
+
<xsl:with-param name="name" select="$tag-name"/>
|
249
|
+
</xsl:call-template>
|
181
250
|
<xsl:text>_tag</xsl:text>
|
182
251
|
</xsl:variable>
|
183
252
|
<field name="{$field-name}_field">
|
@@ -188,13 +257,17 @@
|
|
188
257
|
</field>
|
189
258
|
</xsl:for-each>
|
190
259
|
</xsl:template>
|
191
|
-
|
260
|
+
|
192
261
|
<!-- Index MODS descriptive metadata -->
|
193
|
-
<xsl:template match="mods:mods
|
262
|
+
<xsl:template match="mods:mods">
|
263
|
+
<field name="metadata_format_field">mods</field>
|
264
|
+
<field name="metadata_format_facet">mods</field>
|
194
265
|
<!-- Grab the MODS identifiers -->
|
195
266
|
<xsl:for-each select="./mods:identifier">
|
196
267
|
<xsl:variable name="identifier-label">
|
197
|
-
<xsl:call-template name="valid-field-name"
|
268
|
+
<xsl:call-template name="valid-field-name">
|
269
|
+
<xsl:with-param name="name" select="@displayLabel"/>
|
270
|
+
</xsl:call-template>
|
198
271
|
</xsl:variable>
|
199
272
|
<field name="mods_identifier_field">
|
200
273
|
<xsl:value-of select="@displayLabel"/>:<xsl:value-of select="text()"/>
|
@@ -209,15 +282,9 @@
|
|
209
282
|
<xsl:value-of select="text()"/>
|
210
283
|
</field>
|
211
284
|
</xsl:for-each>
|
212
|
-
|
213
285
|
<xsl:for-each select="mods:titleInfo">
|
214
286
|
<xsl:variable name="title-info">
|
215
|
-
<xsl:
|
216
|
-
<xsl:value-of select="mods:title/text()"/>
|
217
|
-
<xsl:if test="mods:subTitle">
|
218
|
-
<xsl:text> : </xsl:text>
|
219
|
-
<xsl:value-of select="mods:subTitle/text()"/>
|
220
|
-
</xsl:if>
|
287
|
+
<xsl:call-template name="mods-title"/>
|
221
288
|
</xsl:variable>
|
222
289
|
<field name="mods_titleInfo_field">
|
223
290
|
<xsl:value-of select="$title-info"/>
|
@@ -226,16 +293,42 @@
|
|
226
293
|
<xsl:value-of select="$title-info"/>
|
227
294
|
</field>
|
228
295
|
</xsl:for-each>
|
229
|
-
|
230
296
|
<xsl:for-each select="mods:name">
|
297
|
+
<xsl:variable name="name-info">
|
298
|
+
<xsl:call-template name="mods-name"/>
|
299
|
+
</xsl:variable>
|
231
300
|
<field name="mods_name_field">
|
232
|
-
<xsl:value-of select="
|
301
|
+
<xsl:value-of select="$name-info"/>
|
233
302
|
</field>
|
234
303
|
<field name="mods_name_text">
|
235
|
-
<xsl:value-of select="
|
304
|
+
<xsl:value-of select="$name-info"/>
|
305
|
+
</field>
|
306
|
+
<xsl:if test="mods:role/mods:roleTerm[@type='text']">
|
307
|
+
<xsl:variable name="role" select="mods:role/mods:roleTerm[@type='text']/text()"/>
|
308
|
+
<field name="mods_{$role}_field">
|
309
|
+
<xsl:value-of select="mods:namePart/text()"/>
|
310
|
+
</field>
|
311
|
+
<field name="mods_{$role}_text">
|
312
|
+
<xsl:value-of select="mods:namePart/text()"/>
|
313
|
+
</field>
|
314
|
+
</xsl:if>
|
315
|
+
</xsl:for-each>
|
316
|
+
<xsl:for-each select="mods:originInfo/mods:publisher">
|
317
|
+
<field name="mods_publisher_field">
|
318
|
+
<xsl:value-of select="text()"/>
|
319
|
+
</field>
|
320
|
+
<field name="mods_publisher_text">
|
321
|
+
<xsl:value-of select="text()"/>
|
322
|
+
</field>
|
323
|
+
</xsl:for-each>
|
324
|
+
<xsl:for-each select="mods:originInfo/mods:place/mods:placeTerm[@type='text']">
|
325
|
+
<field name="mods_origininfo_place_field">
|
326
|
+
<xsl:value-of select="text()"/>
|
327
|
+
</field>
|
328
|
+
<field name="mods_origininfo_place_text">
|
329
|
+
<xsl:value-of select="text()"/>
|
236
330
|
</field>
|
237
331
|
</xsl:for-each>
|
238
|
-
|
239
332
|
<!-- Index some, but not all, MODS fields -->
|
240
333
|
<xsl:for-each select="//mods:coordinates|//mods:extent|//mods:scale|//mods:topic">
|
241
334
|
<xsl:if test="./text()">
|
@@ -244,83 +337,194 @@
|
|
244
337
|
</field>
|
245
338
|
</xsl:if>
|
246
339
|
</xsl:for-each>
|
247
|
-
|
248
|
-
|
340
|
+
<xsl:for-each
|
341
|
+
select="//mods:*[contains(local-name(),'date') or contains(local-name(), 'Date')]">
|
249
342
|
<xsl:variable name="date-label">
|
250
|
-
<xsl:call-template name="valid-field-name"
|
343
|
+
<xsl:call-template name="valid-field-name">
|
344
|
+
<xsl:with-param name="name" select="local-name()"/>
|
345
|
+
</xsl:call-template>
|
251
346
|
</xsl:variable>
|
252
347
|
<field name="mods_{$date-label}_field">
|
253
348
|
<xsl:value-of select="normalize-space(./text())"/>
|
254
349
|
</field>
|
255
350
|
</xsl:for-each>
|
256
|
-
<!--
|
351
|
+
<!--
|
257
352
|
<xsl:for-each select=".//mods:*[string-length(normalize-space(text())) > 0]">
|
258
353
|
<field name="mods_{local-name(.)}_field"><xsl:value-of select="normalize-space(./text())"/></field>
|
259
354
|
</xsl:for-each>
|
260
355
|
-->
|
261
356
|
</xsl:template>
|
262
|
-
|
263
|
-
<!-- Index content metadata -->
|
264
|
-
<xsl:template match="contentMetadata[ancestor::foxml:datastream[@ID='contentMetadata']]">
|
265
|
-
<field name="content_type_facet">
|
266
|
-
<xsl:value-of select="@type"/>
|
267
|
-
</field>
|
268
|
-
<xsl:apply-templates/>
|
269
|
-
</xsl:template>
|
270
|
-
|
271
|
-
<xsl:template match="contentMetadata/resource/file">
|
272
|
-
<field name="content_file_field">
|
273
|
-
<xsl:value-of select="@id"/>
|
274
|
-
</field>
|
275
|
-
<xsl:if test="@shelve = 'yes'">
|
276
|
-
<field name="shelved_content_file_field">
|
277
|
-
<xsl:value-of select="@id"/>
|
278
|
-
</field>
|
279
|
-
</xsl:if>
|
280
|
-
</xsl:template>
|
281
357
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
<xsl:
|
358
|
+
<!-- mods-title and mods-name templates cribbed from mods2dc.xslt -->
|
359
|
+
<xsl:template name="mods-title">
|
360
|
+
<xsl:value-of select="mods:nonSort"/>
|
361
|
+
<xsl:if test="mods:nonSort">
|
362
|
+
|
363
|
+
<xsl:text> </xsl:text>
|
364
|
+
</xsl:if>
|
365
|
+
<xsl:value-of select="mods:title"/>
|
366
|
+
<xsl:if test="mods:subTitle">
|
367
|
+
<xsl:text>: </xsl:text>
|
368
|
+
<xsl:value-of select="mods:subTitle"/>
|
369
|
+
</xsl:if>
|
370
|
+
<xsl:if test="mods:partNumber">
|
371
|
+
|
372
|
+
<xsl:text>. </xsl:text>
|
373
|
+
<xsl:value-of select="mods:partNumber"/>
|
374
|
+
</xsl:if>
|
375
|
+
<xsl:if test="mods:partName">
|
376
|
+
<xsl:text>. </xsl:text>
|
377
|
+
<xsl:value-of select="mods:partName"/>
|
378
|
+
</xsl:if>
|
379
|
+
</xsl:template>
|
380
|
+
|
381
|
+
<xsl:template name="mods-name">
|
382
|
+
<xsl:variable name="name">
|
383
|
+
<xsl:for-each select="mods:namePart[not(@type)]">
|
384
|
+
<xsl:value-of select="."/>
|
385
|
+
|
386
|
+
<xsl:text> </xsl:text>
|
387
|
+
</xsl:for-each>
|
388
|
+
<xsl:value-of select="mods:namePart[@type='family']"/>
|
389
|
+
<xsl:if test="mods:namePart[@type='given']">
|
390
|
+
<xsl:text>, </xsl:text>
|
391
|
+
<xsl:value-of select="mods:namePart[@type='given']"/>
|
392
|
+
</xsl:if>
|
393
|
+
<xsl:if test="mods:namePart[@type='date']">
|
394
|
+
|
395
|
+
<xsl:text>, </xsl:text>
|
396
|
+
<xsl:value-of select="mods:namePart[@type='date']"/>
|
397
|
+
<xsl:text/>
|
398
|
+
</xsl:if>
|
399
|
+
<xsl:if test="mods:displayForm">
|
400
|
+
<xsl:text> (</xsl:text>
|
401
|
+
<xsl:value-of select="mods:displayForm"/>
|
402
|
+
|
403
|
+
<xsl:text>) </xsl:text>
|
404
|
+
</xsl:if>
|
405
|
+
<xsl:for-each select="mods:role[mods:roleTerm[@type='text']!='creator']">
|
406
|
+
<xsl:text> (</xsl:text>
|
407
|
+
<xsl:value-of select="normalize-space(.)"/>
|
408
|
+
<xsl:text>) </xsl:text>
|
409
|
+
</xsl:for-each>
|
410
|
+
|
411
|
+
</xsl:variable>
|
412
|
+
<xsl:value-of select="normalize-space($name)"/>
|
413
|
+
</xsl:template>
|
414
|
+
|
415
|
+
<!-- Index content metadata -->
|
416
|
+
<xsl:template match="contentMetadata">
|
417
|
+
<field name="content_type_facet">
|
418
|
+
<xsl:value-of select="@type"/>
|
419
|
+
</field>
|
420
|
+
<xsl:apply-templates select="./resource">
|
421
|
+
<xsl:sort data-type="number" select="@sequence"/>
|
298
422
|
</xsl:apply-templates>
|
299
423
|
</xsl:template>
|
424
|
+
<xsl:template match="contentMetadata/resource/file">
|
425
|
+
<field name="content_file_field">
|
426
|
+
<xsl:value-of select="@id"/>
|
427
|
+
</field>
|
428
|
+
<xsl:if test="@shelve = 'yes'">
|
429
|
+
<field name="shelved_content_file_field">
|
430
|
+
<xsl:value-of select="@id"/>
|
431
|
+
</field>
|
432
|
+
</xsl:if>
|
433
|
+
</xsl:template>
|
434
|
+
|
435
|
+
<!-- Index rights metadata -->
|
436
|
+
<xsl:template match="rightsMetadata">
|
437
|
+
<xsl:if test="access[@type='read']/machine/embargoReleaseDate">
|
438
|
+
<field name="embargo_status_facet">embargoed</field>
|
439
|
+
<field name="embargo_status_field">embargoed</field>
|
440
|
+
<field name="embargo_release_date">
|
441
|
+
<xsl:call-template name="long-enough-date">
|
442
|
+
<xsl:with-param name="date" select="access[@type='read']/machine/embargoReleaseDate/text()"/>
|
443
|
+
</xsl:call-template>
|
444
|
+
</field>
|
445
|
+
</xsl:if>
|
446
|
+
</xsl:template>
|
447
|
+
|
448
|
+
<!-- Index embargo metadata -->
|
449
|
+
<xsl:template match="embargoMetadata">
|
450
|
+
<xsl:if test="(status != '') and (releaseDate != '')">
|
451
|
+
<field name="embargo_status_facet">
|
452
|
+
<xsl:value-of select="status"/>
|
453
|
+
</field>
|
454
|
+
<field name="embargo_status_field">
|
455
|
+
<xsl:value-of select="status"/>
|
456
|
+
</field>
|
457
|
+
<field name="embargo_release_date">
|
458
|
+
<xsl:call-template name="long-enough-date">
|
459
|
+
<xsl:with-param name="date" select="releaseDate"/>
|
460
|
+
</xsl:call-template>
|
461
|
+
</field>
|
462
|
+
</xsl:if>
|
463
|
+
</xsl:template>
|
464
|
+
|
465
|
+
<!-- Workflows -->
|
466
|
+
<xsl:template name="lifecycle">
|
467
|
+
<xsl:variable name="lifecycle-uri" select="concat($workflow-stem, $PID, '/lifecycle')"/>
|
468
|
+
<xsl:message>Retrieving <xsl:value-of select="$lifecycle-uri"/></xsl:message>
|
469
|
+
<xsl:variable name="doc" select="document($lifecycle-uri)"/>
|
470
|
+
<xsl:apply-templates select="$doc/*"/>
|
471
|
+
</xsl:template>
|
300
472
|
|
473
|
+
<xsl:template match="lifecycle">
|
474
|
+
<xsl:for-each select="milestone">
|
475
|
+
<xsl:variable name="zdate" select="concat(substring(@date,1,19),'Z')"/>
|
476
|
+
<field name="lifecycle_field">
|
477
|
+
<xsl:value-of select="text()"/>:<xsl:value-of select="$zdate"/>
|
478
|
+
</field>
|
479
|
+
<field>
|
480
|
+
<xsl:attribute name="name">
|
481
|
+
<xsl:value-of select="concat(text(),'_date')"/>
|
482
|
+
</xsl:attribute>
|
483
|
+
<xsl:value-of select="$zdate"/>
|
484
|
+
</field>
|
485
|
+
<xsl:if test="position() = last()">
|
486
|
+
<field name="lifecycle_facet">
|
487
|
+
<xsl:value-of select="text()"/>
|
488
|
+
</field>
|
489
|
+
</xsl:if>
|
490
|
+
</xsl:for-each>
|
491
|
+
</xsl:template>
|
492
|
+
|
493
|
+
<xsl:template match="workflows">
|
494
|
+
<xsl:apply-templates select="./workflow"/>
|
495
|
+
</xsl:template>
|
496
|
+
|
301
497
|
<xsl:template match="workflow">
|
302
|
-
<xsl:param name="
|
498
|
+
<xsl:param name="datastream-name" select="@id | ancestor::foxml:datastream/@ID"/>
|
499
|
+
<xsl:variable name="workflow-name" select="$datastream-name"/>
|
303
500
|
<xsl:variable name="workflow-token">
|
304
|
-
<xsl:call-template name="valid-field-name"
|
501
|
+
<xsl:call-template name="valid-field-name">
|
502
|
+
<xsl:with-param name="name" select="$workflow-name"/>
|
503
|
+
</xsl:call-template>
|
305
504
|
</xsl:variable>
|
306
|
-
<field name="wf_facet"
|
307
|
-
|
308
|
-
|
505
|
+
<field name="wf_facet">
|
506
|
+
<xsl:value-of select="$workflow-name"/>
|
507
|
+
</field>
|
508
|
+
<field name="wf_wsp_facet">
|
509
|
+
<xsl:value-of select="$workflow-name"/>
|
510
|
+
</field>
|
511
|
+
<field name="wf_wps_facet">
|
512
|
+
<xsl:value-of select="$workflow-name"/>
|
513
|
+
</field>
|
309
514
|
<xsl:for-each select="process">
|
515
|
+
<xsl:sort select="@datetime" data-type="text"/>
|
310
516
|
<field name="wf_wsp_facet">
|
311
517
|
<xsl:value-of select="concat($workflow-name,':',@status)"/>
|
312
518
|
</field>
|
313
519
|
<field name="wf_wsp_facet">
|
314
520
|
<xsl:value-of select="concat($workflow-name,':',@status,':',@name)"/>
|
315
521
|
</field>
|
316
|
-
|
317
522
|
<field name="wf_wps_facet">
|
318
523
|
<xsl:value-of select="concat($workflow-name,':',@name)"/>
|
319
524
|
</field>
|
320
525
|
<field name="wf_wps_facet">
|
321
526
|
<xsl:value-of select="concat($workflow-name,':',@name,':',@status)"/>
|
322
527
|
</field>
|
323
|
-
|
324
528
|
<field name="wf_swp_facet">
|
325
529
|
<xsl:value-of select="@status"/>
|
326
530
|
</field>
|
@@ -332,9 +536,9 @@
|
|
332
536
|
</field>
|
333
537
|
</xsl:for-each>
|
334
538
|
</xsl:template>
|
335
|
-
|
539
|
+
|
336
540
|
<!-- Admin Policy specific fields -->
|
337
|
-
<xsl:template match="administrativeMetadata
|
541
|
+
<xsl:template match="administrativeMetadata">
|
338
542
|
<xsl:if test="./descMetadata/format">
|
339
543
|
<field name="apo_metadata_format_field">
|
340
544
|
<xsl:value-of select="./descMetadata/format/text()"/>
|
@@ -345,17 +549,17 @@
|
|
345
549
|
<xsl:value-of select="./descMetadata/source/text()"/>
|
346
550
|
</field>
|
347
551
|
</xsl:if>
|
348
|
-
|
349
552
|
<xsl:for-each select="registration/workflow">
|
350
553
|
<field name="apo_registration_workflow_field">
|
351
554
|
<xsl:value-of select="@id"/>
|
352
555
|
</field>
|
353
556
|
</xsl:for-each>
|
354
557
|
</xsl:template>
|
355
|
-
|
356
|
-
<xsl:template match="roleMetadata
|
558
|
+
|
559
|
+
<xsl:template match="roleMetadata">
|
357
560
|
<xsl:for-each select="./role/*">
|
358
|
-
<xsl:variable name="role_value"><xsl:value-of select="identifier/@type"/>:<xsl:value-of
|
561
|
+
<xsl:variable name="role_value"><xsl:value-of select="identifier/@type"/>:<xsl:value-of
|
562
|
+
select="identifier/text()"/></xsl:variable>
|
359
563
|
<field name="apo_role_{local-name(.)}_{../@type}_field">
|
360
564
|
<xsl:value-of select="$role_value"/>
|
361
565
|
</field>
|
@@ -375,10 +579,24 @@
|
|
375
579
|
|
376
580
|
<!-- Utility Templates -->
|
377
581
|
<xsl:template match="text()|@*|processing-instruction()|comment()"/>
|
582
|
+
|
583
|
+
<xsl:template name="long-enough-date">
|
584
|
+
<xsl:param name="date"/>
|
585
|
+
<xsl:variable name="date-format" select="'0000-00-00T00:00:00Z'"/>
|
586
|
+
<xsl:choose>
|
587
|
+
<xsl:when test="string-length($date) < string-length($date-format)">
|
588
|
+
<xsl:value-of select="$date"/><xsl:value-of select="substring($date-format,string-length($date)+1)"/>
|
589
|
+
</xsl:when>
|
590
|
+
<xsl:otherwise>
|
591
|
+
<xsl:value-of select="$date"/>
|
592
|
+
</xsl:otherwise>
|
593
|
+
</xsl:choose>
|
594
|
+
</xsl:template>
|
378
595
|
|
379
596
|
<xsl:template name="valid-field-name">
|
380
597
|
<xsl:param name="name"/>
|
381
|
-
<xsl:value-of
|
598
|
+
<xsl:value-of
|
599
|
+
select="translate($name,' ABCDEFGHIJKLMNOPQRSTUVWXYZ','_abcdefghijklmnopqrstuvwxyz')"/>
|
382
600
|
</xsl:template>
|
383
601
|
|
384
602
|
</xsl:stylesheet>
|