å¾®æ ¼å¼
å¾®æ ¼å¼ï¼microformatï¼æ¯ä¸ç§ç¨äºå¨ HTML ä¸åµå ¥è¯ä¹åç»æåæ°æ®çæ åï¼å®ä¸ºç¤¾äº¤ç½ç»åºç¨ç¨åºãæç´¢å¼æãèåå¨åå ¶ä»å·¥å ·æä¾äºä¸ä¸ª APIãè¿äºæå°ç HTML 模å¼ç¨äºæ è®°ä»åºæ¬å°ç¹å®é¢åçä¿¡æ¯å®ä½ï¼ä¾å¦äººç©ãç»ç»ãäºä»¶åå°ç¹ã
- è¦å建ä¸ä¸ªå¾®æ ¼å¼å¯¹è±¡ï¼éè¦å¨ class 屿§ä¸ä½¿ç¨ h-* ç±»åã
- è¦ç»å¯¹è±¡æ·»å 屿§ï¼éè¦å¨å¯¹è±¡çå代å ç´ ä¸ä½¿ç¨ p-*ãu-*ãdt-*ãe-* ç±»åã
å¾®æ ¼å¼ä½¿ç¨æ¯æè¯æ±è¡¨æ¥æè¿°å¯¹è±¡ï¼å¹¶ä½¿ç¨åç§°ââå¼å¯¹ä¸ºå®ä»¬ç屿§èµå¼ã屿§è¢«å å«å¨å¯ä»¥æ·»å å°ä»»ä½ HTML å ç´ ç class 屿§ä¸ï¼èæ°æ®å¼åå¤ç¨äº HTML å ç´ å 容åè¯ä¹å±æ§ã
å¾®æ ¼å¼ 2ï¼ææ¶è¢«ç§°ä¸º mf2ï¼æ¯å¯¹å¾®æ ¼å¼çæ´æ°ï¼å®æä¾äºä¸ç§æ¯ä»¥å¾ä½¿ç¨ RDFa å microdata çæ¹æ³æ´ç®åç HTML ç»æåè¯æ³åè¯æ±è¡¨æ³¨éæ¹å¼ãè¿äºä»¥åçæ¹æ³éè¦è·å¾æ°ç屿§ã
对äºå¾®æ ¼å¼ 2ï¼å¤§å¤æ°è¯è¨é½æå¼æºçè§£æåºã
å¾®æ ¼å¼çå·¥ä½åç
ç½é¡µçä½è å¯ä»¥åä»ä»¬ç HTML 䏿·»å å¾®æ ¼å¼ãä¾å¦ï¼å¦æä»ä»¬æ³è¦æ è¯èªå·±ç身份ï¼å¯ä»¥ä½¿ç¨ h-card ä¾å¦ï¼
HTML 示ä¾
<a class="h-card" href="https://alice.example.com">Alice Blogger</a>
å½è§£æå¨éå°è¿äºæ°æ®æ¶ï¼å®å°ç¥éè¿ä¸ªé¡µé¢å
å«äºä¸ä¸ªâå¡çâï¼å
¶æè¿°äºä¸ä¸ªå« Alice Blogger ç人æç»ç»ï¼å
¶ URL 为 https://alice.example.com/ãè§£æå¨éè¿ API 使è¿äºæ°æ®å¯ç¨ï¼è¿äº API å¯ä»¥ç¨äºä¸åçåºç¨ç¨åºãä¾å¦ï¼åºç¨ç¨åºå¯ä»¥æ«æé¡µé¢ä¸ç h-cardï¼ç¨ä½æ³¨åæå¡çæä¸ªäººçä¸ªäººèµæä¿¡æ¯ã
æ£å¦å¨è¿ä¸ªæ¡ä¾ä¸ï¼æäºæ 记模å¼åªéè¦ä¸ä¸ªåä¸çå¾®æ ¼å¼æ ¹ç±»åï¼è§£æå¨ä½¿ç¨å®æ¥æ¥æ¾ä¸äºéç¨å±æ§ï¼ä¾å¦ nameãurlãphotoã
å¾®æ ¼å¼ä½¿ç¨æ¡ä¾
å¾®æ ¼å¼æè®¸å¤ä½¿ç¨æ¡ä¾ãé¦å ï¼Webmention æ å使ç¨å¾®æ ¼å¼æä¾äºä¸ç§å¯ä»¥å°æ¶æ¯åè¯è®ºä»ä¸ä¸ªç½ç«åéå°å¦ä¸ä¸ªç½ç«çæ¹å¼ãWebmention è§èå®ä¹äºç¹å®å±æ§ï¼ä»¥ä¾¿äºç«ç¹åå¸åæ¶è´¹ï¼ä»¥å建丰å¯ãå¯äºæä½çæ¶æ¯åè¯è®ºå叿¹å¼ãå¾®æ ¼å¼ä¹å¯ä»¥ä¸ Webmentions ä¸èµ·ä½¿ç¨ï¼ä¾¿äºä»ä¸ä¸ªç½ç«åå¦ä¸ä¸ªç½ç«åé社交ååºï¼å¦å欢ã转å¸å书ç¾ã
å¾®æ ¼å¼è¿æ¯æè·¨ç«ç¹çè½»æ¾èåãèåå¨å¯ä»¥è§£æåå¸å¾®æ ¼å¼ç页é¢ï¼å¯»æ¾è¯¸å¦å¸åæ é¢ãå¸åæ£æåå¸åä½è çä¿¡æ¯ãç¶åï¼è¿ä¸ªèåå¨å¯ä»¥ä½¿ç¨æ¶éå°çè¯ä¹ä¿¡æ¯å¨å ¶ç«ç¹ä¸åç°ç»æãä¾å¦ï¼æ°é»èåå¨å社åºå叿¿å¯ä»¥ä¿è¿æäº¤ï¼å¹¶ä½¿ç¨å¾®æ ¼å¼ä»é¡µé¢ä¸æåç¸å ³å å®¹ãæ¤å¤ï¼ç½ç«å¯ä»¥ä½¿ç¨å¾®æ ¼å¼æ¥åç¬¬ä¸æ¹ï¼ä¾å¦ç¤¾äº¤ç½ç»ï¼åéæå»ºå¥½ç请æ±ä»¥åå¸å 容ã
ææä¸»æµæç´¢å¼æé½æ¯æè¯»ååè§£æå¾®æ ¼å¼ãæç´¢å¼æä»ç´æ¥è®¿é®ç»æåæ°æ®ä¸è·çåªæµ ï¼å 为å®ä»¬å 许æç´¢å¼æå»çè§£ç½é¡µä¸çä¿¡æ¯ãæäºè¿äºä¿¡æ¯ï¼æç´¢å¼æå¯ä»¥ä¸ºç¨æ·æä¾æ´å ·æç¸å ³æ§çç»æãä¸äºæç´¢å¼æå¯è½ä¼æ ¹æ®å¾®æ ¼å¼ä¸æä¾çæ°æ®ï¼å¨æç´¢ç»æé¡µé¢ä¸åç°ç¹æ®ççæ®µï¼ä¾å¦æçº§è¯åã
é¤äºå¯ä»¥è¢«æºå¨è¯»åå¤ï¼å¾®æ ¼å¼è¿ä¾¿äºäººç±»é 读ãè¿ç§æ¹æ³ä½¿äººä»¬å®¹æçè§£åç»´æ¤å¾®æ ¼å¼æ°æ®ã
å¾®æ ¼å¼åç¼
ææå¾®æ ¼å¼ç±æ ¹å屿§éåç»æã屿§å ¨é¨æ¯å¯éçï¼å¯è½æ¯å¤å¼çââéè¦åä¸å¼çåºç¨ç¨åºå¯ä»¥ä½¿ç¨å±æ§ç第ä¸ä¸ªå®ä¾ã屿¬¡æ°æ®éè¿åµå¥å¾®æ ¼å¼è¡¨ç¤ºï¼é常ä½ä¸ºå±æ§å¼æ¬èº«ã
ææå¾®æ ¼å¼ç±»å使ç¨åç¼ãåç¼æ¯ä¸è¯æ±è¡¨æ å ³çè¯æ³ï¼å®ä»¬æ¯è¢«ç¬ç«å¼ååºæ¥çã
-
âh-*âç¨äºæ ¹ç±»åï¼ä¾å¦âh-cardâãâh-entryâãâh-feedâçãè¿äºé¡¶çº§æ ¹ç±»é常æç¤ºä¸ä¸ªç±»ååç¸åºç颿屿§è¯æ±è¡¨ãä¾å¦ï¼
- h-card æè¿°ä¸ä¸ªäººæç»ç»
- h-entry æè¿°å ·ææ¶é´æ³çå¨çº¿å 容ï¼å¦å客å¸å
- h-feed æè¿°å¸åçæµææº
- ä½ å¯ä»¥å¨ microformats2 wiki 䏿¾å°æ´å¤è¯æ±è¡¨ã
-
âp-*âç¨äºçº¯ï¼ææ¬ï¼å±æ§ï¼ä¾å¦ï¼âp-nameâãâp-summaryâ
- éç¨çº¯ææ¬è§£æï¼ä¸è¬å ç´ ææ¬ãå¨æäº HTML å ç´ ä¸ï¼é¦å 使ç¨ç¹æ®å±æ§ï¼ä¾å¦ï¼img/altãabbr/titleã
-
âu-*âç¨äº URL 屿§ï¼ä¾å¦ï¼âu-urlâãâu-photoâãâu-logoâ
- ç¹æ®è§£æï¼å ç´ å±æ§ a/hrefãimg/srcãobject/data çä¼å äºå ç´ å 容ã
-
âdt-*âç¨äº datetime 屿§ï¼ä¾å¦ï¼âdt-startâãâdt-endâãâdt-bdayâ
- ç¹æ®è§£æï¼time å ç´ datetime 屿§ãvalue-class-pattern ååç¬çæ¥ææ¶é´å¼è§£æï¼ä»¥æé«å¯è¯»æ§ã
-
âe-*âç¨äºå ç´ æ 屿§ï¼å ¶ä¸æ´ä¸ªå å«çå ç´ å±æ¬¡ç»ææ¯å¼ï¼ä¾å¦âe-contentâãâe-âåç¼ä¹å¯ä»¥éè¿âå ç´ æ ï¼element treeï¼âãâåµå ¥å¼æ è®°ï¼embedded markupï¼âæâå°è£ æ è®°ï¼encapsulated markupï¼âæ¥è®°å¿ã
å¾®æ ¼å¼ç¤ºä¾
>h-card
h-card å¾®æ ¼å¼è¡¨ç¤ºä¸ä¸ªäººæç»ç»ã
æ¯ä¸ªå±æ§çå¼é½æ¯ä½¿ç¨ HTML ä¸çç±»å±æ§å®ä¹çï¼ä»»ä½å ç´ é½å¯ä»¥æºå¸¦ã
h-card 示ä¾
<p class="h-card">
<img class="u-photo" src="https://example.org/photo.png" alt="" />
<a class="p-name u-url" href="https://example.org">Joe Bloggs</a>
<a class="u-email" href="mailto:jbloggs@example.com">jbloggs@example.com</a>,
<span class="p-street-address">17 Austerstræti</span>
<span class="p-locality">ReykjavÃk</span>
<span class="p-country-name">Iceland</span>
</p>
| 屿§ | æè¿° |
|---|---|
p-name |
个人æç»ç»çå ¨å/æ ¼å¼ååç§° |
u-email |
çµåé®ä»¶å°å |
u-photo |
个人æç»ç»çç §ç |
u-url |
代表个人æç»ç»ç主页æå ¶ä» URL |
u-uid |
éç¨å¯ä¸æ è¯ç¬¦ï¼æå¥½æ¯è§è URL |
p-street-address |
è¡éå·ç + åç§° |
p-locality |
åå¸/åé/æåº |
p-country-name |
å½å®¶åç§° |
åµå¥ç h-card 示ä¾
<div class="h-card">
<a class="p-name u-url" href="https://blog.lizardwrangler.com/">
Mitchell Baker
</a>
(<a class="p-org h-card" href="https://mozilla.org/">Mozilla Foundation</a>)
</div>
è§£æåç JSONï¼
{
"items": [
{
"type": ["h-card"],
"properties": {
"name": ["Mitchell Baker"],
"url": ["https://blog.lizardwrangler.com/"],
"org": [
{
"value": "Mozilla Foundation",
"type": ["h-card"],
"properties": {
"name": ["Mozilla Foundation"],
"url": ["https://mozilla.org/"]
}
}
]
}
}
]
}
å¨è¿ä¸ªä¾åä¸ï¼h-card å嫿å®äºä¸ä¸ªäººåä»ä»¬ä»£è¡¨çç»ç»ãä½¿ç¨ p-org 屿§æå®äºä¸ªäººä¸é¾æ¥ç»ç»çå ³èã
注æï¼åµå¥ç h-card å
·æéå«çânameâåâurlâ屿§ï¼å°±åä»»ä½å
¶ä»ä»
æ ¹ç±»åç h-card å¨ <a href> ä¸ä¸æ ·ã
h-entry
h-entry å¾®æ ¼å¼è¡¨ç¤º web ä¸çåéæææ¶é´æ³çå 容ãh-entry é叏䏿ç®è¿è¡èåçå 容ä¸èµ·ä½¿ç¨ï¼ä¾å¦å客å¸ååç®çç¬è®°ã
示ä¾ï¼h-entry ä½ä¸ºå客å¸åï¼
<article class="h-entry">
<h1 class="p-name">Microformats are amazing</h1>
<p>
Published by
<a class="p-author h-card" href="https://example.com">W. Developer</a> on
<time class="dt-published" datetime="2013-06-13 12:00:00">
13<sup>th</sup> June 2013
</time>
</p>
<p class="p-summary">In which I extoll the virtues of using microformats.</p>
<div class="e-content">
<p>Blah blah blah</p>
</div>
</article>
屿§
| 屿§ | æè¿° |
|---|---|
p-name |
æ¡ç®çåç§°/æ é¢ |
p-author |
ç¼åæ¡ç®ç人ï¼å¯åµå ¥ h-card |
dt-published |
æ¡ç®åå¸çæ¶é´ |
p-summary |
æ¡ç®çç®çæè¦ |
e-content |
æ¡ç®ç宿´å 容 |
è§£æåçåå¤ h-entry 示ä¾
<div class="h-entry">
<p>
<span class="p-author h-card">
<a href="https://quickthoughts.jgregorymcverry.com/profile/jgmac1106">
<img
class="u-photo"
alt="Greg McVerry"
src="https://quickthoughts.jgregorymcverry.com/file/2d6c9cfed7ac8e849f492b5bc7e6a630/thumb.jpg" />
</a>
<a
class="p-name u-url"
href="https://quickthoughts.jgregorymcverry.com/profile/jgmac1106">
Greg McVerry
</a>
</span>
Replied to
<a
class="u-in-reply-to"
href="https://developer.mozilla.org/en-US/docs/Web/HTML/microformats">
a post on <strong>developer.mozilla.org</strong>
</a>
:
</p>
<p class="p-name e-content">
Hey thanks for making this microformats resource
</p>
<p>
<a href="https://quickthoughts.jgregorymcverry.com/profile/jgmac1106">
Greg McVerry
</a>
published this
<a
class="u-url url"
href="https://quickthoughts.jgregorymcverry.com/2019/05/31/hey-thanks-for-making-this-microformats-resource">
<time class="dt-published" datetime="2019-05-31T14:19:09+0000">
31 May 2019
</time>
</a>
</p>
</div>
{
"items": [
{
"type": ["h-entry"],
"properties": {
"in-reply-to": [
"https://developer.mozilla.org/en-US/docs/Web/HTML/microformats"
],
"name": ["Hey thanks for making this microformats resource"],
"url": [
"https://quickthoughts.jgregorymcverry.com/2019/05/31/hey-thanks-for-making-this-microformats-resource"
],
"published": ["2019-05-31T14:19:09+0000"],
"content": [
{
"html": "Hey thanks for making this microformats resource",
"value": "Hey thanks for making this microformats resource",
"lang": "en"
}
],
"author": [
{
"type": ["h-card"],
"properties": {
"name": ["Greg McVerry"],
"photo": [
"https://quickthoughts.jgregorymcverry.com/file/2d6c9cfed7ac8e849f492b5bc7e6a630/thumb.jpg"
],
"url": [
"https://quickthoughts.jgregorymcverry.com/profile/jgmac1106"
]
},
"lang": "en",
"value": "Greg McVerry"
}
]
},
"lang": "en"
}
]
}
h-feed
h-feed æ¯ h-entry å¸åçæµææ¶æ¯æ¥æºï¼å¦ä¸»é¡µæå档页é¢ä¸çææå¸åï¼ææè¦æå ¶ä»ç®çå¸åå表ã
ç¤ºä¾ h-feed
<div class="h-feed">
<h1 class="p-name">Microformats Blogs</h1>
<article class="h-entry">
<h2 class="p-name">Microformats are amazing</h2>
<p>
Published by
<a class="p-author h-card" href="https://example.com">W. Developer</a> on
<time class="dt-published" datetime="2013-06-13 12:00:00">
13<sup>th</sup> June 2013
</time>
</p>
<p class="p-summary">
In which I extoll the virtues of using microformats.
</p>
<div class="e-content"><p>Blah blah blah</p></div>
</article>
</div>
屿§
| 屿§ | æè¿° |
|---|---|
p-name |
æºçåç§° |
p-author |
æºçä½è ï¼å¯åµå ¥ h-card |
å级
| åµå¥ç h-entry | |
| è¡¨ç¤ºæ¶æ¯æ¥æºæ¡ç®ç对象 |
h-event
h-event ç¨äº web ä¸çäºä»¶ãh-event é常ç¨äºæ´»å¨å表åå个活å¨é¡µé¢ã
<div class="h-event">
<h1 class="p-name">Microformats Meetup</h1>
<p>
From
<time class="dt-start" datetime="2013-06-30 12:00">
30<sup>th</sup> June 2013, 12:00
</time>
to <time class="dt-end" datetime="2013-06-30 18:00">18:00</time> at
<span class="p-location">Some bar in SF</span>
</p>
<p class="p-summary">
Get together and discuss all things microformats-related.
</p>
</div>
屿§
| 屿§ | æè¿° |
|---|---|
p-name |
äºä»¶åç§°ï¼ææ é¢ï¼ |
p-summary |
äºä»¶çç®çæè¦ |
dt-start |
äºä»¶å¼å§çæ¶é´ |
dt-end |
äºä»¶ç»æçæ¶é´ |
p-location |
äºä»¶åçå°ç¹ï¼å¯åµå ¥ h-card |
è§£æåç h-event 示ä¾
<div class="h-event">
<h2 class="p-name">IndieWeb Summit</h2>
<time class="dt-start" datetime="2019-06-29T09:00:00-07:00">
June 29, 2019 at 9:00am (-0700)
</time>
<br />through
<time class="dt-end" datetime="2019-06-30T18:00:00-07:00">
June 30, 2019 at 6:00pm (-0700)
</time>
<br />
<div class="p-location h-card">
<div>
<span class="p-name">Mozilla</span>
</div>
<div>
<span class="p-street-address">1120 NW Couch St</span>,
<span class="p-locality">Portland</span>,
<span class="p-region">Oregon</span>,
<span class="p-country">US</span>
</div>
<data class="p-latitude" value="45.52345"></data>
<data class="p-longitude" value="-122.682677"></data>
</div>
<div class="e-content">Come join us</div>
<div>
<span class="p-author h-card">
<a class="u-url p-name" href="https://aaronparecki.com">Aaron Parecki</a>
</span>
Published this
<a href="https://aaronparecki.com/2019/06/29/1/" class="u-url">event </a>on
<time class="dt published" datetime="2019-05-25T18:00:00-07:00">
May 5th, 2019
</time>
</div>
</div>
{
"items": [
{
"type": ["h-event"],
"properties": {
"name": ["IndieWeb Summit"],
"url": ["https://aaronparecki.com/2019/06/29/1/"],
"author": [
{
"type": ["h-card"],
"properties": {
"name": ["Aaron Parecki"],
"url": ["https://aaronparecki.com"]
},
"lang": "en",
"value": "Aaron Parecki"
}
],
"start": ["2019-06-29T09:00:00-07:00"],
"end": ["2019-06-30T18:00:00-07:00"],
"published": ["2019-05-25T18:00:00-07:00"],
"content": [
{
"html": "Come join us",
"value": "Come join us",
"lang": "en"
}
],
"location": [
{
"type": ["h-card"],
"properties": {
"name": ["Mozilla"],
"p-street-address": ["1120 NW Couch St"],
"locality": ["Portland"],
"region": ["Oregon"],
"country": ["US"],
"latitude": ["45.52345"],
"longitude": ["-122.682677"]
},
"lang": "en",
"value": "Mozilla"
}
]
},
"lang": "en"
}
]
}
å¾®æ ¼å¼ rel 屿§ç¤ºä¾
æä¸äºå¾®æ ¼å¼æ¯éè¿ä½¿ç¨ç¹æ®ç rel= 屿§åºç¨äºé¡µé¢çãè¿äºå¾®æ ¼å¼æè¿°äºå½åææ¡£å龿¥ææ¡£ä¹é´çå
³ç³»ãè¦è·å¾å®æ´çå表ï¼è¯·åé
å¾®æ ¼å¼ç»´åºä¸ç rel 屿§ã
rel=author
æ¤å±æ§å£°æé¾æ¥çææ¡£ä»£è¡¨å½å页é¢çä½è ã
<a rel="author" href="https://jamesg.blog">James Gallagher</a>
rel=license
æ¤å±æ§å£°æé¾æ¥çææ¡£å å«åå¸å½å页颿便®ç许å¯è¯ã
<a rel="license" href="https://mit-license.org/">MIT License</a>
rel=nofollow
è¯¥å±æ§å£°æé¾æ¥çææ¡£ä¸åºè¯¥è¢«æç´¢å¼ææåç®æ³èµäºä»»ä½æéï¼è¿äºç®æ³å¯è½æ¥èªå½å页é¢ãè¿æå©äºé²æ¢é¾æ¥å¾ç®æ³å¨çå°æåææ¡£ç龿¥å对页é¢çæéé«äºå ¶ä»æ åµã
<a rel="nofollow" href="https://jamesg.blog">James Gallagher</a>
æµè§å¨å ¼å®¹æ§
æææµè§å¨é½æ¯æ class 屿§åå ¶ DOM APIã
åè§
- ç±»å±æ§
- ç»´åºç¾ç§ä¸çå¾®æ ¼å¼
- å¾®æ ¼å¼å®ç½
- å¾®æ ¼å¼å®ç½ä¸çæç´¢å¼ææ¯æ
- IndieWebCamp ä¸çå¾®æ ¼å¼