Hi Alex,

To echo Laurent's concern: if you use schema to validate inputs you get
from another (sub)system then, in my opinion, a loose schema is a better
fit.
It's the must-understand/must-ignore schism once again.
Must-ignore (loose schemas) requires care when revising a schema (since any
piece of data valid under both schemas should not have its semantics
altered) but allows for forward-compatibility and, as such, reduces
coupling.

Regarding your use-case (validation before storing): I see two "complected"
concerns: ensuring that you don't store bad data and ensuring that you
don't store too much. So, couldn't a loose schema be sued to first validate
the piece of data and then (or at the same time) prune extra keys?

My two cents,

Christophe


On Sun, Dec 9, 2012 at 9:45 PM, Alex Baranosky <
alexander.barano...@gmail.com> wrote:

> Hi Laurent,
>
> It was originally written as loose-only, because that is an easier problem
> to solve, but since these schemas are being used at work to make sure no
> bad data gets stored in HBase we decided collectively that strictness was
> more of what we wanted.
>
> I'm open to exploring ways to make the default behavior of defschema be
> loose, perhaps via a binding.  I could then create a third macro
> `def-strict-schema`...  Let me know if you have any thoughts on approaches
> for this kind of modification.
>
> In general I'm open to ideas that help the library be more useful to
> people for their projects, so please feel free to shoot ideas by me.
>
> Alex
>
>
> On Sun, Dec 9, 2012 at 10:30 AM, Ambrose Bonnaire-Sergeant <
> abonnaireserge...@gmail.com> wrote:
>
>> I think Typed Clojure and clj-schema could work very nicely together.
>> I'll look at it again in a few months.
>>
>> Thanks,
>> Ambrose
>>
>>
>> On Wed, Nov 28, 2012 at 11:18 AM, Alex Baranosky <
>> alexander.barano...@gmail.com> wrote:
>>
>>> Hi Stathis,
>>>
>>> Thanks for your interestin clj-schema. If you use it and have any
>>> feedback please let me know.
>>>
>>> clj-schema is released under the MIT license: http://mit-license.org/
>>>
>>> I think TypedClojure is really cool. I'm excited about both approaches
>>> because in general I'm very interested in approaches to coding that help us
>>> ensure that our code works correctly. That said there are some interesting
>>> differences in the approaches:
>>>
>>>    - schemas can be used for other things other than validation or type
>>>    checking.
>>>
>>>
>>>    - schemas are more decoupled from the code.  Say you are reading a
>>>    map out of a file, or get a map returned from another library.  With
>>>    schemas you could easily validate the map.  How would that be handled in 
>>> a
>>>    TypeClojure approach?  Also, schema validation only checks at a snapshot 
>>> in
>>>    time; it makes no effort to ensure that that map is always correct.
>>>
>>>
>>>    - schema validation happens at run-time; TypedClojure is a static
>>>    analysis tool. ( Of course, if there was some kind of adapter for
>>>    TypedClojure it could take schemas as params to the type declarations.)
>>>
>>>
>>> Alex
>>>
>>>
>>> On Tue, Nov 27, 2012 at 2:23 AM, Stathis Sideris <side...@gmail.com>wrote:
>>>
>>>> Hello Alex,
>>>>
>>>> This looks very useful, thanks. What's the license under which you are
>>>> releasing this code? Also, I'm wondering whether something like that could
>>>> be the next step for Typed Clojure. From Ambrose's thesis, I got the
>>>> impression that he would like Typed Clojure to eventually cater for
>>>> checking the contents of maps.
>>>>
>>>> Thanks,
>>>>
>>>> Stathis
>>>>
>>>>
>>>> On Sunday, 25 November 2012 23:22:04 UTC, Alex Baranosky wrote:
>>>>>
>>>>> Clj-schema is a library for defining and validating schemas for maps,
>>>>> as well as for using those schemas to create valid test data.  We've been
>>>>> using this in production for at least a few months now, at Runa.
>>>>>
>>>>> https://github.com/runa-dev/**clj-schema<https://github.com/runa-dev/clj-schema>
>>>>>
>>>>> The main benefits I've found from using this library are:
>>>>> * validating the inputs to the application: validating Ring request
>>>>> params and config files
>>>>> * validating before storing maps into the DB
>>>>> * using the clj-schema.fixtures library to create valid test data that
>>>>> stays valid.  So as the standard form of a map changes over time the tests
>>>>> will stay in sync with those changes automatically.
>>>>> * there are some code-readability benefits as well - any developer can
>>>>> pretty quickly see what certain kinds of maps tend to look like.
>>>>>
>>>>> There's more info in the README:
>>>>> https://github.com/runa-dev/**clj-schema/blob/master/README.**md<https://github.com/runa-dev/clj-schema/blob/master/README.md>
>>>>>
>>>>> Future possibilities:
>>>>> * auto-generating test data from clj-schema fixtures
>>>>> * being able to create schemas for sets and sequences (currently a
>>>>> schema is always for a map)
>>>>>
>>>>> Contributors welcome.
>>>>>
>>>>> Alex
>>>>>
>>>>  --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "Clojure" group.
>>>> To post to this group, send email to clojure@googlegroups.com
>>>> Note that posts from new members are moderated - please be patient with
>>>> your first post.
>>>> To unsubscribe from this group, send email to
>>>> clojure+unsubscr...@googlegroups.com
>>>> For more options, visit this group at
>>>> http://groups.google.com/group/clojure?hl=en
>>>
>>>
>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clojure@googlegroups.com
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> clojure+unsubscr...@googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/group/clojure?hl=en
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>>
>
>  --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>



-- 
On Clojure http://clj-me.cgrand.net/
Clojure Programming http://clojurebook.com
Training, Consulting & Contracting http://lambdanext.eu/

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to