rdf-tabular 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9edf0da4328030ca559eafcc719fa2d0ea74f23d
4
- data.tar.gz: 77aa006413d31534d91dc49b8c9921889f9cc557
3
+ metadata.gz: 540422ae3c9cb7f94c8c0c396237da7de46b8768
4
+ data.tar.gz: eff96886626aa8c73b4ea3150c75441f27af02e4
5
5
  SHA512:
6
- metadata.gz: cb4cdf39c4dca8526c102f57a6b96fe026e4bc5533858e37eaf0b5eb0808c638a2f06b7659c3c7d9b0131cd3a5e04e01664c3416f23db222ef6c18a2a11328af
7
- data.tar.gz: 83054ed9fe8cb41a9c63f2e20259f4add9b0c13f3a6ae87c2aad989e79d4ccde73bab3fb7bd8c30ad5d1570280b81083d7287759e28cdfde2c514710caceada4
6
+ metadata.gz: cbe14ec96c52d655be56ad1079ff8cb3ce22e366aae7af60a8d43cffa5508ae6b5e528db0b59ac65e3a902fc3d127a660be8b569ad3743af93d992f276902b73
7
+ data.tar.gz: 9831d7631d93eaeeb2739c0b58b22061e8485e5954b4687da108ee79c63e5220778652bcde1c8f5103db806b8bae4c74c871a1a684165abe7fef3e0bfef355e5
data/README.md CHANGED
@@ -11,6 +11,214 @@ RDF::Tabular parses CSV or other Tabular Data into [RDF][] and JSON using the [W
11
11
 
12
12
  Install with `gem install rdf-tabular`
13
13
 
14
+ RDF::Tabular parses CSVs, TSVs, and potentially other tabular data formats. Using rules defined for [W3C CSVW][], it can also parse metadata files (in JSON-LD format) to find a set of tabular data files, or locate a metadata file given a CSV:
15
+
16
+ * Given a CSV `http://example.org/mycsv.csv` look for `http://example.org/mycsv.csv-metata.json` or `http://example.org/metadata.json`. Metadata can also be specified using the `describedby` link header to reference a metadata file.
17
+ * Given a metadata file, locate one or more CSV files described within the metadata file.
18
+ * Also, extract _embedded metadata_ from the CSV (limited to column titles right now).
19
+
20
+ Metadata can then provide datatypes for the columns, express foreign key relationships, and associate subjects and predicates with columns. An example [metadata file for the project DOAP description](https://raw.githubusercontent.com/ruby-rdf/rdf-tabular/develop/etc/doap.csv-metadata.json) is:
21
+
22
+ {
23
+ "@context": "http://www.w3.org/ns/csvw",
24
+ "url": "doap.csv",
25
+ "tableSchema": {
26
+ "aboutUrl": "http://rubygems.org/gems/rdf-tabular",
27
+ "propertyUrl": "http://usefulinc.com/ns/doap#{_name}",
28
+ "null": "",
29
+ "columns": [
30
+ {"titles": "name"},
31
+ {"titles": "type", "propertyUrl": "rdf:type", "valueUrl": "{+type}"},
32
+ {"titles": "homepage", "valueUrl": "{+homepage}"},
33
+ {"titles": "license", "valueUrl": "{+license}"},
34
+ {"titles": "shortdesc", "lang": "en"},
35
+ {"titles": "description", "lang": "en"},
36
+ {"titles": "created", "datatype": {"base": "date", "format": "M/d/yyyy"}},
37
+ {"titles": "programming_language", "propertyUrl": "http://usefulinc.com/ns/doap#programming-language"},
38
+ {"titles": "implements", "valueUrl": "{+implements}"},
39
+ {"titles": "category", "valueUrl": "{+category}"},
40
+ {"titles": "download_page", "propertyUrl": "http://usefulinc.com/ns/doap#download-page", "valueUrl": "{+download_page}"},
41
+ {"titles": "mailing_list", "propertyUrl": "http://usefulinc.com/ns/doap#mailing-list", "valueUrl": "{+mailing_list}"},
42
+ {"titles": "bug_database", "propertyUrl": "http://usefulinc.com/ns/doap#bug-database", "valueUrl": "{+bug_database}"},
43
+ {"titles": "blog", "valueUrl": "{+blog}"},
44
+ {"titles": "developer", "valueUrl": "{+developer}"},
45
+ {"titles": "maintainer", "valueUrl": "{+maintainer}"},
46
+ {"titles": "documenter", "valueUrl": "{+documenter}"},
47
+ {"titles": "maker", "propertyUrl": "foaf:maker", "valueUrl": "{+maker}"},
48
+ {"titles": "dc_title", "propertyUrl": "dc:title"},
49
+ {"titles": "dc_description", "propertyUrl": "dc:description", "lang": "en"},
50
+ {"titles": "dc_date", "propertyUrl": "dc:date", "datatype": {"base": "date", "format": "M/d/yyyy"}},
51
+ {"titles": "dc_creator", "propertyUrl": "dc:creator", "valueUrl": "{+dc_creator}"},
52
+ {"titles": "isPartOf", "propertyUrl": "dc:isPartOf", "valueUrl": "{+isPartOf}"}
53
+ ]
54
+ }
55
+ }
56
+
57
+ This associates the metadata with the CSV [doap.csv](https://raw.githubusercontent.com/ruby-rdf/rdf-tabular/develop/etc/doap.csv), creates a common subject for all rows in the file, and a common predicate using the URI Template [URI Template](https://tools.ietf.org/html/rfc6570) `http://usefulinc.com/ns/doap#\{_name\}` which uses the `name` of each column (defaulted from `titles`) to construct a URI in the DOAP vocabulary, and constructs object URIs for object-valued properties from the contents of the column cells. In some cases, the predicates are changed on a per-column basis by using a different `propertyUrl` property on a given column.
58
+
59
+ This results in the following Turtle:
60
+
61
+ @prefix csvw: <http://www.w3.org/ns/csvw#> .
62
+ @prefix dc: <http://purl.org/dc/terms/> .
63
+ @prefix doap: <http://usefulinc.com/ns/doap#> .
64
+ @prefix foaf: <http://xmlns.com/foaf/0.1/> .
65
+ @prefix prov: <http://www.w3.org/ns/prov#> .
66
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
67
+ @prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
68
+
69
+ <http://rubygems.org/gems/rdf-tabular> a doap:Project,
70
+ <http://www.w3.org/ns/earl#TestSubject>,
71
+ <http://www.w3.org/ns/earl#Software>;
72
+ dc:title "RDF::Tabular";
73
+ dc:creator <http://greggkellogg.net/foaf#me>;
74
+ dc:date "2015-01-05"^^xsd:date;
75
+ dc:description "RDF::Tabular processes tabular data with metadata creating RDF or JSON output."@en;
76
+ dc:isPartOf <http://rubygems.org/gems/rdf>;
77
+ doap:blog <http://greggkellogg.net/>;
78
+ doap:bug-database <http://github.com/ruby-rdf/rdf-tabular/issues>;
79
+ doap:category <http://dbpedia.org/resource/Resource_Description_Framework>,
80
+ <http://dbpedia.org/resource/Ruby_(programming_language)>;
81
+ doap:created "2015-01-05"^^xsd:date;
82
+ doap:description "RDF::Tabular processes tabular data with metadata creating RDF or JSON output."@en;
83
+ doap:developer <http://greggkellogg.net/foaf#me>;
84
+ doap:documenter <http://greggkellogg.net/foaf#me>;
85
+ doap:download-page <http://rubygems.org/gems/rdf-tabular>;
86
+ doap:homepage <http://ruby-rdf.github.com/rdf-tabular>;
87
+ doap:implements <http://www.w3.org/TR/tabular-data-model/>,
88
+ <http://www.w3.org/TR/tabular-metadata/>,
89
+ <http://www.w3.org/TR/csv2rdf/>,
90
+ <http://www.w3.org/TR/csv2json/>;
91
+ doap:license <http://creativecommons.org/licenses/publicdomain/>;
92
+ doap:mailing-list <http://lists.w3.org/Archives/Public/public-rdf-ruby/>;
93
+ doap:maintainer <http://greggkellogg.net/foaf#me>;
94
+ doap:name "RDF::Tabular";
95
+ doap:programming-language "Ruby";
96
+ doap:shortdesc "Tabular Data RDF Reader and JSON serializer."@en;
97
+ foaf:maker <http://greggkellogg.net/foaf#me> .
98
+
99
+ [
100
+ a csvw:TableGroup;
101
+ csvw:table [
102
+ a csvw:Table;
103
+ csvw:row [
104
+ a csvw:Row;
105
+ csvw:describes <http://rubygems.org/gems/rdf-tabular>;
106
+ csvw:rownum 1;
107
+ csvw:url <file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=2>
108
+ ], [
109
+ a csvw:Row;
110
+ csvw:describes <http://rubygems.org/gems/rdf-tabular>;
111
+ csvw:rownum 2;
112
+ csvw:url <file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=3>
113
+ ], [
114
+ a csvw:Row;
115
+ csvw:describes <http://rubygems.org/gems/rdf-tabular>;
116
+ csvw:rownum 3;
117
+ csvw:url <file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=4>
118
+ ], [
119
+ a csvw:Row;
120
+ csvw:describes <http://rubygems.org/gems/rdf-tabular>;
121
+ csvw:rownum 4;
122
+ csvw:url <file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=5>
123
+ ];
124
+ csvw:url <file://users/gregg/Projects/rdf-tabular/etc/doap.csv>
125
+ ];
126
+ prov:wasGeneratedBy [
127
+ a prov:Activity;
128
+ prov:endedAtTime "2015-04-11T12:33:26Z"^^xsd:dateTime;
129
+ prov:qualifiedUsage [
130
+ a prov:Usage;
131
+ prov:entity <file://users/gregg/Projects/rdf-tabular/etc/doap.csv>;
132
+ prov:hadRole csvw:csvEncodedTabularData
133
+ ], [
134
+ a prov:Usage;
135
+ prov:entity <file://users/gregg/Projects/rdf-tabular/etc/doap.csv-metadata.json>;
136
+ prov:hadRole csvw:tabularMetadata
137
+ ];
138
+ prov:startedAtTime "2015-04-11T12:33:25Z"^^xsd:dateTime;
139
+ prov:wasAssociatedWith <http://rubygems.org/gems/rdf-tabular>
140
+ ]
141
+ ] .
142
+
143
+ The provenance on table-source information can be excluded by using the `:minimal` option to the reader.
144
+
145
+ It can also generate JSON output (not complete JSON-LD, but compatible with it), using the {RDF::Tabular::Reader#to_json} method:
146
+
147
+ {
148
+ "table": [
149
+ {
150
+ "url": "file://users/gregg/Projects/rdf-tabular/etc/doap.csv",
151
+ "row": [
152
+ {
153
+ "url": "file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=2",
154
+ "rownum": 1,
155
+ "describes": [
156
+ {
157
+ "@id": "http://rubygems.org/gems/rdf-tabular",
158
+ "http://usefulinc.com/ns/doap#name": "RDF::Tabular",
159
+ "@type": "http://usefulinc.com/ns/doap#Project",
160
+ "http://usefulinc.com/ns/doap#homepage": "http://ruby-rdf.github.com/rdf-tabular",
161
+ "http://usefulinc.com/ns/doap#license": "http://creativecommons.org/licenses/publicdomain/",
162
+ "http://usefulinc.com/ns/doap#shortdesc": "Tabular Data RDF Reader and JSON serializer.",
163
+ "http://usefulinc.com/ns/doap#description": "RDF::Tabular processes tabular data with metadata creating RDF or JSON output.",
164
+ "http://usefulinc.com/ns/doap#created": "2015-01-05",
165
+ "http://usefulinc.com/ns/doap#programming-language": "Ruby",
166
+ "http://usefulinc.com/ns/doap#implements": "http://www.w3.org/TR/tabular-data-model/",
167
+ "http://usefulinc.com/ns/doap#category": "http://dbpedia.org/resource/Resource_Description_Framework",
168
+ "http://usefulinc.com/ns/doap#download-page": "http://rubygems.org/gems/rdf-tabular",
169
+ "http://usefulinc.com/ns/doap#mailing-list": "http://lists.w3.org/Archives/Public/public-rdf-ruby/",
170
+ "http://usefulinc.com/ns/doap#bug-database": "http://github.com/ruby-rdf/rdf-tabular/issues",
171
+ "http://usefulinc.com/ns/doap#blog": "http://greggkellogg.net/",
172
+ "http://usefulinc.com/ns/doap#developer": "http://greggkellogg.net/foaf#me",
173
+ "http://usefulinc.com/ns/doap#maintainer": "http://greggkellogg.net/foaf#me",
174
+ "http://usefulinc.com/ns/doap#documenter": "http://greggkellogg.net/foaf#me",
175
+ "foaf:maker": "http://greggkellogg.net/foaf#me",
176
+ "dc:title": "RDF::Tabular",
177
+ "dc:description": "RDF::Tabular processes tabular data with metadata creating RDF or JSON output.",
178
+ "dc:date": "2015-01-05",
179
+ "dc:creator": "http://greggkellogg.net/foaf#me",
180
+ "dc:isPartOf": "http://rubygems.org/gems/rdf"
181
+ }
182
+ ]
183
+ },
184
+ {
185
+ "url": "file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=3",
186
+ "rownum": 2,
187
+ "describes": [
188
+ {
189
+ "@id": "http://rubygems.org/gems/rdf-tabular",
190
+ "@type": "http://www.w3.org/ns/earl#TestSubject",
191
+ "http://usefulinc.com/ns/doap#implements": "http://www.w3.org/TR/tabular-metadata/",
192
+ "http://usefulinc.com/ns/doap#category": "http://dbpedia.org/resource/Ruby_(programming_language)"
193
+ }
194
+ ]
195
+ },
196
+ {
197
+ "url": "file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=4",
198
+ "rownum": 3,
199
+ "describes": [
200
+ {
201
+ "@id": "http://rubygems.org/gems/rdf-tabular",
202
+ "@type": "http://www.w3.org/ns/earl#Software",
203
+ "http://usefulinc.com/ns/doap#implements": "http://www.w3.org/TR/csv2rdf/"
204
+ }
205
+ ]
206
+ },
207
+ {
208
+ "url": "file://users/gregg/Projects/rdf-tabular/etc/doap.csv#row=5",
209
+ "rownum": 4,
210
+ "describes": [
211
+ {
212
+ "@id": "http://rubygems.org/gems/rdf-tabular",
213
+ "http://usefulinc.com/ns/doap#implements": "http://www.w3.org/TR/csv2json/"
214
+ }
215
+ ]
216
+ }
217
+ ]
218
+ }
219
+ ]
220
+ }
221
+
14
222
  ## Examples
15
223
 
16
224
  require 'rubygems'
@@ -71,3 +279,4 @@ see <http://unlicense.org/> or the accompanying {file:UNLICENSE} file.
71
279
  [RDF.rb]: http://rubygems.org/gems/rdf
72
280
  [CSV]: http://en.wikipedia.org/wiki/Comma-separated_values
73
281
  [W3C CSVW]: http://www.w3.org/2013/csvw/wiki/Main_Page
282
+ [URI template]: https://tools.ietf.org/html/rfc6570
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
data/etc/csvw.jsonld CHANGED
@@ -111,13 +111,13 @@
111
111
  "@id": "csvw:base",
112
112
  "@language": null
113
113
  },
114
- "columnReferenc": {
115
- "@id": "csvw:columnReferenc",
114
+ "columnReference": {
115
+ "@id": "csvw:columnReference",
116
116
  "@language": null,
117
117
  "@container": "@list"
118
118
  },
119
119
  "columns": {
120
- "@id": "csvw:columns",
120
+ "@id": "csvw:column",
121
121
  "@type": "@id",
122
122
  "@container": "@list"
123
123
  },
@@ -157,7 +157,7 @@
157
157
  "@language": null
158
158
  },
159
159
  "foreignKeys": {
160
- "@id": "csvw:foreignKeys",
160
+ "@id": "csvw:foreignKey",
161
161
  "@type": "@id"
162
162
  },
163
163
  "format": {
@@ -172,10 +172,6 @@
172
172
  "@id": "csvw:header",
173
173
  "@type": "xsd:boolean"
174
174
  },
175
- "headerColumnCount": {
176
- "@id": "csvw:headerColumnCount",
177
- "@type": "xsd:nonNegativeInteger"
178
- },
179
175
  "headerRowCount": {
180
176
  "@id": "csvw:headerRowCount",
181
177
  "@type": "xsd:nonNegativeInteger"
@@ -188,8 +184,8 @@
188
184
  "@id": "csvw:length",
189
185
  "@type": "xsd:nonNegativeInteger"
190
186
  },
191
- "lineTerminator": {
192
- "@id": "csvw:lineTerminator",
187
+ "lineTerminators": {
188
+ "@id": "csvw:lineTerminators",
193
189
  "@language": null
194
190
  },
195
191
  "maxExclusive": {
@@ -221,7 +217,7 @@
221
217
  "@language": null
222
218
  },
223
219
  "notes": {
224
- "@id": "csvw:notes"
220
+ "@id": "csvw:note"
225
221
  },
226
222
  "null": {
227
223
  "@id": "csvw:null",
@@ -259,11 +255,6 @@
259
255
  "@id": "csvw:resource",
260
256
  "@type": "xsd:anyURI"
261
257
  },
262
- "resources": {
263
- "@id": "csvw:resources",
264
- "@type": "@id",
265
- "@container": "@set"
266
- },
267
258
  "row": {
268
259
  "@id": "csvw:row",
269
260
  "@type": "@id",
@@ -309,7 +300,7 @@
309
300
  "@id": "csvw:suppressOutput",
310
301
  "@type": "xsd:boolean"
311
302
  },
312
- "table": {
303
+ "tables": {
313
304
  "@id": "csvw:table",
314
305
  "@type": "@id",
315
306
  "@container": "@set"
@@ -334,7 +325,7 @@
334
325
  "@id": "csvw:textDirection",
335
326
  "@type": "@vocab"
336
327
  },
337
- "title": {
328
+ "titles": {
338
329
  "@id": "csvw:title",
339
330
  "@container": "@language"
340
331
  },
@@ -599,7 +590,7 @@
599
590
  "rdfs:range": "xsd:string"
600
591
  },
601
592
  {
602
- "@id": "csvw:columnReferenc",
593
+ "@id": "csvw:columnReference",
603
594
  "@type": "rdf:Property",
604
595
  "rdfs:label": {
605
596
  "en": "column reference"
@@ -616,10 +607,10 @@
616
607
  "rdfs:range": "xsd:string"
617
608
  },
618
609
  {
619
- "@id": "csvw:columns",
610
+ "@id": "csvw:column",
620
611
  "@type": "rdf:Property",
621
612
  "rdfs:label": {
622
- "en": "columns"
613
+ "en": "column"
623
614
  },
624
615
  "rdfs:comment": {
625
616
  "en": "An array property of column descriptions as described in section 4.9 Columns."
@@ -759,10 +750,10 @@
759
750
  "rdfs:range": "xsd:string"
760
751
  },
761
752
  {
762
- "@id": "csvw:foreignKeys",
753
+ "@id": "csvw:foreignKey",
763
754
  "@type": "rdf:Property",
764
755
  "rdfs:label": {
765
- "en": "foreign keys"
756
+ "en": "foreign key"
766
757
  },
767
758
  "rdfs:comment": {
768
759
  "en": "An array property of foreign key definitions that define how the values from specified columns within this table link to rows within this table or other tables."
@@ -811,18 +802,6 @@
811
802
  "rdfs:domain": "csvw:Dialect",
812
803
  "rdfs:range": "xsd:boolean"
813
804
  },
814
- {
815
- "@id": "csvw:headerColumnCount",
816
- "@type": "rdf:Property",
817
- "rdfs:label": {
818
- "en": "header column count"
819
- },
820
- "rdfs:comment": {
821
- "en": "An numeric atomic property that sets the header column count flag to the single provided value, which must be non-negative integer."
822
- },
823
- "rdfs:domain": "csvw:Dialect",
824
- "rdfs:range": "xsd:nonNegativeInteger"
825
- },
826
805
  {
827
806
  "@id": "csvw:headerRowCount",
828
807
  "@type": "rdf:Property",
@@ -867,13 +846,13 @@
867
846
  "rdfs:range": "xsd:nonNegativeInteger"
868
847
  },
869
848
  {
870
- "@id": "csvw:lineTerminator",
849
+ "@id": "csvw:lineTerminators",
871
850
  "@type": "rdf:Property",
872
851
  "rdfs:label": {
873
852
  "en": "line terminator"
874
853
  },
875
854
  "rdfs:comment": {
876
- "en": "A numeric atomic property that contains a single integer that is the exact length of the value."
855
+ "en": "An atomic property that is either an array containing the single provided string value"
877
856
  },
878
857
  "rdfs:domain": "csvw:Dialect",
879
858
  "rdfs:range": "xsd:string"
@@ -963,13 +942,13 @@
963
942
  "rdfs:range": "xsd:string"
964
943
  },
965
944
  {
966
- "@id": "csvw:notes",
945
+ "@id": "csvw:note",
967
946
  "@type": "rdf:Property",
968
947
  "rdfs:label": {
969
- "en": "notes"
948
+ "en": "note"
970
949
  },
971
950
  "rdfs:comment": {
972
- "en": "An array of objects representing annotations. This specification does not place any constraints on the structure of these objects."
951
+ "en": "The value of this property becomes the value of the notes annotation on the resource."
973
952
  },
974
953
  "rdfs:domain": {
975
954
  "owl:unionOf": [
@@ -1107,18 +1086,6 @@
1107
1086
  "rdfs:domain": "csvw:TableReference",
1108
1087
  "rdfs:range": "xsd:anyURI"
1109
1088
  },
1110
- {
1111
- "@id": "csvw:resources",
1112
- "@type": "rdf:Property",
1113
- "rdfs:label": {
1114
- "en": "resources"
1115
- },
1116
- "rdfs:comment": {
1117
- "en": "An array property of table descriptions for the tables in the group, namely those listed in the resources annotation on the group of tables being described."
1118
- },
1119
- "rdfs:domain": "csvw:TableGroup",
1120
- "rdfs:range": "csvw:Table"
1121
- },
1122
1089
  {
1123
1090
  "@id": "csvw:row",
1124
1091
  "@type": "rdf:Property",
@@ -1270,7 +1237,7 @@
1270
1237
  "en": "table"
1271
1238
  },
1272
1239
  "rdfs:comment": {
1273
- "en": "Relates an Table group to annotated tables. (Note, this is different from csvw:resources, which relates metadata, rather than resulting annotated table descriptions."
1240
+ "en": "Relates an Table group to annotated tables."
1274
1241
  },
1275
1242
  "rdfs:subPropertyOf": "rdfs:member",
1276
1243
  "rdfs:domain": "csvw:TableGroup",
@@ -6,29 +6,29 @@
6
6
  "propertyUrl": "http://usefulinc.com/ns/doap#{_name}",
7
7
  "null": "",
8
8
  "columns": [
9
- {"title": "name"},
10
- {"title": "type", "propertyUrl": "rdf:type", "valueUrl": "{+type}"},
11
- {"title": "homepage", "valueUrl": "{+homepage}"},
12
- {"title": "license", "valueUrl": "{+license}"},
13
- {"title": "shortdesc", "lang": "en"},
14
- {"title": "description", "lang": "en"},
15
- {"title": "created", "datatype": {"base": "date", "format": "M/d/yyyy"}},
16
- {"title": "programming_language", "propertyUrl": "http://usefulinc.com/ns/doap#programming-language"},
17
- {"title": "implements", "valueUrl": "{+implements}"},
18
- {"title": "category", "valueUrl": "{+category}"},
19
- {"title": "download_page", "propertyUrl": "http://usefulinc.com/ns/doap#download-page", "valueUrl": "{+download_page}"},
20
- {"title": "mailing_list", "propertyUrl": "http://usefulinc.com/ns/doap#mailing-list", "valueUrl": "{+mailing_list}"},
21
- {"title": "bug_database", "propertyUrl": "http://usefulinc.com/ns/doap#bug-database", "valueUrl": "{+bug_database}"},
22
- {"title": "blog", "valueUrl": "{+blog}"},
23
- {"title": "developer", "valueUrl": "{+developer}"},
24
- {"title": "maintainer", "valueUrl": "{+maintainer}"},
25
- {"title": "documenter", "valueUrl": "{+documenter}"},
26
- {"title": "maker", "propertyUrl": "foaf:maker", "valueUrl": "{+maker}"},
27
- {"title": "dc_title", "propertyUrl": "dc:title"},
28
- {"title": "dc_description", "propertyUrl": "dc:description", "lang": "en"},
29
- {"title": "dc_date", "propertyUrl": "dc:date", "datatype": {"base": "date", "format": "M/d/yyyy"}},
30
- {"title": "dc_creator", "propertyUrl": "dc:creator", "valueUrl": "{+dc_creator}"},
31
- {"title": "isPartOf", "propertyUrl": "dc:isPartOf", "valueUrl": "{+isPartOf}"}
9
+ {"titles": "name"},
10
+ {"titles": "type", "propertyUrl": "rdf:type", "valueUrl": "{+type}"},
11
+ {"titles": "homepage", "valueUrl": "{+homepage}"},
12
+ {"titles": "license", "valueUrl": "{+license}"},
13
+ {"titles": "shortdesc", "lang": "en"},
14
+ {"titles": "description", "lang": "en"},
15
+ {"titles": "created", "datatype": {"base": "date", "format": "M/d/yyyy"}},
16
+ {"titles": "programming_language", "propertyUrl": "http://usefulinc.com/ns/doap#programming-language"},
17
+ {"titles": "implements", "valueUrl": "{+implements}"},
18
+ {"titles": "category", "valueUrl": "{+category}"},
19
+ {"titles": "download_page", "propertyUrl": "http://usefulinc.com/ns/doap#download-page", "valueUrl": "{+download_page}"},
20
+ {"titles": "mailing_list", "propertyUrl": "http://usefulinc.com/ns/doap#mailing-list", "valueUrl": "{+mailing_list}"},
21
+ {"titles": "bug_database", "propertyUrl": "http://usefulinc.com/ns/doap#bug-database", "valueUrl": "{+bug_database}"},
22
+ {"titles": "blog", "valueUrl": "{+blog}"},
23
+ {"titles": "developer", "valueUrl": "{+developer}"},
24
+ {"titles": "maintainer", "valueUrl": "{+maintainer}"},
25
+ {"titles": "documenter", "valueUrl": "{+documenter}"},
26
+ {"titles": "maker", "propertyUrl": "foaf:maker", "valueUrl": "{+maker}"},
27
+ {"titles": "dc_title", "propertyUrl": "dc:title"},
28
+ {"titles": "dc_description", "propertyUrl": "dc:description", "lang": "en"},
29
+ {"titles": "dc_date", "propertyUrl": "dc:date", "datatype": {"base": "date", "format": "M/d/yyyy"}},
30
+ {"titles": "dc_creator", "propertyUrl": "dc:creator", "valueUrl": "{+dc_creator}"},
31
+ {"titles": "isPartOf", "propertyUrl": "dc:isPartOf", "valueUrl": "{+isPartOf}"}
32
32
  ]
33
33
  }
34
34
  }