Title: LSIDs and RDF
1LSIDs and RDF
Kevin Richards TDWG 2006
2Introduction
- Kevin Richards (Landcare Research NZ)
- Landcare Informatics group
- GUID Subgroup
- LSID .NET code port
- Disclaimer / intended audience
- Overview of tutorial
3Requirements
- Files on network
- ftp//cissus.mobot.org/incoming/tdwg/Tutorial/
- Username garfile Password garden2003
- Internet connection
- Text editor (or xml editor)
4RDF
- What is RDF
- Resource Description Framework
- w3C
- Describes resources on the web
- Putting data on the web
- Intended for machine processing
- Has a defined xml syntax
- Semantic relationships of data objects
- Aimed at distributed data with varying types
5RDF Triples
- English language equivalent http//www.example.
org/index.html has a creator whose value is John
Smith - Uses GUIDs (Web based GUIDs URIs, etc)
- Eg GUID1 has creator GUID2
- Subject Predicate Object format
- Subject (the object being described)
- GUID or blank (infinite set)
- Predicate (the relationship/property type)
- GUID to a property type, eg the ID of the
property creator - Object (the value assigned to the subject object)
- GUID of another object, blank, or literal
- Build up map/graph of object relationships
6RDF Graphs
- The basis of RDF
- Useful analysis and equivalence calculation tool
- Eg
- example.org/index.html page created by staffid
85740 - example.org/index.html page language is english
(en)
- Equivalent Triples
- lthttp//www.example.org/index.htmlgt
lthttp//purl.org/dc/elements/1.1/creatorgt
lthttp//www.example.org/staffid/85740gt . - lthttp//www.example.org/index.htmlgt
lthttp//www.example.org/terms/creation-dategt
"August 16, 1999" . lthttp//www.example.org/index.
htmlgt lthttp//purl.org/dc/elements/1.1/languagegt
"en"
7RDF formats
- Statement - http//www.example.org/index.html
has a creator whose value is John Smith - N3 notation
- http//www.example.org/index.html dccreator
John Smith. - Xml
- ltrdfDescription rdfabout"http//www.example.or
g/index.html"gt - ltdccreatorgtJohn Smithlt/dccreatorgt
- lt/rdfDescriptiongt
8Basic RDF
- lt?xml version"1.0"?gt
- ltrdfRDF xmlnsrdf"http//www.w3.org/1999/02/22-r
df-syntax-ns" - xmlnsdc"http//purl.org/dc/elements/1.1
/"gt - ltrdfDescription rdfabout"http//www.example.or
g/index.html"gt - ltdclanguagegtenlt/dclanguagegt
- lt/rdfDescriptiongt
- lt/rdfRDFgt
- rdfDescription basic description xml node
- Every xml node must be namespaced and the
namespace must be resolvable - DublinCore handy set of basic descriptive
elements, such as title, creator, language, etc
9rdfresource
- Eg
- lt?xml version"1.0"?gt
- ltrdfRDF xmlnsrdf"http//www.w3.org/1999/02/22-r
df-syntax-ns" - xmlnsdc"http//purl.org/dc/elements/1.1
/"gt - ltrdfDescription rdfabout"http//www.example.or
g/index.html"gt - ltdclanguagegtenlt/dclanguagegt
- ltdccreator rdfresource"http//www.ldodds.com/
foaf/foaf-a-matic/JohnSmith" /gt - lt/rdfDescriptiongt
- lt/rdfRDFgt
10RDF Types
- Define data types
- Improves control of input data ranges
- Eg birthDate of a person
- ltpersonbirthDate rdfdataType
"http//www.w3.org/2001/XMLSchemadategt1940-6-19lt
/personbirthDategt - Eg example.com employee Jane Smith is of type
Person - (n3 notation)
- _jane extermsmailbox ltmailtojane_at_example.orggt
. - _jane rdftype extermsPerson .
- _jane extermsname "Jane Smith" .
- _jane extermsempID "23748"
11RDF Example FOAF
- Go to FOAF-a-matic web site
- http//www.ldodds.com/foaf/foaf-a-matic
- Create Profile, Generate RDF
- Copy RDF
- Go to W3C RDF Validator
- http//www.w3.org/RDF/Validator/
- Validate RDF displays triples
12Inference
FOAF Person A
Rdf triple A knows B
FOAF Person B
Inferred triple - A is one degree separated from C
Rdf triple B knows C
FOAF Person C
13RDF Exercise 1
- Create some RDF instance xml for a specimen
- Make up an namespace for the elements
- Make up elements for
- Specimen Catalog Number (eg SP1)
- Specimen Collected By
- Specimen Locality
- Validate using RDF validator on the web
- Eg RDF
- lt?xml version"1.0"?gt
- ltrdfRDF xmlnsrdf"http//www.w3.org/1999/02/22-r
df-syntax-ns" - xmlnsdc"http//purl.org/dc/elements/1.1
/"gt - ltrdfDescription rdfabout"http//www.example.or
g/index.html"gt - ltdclanguagegtenlt/dclanguagegt
- lt/rdfDescriptiongt
- lt/rdfRDFgt
14Example Solution
- lt?xml version"1.0"?gt
- ltrdfRDF xmlnsrdf"http//www.w3.org/1999/02/22-r
df-syntax-ns" - xmlnsspec"http//specimen.org/specimens
/"gt - ltrdfDescription rdfaboutSP1"gt
- ltspeccatalogNumbergtSP1lt/speccatalogNumbergt
- ltspeccollectedBygtFred Smithlt/speccollectedBygt
- ltspeclocalitygtGeorge Stlt/speclocalitygt
- ltspeccollectedDate rdfdataTypehttp//www.w3.
org/2001/XMLSchemadategt2006-10-18lt/speccollecte
dDategt - lt/rdfDescriptiongt
- lt/rdfRDFgt
15RDF Schema
- Similar to xml schema
- Define RDF classes, types and properties
- Namespace - http//www.w3.org/2000/01/rdf-schema
16RDF Schema
- Example Schema TCS-RDF
- ltrdfRDF xmlnsrdf"http//www.w3.org/1999/02/22-r
df-syntax-ns" - xmlnsrdfs"http//www.w3.org/2000/01/rdf-schema
" xmlnsdcterms"http//purl.org/dc/terms/" - xmlnsdc"http//purl.org/dc/elements/1.1/"
xmlnstn"http//tdwg.org/2006/03/12/TaxonNames/"gt
- ltrdfsClass rdfabout"http//tdwg.org/2006/03/12
/TaxonNames/TaxonName"gt - ltrdfslabel xmllang"en"gtTaxon
Namelt/rdfslabelgt - ltrdfssubClassOf rdfresource"http//www.w3.org
/2000/01/rdf-schemaResource"/gt - lt/rdfsClassgt
- ltrdfProperty rdfabout"http//tdwg.org/2006/03/
12/TaxonNames/nameComplete"gt - ltrdfslabel xmllang"en"gtName
Completelt/rdfslabelgt - ltrdfsdomain rdfresource"http//tdwg.org/2006/
03/12/TaxonNames/TaxonName"/gt - ltrdfsrange rdfresource"http//www.w3.org/2000
/01/rdf-schemaLiteral"/gt - lt/rdfPropertygt
- lt/rdfRDFgt
17RDF Exercise 2
- Collection RDF Schema
- Write an RDF schema to describe our
collection.org example LSIDs - Write an instance of this schema using
rdfDescription tag or typed tag - Validate using RDF validator on the web
18RDF
- RDF Triple Stores
- What are they
- Problems
- size
- speed of lookup
- distribution/duplication
19Ontologies
- Defined using RDFS or OWL (Web Ontology Language)
others - Dublin Core
- eg http//purl.org/dc/elements/1.1/creator
- Eg http//www.example.org/index.html has a
creator whose value is John Smith - Subject http//www.example.org/index.html
- Predicate http//purl.org/dc/elements/1.1/creato
r - Object http//www.example.org/staffid/85740
(Johns Id) - FOAF (Friend Of A Friend)
- TDWG ontologies?
20RDF Tools
- RDF Tools/Software
- Protégé
- Altova SemanticWorks
- Oracle triple stores
- W3c Validator
21RDF References
- RDF Primer http//www.w3.org/TR/rdf-primer/
- RDF Syntax - http//www.w3.org/TR/rdf-syntax-gramm
ar/ - RDF Schema - http//www.w3.org/TR/rdf-schema/
- Another Primer - http//notabug.com/2002/rdfprimer
/ - w3c RDF Tutorial - http//www.w3schools.com/rdf/de
fault.asp - Dublin Core RDF - http//dublincore.org/
22PART 2 - LSIDs
23LSIDs
- Overview
- Requirements
- Files on network
- ftp//cissus.mobot.org/incoming/tdwg/Tutorial/
- Username garfile Password garden2003
- Web server (IIS)
- Text editor
24LSIDs
- Background on GUIDs
- What is a GUID?
- Globally Unique IDentifier
- Persistent
- Opaque transparent
- Resolvable?
- Examples UUID, DOI, Handle, LSID, PURL
25LSIDs
- What is an LSID?
- Life Science IDentifier
- Developed by OMG W3C
- Implemented by the team at IBM
- Structure urnlsidauthoritynamespaceobjectre
vision - Eg urnlsidindexfungorum.orgnames213649
- Used for data objects, databases, images, files
etc? - Versioning
- Whos using them
26GUID subgroup
- Subgroup decisions
- To use LSIDs for identifying biodiversity data,
but not exclude use of other GUIDs - Reuse GUIDs where they already exist, eg some
DOIs for literature (assuming no commercial
restrictions) - Use RDF for metadata of objects identified by
LSIDs - Implement as a minimum the HTTP GET metadata
service for each LSID server/resolver - See GUID Report - http//wiki.gbif.org/guidwiki/wi
kka.php?wakkaGUID2Reportshow_comments1
27Pros and Cons of LSIDs
URL
- Tied to physical addresses
- Inspection required to determine identical
contents - Brittle (broken links)
LSID
- Same Id same content
- Location independent
- Enables transparent caching
- Formalized, rich metadata
- Requires specialised software to resolve an LSID
(not built in to most software)
Cons
28LSID Tools and Services
- IBM LSID Launchpad
- Firefox LSID Browser
- LSID Tester (Rod Page)
- Web based resolver http//lsid.biopathways.org/r
esolver/ - Example LSID servers
- Bio Pathways http//lsid.biopathways.org/resolve
r/urnlsidgene.ucl.ac.uk.lsid.biopathways.orghug
oMVP (doesnt work with Launchpad) - Index Fungorum - urnlsidindexfungorum.orgnames
213649 - IPNI urnlsidipni.orgnames30000959-21.1.2.1
- uBio - urnlsidubio.orgnamebank11815
29LSID Code
- Current Code Stacks
- Open Source (sourceforge.net)
- Java, C, Perl (IBM)
- Microsoft .NET (Myself)
30An LSID is resolved using a three-part resolution
1 Resolve LSID Authority
Client
DNS HTTP
Query Authority
2 Get Available Services
WSDL
Data via
3 Retrieve Data
SOAP, HTTP, FTP, NFS, AFS, DFS
31DNS Lookup
- Example
- Go to command prompt
- gt nslookup
- gt set typesrv
- gt _lsid._tcp.indexfungorum.org
- Results in
- lsid.indexfungorum.org (194.203.77.68)
- -gt used as authority location for resolving
indexfungorum.org LSIDs
32Questions before hands on tutorial?
33Really Simple LSID
- A basic LSID setup
- LSID server with only one service for returning
metadata for LSIDs using HTTP GET - IIS PHP
- Specimen collection example
- urnlsidcollection.orgspecimensid
- Specimen text files to load metadata from
- No data
34LSID Authority Setup
LSID HTTP Request
IIS
Default is to return wsdl of php authority
location
LSID Metadata Request
PHP scripts
Load metadata from file
Return metadata
35Step 1 IIS authority
- Add authority folder to c\inetpub\wwwroot
- Copy authority files to authority directory
- Start IIS
- Configure authority as a web application
- Explain files
36Step 2 PHP
- Copy PHP files to c\php
- Configure IIS to run PHP files (add php5isapi.dll
to the mappings for authority) - Add index.php to default docs
- Set security permissions on php files/dir?
37Step 3 Configure LSID Launchpad
- Add local host authority for collection.org
- Add application for text editor
- Test, eg lsidresurnlsidindexfungorum.orgnames
213649
38Step 4 Test authority
- Test authority
- Browse to http//localhost/authority/
- Test metadata
- Browse to http//localhost/authority/metadata.php
- Browse to http//localhost/authority/metadata.php?
lsidurnlsidcollection.orgspecimens1 - Test using LSID Launchpad
- lsidresurnlsidcollection.orgspecimens1
- Cant read/display it as it is text, not rdf
39Use RDF for metadata
- Use the RDF collection schema (created in the RDF
section) in our LSID authority - Build an RDF instance for the schema
- Test the LSID metadata using LSID Launchpad
- Eg lsidresurnlsidcollection.orgspecimens4
40Linking to other data
- Add link for the person
- Eg
- Change collectedBy property
- ltrdfProperty rdfabout"collcollectedBy"gt
- ltrdfslabel xmllang"en"gtCollected
Bylt/rdfslabelgt - ltrdfsisDefinedBy rdfresource"coll"/gt
- ltrdfsdomain rdfresource"collSpecimen"/gt
- ltrdfsrange rdfresource"http//collection.org/
specimens/Person"/gt - lt/rdfPropertygt
- to the rdf schema
- Add
- ltcollcollectedBy rdfresource"urnlsidcollect
ion.orgpeople1"/gt - To the instance
41Linking to other data
- See lsidresurnlsidcollection.orgspecimens6
42Java LSID Code
- Highlights of the LSID Java Stack
- Simple APIs, synchronous and asynchronous
- Support for HTTP, SOAP and FTP
- WSDL, Data and Metadata Cache
- Highly configurable
- Cache location/policy, host-mappings, metadata
handling - Leverages many Java technologies
- Xerces, Xalan, Axis, wsdl4J, and Castor
43Java LSID Web Application
LSID Server
Startup
Load services
Services Configuration File
Create registry
Service Registry
Internet
LSID Request
HTTP Req
Lookup Service for LSID authority
HTTP Resp
Response
LSID Authority Classes
Call appropriate authority class function
44LSID Resolution code (Client)
- Given an LSID in String format, we can easily
open an InputStream to the data or metadata.
(listing1) - LSID lsid new LSID(urnlsid)
- LSIDResolver resolver new LSIDResolver(lsid)
- InputStream data resolver.getData()
- If we care about which protocol or location to
use, we can choose from those available in the
WSDL returned from getAvailableServices. - LSIDWSDLWrapper wsdl resolver.getWSDLWrapper()
- LSIDDataPort port wsdl.getPortForProtocol(WSDLCo
nstants.SOAP) - InputStream in resolver.getData(port)
45LSID References
- LSID Source Forge - http//lsid.sourceforge.net/
- LSID .NET Source Forge - http//sourceforge.net/pr
ojects/lsid-dotnet - LSID Tutorial - http//www-128.ibm.com/developerwo
rks/opensource/library/os-lsid/ - LSID Specification - http//www.omg.org/cgi-bin/do
c?dtc/04-05-01 - LSID Tester - http//linnaeus.zoology.gla.ac.uk/r
page/lsid/tester/ - LSID Launchpad - http//www-124.ibm.com/developerw
orks/downloads/detail.php?group_id124whatrelei
d553 - GUID Subgroup - http//www.tdwg.org/TDWG_GUID.htm
- GUID Subgroup Reports
- http//wiki.gbif.org/guidwiki/wikka.php?wakkaGUID
2Reportshow_comments1 - http//wiki.tdwg.org/twiki/pub/TIP/TipDocuments/GU
ID1Report.pdf - Firefox LSID developer site - http//lsid.mozdev.o
rg/
46Thanks to
- Ricardo Pereira
- Roger Hyam
- Rod Page
- Lee Belbin
- The team at Landcare Research
- Jerry Cooper
- Nick Spencer
- Aaron Wilton
- Michael Cochrane