2012/12/11 Alex Baranosky <alexander.barano...@gmail.com>

> Christophe, one thing I've wondered about the design of clj-schema is
> whether the schema is even the right place for determining looseness or
> strictness.  In some sense that is a property of the validation process.
>  It sometimes makes sense to use the same schema, but in some cases
> validate it loosely or in other cases validate it strictly.


Isn't that the case already? I see that you put ::strict-schema metadata
via the loose-schema / strict-schema functions ?

i agree that schema could be defined without looseness / strictness
information, and that it could be a property of the "validation run".
In order for that to play well with composition of schemas, you may have to
:
- make schemas loose by default
- allow to define strict schemas
- allow to force validation in strict mode (would be loose by default,
except of course for those schemas hard-defined as stricts)

Some implementation questions :

- couldn't strict-schema function be defined in terms of loose-schema
function ( just assoc'ing the additional key to the result of calling
loose-schema ?)
- would it be possible to totally "free the data" ? :-), e.g. make it
public that creating a strict schema requires a :clj-schema.schema true
metadata on the vector of paths?

Cheers,

-- 
Laurent




>
> Laurent, what keeps you from just using `def-loose-schema`?
>
>
> On Mon, Dec 10, 2012 at 1:02 AM, Christophe Grand 
> <christo...@cgrand.net>wrote:
>
>> Oh and clj-schema is really something I would use and promote.
>>
>>
>>
>> On Mon, Dec 10, 2012 at 10:01 AM, Christophe Grand <christo...@cgrand.net
>> > wrote:
>>
>>> 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/
>>>
>>>
>>
>>
>> --
>> 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
>>
>
>  --
> 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

Reply via email to