Hi Marius,

> On 9 Jul 2018, at 10:24, Marius Dumitru Florea 
> <mariusdumitru.flo...@xwiki.com> wrote:
> 
> On Sat, Jul 7, 2018 at 8:55 PM, Eduard Moraru <enygma2...@gmail.com> wrote:
> 
>> Great to hear you're progressing on this topic, Thomas!
>> 
>> My only note was also (as Vincent pointed out) on the link syntax. If we
>> went with "/" instead of "." was because people were more accustomed to the
>> URL syntax and also that they would be more tempted to copy the URL as a
>> wiki link, instead of converting "/" to ".".
>> 
>> 
> 
>> Now, why don't we apply the same logic to parameter separators (i.e.
>> instead of ";" to use "&" and, hopefully, instead of "?" as the parameters
>> separator).
>> 
> 
> You are mixing the query string with the URL path parameters
> https://doriantaylor.com/policy/http-url-path-parameter-syntax . The query
> string is for the entire URL/path while each path segment can have its
> parameters. In our case each entity reference from the chain can have its
> own parameters.

That’s a good rationalization :) I like it!

Does Thomas’s implementation allows each entity reference in the chain to have 
parameters, such as for example:

wiki:page1;a=b/page2;c=d/image.png;e

?

Thanks
-Vincent

