A place to cache linked articles (think custom and personal wayback machine)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

index.html 37KB

5 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029
  1. <!doctype html><!-- This is a valid HTML5 document. -->
  2. <!-- Screen readers, SEO, extensions and so on. -->
  3. <html lang=fr>
  4. <!-- Has to be within the first 1024 bytes, hence before the <title>
  5. See: https://www.w3.org/TR/2012/CR-html5-20121217/document-metadata.html#charset -->
  6. <meta charset=utf-8>
  7. <!-- Why no `X-UA-Compatible` meta: https://stackoverflow.com/a/6771584 -->
  8. <!-- The viewport meta is quite crowded and we are responsible for that.
  9. See: https://codepen.io/tigt/post/meta-viewport-for-2015 -->
  10. <meta name=viewport content="width=device-width,minimum-scale=1,initial-scale=1,shrink-to-fit=no">
  11. <!-- Required to make a valid HTML5 document. -->
  12. <title>Linked Data - Design Issues (archive) — David Larlet</title>
  13. <!-- Generated from https://realfavicongenerator.net/ such a mess. -->
  14. <link rel="apple-touch-icon" sizes="180x180" href="/static/david/icons/apple-touch-icon.png">
  15. <link rel="icon" type="image/png" sizes="32x32" href="/static/david/icons/favicon-32x32.png">
  16. <link rel="icon" type="image/png" sizes="16x16" href="/static/david/icons/favicon-16x16.png">
  17. <link rel="manifest" href="/manifest.json">
  18. <link rel="mask-icon" href="/static/david/icons/safari-pinned-tab.svg" color="#5bbad5">
  19. <link rel="shortcut icon" href="/static/david/icons/favicon.ico">
  20. <meta name="apple-mobile-web-app-title" content="David Larlet">
  21. <meta name="application-name" content="David Larlet">
  22. <meta name="msapplication-TileColor" content="#da532c">
  23. <meta name="msapplication-config" content="/static/david/icons/browserconfig.xml">
  24. <meta name="theme-color" content="#f0f0ea">
  25. <!-- That good ol' feed, subscribe :p. -->
  26. <link rel=alternate type="application/atom+xml" title=Feed href="/david/log/">
  27. <meta name="robots" content="noindex, nofollow">
  28. <meta content="origin-when-cross-origin" name="referrer">
  29. <!-- Canonical URL for SEO purposes -->
  30. <link rel="canonical" href="https://www.w3.org/DesignIssues/LinkedData.html">
  31. <style>
  32. /* http://meyerweb.com/eric/tools/css/reset/ */
  33. html, body, div, span,
  34. h1, h2, h3, h4, h5, h6, p, blockquote, pre,
  35. a, abbr, address, big, cite, code,
  36. del, dfn, em, img, ins,
  37. small, strike, strong, tt, var,
  38. dl, dt, dd, ol, ul, li,
  39. fieldset, form, label, legend,
  40. table, caption, tbody, tfoot, thead, tr, th, td,
  41. article, aside, canvas, details, embed,
  42. figure, figcaption, footer, header, hgroup,
  43. menu, nav, output, ruby, section, summary,
  44. time, mark, audio, video {
  45. margin: 0;
  46. padding: 0;
  47. border: 0;
  48. font-size: 100%;
  49. font: inherit;
  50. vertical-align: baseline;
  51. }
  52. /* HTML5 display-role reset for older browsers */
  53. article, aside, details, figcaption, figure,
  54. footer, header, hgroup, menu, nav, section { display: block; }
  55. body { line-height: 1; }
  56. blockquote, q { quotes: none; }
  57. blockquote:before, blockquote:after,
  58. q:before, q:after {
  59. content: '';
  60. content: none;
  61. }
  62. table {
  63. border-collapse: collapse;
  64. border-spacing: 0;
  65. }
  66. /* http://practicaltypography.com/equity.html */
  67. /* https://calendar.perfplanet.com/2016/no-font-face-bulletproof-syntax/ */
  68. /* https://www.filamentgroup.com/lab/js-web-fonts.html */
  69. @font-face {
  70. font-family: 'EquityTextB';
  71. src: url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff2') format('woff2'),
  72. url('/static/david/css/fonts/Equity-Text-B-Regular-webfont.woff') format('woff');
  73. font-weight: 300;
  74. font-style: normal;
  75. font-display: swap;
  76. }
  77. @font-face {
  78. font-family: 'EquityTextB';
  79. src: url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff2') format('woff2'),
  80. url('/static/david/css/fonts/Equity-Text-B-Italic-webfont.woff') format('woff');
  81. font-weight: 300;
  82. font-style: italic;
  83. font-display: swap;
  84. }
  85. @font-face {
  86. font-family: 'EquityTextB';
  87. src: url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff2') format('woff2'),
  88. url('/static/david/css/fonts/Equity-Text-B-Bold-webfont.woff') format('woff');
  89. font-weight: 700;
  90. font-style: normal;
  91. font-display: swap;
  92. }
  93. @font-face {
  94. font-family: 'ConcourseT3';
  95. src: url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff2') format('woff2'),
  96. url('/static/david/css/fonts/concourse_t3_regular-webfont-20190806.woff') format('woff');
  97. font-weight: 300;
  98. font-style: normal;
  99. font-display: swap;
  100. }
  101. /* http://practice.typekit.com/lesson/caring-about-opentype-features/ */
  102. body {
  103. /* http://www.cssfontstack.com/ Palatino 99% Win 86% Mac */
  104. font-family: "EquityTextB", Palatino, serif;
  105. background-color: #f0f0ea;
  106. color: #07486c;
  107. font-kerning: normal;
  108. -moz-osx-font-smoothing: grayscale;
  109. -webkit-font-smoothing: subpixel-antialiased;
  110. text-rendering: optimizeLegibility;
  111. font-variant-ligatures: common-ligatures contextual;
  112. font-feature-settings: "kern", "liga", "clig", "calt";
  113. }
  114. pre, code, kbd, samp, var, tt {
  115. font-family: 'TriplicateT4c', monospace;
  116. }
  117. em {
  118. font-style: italic;
  119. color: #323a45;
  120. }
  121. strong {
  122. font-weight: bold;
  123. color: black;
  124. }
  125. nav {
  126. background-color: #323a45;
  127. color: #f0f0ea;
  128. display: flex;
  129. justify-content: space-around;
  130. padding: 1rem .5rem;
  131. }
  132. nav:last-child {
  133. border-bottom: 1vh solid #2d7474;
  134. }
  135. nav a {
  136. color: #f0f0ea;
  137. }
  138. nav abbr {
  139. border-bottom: 1px dotted white;
  140. }
  141. h1 {
  142. border-top: 1vh solid #2d7474;
  143. border-bottom: .2vh dotted #2d7474;
  144. background-color: #e3e1e1;
  145. color: #323a45;
  146. text-align: center;
  147. padding: 5rem 0 4rem 0;
  148. width: 100%;
  149. font-family: 'ConcourseT3';
  150. display: flex;
  151. flex-direction: column;
  152. }
  153. h1.single {
  154. padding-bottom: 10rem;
  155. }
  156. h1 span {
  157. position: absolute;
  158. top: 1vh;
  159. left: 20%;
  160. line-height: 0;
  161. }
  162. h1 span a {
  163. line-height: 1.7;
  164. padding: 1rem 1.2rem .6rem 1.2rem;
  165. border-radius: 0 0 6% 6%;
  166. background: #2d7474;
  167. font-size: 1.3rem;
  168. color: white;
  169. text-decoration: none;
  170. }
  171. h2 {
  172. margin: 4rem 0 1rem;
  173. border-top: .2vh solid #2d7474;
  174. padding-top: 1vh;
  175. }
  176. h3 {
  177. text-align: center;
  178. margin: 3rem 0 .75em;
  179. }
  180. hr {
  181. height: .4rem;
  182. width: .4rem;
  183. border-radius: .4rem;
  184. background: #07486c;
  185. margin: 2.5rem auto;
  186. }
  187. time {
  188. display: bloc;
  189. margin-left: 0 !important;
  190. }
  191. ul, ol {
  192. margin: 2rem;
  193. }
  194. ul {
  195. list-style-type: square;
  196. }
  197. a {
  198. text-decoration-skip-ink: auto;
  199. text-decoration-thickness: 0.05em;
  200. text-underline-offset: 0.09em;
  201. }
  202. article {
  203. max-width: 50rem;
  204. display: flex;
  205. flex-direction: column;
  206. margin: 2rem auto;
  207. }
  208. article.single {
  209. border-top: .2vh dotted #2d7474;
  210. margin: -6rem auto 1rem auto;
  211. background: #f0f0ea;
  212. padding: 2rem;
  213. }
  214. article p:last-child {
  215. margin-bottom: 1rem;
  216. }
  217. p {
  218. padding: 0 .5rem;
  219. margin-left: 3rem;
  220. }
  221. p + p,
  222. figure + p {
  223. margin-top: 2rem;
  224. }
  225. blockquote {
  226. background-color: #e3e1e1;
  227. border-left: .5vw solid #2d7474;
  228. display: flex;
  229. flex-direction: column;
  230. align-items: center;
  231. padding: 1rem;
  232. margin: 1.5rem;
  233. }
  234. blockquote cite {
  235. font-style: italic;
  236. }
  237. blockquote p {
  238. margin-left: 0;
  239. }
  240. figure {
  241. border-top: .2vh solid #2d7474;
  242. background-color: #e3e1e1;
  243. text-align: center;
  244. padding: 1.5rem 0;
  245. margin: 1rem 0 0;
  246. font-size: 1.5rem;
  247. width: 100%;
  248. }
  249. figure img {
  250. max-width: 250px;
  251. max-height: 250px;
  252. border: .5vw solid #323a45;
  253. padding: 1px;
  254. }
  255. figcaption {
  256. padding: 1rem;
  257. line-height: 1.4;
  258. }
  259. aside {
  260. display: flex;
  261. flex-direction: column;
  262. background-color: #e3e1e1;
  263. padding: 1rem 0;
  264. border-bottom: .2vh solid #07486c;
  265. }
  266. aside p {
  267. max-width: 50rem;
  268. margin: 0 auto;
  269. }
  270. /* https://fvsch.com/code/css-locks/ */
  271. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  272. font-size: 1rem;
  273. line-height: calc( 1.5em + 0.2 * 1rem );
  274. }
  275. h1 {
  276. font-size: 1.9rem;
  277. line-height: calc( 1.2em + 0.2 * 1rem );
  278. }
  279. h2 {
  280. font-size: 1.6rem;
  281. line-height: calc( 1.3em + 0.2 * 1rem );
  282. }
  283. h3 {
  284. font-size: 1.35rem;
  285. line-height: calc( 1.4em + 0.2 * 1rem );
  286. }
  287. @media (min-width: 20em) {
  288. /* The (100vw - 20rem) / (50 - 20) part
  289. resolves to 0-1rem, depending on the
  290. viewport width (between 20em and 50em). */
  291. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  292. font-size: calc( 1rem + .6 * (100vw - 20rem) / (50 - 20) );
  293. line-height: calc( 1.5em + 0.2 * (100vw - 50rem) / (20 - 50) );
  294. margin-left: 0;
  295. }
  296. h1 {
  297. font-size: calc( 1.9rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  298. line-height: calc( 1.2em + 0.2 * (100vw - 50rem) / (20 - 50) );
  299. }
  300. h2 {
  301. font-size: calc( 1.5rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  302. line-height: calc( 1.3em + 0.2 * (100vw - 50rem) / (20 - 50) );
  303. }
  304. h3 {
  305. font-size: calc( 1.35rem + 1.5 * (100vw - 20rem) / (50 - 20) );
  306. line-height: calc( 1.4em + 0.2 * (100vw - 50rem) / (20 - 50) );
  307. }
  308. }
  309. @media (min-width: 50em) {
  310. /* The right part of the addition *must* be a
  311. rem value. In this example we *could* change
  312. the whole declaration to font-size:2.5rem,
  313. but if our baseline value was not expressed
  314. in rem we would have to use calc. */
  315. p, li, pre, code, kbd, samp, var, tt, time, details, figcaption {
  316. font-size: calc( 1rem + .6 * 1rem );
  317. line-height: 1.5em;
  318. }
  319. p, li, pre, details {
  320. margin-left: 3rem;
  321. }
  322. h1 {
  323. font-size: calc( 1.9rem + 1.5 * 1rem );
  324. line-height: 1.2em;
  325. }
  326. h2 {
  327. font-size: calc( 1.5rem + 1.5 * 1rem );
  328. line-height: 1.3em;
  329. }
  330. h3 {
  331. font-size: calc( 1.35rem + 1.5 * 1rem );
  332. line-height: 1.4em;
  333. }
  334. figure img {
  335. max-width: 500px;
  336. max-height: 500px;
  337. }
  338. }
  339. figure.unsquared {
  340. margin-bottom: 1.5rem;
  341. }
  342. figure.unsquared img {
  343. height: inherit;
  344. }
  345. @media print {
  346. body { font-size: 100%; }
  347. a:after { content: " (" attr(href) ")"; }
  348. a, a:link, a:visited, a:after {
  349. text-decoration: underline;
  350. text-shadow: none !important;
  351. background-image: none !important;
  352. background: white;
  353. color: black;
  354. }
  355. abbr[title] { border-bottom: 0; }
  356. abbr[title]:after { content: " (" attr(title) ")"; }
  357. img { page-break-inside: avoid; }
  358. @page { margin: 2cm .5cm; }
  359. h1, h2, h3 { page-break-after: avoid; }
  360. p3 { orphans: 3; widows: 3; }
  361. img {
  362. max-width: 250px !important;
  363. max-height: 250px !important;
  364. }
  365. nav, aside { display: none; }
  366. }
  367. ul.with_columns {
  368. column-count: 1;
  369. }
  370. @media (min-width: 20em) {
  371. ul.with_columns {
  372. column-count: 2;
  373. }
  374. }
  375. @media (min-width: 50em) {
  376. ul.with_columns {
  377. column-count: 3;
  378. }
  379. }
  380. ul.with_two_columns {
  381. column-count: 1;
  382. }
  383. @media (min-width: 20em) {
  384. ul.with_two_columns {
  385. column-count: 1;
  386. }
  387. }
  388. @media (min-width: 50em) {
  389. ul.with_two_columns {
  390. column-count: 2;
  391. }
  392. }
  393. .gallery {
  394. display: flex;
  395. flex-wrap: wrap;
  396. justify-content: space-around;
  397. }
  398. .gallery figure img {
  399. margin-left: 1rem;
  400. margin-right: 1rem;
  401. }
  402. .gallery figure figcaption {
  403. font-family: 'ConcourseT3'
  404. }
  405. footer {
  406. font-family: 'ConcourseT3';
  407. display: flex;
  408. flex-direction: column;
  409. border-top: 3px solid white;
  410. padding: 4rem 0;
  411. background-color: #07486c;
  412. color: white;
  413. }
  414. footer > * {
  415. max-width: 50rem;
  416. margin: 0 auto;
  417. }
  418. footer a {
  419. color: #f1c40f;
  420. }
  421. footer .avatar {
  422. width: 200px;
  423. height: 200px;
  424. border-radius: 50%;
  425. float: left;
  426. -webkit-shape-outside: circle();
  427. shape-outside: circle();
  428. margin-right: 2rem;
  429. padding: 2px 5px 5px 2px;
  430. background: white;
  431. border-left: 1px solid #f1c40f;
  432. border-top: 1px solid #f1c40f;
  433. border-right: 5px solid #f1c40f;
  434. border-bottom: 5px solid #f1c40f;
  435. }
  436. </style>
  437. <h1>
  438. <span><a id="jumper" href="#jumpto" title="Un peu perdu ?">?</a></span>
  439. Linked Data - Design Issues (archive)
  440. <time>Pour la pérennité des contenus liés. Non-indexé, retrait sur simple email.</time>
  441. </h1>
  442. <section>
  443. <article>
  444. <h3><a href="https://www.w3.org/DesignIssues/LinkedData.html">Source originale du contenu</a></h3>
  445. <p><a href="http://www.cafepress.com/w3c_shop"><img alt="Get a 5* mug" border="none" src="https://www.w3.org/DesignIssues/diagrams/lod/597992118v2_350x350_Back.jpg" align="right"/></a></p>
  446. <h1>Linked Data</h1>
  447. <p>The Semantic Web isn't just about putting data on the web. It
  448. is about making links, so that a person or machine can explore
  449. the web of data.  With linked data, when you have some of
  450. it, you can find other, related, data.</p>
  451. <p>Like the web of hypertext, the web of data is constructed with
  452. documents on the web. However,  unlike the web of hypertext,
  453.  where links are relationships anchors in
  454. hypertext documents written in <small>HTML</small>, for data they
  455. links  between arbitrary things described by
  456. <small>RDF</small>,.  The <small>URI</small>s identify any
  457. kind of object or  concept.   But for
  458. <small>HTML</small> or <small>RDF</small>, the same expectations
  459. apply to make the web grow:</p>
  460. <ol>
  461. <li>
  462. <p>Use <small>URI</small>s as names for things</p>
  463. </li>
  464. <li>
  465. <p>Use <small>HTTP</small> <small>URI</small>s so that people
  466. can look up those names.</p>
  467. </li>
  468. <li>
  469. <p>When someone looks up a <small>URI</small>, provide useful
  470. information, using the standards (RDF*, SPARQL)</p>
  471. </li>
  472. <li>
  473. <p>Include links to other <small>URIs</small>. so that they
  474. can discover more things.</p>
  475. </li>
  476. </ol>
  477. <p>Simple.  In fact, though, a surprising amount of data
  478. isn't linked in 2006, because of problems with one or more of the
  479. steps.  This article discusses solutions to these problems,
  480. details of implementation, and factors affecting choices about
  481. how you publish your data.</p>
  482. <h2>The four rules</h2>
  483. <p>I'll refer to the steps above as rules, but they are
  484. expectations of behavior.  Breaking them does not destroy
  485. anything, but misses an opportunity to make  data
  486. interconnected.  This in turn limits the ways it can later
  487. be reused in unexpected ways.  It is the unexpected re-use
  488. of information which is the value added by the web.</p>
  489. <p>The first rule, to identify things with
  490. <small>URI</small>s,  is pretty much understood by most
  491. people doing semantic web technology.  If it doesn't use the
  492. universal <small>URI</small> set of symbols, we don't call it
  493. Semantic Web.<br/>
  494. <br/>
  495. The second rule, to use <small>HTTP</small>
  496. <small>URI</small>s,  is also widely understood.  The
  497. only deviation has been, since the web started,  a constant
  498. tendency for people to invent new <small>URI</small> schemes (and
  499. sub-schemes within the <span>urn:</span> scheme)  such as
  500. <small>LSID</small>s and handles and <small>XRI</small>s and
  501. <small>DOI</small>s and so on, for various reasons.
  502.  Typically, these involve not wanting to commit to the
  503. established Domain Name System (<small>DNS</small>) for
  504. delegation of authority but to construct something under separate
  505. control.   Sometimes it has to do with not understanding
  506. that <small>HTTP</small> <small>URI</small>s are names (not
  507. addresses) and that <small>HTTP</small> name lookup is a complex,
  508. powerful and evolving set of standards. This issue discussed at
  509. length elsewhere, and time does not allow us to delve into it
  510. here. [ @@ref TAG finding, etc])</p>
  511. <p>The third rule, that one should serve information on the web
  512. against a <small>URI</small>, is, in 2006, well followed for most
  513. ontologies, but, for some reason, not for some major datasets.
  514.  One can,  in general,  look up the properties and
  515. classes one finds in data, and get information from the
  516. <small>RDF</small>, <small>RDFS</small>, and <small>OWL</small>
  517. ontologies including the relationships between the terms in the
  518. ontology.</p>
  519. <p>The basic format here for RDF/XML, with its popular
  520. alternative serialization N3 (or Turtle). Large datasets provide
  521. a SPARQL query service, but the basic linked data should br
  522. provided as well.</p>
  523. <p>Many research and evaluation projects in the few years of the
  524. Semantic Web technologies produced ontologies, and significant
  525. data stores, but the data, if available at all, is buried in a
  526. zip archive somewhere, rather than being accessible on the web as
  527. linked data.  The Biopax project, the CSAktive data on
  528. computer science research people and projects were two examples.
  529. [The CSAktive data is now (2007) available as linked data]</p>
  530. <p>There is also a large and increasing amount of
  531. <small>URI</small>s of non-ontology data which can be looked up.
  532.  <a href="http://ontoworld.org/wiki/Semantic_wiki">Semantic
  533. wikis</a> are one example. The "Friend of a friend"
  534. (<small>FOAF</small>) and <span>Description of a Project</span>
  535. (<small>DOAP</small>) ontologies are used to build social
  536. networks across the web.    Typical <a href="http://en.wikipedia.org/wiki/List_of_social_networking_websites">
  537. social network portals</a> do not provide links to other sites,
  538. nor expose their data in a standard form.</p>
  539. <p>LiveJournal and Opera Community are two portal web sites which
  540. do in fact publish their data in <small>RDF</small> on the web.
  541.   (Plaxo has a trail scheme, and I'm not sure
  542. whether they support <span>knows</span> links). This means that I can
  543. write in my <small>FOAF</small> file that I know Håkon Lie by
  544. using his <small>URI</small> in the Opera Community data, and a
  545. person or machine browsing that data can then follow that link
  546. and find all his friends. <i>[Update:]</i> Also, the Opera
  547. Community site allows you to register the RDF URI for yourelf on
  548. another site. This means that public data about you from
  549. different sites can be linked together into one web, and a person
  550. or machine starting with your Opera identity can find the others.
  551. </p>
  552. <p>The fourth rule, to make links elsewhere,  is necessary
  553. to connect the data we have into a web, a serious, unbounded web
  554. in which one can find al kinds of things,  just as on the
  555. hypertext web we have managed to build.</p>
  556. <p>In hypertext web sites it is considered generally rather bad
  557. etiquette not to link to related external material.  The
  558. value of your own information is very much a function of what it
  559. links to, as well as the inherent value of the information within
  560. the web page.  So it is also in the Semantic Web.</p>
  561. <p>So let's look at the ways of linking data, starting with the
  562. simplest way of making a link.</p>
  563. <h3>Basic web look-up</h3>
  564. <p>The simplest way to make linked data is to use, in one file, a
  565. <small>URI</small> which points into another.</p>
  566. <p>When you write an <small>RDF</small> file,   say
  567. &lt;http://example.org/smith&gt;, then you can use local
  568. identifiers within the file, say  #albert, #brian and
  569. #carol.  In N3 you might say</p>
  570. <pre>
  571. &lt;#albert&gt; fam:child &lt;#brian&gt;, &lt;#carol&gt;.
  572. </pre>
  573. <p>or in <small>RDF/XML</small></p>
  574. <pre>
  575. &lt;rdf:Description about="#albert"<br/> &lt;fam:child rdf:Resource="#brian"&gt;<br/> &lt;fam:child rdf:Resource="#carol"&gt;<br/>&lt;/rdf:Description&gt;
  576. </pre>
  577. <p>The <small>WWW</small> architecture now gives a global
  578. identifier  "http://example.org/smith#albert" to Albert.
  579.  This is a valuable thing to do, as anyone on the planet can
  580. now use that global identifier to refer to Albert and give more
  581. information. </p>
  582. <p>For example, in the
  583. document &lt;http://example.org/jones&gt; someone might
  584. write:</p>
  585. <pre>
  586. &lt;#denise&gt; fam:child &lt;#edwin&gt;, &lt;smith#carol&gt;.
  587. </pre>
  588. <p>or in <small>RDF/XML</small></p>
  589. <pre>
  590. &lt;rdf:Description about="#denise"<br/> &lt;fam:child rdf:Resource="#edwin"&gt;<br/> &lt;fam:child rdf:Resource="http://example.org/smith#carol"&gt;<br/>&lt;/rdf:Description&gt;
  591. </pre>
  592. <p><br/>
  593. Clearly it is reasonable for anyone who comes across the
  594. identifier 'http://example.org/smith#carol" to:</p>
  595. <ol>
  596. <li>Form the <small>URI</small> of the document by truncating
  597. before the hash</li>
  598. <li>Access the document to obtain information about #carol</li>
  599. </ol>
  600. <p>We call this dereferencing the <small>URI</small>.  This
  601. is basic semantic web. </p>
  602. <p>There are several variations.</p>
  603. <h3>Variation: URIs without Slashes and HTTP 303</h3>
  604. <p>There are some circumstances in which dividing identifiers
  605. into documents doesn't work very well.   There may logically
  606. be one global symbol per document per document, and there is a
  607. reluctance to include a # in the <small>URI</small> such
  608. as </p>
  609. <p>
  610. http://wordnet.example.net/antidisesablishmentarianism#word</p>
  611. <p>Historically,
  612. the early Dublin Core and <small>FOAF</small> vocabularies did
  613. not have # in their URIs.   In any event when
  614. <small>HTTP</small> <small>URI</small>s without hashes are used
  615. for abstract concepts, and there is a document that carries
  616. information about them, then:<br/></p>
  617. <ol>
  618. <li>An <small>HTTP</small> <small>GET</small>  request on
  619. the <small>URI</small> of the concept returns <span>303 See Also</span> and gives in the
  620. Location: header, the <small>URI</small> of the
  621. document.  </li>
  622. <li>The document is retrieved as normal</li>
  623. </ol>
  624. <p>This method has the advantage that <small>URI</small>s can be
  625. made up of all forms.  It has the disadvantage that an
  626. <small>HTTP</small> request mBrowse-ableust be made for every
  627. single one.  In the case of Dublin Core, for example,
  628. dc:title and dc:creator etc are in fact served by the same
  629. ontology document, but  one does not know until they have
  630. each been fetched and returned HTTP redirections.</p>
  631. <h3>Variation: FOAF and rdfs:seeAlso</h3>
  632. <p>The <a href="http://foaf-project.org/">Friend-Of-A-Friend</a> convention
  633. uses a form of data link, but  not using either of the two
  634. forms mentioned above.  To refer to another person in a
  635. <small>FOAF</small> file, the convention was to give two
  636. properties, one pointing to the document they are described in,
  637. and the other for identifying them within that document.</p>
  638. <pre>
  639. &lt;#i&gt; foaf:knows [<br/> foaf:mbox &lt;mailto:joe@example.com&gt;;<br/> rdfs:seeAlso &lt;http://example.com/foaf/joe&gt; ].
  640. </pre>
  641. <p>Read, "I know that which has email  joe@example.com and
  642. about which more information is in
  643. &lt;http://example.com/foafjoe&gt;".</p>
  644. <p>In fact, for privacy, often people don't put their email
  645. addresses on the web directly, but in fact put a one-way hash
  646. (<small>SHA-1</small>) of their email address and give that. This
  647. clever trick allows people who know their email address already
  648. to work out that it is the same person, without giving the email
  649. away to others.</p>
  650. <pre>
  651. &lt;#i&gt; foaf:knows [<br/> foaf:mbox_sha1sum "2738167846123764823647"; # @@ dummy<br/> rdfs:seeAslo &lt;http://example.com/foaf/joe&gt; ].
  652. </pre>
  653. <p>This linking system was very successful, forming a
  654.  growing social network, and dominating, in 2006, the linked
  655. data available on the web.</p>
  656. <p>However, the system has the snag that it does not give
  657. <small>URI</small>s to people, and so basic links to them cannot
  658. be made.</p>
  659. <p>I  recommend (e.g in weblogs on <a href="http://dig.csail.mit.edu/breadcrumbs/node/62">Links on the
  660. Semantic Web</a> , <a href="http://dig.csail.mit.edu/breadcrumbs/node/71">Give yourself a
  661. URI</a>, and and <a href="http://dig.csail.mit.edu/breadcrumbs/node/72">Backward and
  662. Forward links in RDF just as important</a>) that those making a
  663. <small>FOAF</small> file give themselves a <small>URI</small> as
  664. well as using the <small>FOAF</small> convention.   
  665.  Similarly, when you refer to a <small>FOAF</small>
  666.  file which gives  a <small>URI</small> to a person,
  667. use it in your reference to that person, so that clients which
  668. just use <small>URI</small>s and don't know about the
  669. <small>FOAF</small> convention can follow the link.</p>
  670. <p>So now we have looked at ways of making a link,
  671. let's look at the  choices of when to make a link.<br/></p>
  672. <p>One important pattern is a set of data which you can explore
  673. as you go link by link by fetching data.   Whenever one
  674. looks up the URI for a node in the RDF graph, the server returns
  675. information about the arcs out of that node, and the arcs in.
  676.  In other words, it returns any RDF statements in which the
  677. term appears as either subject or object.</p>
  678. <p>Formally,  call a graph G <span>browsable</span> if, for  the URI of
  679. any node in G, if I look up that URI I will be returned
  680. information which describes the node, where describing a node
  681. means:</p>
  682. <ol>
  683. <li>Returning all statements where the node is a subject or
  684. object; and</li>
  685. <li>Describing all blank nodes attached to the node by one
  686. arc.</li>
  687. </ol>
  688. <p><br/></p>
  689. <p class="detail">(The subgraph returned has been referred to as
  690. "minimum Spanning Graph (MSG [@@ref] ) or  RDF molecule
  691. [@@ref], depending on whether nodes are considered identified if
  692. they can be expressed as a path of function, or reverse inverse
  693. functional properties. A concise bounded description, which only
  694. follows links from subject to object,  does not work.)</p>
  695. <p>In practice, when data is stored in two documents, this means
  696. that any <small>RDF</small> statements which relate things in the
  697. two files must be repeated in each.  So, for example, in my
  698. <small>FOAF</small> page I mention that I am a member of the
  699. <small>DIG</small> group, and that information is repeated on the
  700. <small>DIG</small> group data. Thus, someone starting from the
  701. concept of the group can also find out that I am a member.
  702.  In fact, someone who starts off with my <small>URI</small>
  703. can find all the people who are in the same group.</p>
  704. <h3>Limitations on browseable data</h3>
  705. <p>So statements which relate things in the two documents must be
  706. repeated in each. This clearly is against the first rule of data
  707. storage: don't store the same data in two different places: you
  708. will have problems keeping it consistent.  This is indeed an
  709. issue with browsable data.   A set of  of completely
  710. browsable data with links in both directions has to be completely
  711. consistent, and that takes coordination, especially if different
  712. authors or different programs are involved.</p>
  713. <p>We can have completely browsable data, however, where it is
  714. automatically generated.  The <a href="http://dig.csail.mit.edu/2006/dbview/dbview.py">dbview</a>
  715.  server, for example,  provides a browsable virtual
  716.  documents containing the data from any arbitrary relational
  717. database.</p>
  718. <p>When we have a data from multiple sources, then we have
  719. compromises.  These are often settled by common sense,
  720. asking the question,</p>
  721. <blockquote>
  722. <p>"If someone has the URI of that thing, what relationships to
  723. what other objects is it useful to know about?"</p>
  724. </blockquote>
  725. <p>Sometimes, social questions  determine the answer.
  726.  I have links in my <small>FOAF</small> file that I know
  727. various people.  They don't generally repeat that
  728. information in their <small>FOAF</small> files. Someone may say
  729. that they know me, which is an assertion which, in the
  730. <small>FOAF</small> convention, is theirs to assert, and the
  731. reader's to trust or not.  </p>
  732. <p>Other times, the number of arcs makes it impractical.   A
  733. <small>GPS</small> track gives thousands of times at which my
  734. latitude, longitude are known. Every person loading my
  735. <small>FOAF</small> file can expect to get my business card
  736. information, but not all those trackpoints. It is reasonable to
  737. have a pointer from the track (or even each point) to the person
  738. whose position is represented, but not the other way. </p>
  739. <p>One pattern is to have links of a certain property in a
  740. separate document.   A person's homepage doesn't list all
  741. their publications, but instead puts a link to it a separate
  742. document listing them.  There is an understanding
  743. that <span>foaf:made</span>
  744. gives a work of some sort, but <span>foaf:pubs</span> points to a document
  745. giving a list of works.  Thus, someone searching for
  746. something <span>foaf:made</span>
  747. link would do well to follow a <span>foaf:pubs</span> link.  It might
  748. be useful to formalize the notion with a statement like</p>
  749. <pre>
  750. foaf:made link:listDocumentProperty foaf:pubs.
  751. </pre>
  752. <p>in one of the ontologies.</p>
  753. <h3>Query services</h3>
  754. <p>Sometimes the sheer volume of data makes serving it as lots of
  755. files possible, but cumbersome for efficient remote queries over
  756. the dataset.  In this case, it seems reasonable to provide a
  757. <small>SPARQL</small> query service.  To make the data be
  758. effectively linked, someone who only has the
  759.  <small>URI</small> of something must be able to find their
  760. way the <small>SPARQL</small> endpoint. </p>
  761. <p>Here again the <small>HTTP</small> 303 response can be used,
  762. to refer the enquirer to a document with metadata about which
  763. query service endpoints can provide what information about which
  764.  classes of <small>URI</small>s.</p>
  765. <p>Vocabularies for doing
  766. this have not yet been standardized.<br/></p>
  767. <p>(Added 2010). This year, in order to encourage
  768. people -- especially government data owners -- along the road to
  769. good linked data, I have developped this star rating system.</p>
  770. <p>Linked Data is defined above. Linked <em>Open</em> Data (LOD)
  771. is Linked Data which is released under an open licence, which
  772. does not impede its reuse for free. Creative Commons CC-BY is an
  773. example open licence, as is the UK's <a href="http://www.nationalarchives.gov.uk/doc/open-government-licence/">
  774. Open Government Licence</a>. Linked Data does not of course in
  775. general have to be open -- there is a lot of important use of
  776. lnked data internally, and for personal and group-wide data. You
  777. can have 5-star Linked Data without it being open. However, if it
  778. claims to be Linked Open Data then it does have to be open, to
  779. get any star at all.</p>
  780. <p>Under the star scheme, you get one (big!)
  781. star if the information has been made public at all, even if it
  782. is a photo of a scan of a fax of a table -- if it has an open
  783. licence. The you get more stars as you make it progressively more
  784. powerful, easier for people to use.</p>
  785. <table>
  786. <tr>
  787. <td class="stars">★</td>
  788. <td>Available on the web (whatever format) <i>but with an
  789. open licence, to be Open Data</i></td>
  790. </tr>
  791. <tr>
  792. <td class="stars">★★</td>
  793. <td>Available as machine-readable structured data (e.g. excel
  794. instead of image scan of a table)</td>
  795. </tr>
  796. <tr>
  797. <td class="stars">★★★</td>
  798. <td>as (2) plus non-proprietary format (e.g. CSV instead of
  799. excel)</td>
  800. </tr>
  801. <tr>
  802. <td class="stars">★★★★</td>
  803. <td>All the above plus, Use open standards from W3C (RDF and
  804. SPARQL) to identify things, so that people can point at your
  805. stuff</td>
  806. </tr>
  807. <tr>
  808. <td class="stars">★★★★★</td>
  809. <td>All the above, plus: Link your data to other people’s
  810. data to provide context</td>
  811. </tr>
  812. </table>
  813. <p>How well does your data do? You can buy <a href="http://www.cafepress.co.uk/w3c_shop.480759174">5 star data
  814. mugs</a>, T-shirts and bumper stickers from the W3C shop at
  815. cafepress: use them to get your colleages and fellows
  816. conference-goers thinking 5 star linked data. (Profits also help
  817. W3C :-).</p>
  818. <p>Now in 2010, people have been pressing me, for governmet data,
  819. to add a new requirement, and that is there should be metadata
  820. about the data itself, and that that metadata should be availble
  821. from a major catalog. Any open dataset (or even datasets which
  822. are not but should be open) can be regisetreed at ckan.net.
  823. Government datasets from the UK and US hsould be regisetred at
  824. data.gov.uk or data.gov respectively. Other copuntries I expect
  825. to develop their own registries. Yes, there should be metadata
  826. about your dataset. That may be the subject of a new note in this
  827. series.</p>
  828. <p><br/></p>
  829. <p>Linked data is essential to actually connect the semantic web.
  830.  It is quite easy to do with a little thought, and becomes
  831. second nature.   Various common sense considerations
  832. determine when to make a link and when not to.</p>
  833. <p>The <a href="http://dig.csail.mit.edu/2005/ajar/ajaw/tab">Tabulator</a>
  834. client (running in a suitable browser)  allows you to browse
  835. linked data using the above conventions, and can be used to check
  836. that your linked data works.</p>
  837. <p>References</p>
  838. <p>[Ding2005] Li Ding, et. al.,  <a href="http://ebiquity.umbc.edu/paper/html/id/240/"><span>Tracking RDF Graph Provenance using RDF
  839. Molecules</span></a>, UMBC Tech Report TR-CS-05-06</p>
  840. <hr/>
  841. <h2>Followup</h2>
  842. <p>2006-02 Rob Crowell adapts Dan Connolly's DBView (2004) which
  843. maps SQL data into linked RDF, adding backlinks.</p>
  844. <p>2006-09-05 Chris Bizer et al adapt <a href="http://sites.wiwiss.fu-berlin.de/suhl/bizer/d2r-server/">D2R
  845. Server</a> to provide a linked data view of a database.</p>
  846. <p>2006-10-10 Chris Bizer et al produce the <a href="http://sites.wiwiss.fu-berlin.de/suhl/bizer/ng4j/semwebclient/">Semantic
  847. Web Client Library</a>, "Technically, the library represents the
  848. Semantic Web as a single Jena RDF graph or Jena Model." The code
  849. feteches web documents as needed to answer queries.</p>
  850. <p>2007-01-15 Yves Raimond has produced a <a href="http://moustaki.org/swic/">Semantic Web client for SWI
  851. prolog</a> wit similar functionality.</p>
  852. <p>I have a talk at the 2009 O'Reilly eGovernment 2.0 conference
  853. in Washington DC, talking about "Just a Bag of Chips" @@ref, and
  854. talking about the 5 star scheme. Following that, From InkDroid
  855. blogged summary (and CSS) of my 5 star sceheme adapted here</p>
  856. </article>
  857. </section>
  858. <nav id="jumpto">
  859. <p>
  860. <a href="/david/blog/">Accueil du blog</a> |
  861. <a href="https://www.w3.org/DesignIssues/LinkedData.html">Source originale</a> |
  862. <a href="/david/stream/2019/">Accueil du flux</a>
  863. </p>
  864. </nav>
  865. <footer>
  866. <div>
  867. <img src="/static/david/david-larlet-avatar.jpg" loading="lazy" class="avatar" width="200" height="200">
  868. <p>
  869. Bonjour/Hi!
  870. Je suis <a href="/david/" title="Profil public">David&nbsp;Larlet</a>, je vis actuellement à Montréal et j’alimente cet espace depuis 15 ans. <br>
  871. Si tu as apprécié cette lecture, n’hésite pas à poursuivre ton exploration. Par exemple via les <a href="/david/blog/" title="Expériences bienveillantes">réflexions bimestrielles</a>, la <a href="/david/stream/2019/" title="Pensées (dés)articulées">veille hebdomadaire</a> ou en t’abonnant au <a href="/david/log/" title="S’abonner aux publications via RSS">flux RSS</a> (<a href="/david/blog/2019/flux-rss/" title="Tiens c’est quoi un flux RSS ?">so 2005</a>).
  872. </p>
  873. <p>
  874. Je m’intéresse à la place que je peux avoir dans ce monde. En tant qu’humain, en tant que membre d’une famille et en tant qu’associé d’une coopérative. De temps en temps, je fais aussi des <a href="https://github.com/davidbgk" title="Principalement sur Github mais aussi ailleurs">trucs techniques</a>. Et encore plus rarement, <a href="/david/talks/" title="En ce moment je laisse plutôt la place aux autres">j’en parle</a>.
  875. </p>
  876. <p>
  877. Voici quelques articles choisis :
  878. <a href="/david/blog/2019/faire-equipe/" title="Accéder à l’article complet">Faire équipe</a>,
  879. <a href="/david/blog/2018/bivouac-automnal/" title="Accéder à l’article complet">Bivouac automnal</a>,
  880. <a href="/david/blog/2018/commodite-effondrement/" title="Accéder à l’article complet">Commodité et effondrement</a>,
  881. <a href="/david/blog/2017/donnees-communs/" title="Accéder à l’article complet">Des données aux communs</a>,
  882. <a href="/david/blog/2016/accompagner-enfant/" title="Accéder à l’article complet">Accompagner un enfant</a>,
  883. <a href="/david/blog/2016/senior-developer/" title="Accéder à l’article complet">Senior developer</a>,
  884. <a href="/david/blog/2016/illusion-sociale/" title="Accéder à l’article complet">L’illusion sociale</a>,
  885. <a href="/david/blog/2016/instantane-scopyleft/" title="Accéder à l’article complet">Instantané Scopyleft</a>,
  886. <a href="/david/blog/2016/enseigner-web/" title="Accéder à l’article complet">Enseigner le Web</a>,
  887. <a href="/david/blog/2016/simplicite-defaut/" title="Accéder à l’article complet">Simplicité par défaut</a>,
  888. <a href="/david/blog/2016/minimalisme-esthetique/" title="Accéder à l’article complet">Minimalisme et esthétique</a>,
  889. <a href="/david/blog/2014/un-web-omni-present/" title="Accéder à l’article complet">Un web omni-présent</a>,
  890. <a href="/david/blog/2014/manifeste-developpeur/" title="Accéder à l’article complet">Manifeste de développeur</a>,
  891. <a href="/david/blog/2013/confort-convivialite/" title="Accéder à l’article complet">Confort et convivialité</a>,
  892. <a href="/david/blog/2013/testament-numerique/" title="Accéder à l’article complet">Testament numérique</a>,
  893. et <a href="/david/blog/" title="Accéder aux archives">bien d’autres…</a>
  894. </p>
  895. <p>
  896. On peut <a href="mailto:david%40larlet.fr" title="Envoyer un courriel">échanger par courriel</a>. Si éventuellement tu souhaites que l’on travaille ensemble, tu devrais commencer par consulter le <a href="http://larlet.com">profil dédié à mon activité professionnelle</a> et/ou contacter directement <a href="http://scopyleft.fr/">scopyleft</a>, la <abbr title="Société coopérative et participative">SCOP</abbr> dont je fais partie depuis six ans. Je recommande au préalable de lire <a href="/david/blog/2018/cout-site/" title="Attention ce qui va suivre peut vous choquer">combien coûte un site</a> et pourquoi je suis plutôt favorable à une <a href="/david/pro/devis/" title="Discutons-en !">non-demande de devis</a>.
  897. </p>
  898. <p>
  899. Je ne traque pas ta navigation mais mon
  900. <abbr title="Alwaysdata, 62 rue Tiquetonne 75002 Paris, +33.184162340">hébergeur</abbr>
  901. conserve des logs d’accès.
  902. </p>
  903. </div>
  904. </footer>
  905. <script type="text/javascript">
  906. ;(_ => {
  907. const jumper = document.getElementById('jumper')
  908. jumper.addEventListener('click', e => {
  909. e.preventDefault()
  910. const anchor = e.target.getAttribute('href')
  911. const targetEl = document.getElementById(anchor.substring(1))
  912. targetEl.scrollIntoView({behavior: 'smooth'})
  913. })
  914. })()
  915. </script>