8 |
:Last-Modified: $Date$ |
:Last-Modified: $Date$ |
9 |
:Type: Architecture |
:Type: Architecture |
10 |
:Scope: Major |
:Scope: Major |
11 |
:Status: Incomplete |
:Status: Current |
12 |
|
|
13 |
|
|
14 |
Storm is quite complex with its MIME headers, and prone to become |
Storm is quite complex with its MIME headers, and prone to become |
15 |
more complex if we choose to separate hashing of headers and bodies |
more complex if we choose to separate hashing of headers and bodies |
16 |
(``raw_blocks--benja``). If we break backward compatibility |
(``raw_blocks--benja``). If we break backward compatibility |
17 |
once, as Tuomas suggests, we should take the opportunity to |
a single time, as Tuomas suggests, we should take the opportunity to |
18 |
get rid of our mistakes from the past, in order to make |
get rid of our mistakes from the past, in order to make |
19 |
the future simpler. |
the future simpler. |
20 |
|
|
46 |
We'll be using that (and we'll fully specify it when |
We'll be using that (and we'll fully specify it when |
47 |
writing the informal URN namespace registration). |
writing the informal URN namespace registration). |
48 |
|
|
|
- How do we represent charsets? |
|
|
|
|
|
SUGGESTED RESOLUTION: Like in ``data:`` URIs: |
|
|
``...text/plain;charset=utf-8``. |
|
|
|
|
49 |
- Why bitzi bitprint? What is it? Why not SHA-1? |
- Why bitzi bitprint? What is it? Why not SHA-1? |
50 |
|
|
51 |
|
RESOLVED: Bitprints are a combination of a SHA-1 hash with a |
52 |
|
Merkle hash tree based on the Tiger hash algorithm. |
53 |
|
Hash algorithms get broken; when one of the above |
54 |
|
is broken, you have a transitional period before |
55 |
|
the other is, too, in which you can e.g. sign blocks, |
56 |
|
ensuring you can still use them when the other |
57 |
|
is broken too. |
58 |
|
|
59 |
|
Having a hash tree allows you to download pieces |
60 |
|
of a block from different sources, verifying each |
61 |
|
piece individually. This can be of great help |
62 |
|
in speeding up download times. |
63 |
|
|
64 |
- Are bitprints too long for short blocks like ours? |
- Are bitprints too long for short blocks like ours? |
65 |
|
(How long are the IDs going to be and whether |
66 |
|
this will be a problem.) |
67 |
|
|
68 |
|
RESOLVED: Here's an example URI, 102 characters long: |
69 |
|
|
70 |
|
urn:urn-?:application/rdf+xml,QLFYWY2RI5WZCTEP6MJKR |
71 |
|
5CAFGP7FQ5X.VEKXTRSJPTZJLY2IKG5FQ2TCXK26SECFPP4DX7I |
72 |
|
|
73 |
|
This is long, but IMO not 'too long.' |
74 |
|
|
75 |
|
- Why this syntax? Why not another? |
76 |
|
|
77 |
|
RESOLVED: For similarity to RFC 2397 (The "data" |
78 |
|
URL scheme). |
79 |
|
|
80 |
Changes |
Changes |
81 |
======= |
======= |
83 |
Storm blocks do not have headers any more; the hash in their URN |
Storm blocks do not have headers any more; the hash in their URN |
84 |
is only of the body. Storm URNs have the following form: |
is only of the body. Storm URNs have the following form: |
85 |
|
|
86 |
<namespace>:block:<bitprint>[:<content-type>] |
<namespace>:block:[<mediatype>],<data> |
87 |
|
|
88 |
``<namespace>`` is an informal URN namespace to be registered, |
``<namespace>`` is an informal URN namespace to be registered, |
89 |
like ``urn:urn-5``. ``<bitprint>`` is a Bitzi bitprint as defined |
like ``urn:urn-5``. ``<bitprint>`` is a Bitzi bitprint as defined |
90 |
by <http://bitzi.com/developer/bitprint>. ``<content-type>`` is |
by <http://bitzi.com/developer/bitprint>. ``<mediatype>`` is |
91 |
either a non-"X-" MIME content type or a URI. ``X-`` types are |
the token defined in [RFC2397]-- |
92 |
prohibited because they work against the persistence of Storm blocks. |
|
93 |
We allow URIs as a namespace for experimental identifiers instead. |
mediatype := [ type "/" subtype ] *( ";" parameter ) |
94 |
|
parameter := attribute "=" value |
95 |
|
|
96 |
|
"where [...] 'type', 'subtype', 'attribute' and 'value' are |
97 |
|
the corresponding tokens from [RFC2045], represented using |
98 |
|
URL escaped encoding of [RFC2396] as necessary" [RFC2397]. |
99 |
|
(Escaping is necessary when a character isn't in the set |
100 |
|
of allowed URN characters.) |
101 |
|
|
102 |
|
"X-" types aren't allowed, as they work against the persistence |
103 |
|
of Storm blocks; ``application/octet-stream`` or similar |
104 |
|
must be used instead. |
105 |
|
|
106 |
If no ``<content-type>`` is given, or a URI content type |
Unlike in [RDF2397], if no ``<mediatype>`` is given, |
107 |
is not known, ``application/octet-stream`` is assumed. |
``application/octet-stream`` is assumed (not ``text/plain``). |
108 |
|
|
109 |
There is a public domain Java implementation of bitprints at |
There is a public domain Java implementation of bitprints at |
110 |
<http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/bitcollider/jbitprint/>. |
<http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/bitcollider/jbitprint/>. |
111 |
Bitprints may be registered as a URN namespace in the future, |
Bitprints may be registered as a URN namespace in the future, |
112 |
according to Bitzi. If they're willing to include an optional |
according to Bitzi. However, they will not include a |
113 |
content type, ``urn:bitprint:`` and our ``urn:...:block:`` |
content type. |
|
would be equivalent. |
|
114 |
|
|
115 |
\- Benja |
\- Benja |