relaton-ieee 1.13.1 → 1.14.1

Sign up to get free protection for your applications and to get access to all the features.
data/grammars/reqt.rng DELETED
@@ -1,223 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <grammar xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
3
- <!--
4
- Presupposes isodoc.rnc, is included in it
5
- include "isodoc.rnc" { }
6
- -->
7
- <define name="requirement">
8
- <element name="requirement">
9
- <ref name="RequirementType"/>
10
- </element>
11
- </define>
12
- <define name="recommendation">
13
- <element name="recommendation">
14
- <ref name="RequirementType"/>
15
- </element>
16
- </define>
17
- <define name="permission">
18
- <element name="permission">
19
- <ref name="RequirementType"/>
20
- </element>
21
- </define>
22
- <define name="RequirementType">
23
- <optional>
24
- <attribute name="obligation">
25
- <ref name="ObligationType"/>
26
- </attribute>
27
- </optional>
28
- <optional>
29
- <attribute name="unnumbered">
30
- <data type="boolean"/>
31
- </attribute>
32
- </optional>
33
- <optional>
34
- <attribute name="number"/>
35
- </optional>
36
- <optional>
37
- <attribute name="subsequence"/>
38
- </optional>
39
- <optional>
40
- <attribute name="keep-with-next">
41
- <data type="boolean"/>
42
- </attribute>
43
- </optional>
44
- <optional>
45
- <attribute name="keep-lines-together">
46
- <data type="boolean"/>
47
- </attribute>
48
- </optional>
49
- <attribute name="id">
50
- <data type="ID"/>
51
- </attribute>
52
- <optional>
53
- <attribute name="filename"/>
54
- </optional>
55
- <optional>
56
- <attribute name="model"/>
57
- </optional>
58
- <optional>
59
- <attribute name="type"/>
60
- </optional>
61
- <optional>
62
- <attribute name="tag"/>
63
- </optional>
64
- <optional>
65
- <attribute name="multilingual-rendering">
66
- <ref name="MultilingualRenderingType"/>
67
- </attribute>
68
- </optional>
69
- <optional>
70
- <ref name="reqtitle"/>
71
- </optional>
72
- <optional>
73
- <ref name="label"/>
74
- </optional>
75
- <zeroOrMore>
76
- <ref name="subject"/>
77
- </zeroOrMore>
78
- <zeroOrMore>
79
- <ref name="reqinherit"/>
80
- </zeroOrMore>
81
- <zeroOrMore>
82
- <ref name="classification"/>
83
- </zeroOrMore>
84
- <zeroOrMore>
85
- <choice>
86
- <ref name="measurementtarget"/>
87
- <ref name="specification"/>
88
- <ref name="verification"/>
89
- <ref name="import"/>
90
- <ref name="description"/>
91
- <ref name="component"/>
92
- </choice>
93
- </zeroOrMore>
94
- <optional>
95
- <ref name="reqt_references"/>
96
- </optional>
97
- <zeroOrMore>
98
- <choice>
99
- <ref name="requirement"/>
100
- <ref name="recommendation"/>
101
- <ref name="permission"/>
102
- </choice>
103
- </zeroOrMore>
104
- </define>
105
- <define name="reqtitle">
106
- <element name="title">
107
- <ref name="FormattedString"/>
108
- </element>
109
- </define>
110
- <define name="label">
111
- <element name="label">
112
- <oneOrMore>
113
- <ref name="TextElement"/>
114
- </oneOrMore>
115
- </element>
116
- </define>
117
- <define name="subject">
118
- <element name="subject">
119
- <oneOrMore>
120
- <ref name="TextElement"/>
121
- </oneOrMore>
122
- </element>
123
- </define>
124
- <define name="reqinherit">
125
- <element name="inherit">
126
- <oneOrMore>
127
- <ref name="TextElement"/>
128
- </oneOrMore>
129
- </element>
130
- </define>
131
- <define name="measurementtarget">
132
- <element name="measurement-target">
133
- <ref name="RequirementSubpart"/>
134
- </element>
135
- </define>
136
- <define name="specification">
137
- <element name="specification">
138
- <ref name="RequirementSubpart"/>
139
- </element>
140
- </define>
141
- <define name="verification">
142
- <element name="verification">
143
- <ref name="RequirementSubpart"/>
144
- </element>
145
- </define>
146
- <define name="import">
147
- <element name="import">
148
- <ref name="RequirementSubpart"/>
149
- </element>
150
- </define>
151
- <define name="description">
152
- <element name="description">
153
- <ref name="RequirementSubpart"/>
154
- </element>
155
- </define>
156
- <define name="component">
157
- <element name="component">
158
- <attribute name="class"/>
159
- <ref name="RequirementSubpart"/>
160
- </element>
161
- </define>
162
- <define name="reqt_references">
163
- <element name="references">
164
- <oneOrMore>
165
- <ref name="bibitem"/>
166
- </oneOrMore>
167
- </element>
168
- </define>
169
- <define name="RequirementSubpart">
170
- <optional>
171
- <attribute name="type"/>
172
- </optional>
173
- <optional>
174
- <attribute name="exclude">
175
- <data type="boolean"/>
176
- </attribute>
177
- </optional>
178
- <optional>
179
- <attribute name="keep-with-next">
180
- <data type="boolean"/>
181
- </attribute>
182
- </optional>
183
- <optional>
184
- <attribute name="keep-lines-together">
185
- <data type="boolean"/>
186
- </attribute>
187
- </optional>
188
- <optional>
189
- <attribute name="tag"/>
190
- </optional>
191
- <optional>
192
- <attribute name="multilingual-rendering">
193
- <ref name="MultilingualRenderingType"/>
194
- </attribute>
195
- </optional>
196
- <oneOrMore>
197
- <ref name="BasicBlock"/>
198
- </oneOrMore>
199
- </define>
200
- <define name="ObligationType">
201
- <choice>
202
- <value>requirement</value>
203
- <value>recommendation</value>
204
- <value>permission</value>
205
- </choice>
206
- </define>
207
- <define name="classification">
208
- <element name="classification">
209
- <ref name="classification_tag"/>
210
- <ref name="classification_value"/>
211
- </element>
212
- </define>
213
- <define name="classification_tag">
214
- <element name="tag">
215
- <text/>
216
- </element>
217
- </define>
218
- <define name="classification_value">
219
- <element name="value">
220
- <text/>
221
- </element>
222
- </define>
223
- </grammar>
@@ -1,9 +0,0 @@
1
- module RelatonIeee
2
- class Hit < RelatonBib::Hit
3
- # Parse page.
4
- # @return [RelatonIeee::IeeeBliographicItem]
5
- def fetch
6
- @fetch ||= Scrapper.parse_page hit
7
- end
8
- end
9
- end
@@ -1,154 +0,0 @@
1
- module RelatonIeee
2
- module Scrapper
3
- class << self
4
- # rubocop:disable Metrics/MethodLength, Metrics/AbcSize
5
-
6
- # papam hit [Hash]
7
- # @return [RelatonOgc::OrcBibliographicItem]
8
- def parse_page(hit)
9
- doc = Nokogiri::HTML Faraday.get(hit[:url]).body
10
- IeeeBibliographicItem.new(
11
- fetched: Date.today.to_s,
12
- title: fetch_title(doc),
13
- docid: fetch_docid(hit[:ref]),
14
- link: fetch_link(hit[:url]),
15
- docstatus: fetch_status(doc),
16
- abstract: fetch_abstract(doc),
17
- contributor: fetch_contributor(doc),
18
- language: ["en"],
19
- script: ["Latn"],
20
- date: fetch_date(doc),
21
- editorialgroup: fetch_editorialgroup(doc),
22
- place: ["Piscataway, NJ, USA"],
23
- )
24
- end
25
- # rubocop:enable Metrics/MethodLength, Metrics/AbcSize
26
-
27
- private
28
-
29
- # @param doc [String] Nokogiri::HTML4::Document
30
- # @return [Array<RelatonBib::TypedTitleString>]
31
- def fetch_title(doc)
32
- doc.xpath("//h2[@id='stnd-title']").map do |t|
33
- RelatonBib::TypedTitleString.new(
34
- type: "main", content: t.text, language: "en", script: "Latn",
35
- )
36
- end
37
- end
38
-
39
- # @param ref [String]
40
- # @return [Array<RelatonBib::DocumentIdentifier>]
41
- def fetch_docid(ref)
42
- args = { id: ref, type: "IEEE", primary: true }
43
- ids = [RelatonBib::DocumentIdentifier.new(**args)]
44
- args[:scope] = "trademark"
45
- tm = ref.match?(/^IEEE\s(Std\s)?(802|2030)/) ? "\u00AE" : "\u2122"
46
- args[:id] = ref.sub(/^(IEEE\s(?:Std\s)?[.\w]+)/) { |s| "#{s}#{tm}" }
47
- ids << RelatonBib::DocumentIdentifier.new(**args)
48
- end
49
-
50
- # @param url [String]
51
- # @return [Array>RelatonBib::TypedUri>]
52
- def fetch_link(url)
53
- [RelatonBib::TypedUri.new(type: "src", content: url)]
54
- end
55
-
56
- # @param doc [Nokogiri::HTML::Document]
57
- # @return [RelatonBib::DocumentStatus, NilClass]
58
- def fetch_status(doc)
59
- stage = doc.at("//dd[@id='stnd-status']")
60
- return unless stage
61
-
62
- DocumentStatus.new(stage: stage.text.split.first)
63
- end
64
-
65
- # @param identifier [String]
66
- # @return [String]
67
- # def fetch_edition(identifier)
68
- # %r{(?<=r)(?<edition>\d+)$} =~ identifier
69
- # edition
70
- # end
71
-
72
- # @param doc [Nokogiri::HTML::Document]
73
- # @return [Array<RelatonBib::FormattedString>]
74
- def fetch_abstract(doc)
75
- doc.xpath("//div[@id='stnd-description']").map do |a|
76
- RelatonBib::FormattedString.new(
77
- content: a.text.strip, language: "en", script: "Latn",
78
- )
79
- end
80
- end
81
-
82
- # @param doc [Nokogiri::HTML::Document]
83
- # @return [Array<RelatonBib::ContributionInfo>]
84
- def fetch_contributor(doc) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
85
- address = RelatonBib::Address.new(
86
- street: ["445 Hoes Lane"], postcode: "08854-4141", city: "Piscataway",
87
- state: "NJ", country: "USA"
88
- )
89
- org = RelatonBib::Organization.new(
90
- name: "Institute of Electrical and Electronics Engineers",
91
- abbreviation: "IEEE", contact: [address]
92
- )
93
- contrib = RelatonBib::ContributionInfo.new(entity: org, role: [type: "publisher"])
94
- doc.xpath("//dd[@id='stnd-staff-liaison']/text()").map do |name|
95
- person_contrib(name.text.strip)
96
- end << contrib
97
- end
98
-
99
- # @param name [String]
100
- # @return [RelatonBib::ContributionInfo]
101
- def person_contrib(name)
102
- fname = RelatonBib::FullName.new(
103
- completename: RelatonBib::LocalizedString.new(name),
104
- )
105
- entity = RelatonBib::Person.new(name: fname)
106
- RelatonBib::ContributionInfo.new(
107
- entity: entity, role: [type: "author"],
108
- )
109
- end
110
-
111
- # @param name [String]
112
- # @return [RelatonBib::ContributionInfo]
113
- # def org_contrib(name)
114
- # entity = RelatonBib::Organization.new(name: name)
115
- # RelatonBib::ContributionInfo.new(
116
- # entity: entity, role: [type: "publisher"],
117
- # )
118
- # end
119
-
120
- # @param date [Nokogiri::HTML::Document]
121
- # @return [Array<RelatonBib::BibliographicDate>]
122
- def fetch_date(doc)
123
- dates = []
124
- id = doc.at "//dd[@id='stnd-approval-date']"
125
- if id
126
- dates << RelatonBib::BibliographicDate.new(type: "issued", on: id.text)
127
- end
128
- pd = doc.at("//dd[@id='stnd-published-date']")
129
- if pd
130
- dates << RelatonBib::BibliographicDate.new(type: "published", on: pd.text)
131
- end
132
- dates
133
- end
134
-
135
- #
136
- # @param doc [Nokogiri::HTML::Document]
137
- #
138
- # @return [RelatonIeee::EditorialGroup]
139
- #
140
- def fetch_editorialgroup(doc) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
141
- committees = doc.xpath(
142
- "//dd[@id='stnd-committee']/text()",
143
- "//td[.='Standards Committee']/following-sibling::td/div/a",
144
- ).map { |c| c.text.strip }
145
- wg = doc.at("//dd[@id='stnd-working-group']/text()")&.text&.strip
146
- # chair = doc.at "//dd[@id='stnd-working-group-chair']"
147
- society = doc.at("//dd[@id='stnd-society']/text()")&.text&.strip
148
- return unless committees.any? || wg || society
149
-
150
- EditorialGroup.new(society: society, working_group: wg, committee: committees)
151
- end
152
- end
153
- end
154
- end