MeatballWiki |
RecentChanges |
Random Page |
Indices |
Categories
Cette page a démarré sur LinkPattern (seul lien de référence)
Pour un wiki, c'est la "RegularExpression" que le script cherche pour déterminer quel texte produit un lien.
Voir en anglais LinkPatternSuggestions pour des modifications suggérées ou des ajouts aux ModèleDeLien de ce wiki.
DossierTechnologieWiki DossierSchémaIndexation
Pour ceux qui connaissent Perl, les LinkPattern(s) de ce wiki sont :
# Current for UseModWiki/MeatballWiki 0.8.8
$UseSubpage = 0; # 1 = use subpages, 0 = do not use subpages
$SimpleLinks = 1; # 1 = only letters, 0 = allow _ and numbers
$NonEnglish = 1; # 1 = extra link chars, 0 = only A-Za-z chars
sub InitLinkPatterns {
my ($UpperLetter, $LowerLetter, $AnyLetter, $LpA, $LpB, $QDelim);
$UpperLetter = "[A-Z";
$LowerLetter = "[a-z";
$AnyLetter = "[A-Za-z";
if ($NonEnglish) {
$UpperLetter .= "\xc0-\xde";
$LowerLetter .= "\xdf-\xff";
$AnyLetter .= "\xc0-\xff";
}
if (!$SimpleLinks) {
$AnyLetter .= "_0-9";
}
$UpperLetter .= "]"; $LowerLetter .= "]"; $AnyLetter .= "]";
# Main link pattern: lowercase between uppercase, then anything
$LpA = $UpperLetter . "+" . $LowerLetter . "+" . $UpperLetter
. $AnyLetter . "*";
# Optional subpage link pattern: uppercase, lowercase, then anything
$LpB = $UpperLetter . "+" . $LowerLetter . "+" . $AnyLetter . "*";
if ($UseSubpage) {
# Loose pattern: If subpage is used, subpage may be simple name
$LinkPattern = "((($LpA)?\\/$LpB)|$LpA)";
# Strict pattern: both sides must be the main LinkPattern
# $LinkPattern = "((($LpA)?\\/)?$LpA)";
} else {
$LinkPattern = "($LpA)";
}
$QDelim = '("")?'; # Optional quote delimiter (not in output)
$LinkPattern .= $QDelim;
# Url-style links are delimited by one of:
# 1. Whitespace (kept in output)
# 2. Left angle-bracket (<) (kept in output)
# 3. A single double-quote (") (kept in output)
# 4. A double double-quote ("") (removed from output)
# Inter-site convention: sites must start with uppercase letter
# (Uppercase letter avoids confusion with URLs)
$InterSitePattern = $UpperLetter . $AnyLetter . "+";
$InterLinkPattern = "(($InterSitePattern:[^\\s\"<]+)$QDelim)";
$UrlProtocols = "(http|ftp|afs|news|nntp|mid|cid|mailto|wais|"
. "prospero|telnet|gopher)";
$UrlPattern = "((($UrlProtocols):[^\\s\"<]+)$QDelim)";
$ImageExtensions = "(gif|jpg|png|bmp|jpeg)";
$RFCPattern = "RFC\\s?(\\d+)";
$ISBNPattern = "ISBN:?([0-9- xX]{10,})";
}
Pour les autres 98% qui ne lisent pas les "regular expressions" de Perl, le modèle Meatball est :
Une ou plus lettres capitales, puis une ou plus lettres en bas de casse, puis une lettre capitale, puis "n'importe quelles lettres" (qu'elle soit en capitale ou bas de casse). (Pour les wikis non-Meatball utilisant UseModWiki, "n'importe quelles lettres" peut comprendre des soulignés et nombres.)
Le ModèleDeLien de UseMod est à bon escient plus lâche que celui de WikiWiki, essentiellement pour accomoder des noms avec des initiales au milieu et dans peu de cas des titres avec A dans le milieu (comme BacASable). Beaucoup d'utilisateurs se perdent avec les règles wiki -- regardez Wiki:RecentVisitors pour des exemples fréquents.
Le
ModèleDeLien du
WikiWiki : \b([A-Z][a-z]+){2,}\b
Ceci est considéré pour être le modèle de lien casse ChatMot et reste le format "standard" (plus comme le format de référence). La plupart des sites wikis avec un lien automatique créeront des liens sur ce modèle.
Le
ModèleDeLien renvoie généralemnet vrs simplement le modèle pour des liens de pages normales. Il existe d'autre modèles qui ne correspondent pas aux URLs et aux images.
Ces modèles sont désormais lisétés dans le code ci-dessus).
Je parlais à OriFolger
? qui a installé un wiki en hébreux chez
http://www.rashreshet.org (
LienCassé déc 2003). parce que l'hébreux n'a pas de distinctions minuscule/majuscule, ces modèles de liesn "à bosses" ne sont pas applicables. Il s'est décidé sur le format de modèle de lien libre "standard" ala "[modèle de lien]". D'un autre côté, YasushiIwata
? a un
MoinMoin japonais sur
http://www.sh.rim.or.jp/~yasusii (
LienCassé déc 2003). Là, à la limite de ce que je peux dire, les page noms sont les modèles standards
MoinMoin, essentiellement de la CasseChaMot
? dans l'alphabet Latin. Par conséquent, ils utilisent des pages noms anglaises avec du contenu japonais. Ceci renforce plus à fond le besoin de façonner le
ModèleDeLien aux exigences particulières du site, pas de renfocer un modèle "standard". --
SunirShah
Merci Cliff pour le modèle de lien externe élégant mis entre crochets, par ex [page d'accueil de usemod]. Désormais MeatballWiki peut facilement pointer des PagesWiki? arbitraires sur des wikis externes, en utilisant leur noms natifs. Pourrait t'on combiner ceci avec les préfixes InterWiki, ressemblant aux [projets communauté Tcl:Tcl] en mode navigation et [Tcl:Tcl projets communauté] en mode édition. -- FridemarPache
Quelques notes
Cette page est obsolète et buggée. Je la récrirai au fil du temps, tout comme j'essaierai de développer une meilleure WikiSyntaxSemantics? pour les liens.
- Il existe deux types essentiels de modèles de liens. Il y a les ExplicitLink?s, comme les LienLibres, où les auteurs écrivent explicitement le lien à l'intérieur du texte ; et il y a les liens implicites ImplicitLink?s, là où le texte normal est augmenté de liens par le logiciel, comme dans la RFC 1234, où le logiciel créée un lien vers le texte RFC. Un autre exemple sont les URLs.
- Le ModèleDeLien fondé sur le LangageDeFormes que nous avons ici, connu comme le ChatMot, est possiblement un cas entre-deux si votre cerveau n'est pas déjà écrit en Smalltalk, mais il a tellement bien fonctionné pour le PortlandPatternRepository tout simplement du fait qu'il est très naturel pour ces auteurs de nommer des concepts (par ex des modèles) comme de simples jetons écrits en ChatMot.
- Le GaGaParser prend les liens implicites à un nouveau niveau.
- Les liens InterWiki sont des liens explicites. Les PagesJumelles sont des liens implicites.
- Je crois secrètement qu'un système de lien implicite bien conçu est bien meilleur qu'un système de lien explicite.
- Il exite deux types essentiels de syntaxe de LienLibre. Il y a la [[forme externe]] et la forme_interne. Ce qui veut dire, que la forme externe est décrite par des marqueurs de début et de fin tandis que la forme interne connecte chaque mot ensemble avec quelque syntaxe. Elles ont différents plus et moins. [[La forme externe rend plus facile la production de phrases complètes ou de paragraphes liens]], tandis que la forme interne la rend plus difficile parce qu'elle est plus difficile à saisir. Faire qu'elle soit plus difficile à lier des fauchées complètes de texte rendra probablement les titres de pages de meilleure qualité. La forme interne a aussi le potentiel de ressembler à un lien si vous utilisez les soulignés.
- Quelques personnes ont produit \(des_choses_étranges) avec des liens libres comme combiner les deux types tout en ajoutant des extra-syntaxes (et par conséquent inutiles) pour l'enfer. Ne faites pas ça.
- La forme externe de la syntaxe lien rend aussi les vérifiactions de liens très complexes, car elle exige deux versions du ModèleDeLien. Une pour la syntaxe avec les marqueurs début/fin et une pour le nym de la page correspondant au format WikiNameCanonicalization.
- La forme itnerne perd un caractère à partir du domaine.
- _le_modèle_lien_ est aussi une forme interne, même avec des marqueurs début et fin, parce que le lien essentiel est fait en connectant les mots ensemble. Ce modèle permet les _liens_ mots uniques.
- Le ModèleDeLien dans la SyntaxeWiki? peut ne pas avoir quelque chose à voir avec la façon dont il est affiché. Quelques wikis utilisent le ChatMot, mais affichent Chat Mot. Ceci a l'inconvénient d'afficher McDonalds? comme Mc Donalds, tout comme de casser WYSIWYG.
- C'est généralement une bonne idée de faire que les titres de pages correspondent au ModèleDeLien qui les relie, même si ce n'est pas nécessaire. Faire ainsi renforcera le ModèleDeLien, aidera les utilisateurs à se souvenir de la DatabasePage et réduirea généralement la confusion de l'utilisateur. Puis une fois de plus, espacer le ChatMot dans le titre est presque toujours la bonne chose à faire et aide au moins Google à indexer correctement votre page. Pour les LienLibre néanmoins, c'est une très mauvaise idée comme des variations sans sens parce que que la ponctuation ou la mise en capitales créeront des pages distinctes. A la place utilisez WikiNameCanonicalization. Le problème de représenter piste-8 comme la même page que "piste huit" ne peut pas être résolu (facilement) de cette manière. Vous pourriez compter sur les personnes pour qu'elles fassent les bonnes choses, ou vous pourriez restreindre leurs choix de façon à ce qu'elles soient forcées à faire la bonne chose.
- The NoSuchPageSyntax modifies representation to indicate the lack of an existing page.
- Magic link syntax can act as macros. Consider how non-linear ISBN 1-234-5678-X works. It would be worse if the ISBN links validate the ISBN format.
- Links may include aggregate structure. InterWiki links first link against an InterWiki moniker to choose a particular wiki and then against some text that (theoretically) links against some page on the foreign wiki. SubPages link first against the main page and then against the subpage. In neither case is it possible to link against a particular component by itself.
- Very simply, links are three part affairs. Link syntax translates to link representation and target nym (page name). Each part can be as complex as a TuringMachine? will allow.
- The LinkPattern has to be used not only during syntax translation but also during page verification. You have to match all requests to load page X against the LinkPattern to check if X is in fact a valid page name; this includes checking if the page exists for the NoSuchPageSyntax. However, since the target nym format may not be exactly the same as the link syntax format, say in the case of the external form of the FreeLink syntax, a separate verification link pattern may be required. This can make the implementation much more complex as link pattern information is coded in more than one place.
- At the very least, it's probably a good idea to canonicalize to some, singular invariant nym format. If you have multiple link patterns, accept them on the URL, but redirect to a canonicalized version of the nyms. For instance, suppose MeatballWiki moved to the link_pattern format, so this page would become http://meatballwiki.org/wiki/link_pattern. For backward compatibility, though, we also accept the old LinkPattern, but we canonicalize it. So, when someone went to http://meatballwiki.org/wiki/LinkPattern, LinkPattern would canonicalize to link_pattern, and then the script will redirect to http://meatballwiki.org/wiki/link_pattern.
- Then again, suppose we made the underscore (_) a linkable character but a non-character. So Link_Pattern would link the same as LinkPattern. If you go to http://meatballwiki.org/wiki/Link_Pattern, the script may then be intelligent enough to space the nym as Link Pattern. On the other hand, if you go to http://meatballwiki.org/wiki/LinkPattern, the script would emit the nym as LinkPattern. This would allow Marty_McFly to render properly, whilst still remaining MartyMcFly? from the PageDatabase's point of view. This doesn't break WYSIWYG, though it does add the mystifying part about WikiNameCanonicalization to the mix.
- There is no, none, notta programmatic way to unify plurals with singulars. Don't try. You'll fail. Don't make algorithms that make mistakes when humans can do much better.
- Many people find it necessary to delimit the influence of a LinkPattern. Here's a tip: the pipe (|) is not a legal URL character and not very likely to be part of any meaningful page name. It also has the advantage of looking like a dividing line. So LinkPattern|s will become LinkPatterns. UseMod currently uses double double quotes (""), which makes no sense. The pipe has a big disadvantage, though, in that it looks like an l or a 1 on some screens to some eyes. Another option is the forward slash, e.g. LinkPattern/s, which is closer to contemporary typographic style (e.g. s/he), although it is incompatible with SubPages as they stand today, and the forward slash is a URL character, making it hopeless for delimiting InterWiki links.
- Dropping the trailing punctuation of URLs and InterWiki links is necessary, even if this last character is a valid URL character, because links may appear at the ends of sentences, like http://www.example.com. It would be bad to link the trailing period in the previous sentence.
- One thing might be nice though -- allowing a final close paren if the link contains an open paren. A fair number of WikiPedia pages are titled with parenthetical disambiguators, such as WikiPedia:John_Williams_(composer), which don't make it through the current link pattern here.
- Speaking about disambiguators, is there any way I can configure UseMod to accept Shiva(Skansen) as a link, not provided with brackets? [[Dan Koehl]]
---
New to MeatBall, not sure where to post this. :-/
FreeLinks cover most of my needs, except for losing some of the convenience of CamelCase-ing links. I would like to get feedback on the social and technical ramifications of a linking rule for camel cased links that, after validating a potential wiki link, matched it against that word regardless of case. Thus PythOn? would match PyThon? but not Python. The latter case can be covered by a bracket syntax. GaGaParser is too liberal for my needs. - ZWiki:DeanGoodmanson
So, I'd love to hear about experiments with other patterns for ImplicitLink?s. Sure, CamelCase is all well and good, but what about some other ideas?
- regex methods
- capitalization methods
- special characters
- underscore_separated (LizzyWiki)
- hyphen-separated-terms
- ^startingwithspecialcharacter (CoForum)
- other
- any word longer than 4 letters
- dictionary methods
- words that dictionary-match on a verb or a noun
- words that don't dictionary-match at all
- words that dictionary-match a different langue from the standard text
- word usage
- unique words in the Wiki
- low-frequency words in the Wiki
--EvanProdromou
ProWiki supports
- Automatic word linking (and definition of what a word is). In German nouns are capitalized, so this lends itself very well. In English one could use e.g. words containing 8 letters or more. Begging links on words are not implemented, but words link when corresponding pages exist.
- Automatic underline linking. Any word containing at least one underline becomes a link. The underline is interpreted as a space (like WikiPedia). Underline linking has been pioneered by LizzyWiki (AlainDesilets?) as far as I know (collaborative story writing needs it obviously).
--
HelmutLeitner
PageTranslation LangueFrançaise LinkPattern