= Implementation Bootcamp = == Implementation tips and tricks / FAQ == Here we collect useful tips and tricks so that we don't all have to reinvent the wheel. Please add any answers and/or questions! === I have to build a triplestore, what tool should I use under what circumstances? === Francois Belleau seems to prefer virtuoso, though he assures us he has no commercial interest in them :) === I have an analysis tool, how do I expose it as a semantic web resource? === === I have to build an OWL model of my data - how do I go about doing this? === For understanding what you're supposed to do (and what you're getting into...), read * [http://www.w3.org/TR/owl2-primer/ The OWL 2 primer] to learn about OWL, * [http://www.w3.org/TR/sw-oosd-primer/ A Semantic Web Primer for Object-Oriented Software Developers] if you know anything about OO modeling in software, as it will help avoid a lot of common pitfalls, and * [http://workingontologist.org/ Semantic Web for the Working Ontologist] if you want in-depth explanation with lots of examples. Then use [http://protege.stanford.edu/ Protege] to actually build the ontology. === When someone calls GET on my URLs, what should I return in order to be semantic webby? === You should probably use [http://en.wikipedia.org/wiki/Content_negotiation Content Negotation] using the HTTP Accept: header. That way you can return HTML and RDF under the same URI. However, it's fine for the time being to just accept a ".rdf" suffix or an "&format=rdf" URL parameter. At [http://www.uniprot.org UniProt], we use content negotiation for our OWL documentation, but not (yet) for the actual data. Example: {{{ > wget --header='Accept: application/rdf+xml' http://purl.uniprot.org/core/recommendedName [...] Saving to: `recommendedName.rdf > wget --header='Accept: text/html' http://purl.uniprot.org/core/recommendedName [...] Saving to: `recommendedName.html }}} === What are the similarities and differences between the various shared names proposals? === Shared names proposals such as LSRN? UniProt? === What XSL processor to use, should you want to convert legacy xml to rdf? === @yokofakun just tweeted using xsltproc for this, but it doesn't seem to be happy about xsl 2.0 features, so @rvosa is using net.sf.saxon.Transform instead. === What to do with RDFa metadata? === RDFa embedded inside HTML or XML can be turned into proper RDF/XML triples using this xsl stylesheet: http://nexml-dev.nescent.org/nexml/xslt/RDFa2RDFXML.xsl === I have database in RMDB, how can I convert them directly to RDF? === Use protege plug-in? or porvide web service? There is [http://www4.wiwiss.fu-berlin.de/bizer/d2rq/ D2RQ] which works okey but lacks a bit performance-wise. === How to access a triplestore in Perl/Ruby/Python/Java etc.? === In Python, you have [http://www.rdflib.net/ RDFlib]. And for Java [http://jena.sourceforge.net/ Jena] is your best option. === How do I namespace my terms? === It is best to do this such that they can actually be resolved (unlike XML), preferably to an OWL file, e.g. "http://example.org/terms.owl#" === How granular should my returned RDF be? === === Which version of Protege should I use? ===