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). 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 <[email protected]> wrote: > On Fri, Jun 29, 2018 at 3:10 PM, Vincent Massol <[email protected]> > wrote: > > Hi Thomas, > > > > Good work! > > > > See below > > > >> On 29 Jun 2018, at 14:29, Thomas Mortagne <[email protected]> > 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 >

