Upload
march
View
34
Download
0
Tags:
Embed Size (px)
DESCRIPTION
How We Use Epimorphics Linked Data API (ELDA) in Costal and Marine Spatial Planning Vocabulary project. Linyun Fu 2013-03-06. Linked Data API. ELDA Stands for Epimorphics Linked Data API Java open-source implementation - PowerPoint PPT Presentation
Citation preview
How We Use Epimorphics Linked Data API (ELDA) in Costal and Marine Spatial Planning Vocabulary project
Linyun Fu2013-03-06
Linked Data API• ELDA Stands for Epimorphics Linked Data API– Java open-source implementation
• Linked Data API Specification: http://code.google.com/p/linked-data-api/wiki/Specification– http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocabs – http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims – http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/te
rm/0008
– http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/terms
– http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/term/0008/narrower
ELDA• Linked data API introduction by Epimorphics Ltd.:
http://www.epimorphics.com/web/projects/linked-data-api • Downloadable from
http://code.google.com/p/elda/downloads/list • java -jar elda-VERSION.jar• Quick start doc:
http://elda.googlecode.com/hg/deliver-elda/src/main/webapp/lda-assets/docs/E1.2.19-index.html
• Installing CMSPV Vocabulary Service: http://tw.rpi.edu/web/project/CMSPV/InstallingVocabularyService
System architecture
Next steps
• Identifying an endpoint• Binding variables• Selecting resources• Viewing resources• Formatting graphs
• All done with spec files
Spec files• sample spec file:
https://scm.escience.rpi.edu/svn/public/projects/cmspv/branches/elda/specs/cmspv.spec.ttl
• in /{path/to}/Elda_standalone_{version}/webapps/elda/WEB-INF/web.xml: <servlet>
<servlet-name>loader-init</servlet-name> <servlet-class>com.epimorphics.lda.routing.Loader</servlet-class> <init-param> <param-name>com.epimorphics.api.initialSpecFile</param-name> <param-value>cmspv::specs/cmspv.spec.ttl </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
Identifying an endpointspec:api a api:API;...api:sparqlEndpoint <http://localhost:3030/cmspv/query>;
#api:sparqlEndpoint <local:data/example-data.ttl>api:base "http://aquarius.tw.rpi.edu:8047/elda/cmspv";
...api:variable[api:name "base"; api:value "http://cmspv.tw.rpi.edu/rdf"],
...
Binding variablesspec:api a api:API;...
api:sparqlEndpoint <http://localhost:3030/cmspv/query>;
#api:sparqlEndpoint <local:data/example-data.ttl>api:base "http://aquarius.tw.rpi.edu:8047/elda/cmspv";
...api:variable[api:name "base"; api:value "http://cmspv.tw.rpi.edu/rdf"],
...
Selecting resourcesspec:vocabulariesEndpointa api:ListEndpoint;api:uriTemplate "/vocabs";api:exampleRequestPath "/vocabs";api:selector [api:where "?item rdf:type skos:ConceptScheme. ?item skos:prefLabel ?label.";api:orderBy "?label";];.
http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocabs api:base is "http://aquarius.tw.rpi.edu:8047/elda/cmspv"
More examples
spec:vocabularyEndpointa api:ItemEndpoint;api:uriTemplate "/vocab/{vocabulary}";api:itemTemplate "{base}/vocab/{vocabulary}";api:exampleRequestPath "/vocab/nims";.
http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims
shows resource: http://cmspv.tw.rpi.edu/rdf/vocab/nims{base} = http://cmspv.tw.rpi.edu/rdf; {vocabulary} = nims
spec:termEndpointa api:ItemEndpoint;api:uriTemplate "/vocab/{vocabulary}/term/{term}";api:itemTemplate "{base}/vocab/{vocabulary}/term/{term}";api:exampleRequestPath "/vocab/nims/term/0008"; .
http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/term/0008
spec:vocabularyTermsEndpointa api:ListEndpoint;rdfs:comment "I am making an assumption that I can easily map the scheme URI based on the Linked Data URI";api:uriTemplate "/vocab/{vocabulary}/terms";api:exampleRequestPath "/vocab/nims/terms";api:variable [ api:name "scheme";api:value "{base}/vocab/{vocabulary}";api:type rdfs:Resource;] ;api:selector [api:where "?item skos:inScheme ?scheme. ?item skos:prefLabel ?label.";api:orderBy "?label";] ;.
http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/terms
spec:NarrowerTermsEndpointa api:ListEndpoint;api:uriTemplate "/vocab/{vocabulary}/term/{term}/narrower";api:exampleRequestPath "/vocab/nims/term/0008/narrower";api:variable [ api:name "concept";api:value "{base}/vocab/{vocabulary}/term/{term}";api:type rdfs:Resource;] ;api:selector [api:where "?concept skos:narrower ?item. ?item skos:prefLabel ?label.";api:orderBy "?label";] ;.
http://aquarius.tw.rpi.edu:8047/elda/cmspv/vocab/nims/term/0008/narrower
Viewing resources, formatting graphs
spec:SKOSViewera api:Viewer;api:name "SKOS Viewer";api:include api:labelledDescribeViewer;extras:describeAllLabel skos:prefLabel;.
spec:htmlFormattera api:XsltFormatter;api:name "html";api:mimeType "text/html; charset=utf-8";api:stylesheet "lda-assets/xslt/cmspv.xsl";.
A broader chain viewerspec:broaderChainViewer
a api:Viewer;api:name "Broader Chain Viewer";api:include api:describeViewer;api:properties "prefLabel, broader.prefLabel, broader.broader.prefLabel, broader.broader.broader.prefLabel" .
…
spec:broaderChainEndpointa api:ItemEndpoint;api:uriTemplate "/vocab/{vocabulary}/term/{term}/broaderChain";api:itemTemplate "{base}/vocab/{vocabulary}/term/{term}";api:exampleRequestPath "/vocab/nims/term/0038/broaderChain";api:defaultViewer spec:broaderChainViewer; .
Don’t forgetspec:api
a api:API;
…
api:viewerspec:broaderChainViewer,
…
api:endpointspec:broaderChainEndpoint,
…
skos:broadera rdf:Property;api:label "broader";.
skos:prefLabela rdf:Property;api:label "prefLabel";.
/vocab/nims/term/0032/broaderChain
Using Fuseki assemblercmspv-assembler.ttl:@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .
<#dataset> a ja:RDFDataset ;ja:defaultGraph [a ja:OntModel ;ja:ontModelSpec ja:OWL_MEM_MICRO_RULE_INF ;ja:content [ja:externalContent <http://www.w3.org/2009/08/skos-reference/skos.rdf>, <file:////projects/cmspv/branches/initial_rdf/skos/nims.ttl>] ].
Run fuseki with: fuseki-server --desc=cmspv-assembler.ttl /cmspv
Cherry-pick the rules@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .@prefix : <#> .
<#dataset> a ja:RDFDataset ;ja:graph :inf .
:inf a ja:InfModel ;ja:baseModel :data ;ja:reasoner[ ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ; ja:rulesFrom <file:////projects/cmspv/branches/fuseki/skos.rules>] .
:data a ja:MemoryModel ;ja:content [ja:externalContent <http://www.w3.org/2009/08/skos-reference/skos.rdf>, <file:////projects/cmspv/branches/initial_rdf/skos/nims.ttl>] .
The rules file# RDFS Closure rules[rdfs6: (?p rdfs:subPropertyOf ?q), notEqual(?p,?q) -> table(?p, ?q),
[ (?a ?q ?b) <- (?a ?p ?b)] ]
# inverseOf[inverseOf1: (?P owl:inverseOf ?Q) -> (?Q owl:inverseOf ?P) ][inverseOf2: (?P owl:inverseOf ?Q) -> table(?P), table(?Q), [inverseOf2b:
(?X ?P ?Y) <- (?Y ?Q ?X)] ]
# TransitiveProperty[transitiveProperty1: (?P rdf:type owl:TransitiveProperty) -> table(?P),
[transitiveProperty1b: (?A ?P ?C) <- bound (?C), (?B ?P ?C), (?A ?P ?B)] [transitiveProperty1b: (?A ?P ?C) <- unbound (?C), (?A ?P ?B) (?B ?P ?C)] ]
# SymmetricProperty[symmetricProperty1: (?P rdf:type owl:SymmetricProperty) -> table(?P), [symmetricProperty1b: (?X ?P ?Y) <- (?Y ?P ?X)] ]
Direct access
• SPARQL endpoint: http://aquarius.tw.rpi.edu:3047/post.html
• RDF file: https://scm.escience.rpi.edu/svn/public/projects/cmspv/branches/initial_rdf/skos/nims.ttl