1 /************************************************************************
\r
3 ** Copyright (C) 2010 Strahinja Markovic
\r
5 ** This file is part of FlightCrew.
\r
7 ** FlightCrew is free software: you can redistribute it and/or modify
\r
8 ** it under the terms of the GNU Lesser General Public License as published
\r
9 ** by the Free Software Foundation, either version 3 of the License, or
\r
10 ** (at your option) any later version.
\r
12 ** FlightCrew is distributed in the hope that it will be useful,
\r
13 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
14 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
15 ** GNU Lesser General Public License for more details.
\r
17 ** You should have received a copy of the GNU Lesser General Public License
\r
18 ** along with FlightCrew. If not, see <http://www.gnu.org/licenses/>.
\r
20 *************************************************************************/
\r
23 #include "CreatorOrContributorRoleValid.h"
\r
24 #include <FromXercesStringConverter.h>
\r
25 #include <ToXercesStringConverter.h>
\r
26 #include <XmlUtils.h>
\r
27 #include "Misc/Utilities.h"
\r
29 namespace FlightCrew
\r
32 std::vector< Result > CreatorOrContributorRoleValid::ValidateXml(
\r
33 const xc::DOMDocument &document,
\r
36 std::vector< xc::DOMElement* > elements = xe::GetElementsByQName(
\r
37 document, QName( "creator", DC_XML_NAMESPACE ) );
\r
39 Util::Extend< xc::DOMElement* >( elements, xe::GetElementsByQName(
\r
40 document, QName( "contributor", DC_XML_NAMESPACE ) ) );
\r
42 std::vector< Result > results;
\r
43 boost::unordered_set< std::string > relators = GetRelatorSet();
\r
45 foreach( xc::DOMElement* element, elements )
\r
47 std::string role = fromX( element->getAttributeNS( toX( OPF_XML_NAMESPACE ), toX( "role" ) ) );
\r
49 // The "role" is not a required attribute and
\r
50 // can thus be empty.
\r
51 if ( !role.empty() &&
\r
52 relators.count( role ) == 0 &&
\r
53 !boost::starts_with( role, "oth." ) )
\r
56 ResultWithNodeLocation( ERROR_OPF_BAD_CREATOR_OR_CONTRIBUTOR_ROLE_VALUE, *element )
\r
57 .AddMessageArgument( role )
\r
65 boost::unordered_set< std::string > CreatorOrContributorRoleValid::GetRelatorSet()
\r
67 boost::unordered_set< std::string > relators;
\r
68 relators.insert( "act" );
\r
69 relators.insert( "adp" );
\r
70 relators.insert( "anl" );
\r
71 relators.insert( "anm" );
\r
72 relators.insert( "ann" );
\r
73 relators.insert( "app" );
\r
74 relators.insert( "arc" );
\r
75 relators.insert( "arr" );
\r
76 relators.insert( "acp" );
\r
77 relators.insert( "art" );
\r
78 relators.insert( "ard" );
\r
79 relators.insert( "asg" );
\r
80 relators.insert( "asn" );
\r
81 relators.insert( "att" );
\r
82 relators.insert( "auc" );
\r
83 relators.insert( "aut" );
\r
84 relators.insert( "aqt" );
\r
85 relators.insert( "aft" );
\r
86 relators.insert( "aud" );
\r
87 relators.insert( "aui" );
\r
88 relators.insert( "aus" );
\r
89 relators.insert( "ant" );
\r
90 relators.insert( "bnd" );
\r
91 relators.insert( "bdd" );
\r
92 relators.insert( "bkd" );
\r
93 relators.insert( "bkp" );
\r
94 relators.insert( "bjd" );
\r
95 relators.insert( "bpd" );
\r
96 relators.insert( "bsl" );
\r
97 relators.insert( "cll" );
\r
98 relators.insert( "ctg" );
\r
99 relators.insert( "cns" );
\r
100 relators.insert( "chr" );
\r
101 relators.insert( "cng" );
\r
102 relators.insert( "cli" );
\r
103 relators.insert( "clb" );
\r
104 relators.insert( "col" );
\r
105 relators.insert( "clt" );
\r
106 relators.insert( "cmm" );
\r
107 relators.insert( "cwt" );
\r
108 relators.insert( "com" );
\r
109 relators.insert( "cpl" );
\r
110 relators.insert( "cpt" );
\r
111 relators.insert( "cpe" );
\r
112 relators.insert( "cmp" );
\r
113 relators.insert( "cmt" );
\r
114 relators.insert( "ccp" );
\r
115 relators.insert( "cnd" );
\r
116 relators.insert( "csl" );
\r
117 relators.insert( "csp" );
\r
118 relators.insert( "cos" );
\r
119 relators.insert( "cot" );
\r
120 relators.insert( "coe" );
\r
121 relators.insert( "cts" );
\r
122 relators.insert( "ctt" );
\r
123 relators.insert( "cte" );
\r
124 relators.insert( "ctr" );
\r
125 relators.insert( "ctb" );
\r
126 relators.insert( "cpc" );
\r
127 relators.insert( "cph" );
\r
128 relators.insert( "crr" );
\r
129 relators.insert( "crp" );
\r
130 relators.insert( "cst" );
\r
131 relators.insert( "cov" );
\r
132 relators.insert( "cre" );
\r
133 relators.insert( "cur" );
\r
134 relators.insert( "dnc" );
\r
135 relators.insert( "dtc" );
\r
136 relators.insert( "dtm" );
\r
137 relators.insert( "dte" );
\r
138 relators.insert( "dto" );
\r
139 relators.insert( "dfd" );
\r
140 relators.insert( "dft" );
\r
141 relators.insert( "dfe" );
\r
142 relators.insert( "dgg" );
\r
143 relators.insert( "dln" );
\r
144 relators.insert( "dpc" );
\r
145 relators.insert( "dpt" );
\r
146 relators.insert( "dsr" );
\r
147 relators.insert( "drt" );
\r
148 relators.insert( "dis" );
\r
149 relators.insert( "dst" );
\r
150 relators.insert( "dnr" );
\r
151 relators.insert( "drm" );
\r
152 relators.insert( "dub" );
\r
153 relators.insert( "edt" );
\r
154 relators.insert( "elg" );
\r
155 relators.insert( "elt" );
\r
156 relators.insert( "eng" );
\r
157 relators.insert( "egr" );
\r
158 relators.insert( "etr" );
\r
159 relators.insert( "exp" );
\r
160 relators.insert( "fac" );
\r
161 relators.insert( "fld" );
\r
162 relators.insert( "flm" );
\r
163 relators.insert( "fpy" );
\r
164 relators.insert( "frg" );
\r
165 relators.insert( "fmo" );
\r
166 relators.insert( "fnd" );
\r
167 relators.insert( "gis" );
\r
168 relators.insert( "hnr" );
\r
169 relators.insert( "hst" );
\r
170 relators.insert( "ilu" );
\r
171 relators.insert( "ill" );
\r
172 relators.insert( "ins" );
\r
173 relators.insert( "itr" );
\r
174 relators.insert( "ive" );
\r
175 relators.insert( "ivr" );
\r
176 relators.insert( "inv" );
\r
177 relators.insert( "lbr" );
\r
178 relators.insert( "ldr" );
\r
179 relators.insert( "lsa" );
\r
180 relators.insert( "led" );
\r
181 relators.insert( "len" );
\r
182 relators.insert( "lil" );
\r
183 relators.insert( "lit" );
\r
184 relators.insert( "lie" );
\r
185 relators.insert( "lel" );
\r
186 relators.insert( "let" );
\r
187 relators.insert( "lee" );
\r
188 relators.insert( "lbt" );
\r
189 relators.insert( "lse" );
\r
190 relators.insert( "lso" );
\r
191 relators.insert( "lgd" );
\r
192 relators.insert( "ltg" );
\r
193 relators.insert( "lyr" );
\r
194 relators.insert( "mfr" );
\r
195 relators.insert( "mrk" );
\r
196 relators.insert( "mdc" );
\r
197 relators.insert( "mte" );
\r
198 relators.insert( "mod" );
\r
199 relators.insert( "mon" );
\r
200 relators.insert( "mcp" );
\r
201 relators.insert( "msd" );
\r
202 relators.insert( "mus" );
\r
203 relators.insert( "nrt" );
\r
204 relators.insert( "opn" );
\r
205 relators.insert( "orm" );
\r
206 relators.insert( "org" );
\r
207 relators.insert( "oth" );
\r
208 relators.insert( "own" );
\r
209 relators.insert( "ppm" );
\r
210 relators.insert( "pta" );
\r
211 relators.insert( "pth" );
\r
212 relators.insert( "pat" );
\r
213 relators.insert( "prf" );
\r
214 relators.insert( "pma" );
\r
215 relators.insert( "pht" );
\r
216 relators.insert( "ptf" );
\r
217 relators.insert( "ptt" );
\r
218 relators.insert( "pte" );
\r
219 relators.insert( "plt" );
\r
220 relators.insert( "prt" );
\r
221 relators.insert( "pop" );
\r
222 relators.insert( "prm" );
\r
223 relators.insert( "prc" );
\r
224 relators.insert( "pro" );
\r
225 relators.insert( "pmn" );
\r
226 relators.insert( "prd" );
\r
227 relators.insert( "prg" );
\r
228 relators.insert( "pdr" );
\r
229 relators.insert( "pfr" );
\r
230 relators.insert( "pbl" );
\r
231 relators.insert( "pbd" );
\r
232 relators.insert( "ppt" );
\r
233 relators.insert( "rcp" );
\r
234 relators.insert( "rce" );
\r
235 relators.insert( "red" );
\r
236 relators.insert( "ren" );
\r
237 relators.insert( "rpt" );
\r
238 relators.insert( "rps" );
\r
239 relators.insert( "rth" );
\r
240 relators.insert( "rtm" );
\r
241 relators.insert( "res" );
\r
242 relators.insert( "rsp" );
\r
243 relators.insert( "rst" );
\r
244 relators.insert( "rse" );
\r
245 relators.insert( "rpy" );
\r
246 relators.insert( "rsg" );
\r
247 relators.insert( "rev" );
\r
248 relators.insert( "rbr" );
\r
249 relators.insert( "sce" );
\r
250 relators.insert( "sad" );
\r
251 relators.insert( "scr" );
\r
252 relators.insert( "scl" );
\r
253 relators.insert( "spy" );
\r
254 relators.insert( "sec" );
\r
255 relators.insert( "std" );
\r
256 relators.insert( "sgn" );
\r
257 relators.insert( "sng" );
\r
258 relators.insert( "sds" );
\r
259 relators.insert( "spk" );
\r
260 relators.insert( "spn" );
\r
261 relators.insert( "stm" );
\r
262 relators.insert( "stn" );
\r
263 relators.insert( "str" );
\r
264 relators.insert( "stl" );
\r
265 relators.insert( "sht" );
\r
266 relators.insert( "srv" );
\r
267 relators.insert( "tch" );
\r
268 relators.insert( "tcd" );
\r
269 relators.insert( "ths" );
\r
270 relators.insert( "trc" );
\r
271 relators.insert( "trl" );
\r
272 relators.insert( "tyd" );
\r
273 relators.insert( "tyg" );
\r
274 relators.insert( "vdg" );
\r
275 relators.insert( "voc" );
\r
276 relators.insert( "wit" );
\r
277 relators.insert( "wde" );
\r
278 relators.insert( "wdc" );
\r
279 relators.insert( "wam" );
\r
284 } // namespace FlightCrew
\r