> 
>> 
>> Also, are we considering anchors as well (i.e. using "#MyHeading" instead
>> of "|anchor='HMyHeading'")?
>> 
>> Ideally, it would be awesome if we could say that copy/pasting the exact
>> URL, right after the action part, would be supported when adding a wiki
>> link.
>> 
>> Slightly off-topic, but related to that last part, so it might not be a bad
>> idea to talk about it:
>> This actually gets me realising that we don't have a way to link in pure
>> wiki syntax to a page in a specified mode/action (i.e. not only view, but
>> also edit/create/delete/etc.). Sure, we have the "path:" type, but that's
>> not exactly designed for that, but for whatever else we might need, and it
>> require either writing, by hand, technical details or to use velocity (i.e.
>> $xwiki.getURL($doc, 'mode')).
>> 
>> Thanks,
>> Eduard
>> 
>> On Fri, Jun 29, 2018 at 7:20 PM, Thomas Mortagne <
>> thomas.morta...@xwiki.com>
>> wrote:
>> 
>>> On Fri, Jun 29, 2018 at 3:10 PM, Vincent Massol <vinc...@massol.net>
>>> wrote:
>>>> Hi Thomas,
>>>> 
>>>> Good work!
>>>> 
>>>> See below
>>>> 
>>>>> On 29 Jun 2018, at 14:29, Thomas Mortagne <thomas.morta...@xwiki.com>
>>> wrote:
>>>>> 
>>>>> Hi xwikiers,
>>>>> 
>>>>> Some of us discussed that for a while and created/improved
>>>>> http://design.xwiki.org/xwiki/bin/view/Proposal/
>>> DeprecatingSpaceAndSpaceReference
>>>>> and I finally started working on it.
>>>>> 
>>>>> So here is what I pushed on master already:
>>>>> 
>>>>> = PAGE EntityType and Page*Reference classes
>>>>> 
>>>>> First thing first we now have a few new type in EntityType and the
>>>>> corresponding typed Page*Reference helpers. One for each of the
>>>>> element you can have in a page:
>>>>> * PAGE
>>>>> * PAGE_ATTACHMENT
>>>>> * PAGE_OBJECT
>>>>> * PAGE_OBJECT_PROPERTY
>>>>> * PAGE_CLASS_PROPERTY
>>>>> 
>>>>> = Corresponding resolvers/serializer/providers
>>>>> 
>>>>> Each of the already existing DOCUMENT oriented resolvers and
>>>>> serializers have their PAGE oriented implementation.
>>>>> 
>>>>> = Conversion from DOCUMENT to PAGE world
>>>>> 
>>>>> The entity resolvers automatically convert from/to DOCUMENT from/to
>>>>> PAGE world references. Do yes using a resolver is the official way to
>>>>> do that conversion.
>>>>> 
>>>>> = Model script service
>>>>> 
>>>>> The $services.model API also got his own new helpers to manipulate
>> pages
>>>>> 
>>>>> = New syntax
>>>>> 
>>>>> Last but not least: pages reference have a very different syntax.
>>>>> 
>>>>> To summarize it's a filesystem path syntax with support for
>> parameters.
>>>>> 
>>>>> Here is are a few examples:
>>>>> 
>>>>>   wiki:page1/page2;param1=value1;param2=value2;en_US
>>>>> 
>>>>>   wiki:page1/page2/attachment
>>>>> 
>>>>>   ../siblingpage
>>>>> 
>>>>> * separator: "/" between all elements except WIKI which is still ":"
>>>>> * escaping: still "\"
>>>>> * current, parent support: like in a filesystem you can refer to the
>>>>> current page or parent page/wiki using "." and ".."
>>>>> * parameters: we now have syntax to express the parameters of an
>>>>> EntityReference. Each parameter is separated by a ";" at the end of
>>>>> the entity name
>>>> 
>>>> Should we use “?” as the delimiter between reference and parameters to
>>> be closer to URI/URL syntax?
>>> 
>>> This was my initial proposal but it was decided that ? was too common.
>>> 
>>>> 
>>>> <brainstorming>
>>>> Maybe we could even have a Page Reference be implemented as a
>>> hierarchical URI? (the wiki would be the scheme, the authority would be
>>> empty and fragments would be empty).
>>>> 
>>>> In practice it would be hard since we need to have PageReference
>> extends
>>> EntityReference. But if we were starting from scratch we would maybe use
>> a
>>> URI or extend it.
>>>> 
>>>> Sill it might make sense to at least be closer on the syntax aspect and
>>> thus use “?” for the delimiter.
>>>> </brainstorming>
>>>> 
>>>>> * default parameter: the syntax have the concept of default parameter
>>>>> which mean a parameter for which you don't need to indicate the name.
>>>>> For example PAGE reference default parameter is “locale"
>>>> 
>>>> "a parameter for which you don't need to indicate the name” —> does
>> that
>>> mean for example:
>>>> 
>>>> wiki:page1/page2;en_US
>>> 
>>> Yes as you can see in the example I gave.
>>> 
>>>> 
>>>> ?
>>>> 
>>>> What is the need? I’d find "wiki:page1/page2;locale=en_US” to be more
>>> explicit.
>>> 
>>> You can write the name if you want. The idea is that right now that's
>>> actually our only really used parameter in reference and it's nicer to
>>> not have to write "local=" all the time
>>> 
>>>> 
>>>>> = TODO
>>>>> 
>>>>> The next elements on the short term TODO list are:
>>>>> 
>>>>> * support for page references in XWiki#getDocument (which essentially
>>>>> means add a fallback)
>>>>> * support for page references in various macros (generally means
>>>>> adding a "page" parameter as alternative to the existing "reference"
>>>>> or "document" parameter)
>>>> 
>>>> What would be interesting now is to decide a usage strategy:
>>>> * Should we use the new page API for new code?
>>>> * Should we start converting old code to the page API?
>>> 
>>> Need to finish with the TODO I listed first but for now I think the
>>> idea is to use the page API as much as possible (but as an
>>> experimental API so not in extensions yet) in new code and existing
>>> code you work on that would benefit from it and improve it and
>>> complete it along the way.
>>> 
>>>> * Should we deprecate old Document-based APIs (and move them to legacy
>>> modules once we don’t use them anymore on our side)?
>>> 
>>> This is not going to happen so soon for sure, there is many places
>>> which don't have page equivalent yet (just think about all the places
>>> where we store document references).
>>> 
>>>> 
>>>> It would be nice to have some doc/tutorial (maybe on
>>> https://extensions.xwiki.org/xwiki/bin/view/Extension/Model%20Module) to
>>> explain how to convert old code to new code and how to use the new APIs.
>>> 
>>> Of course, will work on documentation when I'm done with the tasks I
>>> listed. Now most of the new PAGE API is very close to the DOCUMENT
>>> related equivalent so it won't be hard for someone used to the
>>> reference API in general to manipulate pages (that was one of the
>>> goals).
>>> 
>>>> 
>>>> Thanks
>>>> -Vincent
>>>> 
>>>>> 
>>>>> Thanks,
>>>>> --
>>>>> Thomas Mortagne
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> Thomas Mortagne

Reply via email to