- From: David Wood <david@3roundstones.com>
- Date: Wed, 28 Mar 2012 09:24:18 -0400
- To: Dan Brickley <danbri@danbri.org>
- Cc: Melvin Carvalho <melvincarvalho@gmail.com>, Jeni Tennison <jeni@jenitennison.com>, tom.heath@talis.com, public-lod community <public-lod@w3.org>
Hi Dan, On Mar 27, 2012, at 21:30, Dan Brickley wrote: > On 27 March 2012 20:23, Melvin Carvalho <melvincarvalho@gmail.com> wrote: > >> I'm curious as to why this is difficult to explain. Especially since I also >> have difficulties explaining the benefits of linked data. However, normally >> the road block I hit is explaining why URIs are important. > > > > Alice: So, you want to share your in-house thesaurus in the Web as > 'Linked Data' in SKOS? > > Bob: Yup, I saw [inspirational materials] online and a few blog posts, > it looks easy enough. We've exported it as RDF/XML SKOS already. Here, > take a look... > > [data stick changes hands] > > Alice: Cool! And .. yup it's wellformed XML, and here see I parsed it > with a real RDF parser (made by Dave Beckett who worked on the last > W3C spec for this stuff, beats me actually checking it myself) and it > didn't complain. So looks fine! Ok so we'll need to chunk this up > somehow so there's one little record per term from your thesaurus, and > links between them... ...and it's generally good to make human facing > pages as well as machine-oriented RDF ones too. Bob and Alice can stop at this point, throw the RDF/XML at Callimachus, write some templates in XHTML/RDFa and be done. They would get themeable human-oriented HTML, conneg for RDF/XML and Turtle, one URI per term, REST API CRUD, management with user accounts... Regards, Dave > > Bob: Ok, so that'll be microformats no wait microdata ah yeah, RDFa, > right? Which version? > > Alice: well RDFa yes, microdata is a kind of cousin, a mix of thinking > from microdata and microformats communities. But I meant that you'd > make a version of each page for computers to use (RDF/XML like your > test export here), ... and you'd make some kind of HTML page for more > human readers also. The stuff you mention is more about doing both > within the same format... > > Bob: Great. Which one's the most standard? What should I use? > > Alice: Well I guess it depends what you mean by standard. > [skips digression about whatwg and w3c etc notions of standards process] > [skips digression about XHTML vs XML-ish polyglot HTML vs resolutely > non-XML HTML5 flavours] > [skips digression about qnames in HTML and RDFa 1.1 versus 1.0] > > ...you might care to look at using basic HTML5 document with say the > Lite version of RDFa 1.1 (which is pretty much finished but not an > official stable standard yet at W3C) > > Bob: [makes a note]. Ok, but that's just the human-facing page, > anyway. We'd put up RDF/XML for machines too, right? Well maybe that's > not necessary I guess. I was reading something about GRDDL and XSLT > that automates the conversion, ... should we maybe generate the > RDF/XML from the HTML+RDFa or vice versa? or just have some php hack > generate both from MySQL since that's where the stuff ultimately lives > right now anyway...? > > Alice: Um, well it's pretty much your choice. Do you need RDF/XML too? > Well..... maybe, not sure... it depends. There are more RDF/XML > parsers around, they're more mature, ... but increasingly tools will > consume all kinds of data as RDF. So it might not matter. Depends why > you're doing this, really. > > Bob: Er ok, maybe we ought to do both for now, ... belt-and-braces, > ... maybe watch the stats and see what's being picked up? I'm doing > this because of promise of interestingly unexpected re-use and so on, > which makes details hard to predict by definition. > > Alice: Sounds like a plan. Ok, so each node in your RDF graph, ... > we'll need to give it a URI. You know that's like the new word for > URL, > but that includes identifiers for real world things too. > > Bob: Sure sure, I read that. Makes sense. And I can have a URI, my > homepage can have a URI, I'm not my home page blah-de-blah? > > Alice: You got it. > > Bob: Ok, so what URLs should I give the concepts in this thesaurus? > They've got all kinds of strings attached, but we've also got nicely > managed numeric IDs too. > > Alice: Right so maybe something short (URls can never be too > short...), ... so maybe if you host at your example.org server, > http://example.com/demothes/c1 then same but /c2 /c3 etc. > > ... or well you could use #c1 or #c2 etc. That's pretty much up to > you. There are pros-and-cons in both directions. > > Bob: whatever's easiest. It's a pretty plain apache2 setup, with php > if we want it, or we can batch create files if that makes more sense; > this data doesn't change much. > > Alice: Well how big is the thesaurus...? > > Bob: a couple thousand terms, each with a few relations and bits of > text; maybe more if we dig out the translations (humm should we > language negotiate those somehow?) > > Alice: Let's talk about that another day, maybe? > > Bob: And hmm the translations are versioned a bit differently? Should > we put version numbers in somewhere so it's unambiguous which > version of the translation we're using? > > Alice: Let's talk about that another day, too. > > Bob: OK, where were we? http://example.com/demothes/c1 ... sure, that > sounds fine. > > ... we'd put some content negotiated apache thing there, and make c1 > send HTML if there's a browser, or rdf/xml if they want that stuff > instead? Default to the browser / HTML version maybe? > > Alice: something like that could work. There are some howtos around. > Oh, but if c1 isn't an information resource, you'll need to redirect > with a 303 HTTP code. It's like you said with people and homepages, to > make clear which is which. > > Bob: Oh-kay... so in our SKOS graph, it's a mix of things, the bulk is > a load of descriptions of skos:Concept and there's a bit of metadata > in there about some docs, and the admin contact info, ... but yeah > it's mostly the concepts (which seems to be the skos way to talk about > thesaurus terms, sort of abstracted a bit to make translations easier, right?) > > Alice: Yup. Well, ... remember we're breaking up your graph into > bits... like one chunk per page? > > Bob: Ah right, so is that one node in the graph per page? per ... erm, > how do they call it? [counts on fingers] subject-predicate-object... > er subject, right? Each object in my graph, er like OO object I mean, > entity, thingy... > > Alice: -thingy is good- > > Bob: Each thing in the graph, goes in one page, more or less? > > Alice: more or less. It's up to you, I guess there are best practices, > roughly the bulk of it, one page per concept, ... and then the > metadata etc you might do differently > > Bob: Ok, so c1 is one concept, c2 is another, ... they'd have links to > each other in the ... the RDF/XML files, right? And I guess the HTML > too, sure > > Alice: Sure > > Bob: so the html rdfa stuff would be <a href='c2'>something and > rel='broader' if c1 was broader than c2? > > Alice: er it might be broaderTerm, or broaderConcept, I forget... [searches] > > Bob: ah look, yeah skos:broader, ... ok so if c2 is more broad, er > broader, more general, than c1, ... we put in the c1 HTML page a link > over to c2, and add some RDFa too, to say what the link means in > semantic rdf speak as well as clickable-link? > > Alice: [tips head on side], ... sorry I always get this stuff back to > front. Ok, slowly. c2 is broader than c1, ... 'broader' points to the > one that's broader, like you know more general, ... so let's say c1 is > the specific, detailed one. In the c1 HTML page, we'd ... > > Bob: [interrupting] would that be c1.html? like concept ID dot h t m > l, as a pattern? > > Alice: yes, you could call it that, ... it's up to you really but > obviously it's sort of conventional. But then there's another > convention of keeping > the file types out of URLs > > Bob: So in the filesystem they might be a bunch of batch-generated > HTML files called c1.html c2.html etc, but I'd keep that secret or > obscure or hide it with apache config somehow? > > Alice: For example, yes. But ok, so c1.html would be like "blah blah > blah, and then a paragraph describing concept c1 from your > thesaurus, ... which is (we say) some pretty specific topic, like er, > say "allergy to pine nuts'... and maybe c2 is just 'pine nuts' > > Bob: Well it's an engineering terminology thesaurus, but sure. I get > the idea. So we'd do <a href='/demothes/c2' rel='broader' ... > > Alice: in rdfa 1.1 lite that's property='broader', erm > property='skos:broader', ... but sure, something like that. you might > put the relationship first, it reads better. I think it means the same > formally. > > Bob: right right, ... and in c2 HTML page, we'd do the link back the > other way? is there a skos word for the opposite of broader, > skos:narrower? [searches] ... ok looks like it, ... so I'd use that? > it's sort of redundant I guess if you crawl all the pages, ... but you > have to find the pages and links somehow, ... what if I started with > some linked data agent thing on c2.html, how would it find c1.html to > find that > c1.html says that c2.html is broader? > > Alice: Good point. We can work some of this out later. There are also > sitemap files, so in page links aren't the only way to find stuff. > It's all sort of emerging best practices territory. Lots of early > adopters figuring things out, if we get this working, maybe you could > write up a case study? > > Bob: Or you could just tell me what to do. Hey, whatever happened to > rev= ... is that still in XHTML? > > Alice: Which version? I mean, ... can we talk about this later? > > Bob: Right right. But couldn't I put "rev='skos:broader'" in c2.html, ... > > Alice: [patiently] ... you could, yes. Or both... there's a lot of > flexibility in this system. In many ways it's a huge strength... > > Bob: Oh hang on, I found > http://www.w3schools.com/TAGS/att_link_rev.asp and it says rev isn't > supported by browsers; is that a problem. > > Alice: We're getting off the point a bit, ... Anyway I think Hixie > took it out of HTML5 because it wasn't being used and people found it > confusing. Or last time I looked anyway, I think it was gone. > > Bob: Righto. I can see that. So anyway, we'll make a load of HTML > pages that describe our concepts... > > Alice: Yup, and we'll redirect /demothes/c2 to a page about c2, ... so > things don't mix up information resources with non information > resources. Oh and I'm not sure w3schools is always the best reference > on this stuff... > > Bob: things on the Web and things that aren't on the Web. Ok, if not > w3schools, where should I check? > > Alice: [ignoring w3schools question] ... exactly. things that aren't > _on_ the Web. Or _in_ if you prefer. Like your concepts are a kind of > abstraction so they're not really on the Web, ... they're just > _described_ in the Web. > > Bob: so we redirect to c1.html etc? > > Alice: Sure we could do that, or if you want to keep the suffix out of > the URL, which is considered good hygeine by some, you might > for example use /demothes/about_c1 ... that's quite clean > > Bob: And if we get a content negotiated request for rdf/xml ...? ... > send that instead, ... no redirecting > > Alice: something like that, I'll check the docs for you later. It's a > bit fiddly but there are some examples around we can copy from, > httpd.conf etc > > Bob: Great. And if someone asks for the rdf/xml version of about_c1? > > Alice: Not sure, I'll have to think a bit, but ... well sending the > rdf along sounds ok. It's not quite the same as asking for c1 but ... > well sure. Why not? > > Bob: What was the other option? #c1 ? No messing around with redirects > there? Easier to bookmark? > > Alice: Well yeah, ... and to link to, ... but your data isn't tiny, > ... a few thousand concepts you said. Could be a big page fetch each > time. > > Bob: Is that a problem? How big is too big? We can cache internally so > it's not hitting the db, right? Will intelligent agents and so on be > reading this a lot? Do they choke on big files? > > Alice: Well, maybe not so intelligent. But the way URIs and URLs work, > when there's a # in them, ... that doesn't get sent to the server > and so the server doesn't see the #c1 or #c2 or #c9999 bit, ... so it > can only really send you the whole lot and the consuming code has to > make sense of it by remembering what it asked for... > > Bob: ...well maybe this is still easier. And we can content negotiate > still, right? > > Alice: sure. HTML+RDFa or RDF/XML or ... you heard of turtle and > ntriples and there's this thing called json-ld ... but don't worry > about that for now. Let's just think about RDF/XML and HTML+RDFa > today, eh? > > Alice: [thinking...] well maybe just one of those would do, ... but > it's not hard to generate both. > > Bob: Alright, so one big HTML+RDFa file with the thesaurus in it, in > SKOS triples but prettied up a bit with CSS? Sounds ok... > > Alice: and a big RDF/XML doc too, if they ask for that instead > > Bob: got it. So ... hang on, back up a bit, ... if we're in one big > HTML page, and I'm at the er what did you say, 'allergy to pine nuts' > section, ... and I want to link to show that this concept has a ... a > broader one which is just 'pine nuts', ... I put in '<a href='c1' > property="skos:broader"> within the c2 bit? > > Alice: c1 was the broader one, I forget? > > Bob: er c2 was broader, general ... Pine Nuts only. So yup, within > pine nuts section of this big HTML page at /demothes, we'd link up (or > down, guess it doesn't matter the page order?) to the #c1 section. > Remind me, I always mix up, is that <a name="c1"> or <a id="c2">? > > Alice: it's a little bit complicated [searches] but > http://stackoverflow.com/questions/484719/html-anchors-with-name-or-id > seems to cover it... ...er but look it's a bit fiddly this way, never > mind the HTML attribute name for now we can look that up ... you don't > want to call it c1 exactly, because that's the name of your concept > > Bob: And concepts aren't information resources? > > Alice: well obviously they sort of are _informational_ so that's why > some people don't like that terminology, ... but that doesn't matter, > the thing is they're not ... you know HTTP endpointy things, ... like > data objects attached to a Web server, ... they're more abstract > > Bob: and so also they're not bits of an HTML page either? Right? So if > I go linking with <a href="/demothes#c1" blabla, that's implying that > c1 is a bit of a Web page... so that's an information resource, ... > and really it's not because it's a thesaurus concept which is more a > sort of social entity or conceptual or mental or something, ... not > inside my server or page like a concrete information object? > > Alice: Y...es. Well you're mixing two things here a bit. Or three. > Hang on. Two. Right: > First. We slipped from talking about the target of HTML hyperlinks > (the id/name attribute stuff) to the markup at the start end of the > link. <a href="/demothes#c1" is fine, so long as you're not really > pointing at a page that has a section with name (or id) of 'c1'. It's > the name end, the target stuff, that you can't put the thingy's URI > into. It's ok to point because ... you're sort of saying something. > But if you write the target markup, you're saying that c2 is part of > the page. Which it isn't. > > Bob: o...k. Seems oddly asmmetrical somehow. But the ' > href="/demothes#c1" ' HTML ... it's pointing at a page, right? And if > we go to it in a browser (unless it has a bunch of funny extensions, > ... I got in a mess one time with Firefox addons I was trying, ...) > ... we go to it in a browser we'll get an HTML page. And there'll be a > bit of the page decribing our concepts c1 and c2 ... and in theory > links can jump you down the classic way, to where you want to read? > That's nice to have in documentation. > > Alice: Yes yes, ... just we don't name the page target parts, erm > anchors, with that same name. As the skos thing, concept, I mean. > > Bob: Because it's not a webby thing it's a real worldy thing, even if > it's still sort of about information? Like a book in my hand also is? > > Alice: Exactly > > Bob: [beams] > > Alice: So, ... right, ... we don't name the in-page targets the same > as the things those bits of page describe? > > Bob: Ok, so like with the other design, we could call the page bits > #c2_bit_of_the_page or something less verbose, just not #c2 because we > already used that ID for something 'off Web', the concept itself? > > Alice: Yes. > > Bob: Doesn't that screw up scrolling? > > Alice: Well you could use some jquery thing I found and that's quite > nice actually because it scrolls smoothly and degrades gracefully and > ... wait wait I'm talking nonsense, ... sorry. It's fine. You just put > in two anchors and two links? > > Bob: They're called anchors at both ends of the link, right? Sort of > nautical idea... ... in RDF links too? > > Alice: Er yeah yes. It's <a>. We don't really talk about anchors so > much in the abstract rdf model. But it's a similar idea, hence the > Linked Data thing? > > Bob: So the subject is an anchor, the predicate is like a kind of link > (that's a 'rel' or whatever?) and the object in the triple is an > anchor too? > > Alice: Well not exactly. You're ... well, sure. Yes. If that helps you > think about it, ... but what I meant to say was forget about jquery, > it'll still scroll and stuff in the browser, so long as you have > anchors like <a name="c2_bit_of_page" and <a name="c2">. Then for each > semantic link, you can link to the semantic target - like c2 - with > that, ... and in the human facing link, ... link to c2_bit_of_page. > Hmm no wait, you'd want to hide the human one because when you click > it it won't go to the part of the page, and you shouldn't put in a > name="c2". Sorry, I'm tired. > > Alice: Ok sure, look is scrolling to the bit of the page important for > you? Maybe the jquery thing could work? Or you can do something in > CSS. It can't be that hard. There are lots of ways to do things with > RDFa. If you get stuck we can ask in IRC or Twitter, people are really > helpful (though not everyone agrees about this hash stuff and 303s) > > Bob: So which is simplest, really? Really big files: bad with #, ... > but # lets you bookmark, ... but makes linking down to the right bit > of the page somehow confusing...? > > ...could I rewrite the links in Javascript maybe? Ok ok, ... how's > this! How about we make the HTML+RDFa page all nice and semantic, but > put in a javascript that when the page loads --- only in browsers --- > it rewrites all the links to be #bit_of_page links, ... then when > clicked ... boom you hop to the right bit of the page. And still > there's a big RDF/XML file content negotiable for older tools that > don't read the HTML+RDFa .... everyone's happy! > > Alice: You still need to update all the URIs in your text RDF/XML file > to be this new pattern we agreed, ... and that javascript thing is > half > sick and half clever, ... maybe it'd be fine. There might be browser > addons that get confused if javascript is messing with stuff. But we > got distracted. I'm not sure of anything using this stuff much, you > might check in tabulator at least to see what it does. > > But we were talking about <a href="/demothes#c1" blabla, > > ... and I said you'd slipped from talking about the 'target' end of > the anchor link, to the 'source' end. And that the source in RDFa > could mention things that weren't (and shouldn't) be actual HTML page > targets. But also you were mixing up a bit, ... the idea of an > information resource like a thing that's up there via some Web server > and giving you content negotiated formats, ... with the idea of bits > of a page being an information resource. > > ... but at least we agreed that your skos concepts aren't either of > those; they're abstractions. So the Web pages sort of describe them, > ... and the bits of a big rdfa html page if we go with the # option > > Bob: ... we didn't really get on to the RDF/XML version > > Alice: that's a bit simpler, in a way... because only machines look at > it and it doesn't care about prettyness or usability or browser > behaviour. > > Bob: couldn't we put in some xslt,.. and make it work for both? like a > stylesheet to make it into html+rdfa, ... browsers do that now don't > they? > > Alice: In theory maybe; in practice that's not really something people > seem to do. But look, we're going with the 'put it all in one big > page' # version, so we just make the rdf/xml use those as the URIs and > ... well we're done. > > Bob: Easy! So I just change some URLs and upload the RDF/XML, ... then > write some script and make an HTML page with the right kinds of links. > .... > > Alice: And we'll figure out some way to make it jump to bits of the > page? Maybe... > > Bob: Can we do backlinks inside the page? > > Alice: like broader concept links back to the narrower? > > Bob: I can find some RDFa parser and put that in dynamically? or > better to spell it out in the actual markup so the triples are there? > > Alice: yes, maybe better > > Bob: but ... that'll make the doc even bigger, ... if every broader > term triple has an inverse link too.... guess it doesn't matter, > webservers zip stuff on the fly don't they? > > Alice: they can, yeah. but look you can always do the http 303 thing > if you're worried about size of the file,... chunk it up. Do the slash > thing. Are you expecting your thesaurus to grow at all? > > Bob: it can be nice having one page per thingy, after all > > Alice: they're both easier in different ways > > Bob: thanks, you've been a big help. Would it be alright to just > upload the skos dump file for now, ... maybe I'll zip it > > Alice: we ought to fix those URIs sometime > > Bob: maybe tomorrow? > > Alice: maybe tomorrow... >
Received on Wednesday, 28 March 2012 13:25:26 UTC