Hi, Some more clarifications on the progress/direction:
- doc:XXX references are relative to the current space. i.e. equivalent to doc:.XXX - space:XXX references are relative to the current wiki, but absolute in terms of spaces, i.e. resolve to currentWiki:XXX.WebHome. This may cause a bit of confusion in Nested Pages where a space is a nested page and it will look like they are absolute in the wiki. To make them relative in terms of the current space, you have to use a "space:.XXX" syntax which will resolve it to "currentWiki:currentSpace(s).XXX.WebHome". - XXX untyped references are resolved by looking for an existing sibling terminal document or fallback (if possible, if current doc is non-terminal) on a child non-terminal document. Thanks, Eduard On Tue, Feb 2, 2016 at 4:52 PM, vinc...@massol.net <vinc...@massol.net> wrote: > > > On 2 Feb 2016 at 15:46:20, Thomas Mortagne (thomas.morta...@xwiki.com > (mailto:thomas.morta...@xwiki.com)) wrote: > > > On Tue, Feb 2, 2016 at 3:39 PM, vinc...@massol.net wrote: > > > > > > > > > On 2 Feb 2016 at 15:37:10, Thomas Mortagne (thomas.morta...@xwiki.com > (mailto:thomas.morta...@xwiki.com)) wrote: > > > > > >> On Tue, Feb 2, 2016 at 3:32 PM, vinc...@massol.net wrote: > > >> > > > >> > > > >> > On 2 Feb 2016 at 14:56:42, Thomas Mortagne ( > thomas.morta...@xwiki.com(mailto:thomas.morta...@xwiki.com)) wrote: > > >> > > > >> >> On Tue, Feb 2, 2016 at 2:06 PM, vinc...@massol.net wrote: > > >> >> > Hi Edy, > > >> >> > > > >> >> > On 2 Feb 2016 at 13:34:49, Eduard Moraru (enygma2...@gmail.com > (mailto:enygma2...@gmail.com)) wrote: > > >> >> > > > >> >> >> Hi, > > >> >> >> > > >> >> >> So after an initial implementation we realized there are some > issues with > > >> >> >> the original approach. > > >> >> >> > > >> >> >> Basically, it is not such a good idea to handle the resolving > of untyped > > >> >> >> links at the parser level because this is not compatible with > the XDOM > > >> >> >> caching that we have for XWikiDocuments, i.e. it`s not OK to > cache a > > >> >> >> document's XDOM that was resolved with links in the context of > the *first* > > >> >> >> document that resolved them and then to reuse that cached XDOM > later or > > >> >> >> from a different calling document when/where those links no > longer make > > >> >> >> sense. We would need to remove the XDOM caching and parse the > XDOM every > > >> >> >> time we need it in order to make sure that the links are > resolved in the > > >> >> >> context of the current calling document and that they are the > correct > > >> >> >> links. Obviously, we don`t want that and we want to keep the > XDOM cache > > >> >> >> which is vital for performance. > > >> >> >> > > >> >> >> In order to address this issue and to still be able to do the > fallback > > >> >> >> mechanism (the one that allows us to be backwards compatible at > the syntax > > >> >> >> level when resolving an untyped link), Thomas suggested that we > always > > >> >> >> produce a static (cacheable/reusable) parsing result (i.e. URL > or DOCUMENT > > >> >> >> types, with the DOCUMENT ResourceReference having the isTyped > flag set to > > >> >> >> false) for untyped links and that the we introduce a new set of > > >> >> >> EntityReferenceResolver API to be used on the client > > >> >> >> side (i.e. when consuming the XDOM) to get the actual XWiki > entities. This > > >> >> >> would be used, for example, by the XWikiWikiModel when > producing the URLs > > >> >> >> and any other places that use DOCUMENT type ResourceReferences. > So we pass > > >> >> >> the resolving responsibility to this new API and expect the > client to use > > >> >> >> it. > > >> >> >> > > >> >> >> This second proposal resolves the caching issue but introduces > new > > >> >> >> requirements on the clients of the rendering result, so in > terms of > > >> >> >> backwards compatibility, if the clients don`t use this new > resolvers API, > > >> >> >> some links might be interpreted incorrectly (i.e. assuming it's > a document > > >> >> >> instead of a space reference). This adds to the backwards > compatibility > > >> >> >> issues caused by the addition of the new SPACE link type, but > there is not > > >> >> >> much way around it. > > >> >> > > > >> >> > I agree that the XDOM returned by XWikiDocument.getXDOM() should > contain exactly what’s been parsed from the syntax without any > interpretation. > > >> >> > > > >> >> > We could imagine caching the XDOM along with the Context but it > doesn’t make much sense IMO. I find it better that it’s evaluated at the > time it’s needed with the context at that time. > > >> >> > > > >> >> > You propose to provide an Entity Reference Resolver to allow > users of getXDOM() to parse references. So I guess the users would check if > the ResourceReference is of type Attachment, Document or Space and then use > that resolver to convert the String into an EntityResourceReference. > > >> >> > > >> >> No need to check the resource reference type. The user would use > the > > >> >> EntityReferenceResolver which return the right type > > >> >> of entity reference based on what is found in the passed > > >> >> ResourceReference. The the user can check the ResourceReference > type > > >> >> (if it cares about it, in some cases you will just call > > >> >> XWiki#getDocument(EntityReference)). > > >> > > > >> > I don’t see how it’s possible since you can have Resource Reference > that have no meaning as EntityResourcReference… > > >> > > > >> > For example “mailto:…”. > > >> > > >> Sure but in that case you will just get nothing. Just need to be > > >> prepare that it's possible you get no result. > > > > > > What does it mean “nothing” for an EntityResourceReference? null > (yuck!)? > > > > > > Doesn’t feel the best way to me since a ResourceReference is not an > EntityResourceReference. > > > > > > I don’t see how you can escape checking the type… Checking the type or > checking the null is the same except that checking for the type is much > nicer. > > > > Checking for null is easy, for the type you have to know all the > > possible types that could be related to an eniity. > > > > Imagine we introduce a WIKI resource type to link to a wiki home page > > for example, if your code is based on known resources types then you > > won't support it, if you just check if you get a valid reference then > > you support any future resource type that can be translated to entity > > reference. > > Ok, that’s a good point. > > I guess another answer is that we need to refactor the Rendering (in > platform) to use the new Resource module instead and this Resource module > has the concept of EntityResourceReference (which doesn’t exist in the > Rendering). But that’s way too much work for now... > > Thanks > -Vincent > > > > Thanks > > > -Vincent > > > > > > > > >> > Thanks > > >> > -Vincent > > >> > > > >> >> > Another idea (don’t know if you thought about it) would be to > implement a Transformation that would take that XDOM and generate a XDOM’ > that is resolved against the current Context (with all the links resolved). > I guess there could be use cases for both needs but having the fine-grained > solution is better to start with. > > >> >> > > > >> >> >> I`d also like to mention that we are already doing something > similar to > > >> >> >> this when resolving attachment/image references (i.e. the > caller needs to > > >> >> >> resolve the reference since the rendering does not distinguish > between > > >> >> >> "space attachments" or "document attachments") so this new > resolver API is > > >> >> >> a good/needed addition anyway and expanding this approach to > links makes > > >> >> >> sense, IMO. > > >> >> > > > >> >> > I don’t understand "since the rendering does not distinguish > between "space attachments" or "document attachments””, could you provide > some example in wiki syntax? > > >> >> > > > >> >> >> Additional note: typed links ([[doc:Doc]], [[space:Space]] > etc.) are still > > >> >> >> supported and not affected by this change of direction, since > this is only > > >> >> >> about (untyped [[Doc]]) links. > > >> >> >> > > >> >> >> We`re starting work on this direction. > > >> >> >> > > >> >> >> Please let us know what you think about this new approach and > if you see > > >> >> >> any use cases where it creates problems. > > >> >> > > > >> >> > Sounds good to me. > > >> >> > > > >> >> > Of course we’ll need to document this in the release notes. > > >> >> > > > >> >> > I’ve done a quick check of usages of LinkBlock.getReference() > since this is where the problem could happen. I’ve found the following > places to check: > > >> >> > - XWikiDocument.getUniqueLinkedPages() > > >> >> > - DefaultLinkedResourceHelper > > >> >> > - PlainTextBlockFilter > > >> >> > > > >> >> > Note that the LinkCheckerTransformation is not affected since it > only checks URL-type links. > > >> >> > > > >> >> > There are also some matches in xwiki-contrib to check: > > >> >> > > https://github.com/search?q=LinkBlock+user%3Axwiki-contrib&ref=searchresults&type=Code&utf8=%E2%9C%93 > > >> >> > > > >> >> > Thanks! > > >> >> > -Vincent > > >> >> > > > >> >> > PS: Good catch Thomas about this! > > >> >> > > > >> >> > > > >> >> >> Thanks, > > >> >> >> Eduard > > >> >> >> > > >> >> >> On Thu, Jan 7, 2016 at 2:03 PM, Eduard Moraru wrote: > > >> >> >> > > >> >> >> > Hi Thomas, > > >> >> >> > > > >> >> >> > On Wed, Jan 6, 2016 at 7:42 PM, Thomas Mortagne > > > wrote: > > >> >> >> > > > >> >> >> >> On Wed, Jan 6, 2016 at 5:57 PM, Eduard Moraru > > >> >> >> >> wrote: > > >> >> >> >> > Hi devs, > > >> >> >> >> > > > >> >> >> >> > As XWIKI-12920 [1] mentions, we need to hide "WebHome" > references in the > > >> >> >> >> > wiki syntax for links and images (for now) in order to be > consistent > > >> >> >> >> with > > >> >> >> >> > what we did in the UI. > > >> >> >> >> > > > >> >> >> >> > What this means is that [[label>>Page.WebHome]] should be > equivalent to > > >> >> >> >> > [[label>>Page]]. > > >> >> >> >> > > > >> >> >> >> > The plan is to apply the same logic as we did for URLs and > detailed by > > >> >> >> >> > Vincent in "Solution 2" in his comment on the issue [2]. > > >> >> >> >> > > > >> >> >> >> > In order to achieve this, Vincent proposed to introduce a > new "space:" > > >> >> >> >> > resource type and make this new type the default instead > of "doc:" > > >> >> >> >> which is > > >> >> >> >> > the current default. > > >> >> >> >> > > > >> >> >> >> > Before: > > >> >> >> >> > [[label>>Page]] => [[label>>doc:Page]] > > >> >> >> >> > After: > > >> >> >> >> > [[label>>Page]] => [[label>>space:Page]] if "Page.WebHome" > exists, > > >> >> >> >> > or => [[label>>doc:Page]] if > > >> >> >> >> ".Page" > > >> >> >> >> > exists, > > >> >> >> >> > or => wanted link to create "Page.WebHome" when > > >> >> >> >> > clicked. > > >> >> >> >> > > > >> >> >> >> > Using either the "doc:" or the "space:" versions manually > will resolve > > >> >> >> >> the > > >> >> >> >> > requested resource, without doing any fallback resolution > (which is > > >> >> >> >> applied > > >> >> >> >> > only for the no-prefix version). > > >> >> >> >> > > > >> >> >> >> > > > >> >> >> >> > For the same consistency reason, we need to apply the same > fallback to > > >> >> >> >> the > > >> >> >> >> > "attach:" resource type, e.g: > > >> >> >> >> > [[attach:p...@file.ext]] => > [[label>>attach:space:p...@file.ext]] || > > >> >> >> >> > [[label>>attach:doc:p...@file.ext]] > > >> >> >> >> > > > >> >> >> >> > However, a resource is defined as ((type:) resource) so > for attachments > > >> >> >> >> we > > >> >> >> >> > would need to extend the type's definition to allow it to > contain ":" in > > >> >> >> >> > the type name (i.e. "attach:doc" and "attach:space") so > that more > > >> >> >> >> > variations are tested when resolving a link reference > before treating > > >> >> >> >> it as > > >> >> >> >> > a generic/untyped reference (this is where the fallback > mechanism kicks > > >> >> >> >> in). > > >> >> >> >> > > > >> >> >> >> > > > >> >> >> >> > There is also the image syntax that needs to be extended > to support the > > >> >> >> >> > same fallback logic, so something like: > > >> >> >> >> > image:Page => image:space:Page || image:doc:Page > > >> >> >> >> > > > >> >> >> >> > > > >> >> >> >> > In all these cases: > > >> >> >> >> > * link space: prefix, > > >> >> >> >> > * link attach:doc and attach:space prefixes and > > >> >> >> >> > * image space: and doc: prefix > > >> >> >> >> > ... we would be breaking backwards compatibility in the > sense that if a > > >> >> >> >> > wiki with the name "space" (and/or "doc", depending on > which case of the > > >> >> >> >> > above you are) already existed in the wiki farm, any links > pointing to > > >> >> >> >> > documents in that wiki from other wikis will be broken, > because, for > > >> >> >> >> > example [[label>>space:Page]] no longer points to the > document > > >> >> >> >> > "space:Page.WebHome" (from wiki "space"), but to the > document > > >> >> >> >> > "Page.WebHome" from the current wiki (where the link is > made). To fix > > >> >> >> >> this, > > >> >> >> >> > one would have to write [[label>>space:space:Page]] > instead. > > >> >> >> >> > > >> >> >> >> "[[label>>space:Page]]" does not mean "space:Page.WebHome" > right now > > >> >> >> >> but ":.space:Page" > > >> >> >> >> > > >> >> >> > > > >> >> >> > You are right. Bad example (though I find that behavior a bit > odd). It > > >> >> >> > should have been: > > >> >> >> > > > >> >> >> > [[label>>space:Space.Page]] no longer points to the document > > >> >> >> > "space:Space.Page" (from wiki "space"), but to the document > > >> >> >> > "Space.Page.WebHome" from the current wiki (where the link is > made). To fix > > >> >> >> > this, one would have to write > [[label>>space:space:Space.Page]] instead. > > >> >> >> > > > >> >> >> > Thanks, > > >> >> >> > Eduard > > >> >> >> > > > >> >> >> > > > >> >> >> >> > > > >> >> >> >> > I guess we could/should write a migrator to try to fix > most of these > > >> >> >> >> cases > > >> >> >> >> > automatically (like we fix links to a document that was > renamed), but a > > >> >> >> >> > couple of links will be unfixable if they are built > programatically > > >> >> >> >> (e.g. > > >> >> >> >> > by velocity scripts) and the process could prove to be > extremely lengthy > > >> >> >> >> > one (due to the parsing, processing, serialization and > resaving of each > > >> >> >> >> > document). > > >> >> >> >> > > > >> >> >> >> > > > >> >> >> >> > Please feel free to comment on the above described > approach. > > >> >> >> >> > > > >> >> >> >> > Thanks, > > >> >> >> >> > Eduard > > >> >> >> >> > > > >> >> >> >> > P.S.: I did not mention macro parameter references which > would also > > >> >> >> >> need a > > >> >> >> >> > solution for hiding the "WebHome" part, but I`d prefer it > if we handle > > >> >> >> >> that > > >> >> >> >> > another time / in another thread. > > >> >> >> >> > > > >> >> >> >> > ---------- > > >> >> >> >> > [1] http://jira.xwiki.org/browse/XWIKI-12920 > > >> >> >> >> > [2] > > >> >> >> >> > > > >> >> >> >> > http://jira.xwiki.org/browse/XWIKI-12920?focusedCommentId=89129&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-89129 > _______________________________________________ > devs mailing list > devs@xwiki.org > http://lists.xwiki.org/mailman/listinfo/devs > _______________________________________________ devs mailing list devs@xwiki.org http://lists.xwiki.org/mailman/listinfo/devs