]> git.donarmstrong.com Git - flightcrew.git/blob - src/FlightCrew/Validators/Opf/CreatorOrContributorRoleValid.cpp
Imported Upstream version 0.7.2+dfsg
[flightcrew.git] / src / FlightCrew / Validators / Opf / CreatorOrContributorRoleValid.cpp
1 /************************************************************************\r
2 **\r
3 **  Copyright (C) 2010  Strahinja Markovic\r
4 **\r
5 **  This file is part of FlightCrew.\r
6 **\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
11 **\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
16 **\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
19 **\r
20 *************************************************************************/\r
21 \r
22 #include <stdafx.h>\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
28 \r
29 namespace FlightCrew\r
30 {\r
31 \r
32 std::vector< Result > CreatorOrContributorRoleValid::ValidateXml(\r
33     const xc::DOMDocument &document,\r
34     const fs::path& )\r
35 {\r
36     std::vector< xc::DOMElement* > elements = xe::GetElementsByQName( \r
37         document, QName( "creator", DC_XML_NAMESPACE ) );\r
38 \r
39     Util::Extend< xc::DOMElement* >( elements, xe::GetElementsByQName( \r
40         document, QName( "contributor", DC_XML_NAMESPACE ) ) );\r
41 \r
42     std::vector< Result > results;\r
43     boost::unordered_set< std::string > relators = GetRelatorSet();\r
44 \r
45     foreach( xc::DOMElement* element, elements )\r
46     {\r
47         std::string role = fromX( element->getAttributeNS( toX( OPF_XML_NAMESPACE ), toX( "role" ) ) );\r
48         \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
54         {\r
55             results.push_back( \r
56                 ResultWithNodeLocation( ERROR_OPF_BAD_CREATOR_OR_CONTRIBUTOR_ROLE_VALUE, *element )\r
57                 .AddMessageArgument( role )\r
58                 );\r
59         }\r
60     }\r
61 \r
62     return results;\r
63 }\r
64 \r
65 boost::unordered_set< std::string > CreatorOrContributorRoleValid::GetRelatorSet()\r
66 {\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
280 \r
281     return relators;\r
282 }\r
283 \r
284 } // namespace FlightCrew\r
285 \r