grom 0.3.5 → 0.3.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -1
- data/.rubocop.yml +0 -3
- data/README.md +66 -84
- data/docs/logo.svg +254 -0
- data/lib/grom.rb +2 -0
- data/lib/grom/builder.rb +18 -9
- data/lib/grom/helper.rb +25 -0
- data/lib/grom/node.rb +56 -1
- data/lib/grom/reader.rb +14 -6
- data/lib/grom/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6142d087bf21472d8a4b38d1dd2579dfe1d7e0cc
|
4
|
+
data.tar.gz: 238b550001a0f4dbe14c1e8e3686260a9d6d3e2a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b0cae2d8c1210ad7b6a3afcf4659d8afd27d242593a8d034234f440f4006405eb65062d749e644c3f833867f33544d5bc4957449ce805063e50342829cfc4ac
|
7
|
+
data.tar.gz: 32fe3f4c9c93289584393edb4a042a8a6be1331fd8a52b72d714afc70013bbd90396c2ae522069f75716d9a9989daf18da3697ab31bf1cac78393f7b09fdda6c
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/README.md
CHANGED
@@ -1,113 +1,95 @@
|
|
1
|
-
# Graph Object Mapper (
|
2
|
-
|
3
|
-
Grom is a custom ORM that takes graph data and deserializes it into objects. It uses the [RDF.rb](https://github.com/ruby-rdf/rdf) library. It was created in the context
|
4
|
-
of UK Parliament's new website.
|
1
|
+
# [![Graph Object Mapper (GROM)][grom-logo]][grom]
|
2
|
+
[GROM][grom] is a gem created by the [Parliamentary Digital Service][pds] to take [ntriple][ntriple] files representing graph data and deserialise them into ruby objects.
|
5
3
|
|
6
|
-
|
7
|
-
```apple js
|
8
|
-
gem install grom
|
9
|
-
```
|
10
|
-
Add this line to your application's Gemfile:
|
11
|
-
|
12
|
-
```ruby
|
13
|
-
gem 'grom'
|
14
|
-
```
|
4
|
+
[![Build Status][shield-travis]][info-travis] [![Test Coverage][shield-coveralls]][info-coveralls] [![License][shield-license]][info-license]
|
15
5
|
|
16
|
-
|
17
|
-
```bash
|
18
|
-
$ bundle
|
19
|
-
```
|
6
|
+
> **NOTE:** This gem is in active development and is likely to change at short notice. It is not recommended that you use this in any production environment.
|
20
7
|
|
21
|
-
|
8
|
+
### Contents
|
9
|
+
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
|
10
|
+
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
|
22
11
|
|
23
|
-
#### Set up
|
24
|
-
You will need to set three constants in order for the gem to work.
|
25
12
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
13
|
+
- [Requirements](#requirements)
|
14
|
+
- [Installation](#installation)
|
15
|
+
- [Usage](#usage)
|
16
|
+
- [Getting Started with Development](#getting-started-with-development)
|
17
|
+
- [Running the tests](#running-the-tests)
|
18
|
+
- [Contributing](#contributing)
|
19
|
+
- [License](#license)
|
31
20
|
|
32
|
-
|
33
|
-
The Data URI prefix is the prefix that you use to define the entities in your triple store.
|
21
|
+
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
|
34
22
|
|
35
23
|
|
36
|
-
|
37
|
-
|
24
|
+
## Requirements
|
25
|
+
[GROM][grom] requires the following:
|
26
|
+
* [Ruby][ruby] - [click here][ruby-version] for the exact version
|
27
|
+
* [Bundler][bundler]
|
38
28
|
|
39
|
-
An example of a Person class.
|
40
29
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
def self.property_translator
|
45
|
-
{
|
46
|
-
id: 'id',
|
47
|
-
forename: 'forename',
|
48
|
-
surname: 'surname',
|
49
|
-
middleName: 'middle_name',
|
50
|
-
dateOfBirth: 'date_of_birth'
|
51
|
-
}
|
52
|
-
end
|
53
|
-
end
|
30
|
+
## Installation
|
31
|
+
```bash
|
32
|
+
gem 'grom'
|
54
33
|
```
|
55
34
|
|
56
|
-
#### Retrieving Objects
|
57
35
|
|
58
|
-
|
59
|
-
|
60
|
-
```apple js
|
61
|
-
people = Person.all #=> returns an array of People objects
|
62
|
-
```
|
36
|
+
## Usage
|
37
|
+
This gem's main function is taking an [ntriple][ntriple] data stream and deserialising it into linked `Grom::Node` objects.
|
63
38
|
|
64
|
-
|
39
|
+
```ruby
|
40
|
+
file = File.read('people_members_current.nt')
|
41
|
+
data_stream = StringIO.new(file)
|
65
42
|
|
66
|
-
|
67
|
-
people = Person.all('current') #=> returns an array of current People
|
43
|
+
objects = Grom::Reader.new(data_stream).objects #=> [<#Grom::Node ...>, <#Grom::Node ...>, ...]
|
68
44
|
```
|
69
|
-
This generates the endpoint url `http://#{API_ENDPOINT}/people/current.ttl` and returns a list of current people from there.
|
70
45
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
46
|
+
|
47
|
+
## Getting Started with Development
|
48
|
+
To clone the repository and set up the dependencies, run the following:
|
49
|
+
```bash
|
50
|
+
git clone https://github.com/ukparliament/grom.git
|
51
|
+
cd grom
|
52
|
+
bundle install
|
75
53
|
```
|
76
54
|
|
77
|
-
|
55
|
+
### Running the tests
|
56
|
+
We use [RSpec][rspec] as our testing framework and tests can be run using:
|
57
|
+
```bash
|
58
|
+
bundle exec rake
|
59
|
+
```
|
78
60
|
|
79
|
-
##### #has_many
|
80
|
-
For a simple `has_many` association, declare the association at the top of the model. For example, if `Person` has many `contact_points`, create a `ContactPoint` class and declare the association at the top of the `Person` class.
|
81
61
|
|
82
|
-
|
62
|
+
## Contributing
|
63
|
+
If you wish to submit a bug fix or feature, you can create a pull request and it will be merged pending a code review.
|
83
64
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
65
|
+
1. Fork the repository
|
66
|
+
1. Create your feature branch (`git checkout -b my-new-feature`)
|
67
|
+
1. Commit your changes (`git commit -am 'Add some feature'`)
|
68
|
+
1. Push to the branch (`git push origin my-new-feature`)
|
69
|
+
1. Ensure your changes are tested using [Rspec][rspec]
|
70
|
+
1. Create a new Pull Request
|
88
71
|
|
89
|
-
It is then possible to retrieve the contact_points for a person in the following way:
|
90
72
|
|
91
|
-
|
92
|
-
|
93
|
-
person.contact_points #=> returns an array of contact_points related to person
|
94
|
-
```
|
73
|
+
## License
|
74
|
+
[grom][grom] is licensed under the [Open Parliament Licence][info-license].
|
95
75
|
|
96
|
-
|
97
|
-
For a `has_many_through` association, declare the association at the top of the model. For example, if `Person` has many `parties` through `party_memberships`, create a `Party` class and a `PartyMembership` class, then declare the association at the top of the `Person` class.
|
76
|
+
Logo design by [Anna Vámos][anna-vamos].
|
98
77
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
78
|
+
[ruby]: https://www.ruby-lang.org/en/
|
79
|
+
[bundler]: http://bundler.io
|
80
|
+
[rspec]: http://rspec.info
|
81
|
+
[grom-logo]: https://cdn.rawgit.com/ukparliament/grom/85df4d355313358930cea8aa2fbfc53dd3e4f8d3/docs/logo.svg
|
82
|
+
[grom]: https://github.com/ukparliament/grom
|
83
|
+
[pds]: https://www.parliament.uk/mps-lords-and-offices/offices/bicameral/parliamentary-digital-service/
|
84
|
+
[ruby-version]: https://github.com/ukparliament/grom/blob/master/.ruby-version
|
85
|
+
[anna-vamos]: https://www.linkedin.com/in/annavamos
|
86
|
+
[ntriple]: https://en.wikipedia.org/wiki/N-Triples
|
103
87
|
|
104
|
-
|
105
|
-
|
106
|
-
```apple js
|
107
|
-
person = Person.find('1')
|
108
|
-
person.parties #=> returns an array of parties with the party_memberships stored as a hash
|
109
|
-
```
|
88
|
+
[info-travis]: https://travis-ci.org/ukparliament/grom
|
89
|
+
[shield-travis]: https://img.shields.io/travis/ukparliament/grom.svg
|
110
90
|
|
91
|
+
[info-coveralls]: https://coveralls.io/github/ukparliament/grom
|
92
|
+
[shield-coveralls]: https://img.shields.io/coveralls/ukparliament/grom.svg
|
111
93
|
|
112
|
-
|
113
|
-
|
94
|
+
[info-license]: http://www.parliament.uk/site-information/copyright/open-parliament-licence/
|
95
|
+
[shield-license]: https://img.shields.io/badge/license-Open%20Parliament%20Licence-blue.svg
|
data/docs/logo.svg
ADDED
@@ -0,0 +1,254 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
3
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
4
|
+
<svg version="1.1"
|
5
|
+
id="svg4274" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:dc="http://purl.org/dc/elements/1.1/" inkscape:version="0.92.0 r15299" sodipodi:docname="GROM.svg"
|
6
|
+
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="612px" height="250px"
|
7
|
+
viewBox="0 0 612 250" enable-background="new 0 0 612 250" xml:space="preserve">
|
8
|
+
<g>
|
9
|
+
<path id="path4935" inkscape:connector-curvature="0" d="M191.127,156.855l10.437,11.138l0.578-0.537l-36.877,48.078
|
10
|
+
c-0.278-0.3-0.526-0.631-0.774-1.033c-0.403-0.661-0.796-1.457-1.571-2.098c-0.299-0.248-0.63-0.518-1.002-0.775l17.917-48.242
|
11
|
+
l3.988,1.839L191.127,156.855z M88.783,148.434c0.713,0.073,1.209,0.444,1.746,1.18c0.526,0.732,1.002,1.787,1.487,2.893
|
12
|
+
c0.486,1.105,0.972,2.263,1.664,3.244c0.692,0.982,1.663,1.819,2.976,2.005c1.116,0.155,2.129-0.258,2.935-0.837
|
13
|
+
c0.806-0.589,1.478-1.354,2.118-2.098c1.292-1.487,2.459-2.77,3.658-2.853c-0.135,0.012,0.154,0.041,0.475,0.207
|
14
|
+
c0.311,0.165,0.703,0.402,1.064,0.661c0.589,0.413,0.92,0.682,1.096,0.826l0.713,25.047l10.022-4.402l29.447,41.248
|
15
|
+
c-0.299,0.229-0.599,0.435-0.898,0.589c-0.641,0.342-1.116,0.403-1.674,0.177c-0.548-0.229-1.25-0.849-2.015-2.17
|
16
|
+
c-0.972-1.694-2.677-2.531-4.351-2.604c-1.674-0.083-3.357,0.526-4.515,1.715c-1.137,1.157-1.385,2.625-0.889,3.782
|
17
|
+
c0.506,1.146,1.529,2.004,2.676,2.696c1.044,0.631,1.922,1.239,2.531,1.881c0.61,0.641,0.961,1.302,1.054,2.211
|
18
|
+
c0.031,0.289-0.041,0.465-0.299,0.754c-0.259,0.29-0.734,0.631-1.323,0.982c-0.981,0.589-2.242,1.229-3.348,2.169L54.53,162.362
|
19
|
+
l10.591-0.217l-6.623-6.747c0.259-0.466,0.651-1.116,1.22-1.901c0.909-1.24,2.169-2.387,2.81-2.479
|
20
|
+
c1.023-0.146,1.953,0.165,2.945,0.815c1.002,0.651,2.015,1.644,3.059,2.677c1.043,1.044,2.118,2.128,3.327,2.955
|
21
|
+
c1.209,0.837,2.593,1.426,4.153,1.302c1.653-0.124,2.996-1.013,4.123-2.129c1.126-1.114,2.066-2.479,2.996-3.771
|
22
|
+
c0.93-1.292,1.829-2.512,2.759-3.327C86.819,148.724,87.698,148.32,88.783,148.434z M141.82,126.384l5.724,9.94l5.684,74.757
|
23
|
+
c-0.692,0.382-1.344,0.826-1.87,1.384c-0.61,0.642-1.229,1.302-1.84,1.901l-29.127-40.804l7.594-3.327l-10.363-17.906
|
24
|
+
L141.82,126.384z M152.194,124.122l22.111,19.982l-4.298,5.518l2.976,10.611l5.238,2.407l-17.865,48.089
|
25
|
+
c-0.815-0.384-1.735-0.683-2.811-0.733c-0.898-0.042-1.767,0.113-2.604,0.361l-5.642-74.24L152.194,124.122z M200.323,96.729
|
26
|
+
l-2.831,9.031l5.797,1.147l-3.018,8.731l11.635-1.746l1.994,16.737c-1.974,2.583-2.459,6.272-1.901,9.774
|
27
|
+
c0.527,3.327,2.005,6.521,4.34,8.535l-13.587,17.71l-10.777-11.49l-0.393-8.999l-11.583-9.353l-0.558,0.714l-4.04,5.177
|
28
|
+
l-22.732-20.552l2.356-9.784l42.085-15.158L200.323,96.729z M103.372,96.44l32.972,20.438l4.547,7.895l-24.21,25.944l-7.47-12.896
|
29
|
+
l-0.031,0.011l-11.687-37.104c0.93-0.196,1.829-0.486,2.625-0.951C101.461,98.993,102.546,97.826,103.372,96.44L103.372,96.44z
|
30
|
+
M82.346,91.74c0.083,0.878,0.259,1.745,0.63,2.552c1.312,2.852,4.288,4.918,7.543,5.962c1.694,0.548,3.472,0.806,5.188,0.724
|
31
|
+
l11.861,37.642l0.362,12.75c-0.011,0,0,0-0.011-0.01c-0.403-0.279-0.827-0.56-1.261-0.775c-0.424-0.217-0.806-0.434-1.405-0.393
|
32
|
+
c-2.222,0.145-3.616,1.993-4.887,3.462c-0.631,0.732-1.24,1.404-1.819,1.817c-0.578,0.413-1.054,0.6-1.643,0.518
|
33
|
+
c-0.713-0.093-1.229-0.507-1.767-1.262c-0.538-0.754-1.003-1.817-1.488-2.924c-0.485-1.105-0.971-2.253-1.674-3.224
|
34
|
+
c-0.702-0.961-1.694-1.777-3.007-1.901c-1.653-0.154-3.079,0.537-4.236,1.55c-1.146,1.003-2.098,2.324-3.027,3.628
|
35
|
+
c-0.93,1.302-1.839,2.593-2.8,3.544c-0.961,0.949-1.912,1.528-3.007,1.61c-1.033,0.083-1.994-0.289-3.007-0.991
|
36
|
+
c-1.013-0.702-2.036-1.716-3.09-2.759c-1.054-1.044-2.128-2.107-3.337-2.903s-2.625-1.312-4.175-1.085
|
37
|
+
c-0.578,0.083-1.085,0.342-1.57,0.661l2.056-4.929l-9.144,2.128l-6.438-10.527l-0.589,1.858l-2.666,8.452l-20.634-29.902
|
38
|
+
c1.332-0.796,3.296-1.621,5.031-2.231c2.077-0.733,3.803-1.21,3.803-1.21l0.692-0.186l-0.311-6.044L82.346,91.74z M207.505,80.642
|
39
|
+
l18.195,4.217l11.8,6.25l-7.099,37.962c-2.18-1.374-4.949-2.107-7.708-2.107c-2.624,0-5.229,0.651-7.191,2.099l-2.046-17.184
|
40
|
+
l-10.539,1.581l2.728-7.884l-5.858-1.157l2.655-8.483v-0.01L207.505,80.642z M163.198,61.217l28.456,15.364l4.205,19.197
|
41
|
+
l-41.278,14.859l-9.082-11.863c0.165-0.629,1.229-4.814,2.18-6.715c0.176-0.353,0.703-0.816,1.271-1.365
|
42
|
+
c0.568-0.547,1.261-1.321,1.188-2.406c-0.062-0.951-0.63-1.686-1.261-2.211c-0.63-0.527-1.354-0.93-2.015-1.312
|
43
|
+
c-0.661-0.382-1.261-0.754-1.591-1.074c-0.331-0.32-0.393-0.465-0.331-0.766c0.062-0.32,0.238-0.475,0.837-0.671
|
44
|
+
c0.6-0.207,1.509-0.31,2.438-0.424c0.93-0.104,1.891-0.196,2.738-0.527c0.424-0.166,0.837-0.393,1.168-0.765
|
45
|
+
c0.33-0.372,0.526-0.909,0.526-1.447c0-0.589-0.237-1.156-0.609-1.54c-0.372-0.383-0.826-0.608-1.302-0.774
|
46
|
+
c-0.951-0.332-2.035-0.414-3.079-0.518c-1.044-0.104-2.057-0.217-2.677-0.434c-0.31-0.104-0.506-0.237-0.599-0.331
|
47
|
+
c-0.093-0.093-0.114-0.134-0.114-0.32c0-0.403,0.062-0.455,0.476-0.661c0.414-0.205,1.157-0.382,2.005-0.517
|
48
|
+
c0.847-0.146,1.787-0.269,2.687-0.527c0.898-0.258,1.787-0.672,2.387-1.487c0.63-0.869,0.682-1.922,0.723-2.832
|
49
|
+
c0.011-0.207-0.01-0.195-0.01-0.371c0.279,0.072,0.548,0.154,0.847,0.186c1.974,0.217,3.793-0.434,5.312-1.591
|
50
|
+
c1.509-1.157,2.759-2.79,3.792-4.649C162.754,62.24,162.961,61.724,163.198,61.217L163.198,61.217z M200.313,29.62l33.983,34.48
|
51
|
+
l-8.782,18.897l-18.382-4.257h-0.011l-14.362-3.575l0,0l-28.817-15.562c1.178-2.976,1.891-6.157,2.107-8.812
|
52
|
+
c0.021-0.186,0.011-0.402,0.021-0.6l26.524-19.353L200.313,29.62z M211.183,27.896l28.456,24.685l-4.557,9.795l-32.62-33.106
|
53
|
+
L211.183,27.896z M86.768,26.086l0.703,10.302l14.518-1.437L93.32,78.09c-1.416,0.093-2.79,0.413-3.989,1.023
|
54
|
+
c-2.511,1.271-4.618,3.761-5.868,6.561c-0.61,1.354-1.003,2.79-1.137,4.206L32.42,105.472l-0.29-5.642l-0.795-0.052
|
55
|
+
c0,0-3.41-0.207-7.491,0.031c-1.736,0.092-3.575,0.289-5.363,0.588l7.615-30.306c0.651-0.145,1.323-0.341,1.984-0.62
|
56
|
+
c1.87-0.785,3.709-1.983,4.929-3.162c1.735-1.693,4.329-3.088,5.155-3.513c0.444,0.538,1.147,1.354,2.284,2.408
|
57
|
+
c1.684,1.56,3.978,3.306,6.571,3.864c5.032,1.085,9.816-1.344,12.761-5.115c1.54-1.975,2.397-4.701,2.552-7.389
|
58
|
+
c0.155-2.687-0.382-5.362-1.994-7.149c-1.591-1.756-4.391-3.079-6.829-4.071c-0.961-0.393-1.757-0.66-2.501-0.918L86.768,26.086z
|
59
|
+
M114.077,23.11l33.416,16.346c-1.323,3.068-2.149,6.458-2.438,9.248c-0.372,3.544-0.207,8.246,0.961,12.275
|
60
|
+
c0.578,2.015,1.415,3.863,2.613,5.299c0.61,0.734,1.323,1.354,2.129,1.82c0.011,0.248,0.041,0.454,0.011,0.98
|
61
|
+
c-0.031,0.775-0.248,1.674-0.383,1.859c-0.248,0.342-0.733,0.621-1.446,0.828s-1.602,0.33-2.479,0.485
|
62
|
+
c-0.879,0.146-1.747,0.299-2.521,0.692c-0.775,0.393-1.457,1.229-1.446,2.263c0,0.589,0.248,1.147,0.619,1.54
|
63
|
+
c0.372,0.393,0.827,0.609,1.303,0.775c0.95,0.33,2.035,0.412,3.079,0.517c1.043,0.104,2.056,0.217,2.676,0.435
|
64
|
+
c0.31,0.103,0.506,0.236,0.6,0.33c0.093,0.094,0.113,0.135,0.113,0.32c0,0.165-0.021,0.195-0.083,0.27
|
65
|
+
c-0.062,0.071-0.206,0.176-0.465,0.278c-0.506,0.196-1.374,0.31-2.304,0.414c-0.93,0.103-1.912,0.196-2.811,0.496
|
66
|
+
c-0.889,0.299-1.809,0.95-2.015,2.024c-0.176,0.94,0.258,1.809,0.837,2.377c0.568,0.558,1.271,0.961,1.942,1.343
|
67
|
+
c0.672,0.393,1.322,0.765,1.757,1.126c0.434,0.361,0.609,0.65,0.63,0.971c0.021,0.27-0.165,0.547-0.651,1.014
|
68
|
+
c-0.485,0.465-1.188,0.98-1.622,1.849c-1.25,2.489-2.376,7.264-2.407,7.409l-7.088,16.264L104.149,94.83
|
69
|
+
c0.393-0.94,0.733-1.912,0.94-2.925c0.65-3.254,0.341-6.756-1.292-9.329c-1.395-2.201-3.916-3.575-6.603-4.175
|
70
|
+
c-0.671-0.155-1.363-0.248-2.056-0.299l8.7-43.326l11.221-1.104L114.077,23.11z M113.312,14.958l81.845,4.257l-3.658,10.229
|
71
|
+
L166.122,47.95c-0.062-2.914-0.558-6.159-1.591-9.021c-0.692-1.922-1.622-3.678-2.883-5.021c-1.261-1.344-2.872-2.273-4.794-2.428
|
72
|
+
c-1.881-0.146-3.575,0.506-4.98,1.621c-1.405,1.116-2.553,2.666-3.493,4.412c-0.051,0.104-0.093,0.217-0.154,0.332l-34.346-16.812
|
73
|
+
L113.312,14.958z M112.683,8.118l-26.989,2.128l0.062,0.878l0.889,13.04L49.767,43.083c0.062-0.506,0.083-0.579,0.135-1.281
|
74
|
+
c0.113-1.623,0.176-3.523-0.228-4.949c-0.413-1.437-1.426-2.47-2.572-3.183c-1.147-0.713-2.429-1.157-3.575-1.487
|
75
|
+
c-2.459-0.703-5.363-0.435-7.667,1.094c-1.157,0.766-2.594,2.129-3.803,3.328c-1.064,1.054-1.705,1.756-1.901,1.953
|
76
|
+
c-0.371,0.021-2.635,0.166-4.236,0.248c-0.867,0.041-1.952,0.082-3.027,0.495c-1.074,0.413-2.107,1.292-2.645,2.749
|
77
|
+
c-1.023,2.811,0.01,5.383,1.767,7.43c1.446,1.694,3.585,4.422,4.081,5.041c-0.361,0.403-1.085,1.199-2.252,2.625
|
78
|
+
c-1.426,1.746-2.945,3.627-3.472,5.084c-0.961,2.645-0.021,6.002,2.396,7.584c0.444,0.289,0.94,0.402,1.457,0.455l-7.677,30.553
|
79
|
+
c-1.685,0.402-3.266,0.93-4.505,1.715c-2.79,1.777-5.156,5.568-6.954,8.938c-1.798,3.369-2.966,6.324-2.966,6.324l-0.258,0.65
|
80
|
+
l12.854,8.896l0.496-0.785c0,0,1.074-1.715,2.552-3.729c1.251-1.705,2.801-3.585,4.112-4.773l21.11,30.595l-7.398,4.813l9,5.395
|
81
|
+
l-2.356,13.102l9.909-9.268l81.793,66.335c-0.909,1.063-1.809,2.324-2.139,3.885c-0.414,1.922,0.154,4.175,2.324,6.2
|
82
|
+
c1.116,1.043,2.305,1.581,3.472,1.652c1.168,0.072,2.253-0.311,3.203-0.879c1.912-1.146,3.441-3.079,4.64-4.524
|
83
|
+
c1.126-1.354,2.914-2.903,4.691-3.947c1.787-1.043,3.544-1.487,4.505-1.137c0.548,0.195,0.847,0.465,1.095,0.837
|
84
|
+
c0.238,0.372,0.414,0.879,0.527,1.509c0.228,1.25,0.217,2.935,0.62,4.629c0.454,1.881,1.88,3.244,3.44,3.979
|
85
|
+
c1.561,0.732,3.348,0.93,4.753,0.145c1.312-0.744,2.242-2.17,2.738-3.72s0.558-3.317-0.331-4.723
|
86
|
+
c-0.702-1.115-1.322-1.942-1.746-2.666c-0.423-0.724-0.661-1.312-0.723-2.088c-0.052-0.618,0.227-1.188,0.733-1.734
|
87
|
+
c0.506-0.537,1.24-1.002,1.859-1.262c0.807-0.341,1.612-0.837,2.264-1.487c0.65-0.642,1.178-1.456,1.239-2.429
|
88
|
+
c0.093-1.633-0.692-2.924-1.663-3.833c-0.62-0.578-1.344-0.724-1.892-0.815c-0.258-0.052-0.506-0.093-0.764-0.176l51.001-66.501
|
89
|
+
c2.356,1.302,5.353,1.478,8.184,0.879c3.131-0.662,6.106-2.265,7.812-4.66c1.653-2.325,2.107-5.486,1.694-8.504
|
90
|
+
c-0.393-2.821-1.581-5.538-3.492-7.389l7.16-38.312l4.03,2.128l14.196-33.157l-16.118-9.33l-29.148-25.285L198.7,9.308
|
91
|
+
l-0.537,1.508l-2.377,6.644l-82.64-4.298L112.683,8.118z"/>
|
92
|
+
<path id="path4987" inkscape:connector-curvature="0" fill="#B50000" d="M111.07,10.028l2.057,22.051l-24.003,2.365l-1.54-22.565
|
93
|
+
L111.07,10.028z"/>
|
94
|
+
<path id="path4985" inkscape:connector-curvature="0" fill="#FF6600" d="M199.301,12.933l10.528,13.381l-16.242,2.574
|
95
|
+
L199.301,12.933z"/>
|
96
|
+
<path id="path4973" inkscape:connector-curvature="0" fill="#9ADE00" d="M156.72,33.247c1.437,0.113,2.604,0.766,3.637,1.87
|
97
|
+
c1.023,1.095,1.87,2.646,2.511,4.411c1.271,3.523,1.685,7.904,1.416,11.119c-0.279,3.336-1.446,7.801-3.348,11.221
|
98
|
+
c-0.95,1.705-2.077,3.15-3.316,4.102c-1.24,0.94-2.542,1.405-4.04,1.24c-1.468-0.166-2.614-0.878-3.586-2.057
|
99
|
+
c-0.971-1.166-1.735-2.811-2.273-4.659c-1.074-3.709-1.25-8.276-0.898-11.593c0.33-3.151,1.395-7.315,3.131-10.529
|
100
|
+
c0.868-1.602,1.901-2.965,3.037-3.864C154.116,33.587,155.325,33.133,156.72,33.247z"/>
|
101
|
+
<path id="path4971" inkscape:connector-curvature="0" fill="#0084C8" d="M41.49,33.619c0.538,0.042,1.055,0.124,1.55,0.269
|
102
|
+
c1.064,0.301,2.212,0.713,3.121,1.281c0.909,0.568,1.55,1.25,1.808,2.17c0.259,0.919,0.279,2.79,0.166,4.34
|
103
|
+
c-0.114,1.551-0.3,2.812-0.3,2.812l-0.114,0.765l0.744,0.217c0,0,2.015,0.58,4.36,1.529c2.345,0.95,5.032,2.335,6.179,3.616
|
104
|
+
c1.127,1.25,1.675,3.493,1.54,5.858c-0.135,2.365-0.95,4.814-2.181,6.396c-2.593,3.327-6.705,5.383-10.983,4.464
|
105
|
+
c-2.046-0.443-4.174-1.975-5.744-3.431c-1.571-1.457-2.562-2.779-2.562-2.779l-0.444-0.589l-0.662,0.331c0,0-3.822,1.86-6.21,4.174
|
106
|
+
c-0.991,0.961-2.728,2.108-4.381,2.8c-0.826,0.352-1.632,0.579-2.283,0.661c-0.651,0.072-1.126-0.021-1.364-0.176
|
107
|
+
c-1.55-1.013-2.335-3.72-1.694-5.486c0.279-0.754,1.788-2.862,3.183-4.567c1.395-1.704,2.696-3.131,2.696-3.131l0.507-0.558
|
108
|
+
l-0.465-0.589c0,0-2.914-3.709-4.588-5.662c-1.529-1.788-2.231-3.513-1.446-5.663c0.372-1.022,0.909-1.437,1.611-1.704
|
109
|
+
c0.703-0.279,1.602-0.332,2.47-0.383c1.746-0.093,4.588-0.27,4.588-0.27l0.352-0.021l0.237-0.258c0,0,0.92-1.002,2.098-2.16
|
110
|
+
c1.178-1.167,2.635-2.511,3.533-3.101C38.194,33.867,39.889,33.505,41.49,33.619L41.49,33.619z"/>
|
111
|
+
<path id="path4969" inkscape:connector-curvature="0" fill="#9EABB0" d="M241.127,53.603l13.979,8.101l-12.812,29.944
|
112
|
+
l-15.116-8.008L241.127,53.603z"/>
|
113
|
+
<path id="path4965" inkscape:connector-curvature="0" fill="#19AEFF" d="M193.607,77.202l12.161,3.027l-4.846,14.621l-3.338,0.496
|
114
|
+
L193.607,77.202z"/>
|
115
|
+
<path id="path4963" inkscape:connector-curvature="0" fill="#FF4141" d="M95.023,79.867c0.6,0.042,1.188,0.124,1.777,0.258
|
116
|
+
c2.346,0.517,4.443,1.747,5.487,3.39c1.281,2.024,1.632,5.135,1.054,8.028c-0.579,2.894-2.077,5.507-4.112,6.695
|
117
|
+
c-2.088,1.219-5.26,1.25-8.163,0.319c-2.903-0.93-5.466-2.811-6.479-5.011c-0.909-1.983-0.62-4.67,0.485-7.14
|
118
|
+
c1.116-2.479,3.038-4.691,5.053-5.704C91.47,80.022,93.236,79.744,95.023,79.867z"/>
|
119
|
+
<path id="path4953" inkscape:connector-curvature="0" fill="#804D00" d="M144.744,100.708l8.565,11.2l-5.248,21.781l-10.064-17.493
|
120
|
+
L144.744,100.708z"/>
|
121
|
+
<path id="path4951" inkscape:connector-curvature="0" fill="#9ADE00" d="M29.071,101.504c0.837,0.011,1.002,0.031,1.363,0.042
|
122
|
+
l0.537,10.508c-0.475,0.135-1.467,0.403-3.233,1.023c-2.14,0.754-4.629,1.747-6.23,2.936c-1.788,1.332-3.669,3.698-5.188,5.766
|
123
|
+
c-1.209,1.652-1.767,2.552-2.098,3.067L4.034,117.8c0.31-0.765,1.167-2.8,2.614-5.496c1.746-3.266,4.174-6.893,6.344-8.277
|
124
|
+
c2.346-1.498,6.985-2.211,10.953-2.438C25.93,101.483,27.748,101.483,29.071,101.504z"/>
|
125
|
+
<path id="path4945" inkscape:connector-curvature="0" fill="#009100" d="M222.693,128.729c2.924,0,5.931,0.931,7.76,2.501
|
126
|
+
c1.705,1.457,2.894,4.02,3.266,6.685c0.371,2.666-0.083,5.415-1.375,7.233c-1.343,1.891-3.957,3.367-6.736,3.957
|
127
|
+
c-2.779,0.589-5.652,0.278-7.532-1.033c-2.191-1.529-3.792-4.649-4.319-7.937c-0.527-3.285,0.041-6.664,1.746-8.688
|
128
|
+
C217,129.66,219.77,128.74,222.693,128.729z"/>
|
129
|
+
<path id="path4943" inkscape:connector-curvature="0" fill="#FFFF3E" d="M180.288,139.331l9.558,7.719l0.362,8.173l-6.841,7.844
|
130
|
+
l-8.886-4.093l-2.511-8.959L180.288,139.331z"/>
|
131
|
+
<path id="path4941" inkscape:connector-curvature="0" fill="#BA00FF" d="M47.7,140.84l5.073,8.297l7.017-1.633l-3.431,8.245
|
132
|
+
l4.618,4.712l-9.247,0.188l-6.819,6.375l1.622-9.041l-7.615-4.567l6.055-3.937L47.7,140.84z"/>
|
133
|
+
<path id="path4939" inkscape:connector-curvature="0" fill="#005C94" d="M109.428,141.738l16.016,27.66l-15.045,6.603
|
134
|
+
L109.428,141.738z"/>
|
135
|
+
<path id="path4927" inkscape:connector-curvature="0" fill="#FF9900" d="M157.474,211.772c1.809,0.071,3.162,1.044,4.31,1.993
|
136
|
+
c0.413,0.343,0.743,0.932,1.178,1.645c0.434,0.713,0.991,1.56,1.974,2.159c0.919,0.559,1.735,0.713,2.283,0.815
|
137
|
+
c0.558,0.104,0.754,0.136,0.992,0.361c0.754,0.713,1.167,1.385,1.105,2.438c-0.021,0.372-0.259,0.827-0.713,1.271
|
138
|
+
c-0.455,0.444-1.085,0.847-1.705,1.116c-0.816,0.341-1.715,0.897-2.459,1.674c-0.734,0.773-1.312,1.849-1.209,3.089
|
139
|
+
c0.082,1.085,0.465,1.994,0.961,2.842s1.105,1.663,1.777,2.717c0.485,0.766,0.526,2.017,0.134,3.226s-1.188,2.294-1.922,2.717
|
140
|
+
c-0.65,0.372-1.942,0.352-3.12-0.206c-1.178-0.559-2.17-1.55-2.47-2.79c-0.341-1.416-0.33-3.027-0.6-4.536
|
141
|
+
c-0.134-0.754-0.351-1.498-0.785-2.159c-0.434-0.66-1.095-1.22-1.974-1.539c-1.88-0.683-4.019,0.104-6.013,1.271
|
142
|
+
c-1.995,1.167-3.886,2.8-5.167,4.35c-1.209,1.457-2.696,3.234-4.185,4.134c-0.744,0.455-1.467,0.683-2.18,0.631
|
143
|
+
c-0.713-0.042-1.478-0.353-2.366-1.179c-1.829-1.716-2.098-3.161-1.798-4.535c0.289-1.386,1.291-2.738,2.283-3.782
|
144
|
+
c0.889-0.94,2.314-1.653,3.596-2.428c0.641-0.384,1.24-0.785,1.726-1.323c0.485-0.537,0.826-1.291,0.744-2.118
|
145
|
+
c-0.135-1.312-0.713-2.396-1.52-3.254c-0.806-0.858-1.818-1.529-2.903-2.191c-0.971-0.589-1.726-1.312-1.974-1.891
|
146
|
+
c-0.248-0.578-0.258-1.013,0.527-1.818c0.765-0.774,1.994-1.24,3.162-1.188c1.167,0.052,2.231,0.559,2.883,1.716
|
147
|
+
c0.867,1.529,1.798,2.49,2.883,2.935c1.074,0.444,2.221,0.259,3.172-0.248c1.818-0.961,3.234-2.646,4.536-4.029
|
148
|
+
C153.775,212.485,155.646,211.7,157.474,211.772z"/>
|
149
|
+
<path fill="#0084C8" stroke="#000000" stroke-width="2" stroke-miterlimit="10" d="M338.388,106.288h12.192v24.695
|
150
|
+
c-6.819,7.512-16.563,11.263-29.241,11.263c-10.674,0-19.611-3.514-26.813-10.539c-7.201-7.026-10.797-15.912-10.797-26.658
|
151
|
+
c0-10.745,3.668-19.704,11.004-26.864c7.336-7.162,16.201-10.746,26.606-10.746c10.404,0,19.043,3.027,25.936,9.093l-6.511,9.299
|
152
|
+
c-2.819-2.407-5.662-4.081-8.523-5.011c-2.862-0.93-6.18-1.396-9.972-1.396c-7.306,0-13.433,2.355-18.392,7.078
|
153
|
+
c-4.96,4.722-7.439,10.921-7.439,18.599c0,7.679,2.407,13.847,7.232,18.495c4.825,4.649,10.663,6.976,17.514,6.976
|
154
|
+
c6.852,0,12.585-1.479,17.204-4.443V106.288z"/>
|
155
|
+
<path fill="#B50000" stroke="#000000" stroke-width="2" stroke-miterlimit="10" d="M424.251,92.649
|
156
|
+
c0,11.914-5.197,19.425-15.602,22.524l18.907,26.244h-15.499l-17.255-24.28h-16.016v24.28h-12.192V69.194h26.864
|
157
|
+
c11.025,0,18.909,1.859,23.662,5.58C421.874,78.494,424.251,84.455,424.251,92.649z M408.029,102.878
|
158
|
+
c2.479-2.139,3.72-5.559,3.72-10.281c0-4.722-1.271-7.955-3.823-9.713c-2.552-1.756-7.099-2.635-13.639-2.635h-15.499v25.832
|
159
|
+
h15.188C400.858,106.081,405.549,105.017,408.029,102.878z"/>
|
160
|
+
<path fill="#FF6600" stroke="#000000" stroke-width="2" stroke-miterlimit="10" d="M502.263,131.447
|
161
|
+
c-7.306,7.13-16.325,10.693-27.07,10.693c-10.746,0-19.768-3.563-27.072-10.693c-7.305-7.129-10.952-16.015-10.952-26.658
|
162
|
+
s3.647-19.528,10.952-26.658c7.306-7.129,16.326-10.694,27.072-10.694c10.745,0,19.766,3.565,27.07,10.694
|
163
|
+
c7.306,7.13,10.952,16.017,10.952,26.658S509.558,124.318,502.263,131.447z M493.324,86.243
|
164
|
+
c-4.928-5.094-10.974-7.646-18.133-7.646c-7.161,0-13.205,2.553-18.135,7.646c-4.929,5.094-7.389,11.283-7.389,18.547
|
165
|
+
s2.46,13.453,7.389,18.546c4.93,5.094,10.974,7.646,18.135,7.646c7.159,0,13.205-2.554,18.133-7.646
|
166
|
+
c4.929-5.093,7.389-11.282,7.389-18.546S498.243,91.347,493.324,86.243z"/>
|
167
|
+
<path fill="#9ADE00" stroke="#000000" stroke-width="2" stroke-miterlimit="10" d="M540.803,141.418H528.61V69.194h19.012
|
168
|
+
l21.803,45.359l21.801-45.359h18.909v72.224h-12.191V85.002l-25.212,50.113h-6.819l-25.108-50.113L540.803,141.418L540.803,141.418
|
169
|
+
z"/>
|
170
|
+
<path d="M307.142,160.709v13.598c0,2.76-0.743,4.825-2.242,6.2c-1.498,1.374-3.409,2.066-5.755,2.066s-4.464-0.734-6.354-2.201
|
171
|
+
l1.55-2.49c1.519,1.157,3.059,1.727,4.618,1.727c1.55,0,2.78-0.403,3.689-1.198c0.909-0.807,1.363-2.077,1.363-3.844v-1.994
|
172
|
+
c-0.485,0.919-1.188,1.653-2.098,2.2c-0.909,0.548-1.932,0.815-3.058,0.815c-2.067,0-3.771-0.723-5.104-2.17
|
173
|
+
c-1.333-1.446-1.994-3.244-1.994-5.394c0-2.148,0.661-3.947,1.994-5.395s3.027-2.17,5.083-2.17c2.057,0,3.741,0.848,5.022,2.553
|
174
|
+
v-2.313h3.285L307.142,160.709L307.142,160.709z M294.98,167.9c0,1.28,0.393,2.387,1.188,3.316
|
175
|
+
c0.795,0.931,1.859,1.396,3.192,1.396s2.418-0.444,3.255-1.344c0.826-0.898,1.25-2.016,1.25-3.357c0-1.333-0.424-2.47-1.261-3.399
|
176
|
+
c-0.837-0.929-1.922-1.396-3.255-1.396c-1.332,0-2.387,0.476-3.182,1.437C295.373,165.504,294.98,166.63,294.98,167.9z"/>
|
177
|
+
<path d="M320.067,163.788c-1.622,0-2.842,0.527-3.668,1.581c-0.816,1.054-1.229,2.47-1.229,4.247v6.685h-3.286v-15.592h3.286v3.131
|
178
|
+
c0.527-0.98,1.25-1.776,2.149-2.407c0.908-0.619,1.87-0.95,2.883-0.972l0.031,3.317
|
179
|
+
C320.182,163.788,320.119,163.788,320.067,163.788z"/>
|
180
|
+
<path d="M336.011,176.301h-2.996v-2.076c-1.292,1.539-3.018,2.314-5.188,2.314c-1.622,0-2.965-0.455-4.029-1.375
|
181
|
+
c-1.063-0.919-1.602-2.139-1.602-3.678c0-1.529,0.567-2.688,1.705-3.441c1.137-0.765,2.665-1.146,4.598-1.146h4.247v-0.59
|
182
|
+
c0-2.065-1.157-3.109-3.462-3.109c-1.446,0-2.955,0.527-4.517,1.581l-1.467-2.058c1.892-1.508,4.04-2.252,6.447-2.252
|
183
|
+
c1.84,0,3.338,0.465,4.495,1.396c1.157,0.93,1.746,2.387,1.746,4.381v10.054L336.011,176.301L336.011,176.301z M332.725,170.505
|
184
|
+
v-1.323h-3.688c-2.366,0-3.544,0.744-3.544,2.232c0,0.765,0.289,1.343,0.878,1.746c0.589,0.402,1.405,0.599,2.449,0.599
|
185
|
+
s1.963-0.289,2.737-0.878S332.725,171.496,332.725,170.505z"/>
|
186
|
+
<path d="M348.927,160.472c2.087,0,3.875,0.724,5.362,2.17c1.488,1.446,2.232,3.368,2.232,5.775c0,2.408-0.734,4.36-2.213,5.859
|
187
|
+
c-1.478,1.508-3.191,2.252-5.154,2.252c-1.964,0-3.73-0.857-5.291-2.583v8.027h-3.285v-21.273h3.285v2.728
|
188
|
+
C345.155,161.464,346.84,160.472,348.927,160.472z M343.802,168.531c0,1.486,0.444,2.696,1.343,3.646
|
189
|
+
c0.899,0.95,1.994,1.427,3.286,1.427c1.291,0,2.418-0.466,3.368-1.405c0.961-0.94,1.438-2.149,1.438-3.647s-0.465-2.737-1.405-3.72
|
190
|
+
s-2.066-1.478-3.368-1.478c-1.312,0-2.418,0.495-3.316,1.478C344.256,165.813,343.802,167.054,343.802,168.531z"/>
|
191
|
+
<path d="M363.558,167.859v8.44h-3.285v-21.719h3.285v8.969c0.466-0.961,1.179-1.705,2.13-2.253
|
192
|
+
c0.949-0.547,1.963-0.815,3.058-0.815c1.757,0,3.183,0.537,4.268,1.611s1.622,2.624,1.622,4.66v9.559h-3.285v-8.557
|
193
|
+
c0-2.872-1.188-4.309-3.574-4.309c-1.138,0-2.118,0.372-2.955,1.126C363.971,165.317,363.558,166.413,363.558,167.859z"/>
|
194
|
+
<path d="M400.279,174.203c-1.561,1.55-3.514,2.325-5.858,2.325s-4.298-0.775-5.858-2.325c-1.56-1.55-2.346-3.45-2.346-5.703
|
195
|
+
c0-2.242,0.785-4.144,2.346-5.704c1.562-1.55,3.514-2.324,5.858-2.324s4.299,0.774,5.858,2.324
|
196
|
+
c1.561,1.551,2.346,3.451,2.346,5.704C402.615,170.753,401.84,172.653,400.279,174.203z M390.888,172.188
|
197
|
+
c0.931,0.95,2.107,1.426,3.533,1.426s2.604-0.476,3.534-1.426s1.395-2.171,1.395-3.679c0-1.509-0.465-2.729-1.395-3.679
|
198
|
+
c-0.931-0.951-2.108-1.426-3.534-1.426s-2.604,0.475-3.533,1.426c-0.931,0.95-1.396,2.17-1.396,3.679
|
199
|
+
C389.492,170.009,389.957,171.238,390.888,172.188z"/>
|
200
|
+
<path d="M414.693,160.472c2.087,0,3.875,0.724,5.362,2.17s2.231,3.368,2.231,5.775c0,2.408-0.733,4.36-2.211,5.859
|
201
|
+
c-1.479,1.508-3.193,2.252-5.156,2.252s-3.729-0.857-5.29-2.583v2.346h-3.286v-21.75h3.286v8.875
|
202
|
+
C410.912,161.464,412.606,160.472,414.693,160.472z M409.568,168.531c0,1.486,0.443,2.696,1.344,3.646
|
203
|
+
c0.897,0.95,1.994,1.427,3.285,1.427c1.292,0,2.418-0.466,3.369-1.405c0.961-0.94,1.436-2.149,1.436-3.647s-0.465-2.737-1.405-3.72
|
204
|
+
c-0.938-0.981-2.065-1.478-3.368-1.478c-1.312,0-2.418,0.495-3.315,1.478C410.013,165.813,409.568,167.054,409.568,168.531z"/>
|
205
|
+
<path d="M426.039,177.034v-16.325h3.285v16.439c0,1.643-0.496,2.943-1.479,3.916c-0.99,0.972-2.18,1.445-3.574,1.445
|
206
|
+
c-1.396,0-2.677-0.517-3.822-1.55l1.519-2.459c0.661,0.641,1.333,0.972,2.005,0.972c0.671,0,1.188-0.218,1.539-0.641
|
207
|
+
C425.863,178.389,426.039,177.799,426.039,177.034z M426.184,157.609c-0.412-0.413-0.619-0.899-0.619-1.468
|
208
|
+
c0-0.567,0.207-1.055,0.619-1.468c0.413-0.413,0.898-0.62,1.468-0.62c0.568,0,1.055,0.207,1.468,0.62s0.62,0.899,0.62,1.468
|
209
|
+
c0,0.567-0.207,1.055-0.62,1.468s-0.899,0.62-1.468,0.62C427.082,158.219,426.597,158.013,426.184,157.609z"/>
|
210
|
+
<path d="M448.574,169.946H436.35c0.083,1.137,0.601,2.046,1.551,2.737c0.961,0.692,2.057,1.044,3.285,1.044
|
211
|
+
c1.953,0,3.44-0.619,4.453-1.85l1.881,2.056c-1.685,1.736-3.863,2.604-6.562,2.604c-2.19,0-4.05-0.724-5.579-2.181
|
212
|
+
s-2.305-3.409-2.305-5.858s0.785-4.401,2.346-5.849c1.562-1.446,3.399-2.17,5.528-2.17c2.118,0,3.926,0.641,5.402,1.922
|
213
|
+
c1.488,1.28,2.232,3.049,2.232,5.291v2.252L448.574,169.946L448.574,169.946z M436.351,167.363h8.938
|
214
|
+
c0-1.312-0.413-2.314-1.229-3.018c-0.815-0.703-1.828-1.055-3.036-1.055c-1.199,0-2.284,0.362-3.234,1.096
|
215
|
+
C436.826,165.121,436.351,166.113,436.351,167.363z"/>
|
216
|
+
<path d="M459.093,176.539c-2.17,0-4.028-0.734-5.601-2.212c-1.561-1.479-2.346-3.399-2.346-5.786s0.815-4.318,2.448-5.817
|
217
|
+
c1.633-1.498,3.616-2.241,5.962-2.241c2.347,0,4.329,0.807,5.952,2.429l-1.933,2.376c-1.344-1.167-2.707-1.756-4.071-1.756
|
218
|
+
c-1.363,0-2.552,0.454-3.563,1.362c-1.003,0.909-1.51,2.077-1.51,3.515c0,1.436,0.496,2.655,1.498,3.646
|
219
|
+
c1.003,0.991,2.223,1.498,3.68,1.498s2.83-0.661,4.122-1.994l1.933,2.107C463.763,175.578,461.572,176.539,459.093,176.539z"/>
|
220
|
+
<path d="M473.104,163.344v7.915c0,0.744,0.196,1.333,0.59,1.777c0.393,0.444,0.939,0.661,1.644,0.661
|
221
|
+
c0.702,0,1.374-0.341,2.024-1.022l1.344,2.314c-1.157,1.033-2.428,1.55-3.823,1.55c-1.395,0-2.594-0.486-3.575-1.447
|
222
|
+
c-0.991-0.971-1.478-2.271-1.478-3.916v-7.82h-1.963v-2.636h1.963v-4.896h3.286v4.896h4.102v2.636h-4.111v-0.012H473.104z"/>
|
223
|
+
<path d="M492.622,167.859v8.44h-3.286v-15.591h3.286v2.842c0.465-0.961,1.178-1.705,2.129-2.253
|
224
|
+
c0.95-0.547,1.963-0.815,3.059-0.815c2.459,0,4.134,1.013,5.012,3.049c1.54-2.036,3.472-3.049,5.775-3.049
|
225
|
+
c1.756,0,3.183,0.538,4.268,1.611c1.085,1.074,1.623,2.624,1.623,4.66v9.559H511.2v-8.557c0-2.872-1.188-4.309-3.575-4.309
|
226
|
+
c-1.116,0-2.087,0.36-2.914,1.074c-0.826,0.713-1.261,1.757-1.302,3.12v8.68h-3.285v-8.556c0-1.487-0.271-2.572-0.796-3.266
|
227
|
+
c-0.527-0.692-1.354-1.043-2.49-1.043s-2.118,0.371-2.955,1.126C493.035,165.317,492.622,166.413,492.622,167.859z"/>
|
228
|
+
<path d="M531.68,176.301h-2.985v-2.076c-1.292,1.539-3.019,2.314-5.188,2.314c-1.622,0-2.965-0.455-4.029-1.375
|
229
|
+
c-1.063-0.919-1.602-2.139-1.602-3.678c0-1.529,0.568-2.688,1.705-3.441c1.137-0.765,2.665-1.146,4.598-1.146h4.247v-0.59
|
230
|
+
c0-2.065-1.157-3.109-3.462-3.109c-1.445,0-2.955,0.527-4.515,1.581l-1.468-2.058c1.891-1.508,4.039-2.252,6.446-2.252
|
231
|
+
c1.841,0,3.338,0.465,4.495,1.396c1.157,0.93,1.746,2.387,1.746,4.381v10.054L531.68,176.301L531.68,176.301z M528.404,170.505
|
232
|
+
v-1.323h-3.689c-2.366,0-3.544,0.744-3.544,2.232c0,0.765,0.289,1.343,0.879,1.746c0.589,0.402,1.404,0.599,2.448,0.599
|
233
|
+
s1.963-0.289,2.738-0.878C528.011,172.292,528.404,171.496,528.404,170.505z"/>
|
234
|
+
<path d="M544.605,160.472c2.087,0,3.875,0.724,5.361,2.17c1.488,1.446,2.232,3.368,2.232,5.775c0,2.408-0.734,4.36-2.212,5.859
|
235
|
+
c-1.479,1.508-3.192,2.252-5.155,2.252c-1.964,0-3.73-0.857-5.291-2.583v8.027h-3.285v-21.273h3.285v2.728
|
236
|
+
C540.823,161.464,542.519,160.472,544.605,160.472z M539.48,168.531c0,1.486,0.443,2.696,1.343,3.646
|
237
|
+
c0.898,0.95,1.994,1.427,3.286,1.427s2.418-0.466,3.367-1.405c0.961-0.94,1.438-2.149,1.438-3.647s-0.465-2.737-1.405-3.72
|
238
|
+
c-0.939-0.982-2.065-1.478-3.368-1.478c-1.312,0-2.418,0.495-3.316,1.478C539.925,165.813,539.48,167.054,539.48,168.531z"/>
|
239
|
+
<path d="M564.3,160.472c2.087,0,3.874,0.724,5.362,2.17c1.487,1.446,2.23,3.368,2.23,5.775c0,2.408-0.732,4.36-2.211,5.859
|
240
|
+
c-1.478,1.508-3.191,2.252-5.155,2.252s-3.729-0.857-5.29-2.583v8.027h-3.286v-21.273h3.286v2.728
|
241
|
+
C560.518,161.464,562.212,160.472,564.3,160.472z M559.175,168.531c0,1.486,0.443,2.696,1.343,3.646s1.994,1.427,3.286,1.427
|
242
|
+
c1.291,0,2.417-0.466,3.368-1.405c0.961-0.94,1.438-2.149,1.438-3.647s-0.467-2.737-1.405-3.72
|
243
|
+
c-0.94-0.981-2.067-1.478-3.369-1.478c-1.312,0-2.417,0.495-3.316,1.478C559.62,165.814,559.175,167.054,559.175,168.531z"/>
|
244
|
+
<path d="M590.151,169.946h-12.225c0.083,1.137,0.601,2.046,1.55,2.737c0.961,0.692,2.058,1.044,3.286,1.044
|
245
|
+
c1.953,0,3.44-0.619,4.453-1.85l1.881,2.056c-1.685,1.736-3.863,2.604-6.562,2.604c-2.19,0-4.05-0.724-5.579-2.181
|
246
|
+
s-2.305-3.409-2.305-5.858s0.784-4.401,2.346-5.849c1.561-1.446,3.399-2.17,5.528-2.17c2.117,0,3.926,0.641,5.402,1.922
|
247
|
+
c1.488,1.28,2.232,3.049,2.232,5.291v2.252L590.151,169.946L590.151,169.946z M577.928,167.363h8.938
|
248
|
+
c0-1.312-0.414-2.314-1.23-3.018c-0.814-0.703-1.828-1.055-3.037-1.055c-1.198,0-2.283,0.362-3.233,1.096
|
249
|
+
C578.403,165.121,577.928,166.113,577.928,167.363z"/>
|
250
|
+
<path d="M601.931,163.788c-1.622,0-2.842,0.527-3.668,1.581c-0.815,1.054-1.229,2.47-1.229,4.247v6.685h-3.286v-15.592h3.286v3.131
|
251
|
+
c0.525-0.98,1.25-1.776,2.148-2.407c0.909-0.619,1.87-0.95,2.884-0.972l0.029,3.317
|
252
|
+
C602.044,163.788,601.993,163.788,601.931,163.788z"/>
|
253
|
+
</g>
|
254
|
+
</svg>
|
data/lib/grom.rb
CHANGED
data/lib/grom/builder.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
module Grom
|
2
|
+
# Builds Grom::Node objects from a Grom::Reader instance.
|
3
|
+
#
|
4
|
+
# @since 0.1.0
|
5
|
+
# @attr_reader [Array] objects Grom::Node objects generated from n-triple data.
|
2
6
|
class Builder
|
3
7
|
attr_reader :objects
|
4
8
|
|
9
|
+
# @param [Grom::Reader] reader a Grom::Reader instance populated with data.
|
5
10
|
def initialize(reader)
|
6
11
|
@reader = reader
|
7
12
|
|
8
13
|
build_objects
|
9
14
|
end
|
10
15
|
|
16
|
+
# Builds and links Grom::Node objects from n-triple data.
|
17
|
+
#
|
18
|
+
# @return [Array] array of linked Grom::Node objects.
|
11
19
|
def build_objects
|
12
20
|
build_objects_by_subject
|
13
21
|
link_objects
|
@@ -15,12 +23,13 @@ module Grom
|
|
15
23
|
@objects
|
16
24
|
end
|
17
25
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
26
|
+
# Builds Grom::Node objects from n-triple data grouping by their subject.
|
27
|
+
#
|
28
|
+
# @return [Grom::Builder] an instance of self.
|
22
29
|
def build_objects_by_subject
|
23
|
-
|
30
|
+
@objects = []
|
31
|
+
@objects_by_subject = {}
|
32
|
+
|
24
33
|
@reader.statements_by_subject.each do |subject, statements|
|
25
34
|
object = Grom::Node.new(statements)
|
26
35
|
@objects_by_subject[subject] = object
|
@@ -30,21 +39,21 @@ module Grom
|
|
30
39
|
self
|
31
40
|
end
|
32
41
|
|
42
|
+
# Links Grom::Node objects together by predicate and object.
|
43
|
+
#
|
44
|
+
# @return [Grom::Builder] an instance of self.
|
33
45
|
def link_objects
|
34
46
|
@reader.edges_by_subject.each do |subject, predicates|
|
35
47
|
predicates.each do |predicate, object_uris|
|
36
48
|
current_node = @objects_by_subject[subject]
|
37
49
|
|
38
50
|
object_uris.each do |object_uri|
|
39
|
-
|
40
51
|
predicate_name_symbol = "@#{predicate}".to_sym
|
41
52
|
object_array = current_node.instance_variable_get(predicate_name_symbol)
|
42
53
|
object_array = [] if object_array.is_a?(String)
|
43
54
|
object_array << @objects_by_subject[object_uri]
|
44
|
-
|
45
|
-
current_node.instance_variable_set(predicate_name_symbol, object_array)
|
46
55
|
|
47
|
-
|
56
|
+
current_node.instance_variable_set(predicate_name_symbol, object_array)
|
48
57
|
end
|
49
58
|
end
|
50
59
|
end
|
data/lib/grom/helper.rb
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
module Grom
|
2
|
+
# Namespace for helper methods.
|
2
3
|
module Helper
|
4
|
+
# Creates a symbol in instance variable format which has been underscored, pluralized and downcased.
|
5
|
+
#
|
6
|
+
# @param [String] string instance variable name.
|
7
|
+
# @example Create a pluralized instance variable symbol
|
8
|
+
# Grom::Helper.pluralize_instance_variable_symbol('sittingHasPerson') #=> :@sitting_has_people
|
9
|
+
#
|
10
|
+
# @return [Symbol] instance variable name as a symbol.
|
3
11
|
def self.pluralize_instance_variable_symbol(string)
|
4
12
|
string = ActiveSupport::Inflector.underscore(string)
|
5
13
|
string = ActiveSupport::Inflector.pluralize(string).downcase
|
@@ -7,11 +15,28 @@ module Grom
|
|
7
15
|
"@#{string}".to_sym
|
8
16
|
end
|
9
17
|
|
18
|
+
# Creates or inserts an array and values into a hash.
|
19
|
+
#
|
20
|
+
# @param [Hash] hash
|
21
|
+
# @param [String, Symbol] key the key to use in the hash.
|
22
|
+
# @param [Object] value the value to attribute to the key.
|
23
|
+
# @example Adding values to an existing array within the hash
|
24
|
+
# Grom::Helper.lazy_array_insert({ :numbers => [1, 2, 3] }, :numbers, 4) #=> [1, 2, 3, 4]
|
25
|
+
#
|
26
|
+
# @example Adding values to a hash with no existing array
|
27
|
+
# Grom::Helper.lazy_array_insert({}, :numbers, 4) #=> [4]
|
28
|
+
#
|
29
|
+
# @return [Array] array with values inserted
|
10
30
|
def self.lazy_array_insert(hash, key, value)
|
11
31
|
hash[key] ||= []
|
12
32
|
hash[key] << value
|
13
33
|
end
|
14
34
|
|
35
|
+
# Returns the last part of a uri
|
36
|
+
#
|
37
|
+
# @param [String] uri uri
|
38
|
+
# @return [String] the last part of the uri or 'type' if the uri is an RDF type uri
|
39
|
+
# @return [nil] if the uri is not valid
|
15
40
|
def self.get_id(uri)
|
16
41
|
return nil if uri.to_s['/'].nil?
|
17
42
|
|
data/lib/grom/node.rb
CHANGED
@@ -1,21 +1,76 @@
|
|
1
1
|
module Grom
|
2
|
+
# A Ruby object populated with n-triple data.
|
3
|
+
#
|
4
|
+
# @since 0.1.0
|
5
|
+
# @attr_reader [Array] statements an array of n-triple statements.
|
2
6
|
class Node
|
7
|
+
BLANK = 'blank_node'.freeze
|
8
|
+
|
3
9
|
attr_reader :statements
|
4
10
|
|
11
|
+
# @param [Array] statements an array of n-triple statements.
|
5
12
|
def initialize(statements)
|
6
13
|
@statements = statements
|
7
14
|
|
8
15
|
populate
|
9
16
|
end
|
10
17
|
|
18
|
+
# Allows the user to access instance variables as methods or raise an error if the variable is not defined.
|
19
|
+
#
|
20
|
+
# @param [Symbol] method name of method.
|
21
|
+
# @param [Array] *params extra arguments to pass to super.
|
22
|
+
# @param [Block] &block block to pass to super.
|
23
|
+
# @example Accessing instance variables populated from statements
|
24
|
+
# statements = [
|
25
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF.type, 'Person'),
|
26
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF::URI.new('http://example.com/forename'), 'Jane'),
|
27
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF::URI.new('http://example.com/surname'), 'Smith')
|
28
|
+
# ]
|
29
|
+
#
|
30
|
+
# node = Grom::Node.new(statements)
|
31
|
+
#
|
32
|
+
# node.forename #=> 'Jane'
|
33
|
+
#
|
34
|
+
# @example Accessing instance variables created on the fly
|
35
|
+
# statements = [RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF.type, 'Person')]
|
36
|
+
#
|
37
|
+
# node = Grom::Node.new(statements)
|
38
|
+
# node.instance_variable_set('@foo', 'bar')
|
39
|
+
#
|
40
|
+
# node.foo #=> 'bar'
|
41
|
+
#
|
42
|
+
# @raise [NoMethodError] raises error if the method does not exist.
|
11
43
|
def method_missing(method, *params, &block)
|
12
44
|
instance_variable_get("@#{method}".to_sym) || super
|
13
45
|
end
|
14
46
|
|
15
|
-
|
47
|
+
# Allows the user to check if a Grom::Node responds to an instance variable
|
48
|
+
#
|
49
|
+
# @param [Symbol] method name of method.
|
50
|
+
# @param [Boolean] include_all indicates whether to include private and protected methods (defaults to false).
|
51
|
+
# @example Using respond_to?
|
52
|
+
#
|
53
|
+
# statements = [
|
54
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF.type, 'Person'),
|
55
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF::URI.new('http://example.com/forename'), 'Jane'),
|
56
|
+
# RDF::Statement.new(RDF::URI.new('http://example.com/123'), RDF::URI.new('http://example.com/surname'), 'Smith')
|
57
|
+
# ]
|
58
|
+
|
59
|
+
# node = Grom::Node.new(statements)
|
60
|
+
#
|
61
|
+
# node.respond_to?(:forename) #=> 'Jane'
|
62
|
+
# node.respond_to?(:foo) #=> false
|
63
|
+
def respond_to_missing?(method, include_all = false)
|
16
64
|
instance_variable_get("@#{method}".to_sym) || super
|
17
65
|
end
|
18
66
|
|
67
|
+
# Checks if Grom::Node is a blank node
|
68
|
+
#
|
69
|
+
# @return [Boolean] a boolean depending on whether or not the Grom::Node is a blank node
|
70
|
+
def blank?
|
71
|
+
@statements.first.subject.anonymous?
|
72
|
+
end
|
73
|
+
|
19
74
|
private
|
20
75
|
|
21
76
|
def set_graph_id
|
data/lib/grom/reader.rb
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
module Grom
|
2
|
+
# Reads n-triple data and passes it to a Grom::Builder instance to create objects
|
3
|
+
#
|
4
|
+
# @since 0.1.0
|
5
|
+
# @attr_reader [String] data n-triple data.
|
6
|
+
# @attr_reader [Hash] statements_by_subject statements grouped by subject.
|
7
|
+
# @attr_reader [Hash] edges_by_subject subjects connected to objects which are uris via their predicates.
|
8
|
+
# @attr_reader [Array] objects Grom::Node objects generated from n-triple data.
|
2
9
|
class Reader
|
3
|
-
attr_reader :data, :statements_by_subject, :
|
10
|
+
attr_reader :data, :statements_by_subject, :edges_by_subject, :objects
|
4
11
|
|
12
|
+
# @param [String] data n-triple data.
|
5
13
|
def initialize(data)
|
6
14
|
@data = data
|
7
15
|
|
@@ -10,23 +18,23 @@ module Grom
|
|
10
18
|
@objects = Grom::Builder.new(self).objects
|
11
19
|
end
|
12
20
|
|
21
|
+
# Reads the n-triple data and separates the statements by subject.
|
22
|
+
#
|
23
|
+
# @return [Grom::Reader] an instance of self.
|
13
24
|
def read_data
|
14
|
-
|
15
|
-
@statements_by_subject = {}
|
25
|
+
@statements_by_subject = {}
|
16
26
|
|
17
|
-
# TODO: Find a better name for this hash!
|
18
27
|
@edges_by_subject = {}
|
19
28
|
|
20
29
|
RDF::NTriples::Reader.new(@data) do |reader|
|
21
30
|
reader.each_statement do |statement|
|
22
31
|
subject = statement.subject.to_s
|
23
32
|
|
24
|
-
# TODO: Use Ruby key value syntax in below method.
|
25
33
|
Grom::Helper.lazy_array_insert(@statements_by_subject, subject, statement)
|
26
34
|
|
27
35
|
predicate = statement.predicate.to_s
|
28
36
|
|
29
|
-
if
|
37
|
+
if statement.object.uri? && predicate != RDF.type.to_s
|
30
38
|
predicate = Grom::Helper.get_id(predicate)
|
31
39
|
@edges_by_subject[subject] ||= {}
|
32
40
|
@edges_by_subject[subject][predicate] ||= []
|
data/lib/grom/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rebecca Appleyard
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-03-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdf
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- Rakefile
|
133
133
|
- bin/console
|
134
134
|
- bin/setup
|
135
|
+
- docs/logo.svg
|
135
136
|
- grom.gemspec
|
136
137
|
- lib/grom.rb
|
137
138
|
- lib/grom/builder.rb
|
@@ -159,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
159
160
|
version: '0'
|
160
161
|
requirements: []
|
161
162
|
rubyforge_project:
|
162
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.6.6
|
163
164
|
signing_key:
|
164
165
|
specification_version: 4
|
165
166
|
summary: Grom is a Graph Object Mapper
|