diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..83f2730 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +catalog-v001.xml diff --git a/LODE/Primer.css b/LODE/Primer.css new file mode 100644 index 0000000..cbdbf2e --- /dev/null +++ b/LODE/Primer.css @@ -0,0 +1,45 @@ +/* define a class "noprint" for sections which don't get printed */ +.noprint { display: none; } + +/* our syntax menu for switching */ +div.syntaxmenu { + border: 1px dotted black; + padding:0.5em; + margin: 1em; +} + +@media print { + div.syntaxmenu { display:none; } +} + +/* use tab-like headers for syntax examples */ +div.exampleheader { + font-size: 90%; + float: left; + background: #F9F9F9; + color: #2F6FAB; + border: 1px dashed #2F6FAB; + border-bottom: 0px; + padding-top: 2px; +} + +div.exampleheader span.exampleheader { + background: #F9F9F9; + padding-top: 0px; + padding-right: 10px; + padding-left: 10px; + padding-bottom: 3px; + padding-top: 0px; +} + +/* Also copy MediaWiki style here, so it will not look different when exported */ +div.fssyntax pre, div.rdfxml pre, div.owlxml pre, div.turtle pre, div.manchester pre { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + color: black; + line-height: 1.1em; + padding: 1em; + clear: both; + margin-left: 0em; +} +/* (further styles directly embedded in header template) */ \ No newline at end of file diff --git a/LODE/extra.css b/LODE/extra.css new file mode 100644 index 0000000..f2e3d01 --- /dev/null +++ b/LODE/extra.css @@ -0,0 +1,124 @@ +body { + text-align: justify; +} + +h1 { + line-height: 110%; +} + +.hlist { + border: 1px solid navy; + padding:5px; + background-color: #F4FFFF; +} + +.hlist li { + display: inline; + display: inline-table; + list-style-type: none; + padding-right: 20px; + +} + +.entity { + border: 1px solid navy; + margin:5px 0px 5px 0px; + padding: 5px; +} + +.type-c { + cursor:help; + color:orange; +} + +.type-op { + cursor:help; + color:navy; +} + +.type-dp { + cursor:help; + color:green; +} + +.type-ap { + cursor:help; + color:maroon; +} + +.type-ni { + cursor:help; + color:brown; +} + +.logic { + color:purple; + font-weight:bold; +} + +h3 { + margin-top: 3px; + padding-bottom: 5px; + border-bottom: 1px solid navy; +} + +h2 { + margin-top:40px; +} + +.dotted { + border-bottom: 1px dotted gray; +} + +dt { + margin-top:5px; +} + +.description { + border-top: 1px dashed gray; + border-bottom: 1px dashed gray; + background-color: rgb(242, 243, 244); + margin-top:5px; + padding-bottom:5px; +} + +.description dl { + background-color: rgb(242, 243, 244); +} + +.description ul { + padding-left: 12px; + margin-top: 0px; +} + +.backlink { + font-size:10pt; + text-align:right; + float:right; + color:black; + padding: 2px; + border: 1px dotted navy; + background-color: #F4FFFF; +} + +.imageblock { + text-align: center; +} + +.imageblock img { + border:1px solid gray; +} + +.endnote { + margin-top: 40px; + border-top: 1px solid gray; + padding-top: 10px; + text-align: center; + color:gray; + font-size:50%; +} + +.literal { + color:green; + font-style:italic; +} \ No newline at end of file diff --git a/LODE/favicon.ico b/LODE/favicon.ico new file mode 100644 index 0000000..1447bef Binary files /dev/null and b/LODE/favicon.ico differ diff --git a/LODE/jquery.js b/LODE/jquery.js new file mode 100644 index 0000000..48590ec --- /dev/null +++ b/LODE/jquery.js @@ -0,0 +1,18 @@ +/*! + * jQuery JavaScript Library v1.6.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Jun 30 14:16:56 2011 -0400 + */ +(function(a,b){function cv(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cs(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"":"")+""),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cr(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cq(){cn=b}function cp(){setTimeout(cq,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bx(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bm(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(be,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bl(a){f.nodeName(a,"input")?bk(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bk)}function bk(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bj(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bi(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bh(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i=0===c})}function V(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function N(a,b){return(a&&a!=="*"?a+".":"")+b.replace(z,"`").replace(A,"&")}function M(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;ic)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function K(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function E(){return!0}function D(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"$1-$2").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z])/ig,x=function(a,b){return b.toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!A){A=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1;var c;for(c in a);return c===b||D.call(a,c)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(b,c,d){a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b)),d=c.documentElement,(!d||!d.nodeName||d.nodeName==="parsererror")&&e.error("Invalid XML: "+b);return c},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c
a",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0},m&&f.extend(p,{position:"absolute",left:-1e3,top:-1e3});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="
",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="
t
",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([a-z])([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g=f.expando,h=typeof c=="string",i,j=a.nodeType,k=j?f.cache:a,l=j?a[f.expando]:a[f.expando]&&f.expando;if((!l||e&&l&&!k[l][g])&&h&&d===b)return;l||(j?a[f.expando]=l=++f.uuid:l=f.expando),k[l]||(k[l]={},j||(k[l].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?k[l][g]=f.extend(k[l][g],c):k[l]=f.extend(k[l],c);i=k[l],e&&(i[g]||(i[g]={}),i=i[g]),d!==b&&(i[f.camelCase(c)]=d);if(c==="events"&&!i[c])return i[g]&&i[g].events;return h?i[f.camelCase(c)]||i[c]:i}},removeData:function(b,c,d){if(!!f.acceptData(b)){var e=f.expando,g=b.nodeType,h=g?f.cache:b,i=g?b[f.expando]:f.expando;if(!h[i])return;if(c){var j=d?h[i][e]:h[i];if(j){delete j[c];if(!l(j))return}}if(d){delete h[i][e];if(!l(h[i]))return}var k=h[i][e];f.support.deleteExpando||h!=a?delete h[i]:h[i]=null,k?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=k):g&&(f.support.deleteExpando?delete b[f.expando]:b.removeAttribute?b.removeAttribute(f.expando):b[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=w:v&&c!=="className"&&(f.nodeName(a,"form")||u.test(c))&&(i=v)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.support.getSetAttribute?a.removeAttribute(b):(f.attr(a,b,""),a.removeAttributeNode(a.getAttributeNode(b))),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},tabIndex:{get:function(a){var c=a.getAttributeNode("tabIndex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}},value:{get:function(a,b){if(v&&f.nodeName(a,"button"))return v.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(v&&f.nodeName(a,"button"))return v.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==b?g:a[c]},propHooks:{}}),w={get:function(a,c){return f.prop(a,c)?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(f.attrFix=f.propFix,v=f.attrHooks.name=f.attrHooks.title=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,c){var d=a.getAttributeNode(c);if(d){d.nodeValue=b;return b}}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var x=/\.(.*)$/,y=/^(?:textarea|input|select)$/i,z=/\./g,A=/ /g,B=/[^\w\s.|`]/g,C=function(a){return a.replace(B,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=D;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=D);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),C).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i. +shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},J=function(c){var d=c.target,e,g;if(!!y.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=I(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:J,beforedeactivate:J,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&J.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&J.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",I(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in H)f.event.add(this,c+".specialChange",H[c]);return y.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return y.test(this.nodeName)}},H=f.event.special.change.filters,H.focus=H.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g0)for(h=g;h0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=T.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a||typeof a=="string")return f.inArray(this[0],a?f(a):this.parent().children());return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(V(c[0])||V(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=S.call(arguments);O.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!U[a]?f.unique(e):e,(this.length>1||Q.test(d))&&P.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var X=/ jQuery\d+="(?:\d+|null)"/g,Y=/^\s+/,Z=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,$=/<([\w:]+)/,_=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};bf.optgroup=bf.option,bf.tbody=bf.tfoot=bf.colgroup=bf.caption=bf.thead,bf.th=bf.td,f.support.htmlSerialize||(bf._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(X,""):null;if(typeof a=="string"&&!bb.test(a)&&(f.support.leadingWhitespace||!Y.test(a))&&!bf[($.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Z,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j +)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bi(a,d),e=bj(a),g=bj(d);for(h=0;e[h];++h)bi(e[h],g[h])}if(b){bh(a,d);if(c){e=bj(a),g=bj(d);for(h=0;e[h];++h)bh(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!ba.test(k))k=b.createTextNode(k);else{k=k.replace(Z,"<$1>");var l=($.exec(k)||["",""])[1].toLowerCase(),m=bf[l]||bf._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=_.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&Y.test(k)&&o.insertBefore(b.createTextNode(Y.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bo.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle;c.zoom=1;var e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.filter=bn.test(g)?g.replace(bn,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bx(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(by=function(a,c){var d,e,g;c=c.replace(bp,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bz=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bq.test(d)&&br.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bx=by||bz,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bB=/%20/g,bC=/\[\]$/,bD=/\r?\n/g,bE=/#.*$/,bF=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bG=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bH=/^(?:about|app|app\-storage|.+\-extension|file|widget):$/,bI=/^(?:GET|HEAD)$/,bJ=/^\/\//,bK=/\?/,bL=/)<[^<]*)*<\/script>/gi,bM=/^(?:select|textarea)/i,bN=/\s+/,bO=/([?&])_=[^&]*/,bP=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bQ=f.fn.load,bR={},bS={},bT,bU;try{bT=e.href}catch(bV){bT=c.createElement("a"),bT.href="",bT=bT.href}bU=bP.exec(bT.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bQ)return bQ.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bL,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bM.test(this.nodeName)||bG.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bD,"\r\n")}}):{name:b.name,value:c.replace(bD,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?f.extend(!0,a,f.ajaxSettings,b):(b=a,a=f.extend(!0,f.ajaxSettings,b));for(var c in{context:1,url:1})c in b?a[c]=b[c]:c in f.ajaxSettings&&(a[c]=f.ajaxSettings[c]);return a},ajaxSettings:{url:bT,isLocal:bH.test(bU[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":"*/*"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML}},ajaxPrefilter:bW(bR),ajaxTransport:bW(bS),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a?4:0;var o,r,u,w=l?bZ(d,v,l):b,x,y;if(a>=200&&a<300||a===304){if(d.ifModified){if(x=v.getResponseHeader("Last-Modified"))f.lastModified[k]=x;if(y=v.getResponseHeader("Etag"))f.etag[k]=y}if(a===304)c="notmodified",o=!0;else try{r=b$(d,w),c="success",o=!0}catch(z){c="parsererror",u=z}}else{u=c;if(!c||a)c="error",a<0&&(a=0)}v.status=a,v.statusText=c,o?h.resolveWith(e,[r,c,v]):h.rejectWith(e,[v,c,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,c]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bF.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bE,"").replace(bJ,bU[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bN),d.crossDomain==null&&(r=bP.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bU[1]&&r[2]==bU[2]&&(r[3]||(r[1]==="http:"?80:443))==(bU[3]||(bU[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bX(bR,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bI.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bK.test(d.url)?"&":"?")+d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bO,"$1_="+x);d.url=y+(y===d.url?(bK.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", */*; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bX(bS,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){status<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bB,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn,co=a.webkitRequestAnimationFrame||a.mozRequestAnimationFrame||a.oRequestAnimationFrame;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cr("show",3),a,b,c);for(var g=0,h=this.length;g=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b
";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cu.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cu.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cv(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cv(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c];return e.document.compatMode==="CSS1Compat"&&g||e.document.body["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var h=f.css(e,d),i=parseFloat(h);return f.isNaN(i)?h:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file diff --git a/LODE/jquery.scrollTo.js b/LODE/jquery.scrollTo.js new file mode 100644 index 0000000..73a3341 --- /dev/null +++ b/LODE/jquery.scrollTo.js @@ -0,0 +1,11 @@ +/** + * jQuery.ScrollTo - Easy element scrolling using jQuery. + * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * Date: 5/25/2009 + * @author Ariel Flesler + * @version 1.4.2 + * + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + */ +;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery); \ No newline at end of file diff --git a/LODE/owl.css b/LODE/owl.css new file mode 100644 index 0000000..68bfdf6 --- /dev/null +++ b/LODE/owl.css @@ -0,0 +1,238 @@ +.RFC2119 { + text-transform: lowercase; + font-style: italic; +} +.nonterminal { + font-weight: bold; + font-family: sans-serif; + font-size: 95%; +} +#abstract br { + /* doesn't work right SOMETIMES + margin-bottom: 1em; */ +} +.name { + font-family: monospace; +} +.buttonpanel { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dotted black; +} +.grammar { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + font-family: monospace; +} +.image { + text-align: center; +} +.centered { + text-align: center; + padding-top: 4ex; + padding-bottom: 4ex; +} +.centered table { + margin: 0 auto; + text-align: left; +} +.caption { + font-weight: bold; +} +.indent { + margin-left: 20px; +} +.atrisknote { + padding: 5px; + margin-top: 10px; + margin-bottom: 10px; + border: solid 2px blue; + background-color: #FFA; +} +.atrisknotehead { + font-style: italic; +} + +/* Stying the examples. */ + +.anexample:before { + content: "Example:"; + font-family: sans-serif; + font-size: 1.6ex; + font-weight: bold; +} +.anexample { + margin-top: 1ex; + margin-bottom: 1ex; + padding-left: 1ex; + padding-right: 1ex; + padding-top: 1ex; + padding-bottom: 0.6ex; + border: 1px dashed #2f6fab; + background-color: #f9f9f9; +} +.anexample table { + background-color: #f9f9f9; +} + +/* Styling the parts in the functional-style syntax. */ + +div.fss { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.fss { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.fss caption.fss { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.fss td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} + +/* Styling the parts in the RDF syntax. */ + +div.rdf{ + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +table.rdf { + margin: 0px 0px 0px 0px; + padding: 0px 0px 0px 0px; + width: 100%; +} +table.rdf caption.rdf { + font-size: 1.5ex; + font-weight: bold; + text-align: left; + padding-left: 10px; +} +table.rdf td:first-child { + font-family: monospace; + padding-left: 20px; + padding-right: 20px; + width: 60%; +} + +/* Styling the XML syntax. */ + +div.xmlsyn { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; + font-family: monospace; +} +div.axioms { + margin-top: 10px; + margin-bottom: 10px; + margin-left: 20px; + margin-right: 20px; +} + +/* Other styles. */ + +table.complexity td { + text-align: center; +} +table.allname td { + font-family: monospace; +} +table.canonicalparsing { + margin-left: 20px; + border-style: none; +} +table.canonicalparsing td { + vertical-align: top; + padding: 2px 2px 2px 2px; +} +table.canonicalparsing td.two { + padding-left: 30px; +} + +/* The following are classes for templates used in the editing process. */ + +.review { + padding: 5px; + border: solid 1px black; + margin-left: 10%; + margin-top: 10px; + margin-bottom: 10px; + background-color: #FFA; + font-size: smaller; +} +.reviewauthor { + font-size: smaller; + font-style: italic; +} +.ednote { + padding: 5px; + border: solid 1px black; + margin-top: 10px; + margin-bottom: 10px; +} +.ednotehead { + font-weight: bold; +} + +/* override mediawiki's beautiful DL styling... */ +dl { + background: white; + width: 100%; + border: none; + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; +} + +div { + margin-top: 0; + margin-bottom: 0; +} +#fulltitle { + font-size: 140%; + font-weight: bold; +} + +.xml { + color: red +} + +.rdbms{ +color: red +} + +/* just copying from wiki, so it stays through TR. Currently + affects Primer, at least */ +pre { + background-color:#F9F9F9; + border:1px dashed #2F6FAB; + color:black; + line-height:1.1em; + padding:1em; +} \ No newline at end of file diff --git a/LODE/rec.css b/LODE/rec.css new file mode 100644 index 0000000..d15aeff --- /dev/null +++ b/LODE/rec.css @@ -0,0 +1,82 @@ +/* Style for a "Recommendation" */ + +/* + Copyright 1997-2003 W3C (MIT, ERCIM, Keio). All Rights Reserved. + The following software licensing rules apply: + http://www.w3.org/Consortium/Legal/copyright-software */ + +/* $Id: base.css,v 1.25 2006/04/18 08:42:53 bbos Exp $ */ + +body { + padding: 2em 1em 2em 70px; + margin: 0; + font-family: sans-serif; + color: black; + background: white; + background-position: top left; + background-attachment: fixed; + background-repeat: no-repeat; +} +:link { color: #00C; background: transparent } +:visited { color: #609; background: transparent } +a:active { color: #C00; background: transparent } + +a:link img, a:visited img { border-style: none } /* no border on img links */ + +a img { color: white; } /* trick to hide the border in Netscape 4 */ +@media all { /* hide the next rule from Netscape 4 */ + a img { color: inherit; } /* undo the color change above */ +} + +th, td { /* ns 4 */ + font-family: sans-serif; +} + +h1, h2, h3, h4, h5, h6 { text-align: left } +/* background should be transparent, but WebTV has a bug */ +h1, h2, h3 { color: #005A9C; background: white } +h1 { font: 170% sans-serif } +h2 { font: 140% sans-serif } +h3 { font: 120% sans-serif } +h4 { font: bold 100% sans-serif } +h5 { font: italic 100% sans-serif } +h6 { font: small-caps 100% sans-serif } + +.hide { display: none } + +div.head { margin-bottom: 1em } +div.head h1 { margin-top: 2em; clear: both } +div.head table { margin-left: 2em; margin-top: 2em } + +p.copyright { font-size: small } +p.copyright small { font-size: small } + +@media screen { /* hide from IE3 */ +a[href]:hover { background: #ffa } +} + +pre { margin-left: 2em } +/* +p { + margin-top: 0.6em; + margin-bottom: 0.6em; +} +*/ +dt, dd { margin-top: 0; margin-bottom: 0 } /* opera 3.50 */ +dt { font-weight: bold } + +pre, code { font-family: monospace } /* navigator 4 requires this */ + +ul.toc, ol.toc { + list-style: disc; /* Mac NS has problem with 'none' */ + list-style: none; +} + +@media aural { + h1, h2, h3 { stress: 20; richness: 90 } + .hide { speak: none } + p.copyright { volume: x-soft; speech-rate: x-fast } + dt { pause-before: 20% } + pre { speak-punctuation: code } +} + diff --git a/images/pav-overview-755px.png b/images/pav-overview-755px.png new file mode 100644 index 0000000..987e13c Binary files /dev/null and b/images/pav-overview-755px.png differ diff --git a/images/pav-overview.pdf b/images/pav-overview.pdf new file mode 100644 index 0000000..6b93f2f Binary files /dev/null and b/images/pav-overview.pdf differ diff --git a/images/pav-overview.png b/images/pav-overview.png new file mode 100644 index 0000000..e90f8cc Binary files /dev/null and b/images/pav-overview.png differ diff --git a/images/pav-overview.svg b/images/pav-overview.svg new file mode 100644 index 0000000..ba70ade --- /dev/null +++ b/images/pav-overview.svg @@ -0,0 +1,1144 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Page-1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity + a resource + + Sheet.2 + + + + + + + Sheet.3 + + + + + + + + + + + + + + + a resource + + + Primary Key Separator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute + pav:contributedOn pav:authoredOn pav:curatedOn pav:createdOn ... + + + + pav:contributedOnpav:authoredOnpav:curatedOnpav:createdOnpav:lastUpdateOnpav:importedOnpav:lastRefreshedOnpav:retrievedOnpav:sourceAccessedOnpav:sourceLastAccessedOnpav:version + + Sheet.10 + PK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity.24 + an agent (e.g. person) + + Sheet.25 + + + + + + + Sheet.26 + + + + + + + + + + + + + + + an agent (e.g. person) + + + Primary Key Separator.31 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute.35 + foaf:name ... + + + + foaf:name... + + Sheet.36 + PK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Directed Association + pav:contributedBy + + + + + + pav:contributedBy + + + + + + + + + + + + + + + + + + + + + + Directed Association.87 + pav:authoredBy + + + + + + pav:authoredBy + + + + + + + + + + + + + + + + + + + + + + Directed Association.92 + pav:curatedBy + + + + + + pav:curatedBy + + + + + + + + + + + + + + + + + + + + + + Directed Association.97 + pav:createdBy + + + + + + pav:createdBy + + + + + + + + + + + + + + + + + + + + Directed Association.102 + pav:createdWith + + + + + + pav:createdWith + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity.63 + an agent (e.g. software) + + Sheet.64 + + + + + + + Sheet.65 + + + + + + + + + + + + + + + an agent (e.g. software) + + + Primary Key Separator.70 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute.74 + + + Sheet.75 + PK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity.115 + a location + + Sheet.116 + + + + + + + Sheet.117 + + + + + + + + + + + + + + + a location + + + Primary Key Separator.122 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute.123 + + + Sheet.124 + PK + + + + + + + + + + + + + + + + + + + + + + + + + + + Directed Association.129 + pav:createdAt + + + + + + pav:createdAt + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity.134 + another resource + + Sheet.135 + + + + + + + Sheet.136 + + + + + + + + + + + + + + + another resource + + + Primary Key Separator.141 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute.142 + + + Sheet.143 + PK + + + + + + + + + + + + + + + + + + + + + + + + + Directed Association.148 + pav:derivedFrom + + + + + + pav:derivedFrom + + + + + + + + + + + + + + + + + + + + Directed Association.153 + pav:importedFrom + + + + + + pav:importedFrom + + + + + + + + + + + + + + + + + + Directed Association.163 + pav:retrievedFrom + + + + + + pav:retrievedFrom + + + + + + + + + + + + + + + + + + Directed Association.168 + pav:sourceAccessedAt + + + + + + pav:sourceAccessedAt + + + + + + + + + + + + + + + + + + + + + Directed Association.173 + pav:previousVersion + + + + + + pav:previousVersion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Entity.183 + an agent (e.g. organization) + + Sheet.184 + + + + + + + Sheet.185 + + + + + + + + + + + + + + + + an agent (e.g. organization) + + + Primary Key Separator.187 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute.188 + + + Sheet.189 + PK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Directed Association.196 + pav:providedBy + + + + + + pav:providedBy + + + + + + + + + + + + + + + + + + + + Directed Association.201 + pav:importedBy + + + + + + pav:importedBy + + + + + + + + + + + + + + + + + + + + + Directed Association.206 + pav:retrievedBy + + + + + + pav:retrievedBy + + + + + + + + + + + + + + + + + + + + + + Directed Association.211 + pav:sourceAccessedBy + + + + + + pav:sourceAccessedBy + + + diff --git a/images/pav-overview.vsdx b/images/pav-overview.vsdx new file mode 100644 index 0000000..ce2eb06 Binary files /dev/null and b/images/pav-overview.vsdx differ diff --git a/mapping/dcterms-void.ttl b/mapping/dcterms-void.ttl new file mode 100644 index 0000000..53410aa --- /dev/null +++ b/mapping/dcterms-void.ttl @@ -0,0 +1,58 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix owl: . +@prefix skos: . +@prefix dct: . +@prefix pav: . +@prefix prov: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . +@prefix : <#> . + +# This metadata file +<> a owl:Ontology, void:DatasetDescription, prov:Bundle ; + owl:imports , , , + ; + dct:title "VOID description of PAV-DCT SKOS mapping"@en ; + # Provenance is right here (right below, in fact!) + prov:has_provenance <> ; + # Provenance about the description + pav:createdBy ; + pav:createdOn "2013-03-01T13:57:00+00:00"^^xsd:dateTime ; + pav:lastUpdateOn "2013-03-01T14:55:00+00:00"^^xsd:dateTime ; + foaf:primaryTopic :linkset . + + prov:specializationOf :linkset . + +:linkset a void:Linkset, prov:Entity ; + rdfs:label "SKOS mapping of PAV to Dublin Core terms"@en ; + dct:title "SKOS mapping of PAV to Dublin Core terms"@en ; + dct:description """A loose mapping between the two ontologies PAV +and DC Terms. See comments in PAV ontology for why DC Terms don't map +directly to PAV using OWL."""@en; + dct:subject , ; + dct:license ; + # Linkset from PAV to Dublin Core + void:subjectsTarget ; + void:objectsTarget ; + # using skos:mappingRelation (subproperties) + void:linkPredicate skos:mappingRelation ; + rdfs:comment """Although void:linkPredicate is skos:mappingRelation the +mapping is done using its subproperties ,hence the OWL import of +SKOS above. An OWL reasoner might have to be run first."""@en ; + prov:alternateOf ; + void:dataDump ; + # Provenance of the linkset (ie. the data dump) + prov:has_provenance <> ; + pav:createdBy ; + pav:createdOn "2013-03-01T13:57:00+00:00"^^xsd:dateTime ; + pav:authoredBy ; + pav:authoredOn "2013-02-19T16:21:00+00:00"^^xsd:dateTime ; + pav:sourceAccessedAt , , + ; + pav:sourceAccessedOn "2013-02-19T11:55:27+00:00"^^xsd:dateTime ; + pav:previousVersion ; + pav:version "0.2.1" . + + diff --git a/mapping/dcterms.ttl b/mapping/dcterms.ttl new file mode 100644 index 0000000..769e384 --- /dev/null +++ b/mapping/dcterms.ttl @@ -0,0 +1,229 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix owl: . +@prefix skos: . +@prefix dct: . +@prefix pav: . +@prefix prov: . +@prefix void: . +@prefix xsd: . +@prefix foaf: . + +# This file +<> a owl:Ontology, prov:Entity ; + owl:imports , , prov:, + ; + rdfs:comment """Depend on imported SKOS bindings"""@en ; + dct:isFormatOf ; + foaf:primaryTopic ; + prov:specializationOf ; + void:inDataset ; + prov:specializationOf ; + ## For detailed provenance, see: + prov:has_provenance ; + prov:has_anchor . + +# PURL identifies the mapping in general + a prov:Entity ; + prov:has_provenance ; + rdfs:label "SKOS mapping of PAV to Dublin Core terms"@en ; + + pav:previousVersion ; + pav:version "0.2.1" . + +## DCT concepts + +dct:creator skos:inScheme dct: . +dct:created skos:inScheme dct: . +dct:contributor skos:inScheme dct: . +dct:date skos:inScheme dct: . +dct:spatial skos:inScheme dct: . +dct:source skos:inScheme dct: . +dct:isFormatOf skos:inScheme dct: . +dct:modified skos:inScheme dct: . +dct:references skos:inScheme dct: . +dct:contributor skos:inScheme dct: . +dct:replaces skos:inScheme dct: . +dct:isVersionOf skos:inScheme dct: . +dct:modified skos:inScheme dct: . +dct:publisher skos:inScheme dct: . + + +## The actual SKOS mapping + +pav:authoredBy skos:inScheme pav: ; + # TODO: Move internal PAV relations elsewhere + skos:broadMatch dct:creator ; + skos:note """Broad match to dct:creator due to the common +usage of dct:creator to mean the creator of the Work rather than just +the creator of the particular resource. Creating the representation +of a resource is in PAV covered instead by pav:createdBy, +but would in DC Terms also be covered by dct:creator, +therefore this is not a skos:closeMatch."""@en . + +pav:authoredOn skos:inScheme pav: ; + skos:broadMatch dct:created . + +pav:curatedBy skos:inScheme pav: ; + skos:note """DC Terms has no concept of curators, but +pav:curatedBy would (having broader pav:contributedBy) have an +implied broad match to dct:contributor"""@en . + +pav:curatedOn skos:inScheme pav: . + +pav:contributedBy skos:inScheme pav: ; + skos:closeMatch dct:contributor ; + skos:note """Close match due its the common usage to mean someone who added to the Work of the resource (usually not just the digital representation), but not skos:exactMatch as purely representational contributions represented with dct:contributor should be mapped to pav:createdBy. """@en . + +pav:contributedOn skos:inScheme pav: ; + skos:broadMatch dct:date . + +pav:createdBy skos:inScheme pav: ; + skos:broadMatch dct:creator ; + skos:note """A PAV creator is a particular kind of DC +Terms creator which made the digital representation of the +resource. """@en . + +pav:createdOn skos:inScheme pav: ; + skos:broadMatch dct:created . + +pav:createdWith skos:inScheme pav: ; + skos:relatedMatch dct:creator ; + skos:note """Software agents used by a person is not +normally described by DC Terms, but it would be related to the +dct:creator"""@en. + +pav:createdAt skos:inScheme pav: ; + skos:relatedMatch dct:spatial ; + skos:note """pav:createdAt specifies the location of the +pav:createdBy agent when creating the resource, while dct:spatial specifies the +location of the resource (which presumably at some point +was at that location). Therefore this is a skos:relatedMatch."""@en . + +pav:retrievedFrom skos:inScheme pav: ; + skos:broadMatch dct:source ; + skos:note """Retrieval is a specific form of +derivation in whole, as covered by dct:source. As retrieval is +generally byte-wise equal, the resulting resource is not a +dct:isFormatOf the source."""@en . + +pav:retrievedBy skos:inScheme pav: ; + skos:relatedMatch dct:creator ; + skos:note """The agent retrieving is essentially +the creator of the new resource. However, common use of DC Terms +would in this case acknowledge the original dct:creator rather than +the downloader, therefore only a skos:relatedMatch to dct:creator."""@en +. + +pav:retrievedOn skos:inScheme pav: ; + skos:relatedMatch dct:created ; + skos:broadMatch dct:date . + + +pav:importedFrom skos:inScheme pav: ; + skos:broadMatch dct:source ; + skos:note """Imported is a specialization of 'being +derived from the related resource in whole'. """@en ; + skos:broadMatch dct:isFormatOf ; + skos:note """The resulting resource 'is substantially +the same as the source, but in another format'. However pav:importedFrom +also implies provenance of a directed transformation from the original, +at a given time and performed by an agent, and hence pav:importedFrom +has a broad match dct:isFormatOf"""@en . + +pav:importedBy skos:inScheme pav: ; + skos:broadMatch dct:creator ; + skos:note """The agent importing is essentially a +specialized creator of the new resource, hence has broad match dct:creator. """@en ; + skos:broadMatch dct:contributor ; + skos:note """The agent importing has done a +transformation, so she is somewhat (skos:broadMatch) a dct:contributor"""@en . + +pav:importedOn skos:inScheme pav: ; + skos:broadMatch dct:created . + +pav:lastRefreshedOn skos:inScheme pav: ; + skos:broadMatch dct:modified ; + skos:note """pav:lastRefreshedOn only applies for +refresh by import, and so is more specific than dct:modified"""@en . + +pav:sourceAccessedAt skos:inScheme pav: ; + skos:relatedMatch dct:source ; + skos:note """pav:sourceAccessedAt does not require +a derivation when accessing a source, therefore +this is only a skos:relatedMatch"""@en ; + skos:relatedMatch dct:references ; + skos:note """The source has been used as a +reference, but is not neccessarily cited or pointed to by the resource, +therefore only a skos:relatedMatch."""@en . + +pav:sourceAccessedBy skos:inScheme pav: ; + skos:relatedMatch dct:contributor ; + skos:note """The agent accessing a source is likely +to have contributed to the resource, but as this is +not a requirement in PAV (for instance a source could have +been found to not be relevant), this is only a +skos:relatedMatch."""@en . + +pav:sourceAccessedOn skos:inScheme pav: ; + skos:broadMatch dct:date ; + skos:note """The date a source was accessed is 'A +point or period of time associated with an event in +the lifecycle of the resource.', therefore +skos:broadMatch"""@en . + +pav:sourceLastAccessedOn skos:inScheme pav: ; + skos:broadMatch dct:date . + +pav:version skos:inScheme pav: ; + skos:note """DC Terms has no equivalent of pav:version"""@en . + + +pav:previousVersion skos:inScheme pav: ; + skos:narrowMatch dct:replaces ; + skos:note """dct:replaces is a stronger statement +(skos:narrowMatch) than pav:previousVersion, as the PAV statement does +not neccessarily imply authority to supersede the original. For +instance, a W3C Editors Draft is pav:previousVersion a W3C Working +Draft, but it does not dct:replaces it as it is not official +yet."""@en ; + skos:relatedMatch dct:isVersionOf ; + skos:note """pav:previousVersion is only considered +to have a related match dct:isVersionOf, as pav:previousVersion does not +generally cover 'substantive changes in content'."""@en. + +pav:derivedFrom skos:inScheme pav: ; + skos:broadMatch dct:source ; + skos:note """A related resource from which the described +resource is derived, but pav:derivedFrom is more specific +(skos:broadMatch) than dct:source, as it requires further contributions +to the content, and does not cover say pav:importedFrom or +pav:retrievedFrom."""@en ; + skos:narrowMatch dct:isVersionOf ; + skos:note """pav:derivedFrom do point to a resource of +which the ‘described resource is a version, edition, or adaptation’, but +also allow further derivations. and so has a narrow match +dct:isVersionOf. The pav:derivedFrom does require such contributions to +be in the form of content and not just representation, which corresponds +closely to dct:isFormatOf comment 'Changes in version imply substantive +changes in content rather than differences in format.'"""@en . + +pav:lastUpdateOn skos:inScheme pav: ; + skos:broadMatch dct:modified ; + skos:note """pav:lastUpdateOn only applies to smaller +changes such as fixing a typo, and so dct:modified is a broad +match."""@en . + +pav:providedBy skos:inScheme pav: ; + skos:relatedMatch dct:publisher ; + skos:note """dct:publisher defines the publisher of the +particular resource, while pav:providedBy defines the publisher of the +data which this resource (indirectly or directly) represents. So for +instance if ':imported pav:importedFrom :original' and ':original +dct:publisher :company', then generally ':imported pav:providedBy +:company'. In many cases the dct:publisher for both resources are the +same, but as pav:providedBy does not require that, this is a +skos:relatedMatch only."""@en . + + + diff --git a/mapping/skos.ttl b/mapping/skos.ttl new file mode 100644 index 0000000..544dc2e --- /dev/null +++ b/mapping/skos.ttl @@ -0,0 +1,136 @@ +@prefix rdf: . +@prefix rdfs: . +@prefix owl: . +@prefix skos: . +@prefix dct: . +@prefix pav: . +@prefix prov: . +@prefix void: . +@prefix xsd: . + +<> a owl:Ontology ; + owl:imports , , prov: ; + dct:isFormatOf ; + prov:specializationOf ; + # PROV-AQ self-declaring provenance + prov:has_provenance <> ; + prov:has_anchor . + + a void:Dataset ; + rdfs:label "SKOS relations internal to PAV"@en ; + dct:title "SKOS relations internal to PAV"@en ; + dct:subject pav: ; + rdfs:comment """Internal SKOS relations between PAV concept, in +particular as needed by other SKOS mappings. Note that this is +just a minimal mapping and does not declare skos:prefLabels, etc."""@en ; + dct:description """Internal SKOS relations between PAV concept, in +particular as needed by other SKOS mappings. Note that this is +just a minimal mapping and does not declare skos:prefLabels, etc."""@en ; + pav:authoredBy ; + pav:derivedFrom ; + pav:sourceAccessedAt ; + pav:sourceAccessedOn "2013-02-19T11:55:27+00:00"^^xsd:dateTime ; + pav:createdBy ; + pav:authoredOn "2013-02-19T14:41:36+00:00"^^xsd:dateTime ; + pav:createdOn "2013-03-01T13:53:00+00:00"^^xsd:dateTime ; + pav:version "0.1.1" . + +pav:authoredBy skos:inScheme pav: ; + skos:broader pav:contributedBy ; + skos:related pav:authoredOn . + +pav:authoredOn skos:inScheme pav: ; + skos:broader pav:contributedOn . + +pav:curatedBy skos:inScheme pav: ; + skos:broader pav:contributedBy ; + skos:related pav:curatedOn . + +pav:curatedOn skos:inScheme pav: ; + skos:broader pav:contributedOn . + +pav:contributedBy skos:inScheme pav: ; + skos:related pav:contributedOn . + +pav:contributedOn skos:inScheme pav: . + +pav:createdBy skos:inScheme pav: ; + skos:related pav:contributedBy, pav:createdOn . + +pav:createdOn skos:inScheme pav: ; + skos:related pav:contributedOn . + +pav:createdWith skos:inScheme pav: ; + skos:related pav:createdBy . + +pav:createdAt skos:inScheme pav: ; + skos:related pav:createdBy, pav:createdOn . + +pav:retrievedFrom skos:inScheme pav: . + +pav:retrievedBy skos:inScheme pav: ; + skos:related pav:createdBy, pav:retrievedFrom ; + skos:note """Although the pav:retrievedBy agent is +generally also the pav:createdBy of the resource, this +is not a strict requirement, therefore they are only +skos:related."""@en . + +pav:retrievedOn skos:inScheme pav: ; + skos:related pav:retrievedFrom ; + skos:note """The pav:retrievedOn does not have broader +pav:createdOn, as the property indicates the time the +original was retrieved rather than when the new resource +was created."""@en . + +pav:importedFrom skos:inScheme pav: . + +pav:importedBy skos:inScheme pav: ; + skos:related pav:createdBy, pav:importedFrom ; + skos:note """Although the pav:importedBy agent is +generally also the pav:createdBy of the resource, this +is not a strict requirement, therefore they are only +skos:related."""@en . + +pav:importedOn skos:inScheme pav: ; + skos:related pav:importedFrom ; + skos:note """The pav:importedOn does not have broader +pav:createdOn, although they are often the same value. If both +properties are specified, this indicates the time of accessing and +transforming the original rather than the time the +new resource was created."""@en . + +pav:lastRefreshedOn skos:inScheme pav: ; + skos:related pav:importedFrom ; + skos:broader pav:importedOn ; + skos:note """The last refresh is the last +date resource was (re)imported, but these are not sub-properties in the +OWL as pav:lastRefreshedOn does not imply pav:importedOn."""@en . + +pav:sourceAccessedAt skos:inScheme pav: ; + skos:related pav:derivedFrom ; + skos:note """The resource might also be derived +from the accessed source, but this is not a PAV requirement. """@en . + +pav:sourceAccessedBy skos:inScheme pav: ; + skos:related pav:sourceAccessedAt . + +pav:sourceAccessedOn skos:inScheme pav: ; + skos:related pav:sourceAccessedAt . + +pav:sourceLastAccessedOn skos:inScheme pav: ; + skos:broader pav:sourceAccessedOn . + +pav:version skos:related pav:previousVersion . + +pav:previousVersion skos:inScheme pav: ; + skos:related pav:derivedFrom . + +pav:derivedFrom skos:inScheme pav: . + +pav:lastUpdateOn skos:inScheme pav: ; + skos:related pav:previousVersion . + +pav:providedBy skos:inScheme pav: . + + + diff --git a/owl2html.xslt b/owl2html.xslt new file mode 100644 index 0000000..ebb687e --- /dev/null +++ b/owl2html.xslt @@ -0,0 +1,104 @@ + + + + + + +

+

OWL ontology

+
+
Ontology IRI
+
+ +
Version IRI
+
+ +
Creator
+ +
+
+ +
Contributors
+ +
+
+ +
Issued
+ +
+
+ +
Last modified
+ +
+
+ +
+

Please see the documentation for + +.

+ +

This HTML is meant to show a simple browser introduction to the ontology and has been +automatically created using XSLT. To see the + source OWL as RDF/XML, either use "Save As" or "View Source". +

+ + + +

Defined object properties

+
+ +
+ + + + + +   + +
+
+
+ + +

Defined data type properties

+
+ +
+ + + + + +   + +
+
+
+ + + +
+
+ diff --git a/pav-authoring.owl b/pav-authoring.owl index 4f2dab7..14e2d05 100644 --- a/pav-authoring.owl +++ b/pav-authoring.owl @@ -25,32 +25,23 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> PAV Authoring - 2.0 + 2.0.1 2012-03-28T00:00:00 - 2012-04-04T15:45:00+01:00 + 2013-02-27T15:25:35+0000 Marco Ocana Paolo Ciccarese Stian Soiland-Reyes application/rdf+xml PAV Authoring ontology - This ontology module has been superseeded by the single ontology http://purl.org/pav/2.0/ + This ontology module has been superseeded by the single ontology http://purl.org/pav/2.1 en - + - - - diff --git a/pav-provenance.owl b/pav-provenance.owl index bdf700b..77b875f 100644 --- a/pav-provenance.owl +++ b/pav-provenance.owl @@ -25,9 +25,9 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> PAV Provenance module - 2.0 + 2.0.1 2012-03-28T00:00:00 - 2012-04-04T15:48:00+01:00 + 2013-02-27T15:25:35+0000 Marco Ocana Paolo Ciccarese Paolo Ciccarese @@ -35,33 +35,14 @@ application/rdf+xml en PAV Provenance ontology module - This ontology module has been superseeded by the single ontology http://purl.org/pav/2.0/ + This ontology module has been superseeded by the single ontology http://purl.org/pav/2.1 - - + + - - - - - - - - - - - - - diff --git a/pav-versioning.owl b/pav-versioning.owl index 8358e86..2058809 100644 --- a/pav-versioning.owl +++ b/pav-versioning.owl @@ -25,41 +25,23 @@ xmlns:versioning="http://purl.org/pav/versioning/2.0/"> PAV Versioning - 2.0 + 2.0.1 2012-03-28T00:00:00 - 2012-04-04T15:47:00+01:00 + 2013-02-27T15:25:35+0000 Marco Ocana Paolo Ciccarese Stian Soiland-Reyes application/rdf+xml - This ontology module has been superseeded by the single ontology http://purl.org/pav/2.0/ + This ontology module has been superseeded by the single ontology http://purl.org/pav/2.1 en PAV Versioning ontology module - - + + - - - - - - - - - - - - diff --git a/pav.html b/pav.html new file mode 100644 index 0000000..c73449a --- /dev/null +++ b/pav.html @@ -0,0 +1,12 @@ +PAV - Provenance, Authoring and VersioningProvenance, Authoring and Versioning (PAV)PAV - Provenance, Authoring and Versioning

PAV - Provenance, Authoring and Versioning

IRI:
http://purl.org/pav/
Version IRI:
http://purl.org/pav/2.1
Date
2013-03-26
Current version:
2.1.1
Previous version:
http://purl.org/pav/2.0/ (visualise it with LODE)
Backward compatible with:
http://purl.org/pav/2.0/ (visualise it with LODE)
Backward compatible with:
http://purl.org/pav/authoring/2.0/ (visualise it with LODE)
Backward compatible with:
http://purl.org/pav/provenance/2.0/ (visualise it with LODE)
Backward compatible with:
http://purl.org/pav/versioning/2.0/ (visualise it with LODE)
Incompatible with:
http://swan.mindinformatics.org/ontologies/1.2/pav.owl (visualise it with LODE)
Authors:
Paolo Ciccarese
http://www.hcklab.org/foaf.rdf#me
http://www.paolociccarese.info/
Contributors:
Marco Ocana
Stian Soiland-Reyes
http://soiland-reyes.com/stian/#me
Publisher:
http://swan.mindinformatics.org/
Imported Ontologies:
http://pav-ontology.googlecode.com/svn/trunk/1.2/pav.owl (visualise it with LODE)
http://www.w3.org/ns/prov# (visualise it with LODE)
Other visualisation:
Ontology source

Abstract

PAV is a lightweight ontology for tracking Provenance, Authoring and Versioning. PAV specializes the W3C provenance ontology PROV-O in order to describe authorship, curation and digital creation of online resources.

This ontology describes the defined PAV properties and their usage. Note that PAV does not define any explicit classes or domain/ranges, as every property is meant to be used directly on the described online resource.

Introduction

PAV supplies terms for distinguishing between the different roles of the agents contributing content in current web based systems: contributors, authors, curators and digital artifact creators. The ontology also provides terms for tracking provenance of digital entities that are published on the web and then accessed, transformed and consumed. In order to support broader interoperability, PAV specializes the general purpose W3C PROV provenance model (PROV-O).

PAV distinguishes between the data related to the digital artifact - named Provenance - and those related to the actual knowledge creation and therefore to the intellectual property aspects – named Authoring. The Versioning axis describes the evolution of digital entities in time.

Using PAV, descriptions can define the Authors that originate or gave existence to the work that is expressed in the digital resource (pav:authoredBy); curators (pav:curatedBy) who are content specialists responsible for shaping the expression in an appropriate format, and contributors (super-property pav:contributedBy) that provided some help in conceiving the resource or in the expressed knowledge creation/extraction.

These provenance aspects can be detailed with dates using pav:curatedOn, pav:authoredOn, etc. Further details about the creation activities, such as different authors contributing specific parts of the resource at different dates are out of scope for PAV and should be defined using vocabularies like PROV-O and additional intermediate entities to describe the different states.

For resources based on other resources, PAV allows specification of direct retrieval (pav:retrievedFrom), import through transformations (pav:importedFrom) and sources that were merely consulted (pav:sourceAccessedAt). These aspects can also define the agents responsible using pav:retrievedBy, pav:importedBy and pav:sourceAccessedBy. Version information can be specified using pav:previousVersion and pav:version.

The creation of the digital representation, for instance an RDF graph, can in many cases be different from the authorship of the knowledge, and in PAV this digital creation is specified using pav:createdBy, pav:createdWith and pav:createdOn.

PAV 2.1 updates PAV 2.0 with PROV-O specializations and more detailed descriptions of the defined terms. Note that PROV-O is not imported directly by this ontology as PAV can be used independent of PROV. PAV 2 is based on PAV 1.2 but in a new namespace ( http://purl.org/pav/ ). Terms compatible with 1.2 are indicated in this ontology using owl:equivalentProperty.

The ontology IRI http://purl.org/pav/ always resolve to the latest version of PAV 2. Particular versionIRIs such as http://purl.org/pav/2.1 can be used by clients to force imports of a particular version - note however that all terms are defined directly in the http://purl.org/pav/ namespace.

The goal of PAV is to provide a lightweight, straight forward way to give the essential information about authorship, provenance and versioning, and therefore these properties are described directly on the published resource. As such, PAV does not define any classes or restrict domain/ranges, as all properties are applicable to any online resource.

Object Properties

Authored byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/authoredBy

An agent that originated or gave existence to the work that is expressed by the digital resource.

The author of the content of a resource may be different from the creator of the resource representation (although they are often the same). See pav:createdBy for a discussion.

The date of authoring can be expressed using pav:authoredOn - note however in the case of multiple authors that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation.

has equivalent properties
  • pav1:authoredBy
has super-properties

Contributed byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/contributedBy

The resource was contributed to by the given agent.

The agent provided any sort of help in conceiving the work that is expressed by the digital artifact. Superproperty of pav:authoredBy and pav:curatedBy.

Note that as pav:contributedBy identifies only agents that contributed to the work, knowledge or intellectual property, and not agents that made the digital artifact or representation (pav:createdBy), thus this property can be considered more precise than dct:contributor. See pav:createdBy for a discussion.

The date of contribution can be expressed using pav:contributedOn - note however in the case of multiple contributors that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation.

has equivalent properties
  • pav1:contributedBy
has super-properties
  • prov:wasAttributedTo
has sub-properties
Authored byop, Curated byop

Created atop back to ToC or Object Property ToC

IRI: http://purl.org/pav/createdAt

The geo-location of the agents when creating the resource (pav:createdBy). For instance a photographer takes a picture of the Eiffel Tower while standing in front of it.

Created byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/createdBy

An agent primary responsible for making the digital artifact or resource representation.

This property is distinct from forming the content, which is indicated with pav:contributedBy or its subproperties; pav:authoredBy, which identifies who authored the knowledge expressed by this resource; and pav:curatedBy, which identifies who curated the knowledge into its current form.

pav:createdBy is more specific than dct:createdBy - which might or might not be interpreted to cover this creator.

For instance, the author wrote 'this species has bigger wings than normal' in his log book. The curator, going through the log book and identifying important knowledge, formalizes this as 'locus perculus has wingspan > 0.5m'. The creator enters this knowledge as a digital resource in the knowledge system, thus creating the digital artifact (say as JSON, RDF, XML or HTML).

A different example is a news article. pav:authoredBy indicates the journalist who wrote the article. pav:contributedBy can indicate the artist who added an illustration. pav:curatedBy can indicate the editor who made the article conform to the news paper's style. pav:createdBy can indicate who put the article on the web site.

The software tool used by the creator to make the digital resource (say Protege, Wordpress or OpenOffice) can be indicated with pav:createdWith.

The date the digital resource was created can be indicated with pav:createdOn.

The location the agent was at when creating the digital resource can be made using pav:createdAt.

has equivalent properties
  • pav1:createdBy
has super-properties
  • prov:wasAttributedTo

Created withop back to ToC or Object Property ToC

IRI: http://purl.org/pav/createdWith

The software/tool used by the creator (pav:createdBy) when making the digital resource, for instance a word processor or an annotation tool. A more independent software agent that creates the resource without direct interaction by a human creator should instead should instead by indicated using pav:createdBy.

has super-properties
  • prov:wasAttributedTo

Curated byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/curatedBy

An agent specialist responsible for shaping the expression in an appropriate format. Often the primary agent responsible for ensuring the quality of the representation.

The curator may be different from the creator of the author (pav:authoredBy) and the creator of the digital resource (pav:createdBy).

The date of curating can be expressed using pav:curatedOn - note however in the case of multiple curators that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation.

has equivalent properties
  • pav1:curatedBy
has super-properties
is inverse of

Curatesop back to ToC or Object Property ToC

IRI: http://purl.org/pav/curates

Provided for backwards compatibility with PAV 1.2 only. Use instead the inverse pav:curatedBy.

is inverse of

Derived fromop back to ToC or Object Property ToC

IRI: http://purl.org/pav/derivedFrom

Derived from a different resource. Derivation conserns itself with derived knowledge. If this resource has the same content as the other resource, but has simply been transcribed to fit a different model (like XML -> RDF or SQL -> CVS), use pav:importedFrom. If a resource was simply retrieved, use pav:retrievedFrom. If the content has however been further refined or modified, pav:derivedFrom should be used.

Details about who performed the derivation may be indicated with pav:contributedBy and its subproperties.

has super-properties
  • prov:wasDerivedFrom

Imported byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/importedBy

An entity responsible for importing the data.

The importer is usually a software entity which has done the transcription from the original source.

Note that pav:importedBy may overlap with pav:createdWith.

The source for the import should be given with pav:importedFrom. The time of the import should be given with pav:importedOn.

See pav:importedFrom for a discussion of import vs. retrieve vs. derived.

has equivalent properties
  • pav1:importedBy
has super-properties
  • prov:wasAttributedTo

Imported fromop back to ToC or Object Property ToC

IRI: http://purl.org/pav/importedFrom

The original source of imported information.

Import means that the content has been preserved, but transcribed somehow, for instance to fit a different representation model. Examples of import are when the original was JSON and the current resource is RDF, or where the original was an document scan, and this resource is the plain text found through OCR.

The imported resource does not have to be complete, but should be consistent with the knowledge conveyed by the original resource.

If additional knowledge has been contributed, pav:derivedFrom would be more appropriate.

If the resource has been copied verbatim from the original representation (e.g. downloaded), use pav:retrievedFrom.

To indicate which agent(s) performed the import, use pav:importedBy. Use pav:importedOn to indicate when it happened.

has equivalent properties
  • pav1:importedFromSource
has super-properties
  • prov:wasDerivedFrom

Previous versionop back to ToC or Object Property ToC

IRI: http://purl.org/pav/previousVersion

The previous version of a resource in a lineage. For instance a news article updated to correct factual information would point to the previous version of the article with pav:previousVersion. If however the content has significantly changed so that the two resources no longer share lineage (say a new news article that talks about the same facts), they should be related using pav:derivedFrom.

A version number of this resource can be provided using the data property pav:version.

has equivalent properties
  • pav1:previousVersion
has super-properties
  • prov:wasRevisionOf

Provided byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/providedBy

The original provider of the encoded information (e.g. PubMed, UniProt, Science Commons).

The provider might not coincide with the dct:publisher, which would describe the current publisher of the resource. For instance if the resource was retrieved, imported or derived from a source, that source was published by the original provider. pav:providedBy provides a shortcut to indicate the original provider on the new resource.

Retrieved byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/retrievedBy

An entity responsible for retrieving the data from an external source.

The retrieving agent is usually a software entity, which has done the retrieval from the original source without performing any transcription.

The source that was retrieved should be given with pav:retrievedFrom. The time of the retrieval should be indicated using pav:retrievedOn.

See pav:importedFrom for a discussion of import vs. retrieve vs. derived.

has super-properties
  • prov:wasAttributedTo

Retrieved fromop back to ToC or Object Property ToC

IRI: http://purl.org/pav/retrievedFrom

The URI where a resource has been retrieved from.

Retrieval indicates that this resource has the same representation as the original resource. If the resource has been somewhat transformed, use pav:importedFrom instead.

The time of the retrieval should be indicated using pav:retrievedOn. The agent may be indicated with pav:retrievedBy.

has super-properties
  • prov:wasDerivedFrom

Source accessed atop back to ToC or Object Property ToC

IRI: http://purl.org/pav/sourceAccessedAt

The resource is related to a given source which was accessed or consulted (but not retrieved, imported or derived from). This access can be detailed with pav:sourceAccessedBy and pav:sourceAccessedOn.

For instance, a curator (pav:curatedBy) might have consulted figures in a published paper to confirm that a dataset was correctly pav:importedFrom the paper's supplementary CSV file.

has super-properties
  • prov:wasInfluencedBy

Source accessed byop back to ToC or Object Property ToC

IRI: http://purl.org/pav/sourceAccessedBy

The resource is related to a source which was accessed or consulted

by the given agent. The source(s) should be specified using pav:sourceAccessedAt, and the time with pav:sourceAccessedOn.

For instance, the given agent could be a curator (also pav:curatedBy) which consulted figures in a published paper to confirm that a dataset was correctly pav:importedFrom the paper's supplementary CSV file.

Data Properties

Authored ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/authoredOn

The date this resource was authored.

pav:authoredBy gives the authoring agent.

Note that pav:authoredOn is different from pav:createdOn, although they are often the same. See pav:createdBy for a discussion.

has super-properties

Contributed ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/contributedOn

The date this resource was contributed to.

pav:contributedBy provides the agent(s) that contributed.

has sub-properties
Authored ondp, Curated ondp
has range
  • xsd:dateTime

Created Ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/createdOn

The date of creation of the resource.

pav:createdBy provides the agent(s) that created the resource.

has equivalent properties
  • pav1:createdOn
has range
  • xsd:dateTime

Curated ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/curatedOn

The date this resource was curated.

pav:curatedBy gives the agent(s) that performed the curation.

has super-properties

Imported ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/importedOn

The date this resource was imported from a source (pav:importedFrom).

Note that pav:importedOn may overlap with pav:createdOn, but in cases where they differ, the import time indicates the time of the retrieval and transcription of the original source, while the creation time indicates when the final resource was made, for instance after user approval.

If the source is later reimported, this should be indicated with pav:lastRefreshedOn.

The source of the import should be given with pav:importedFrom. The agent that performed the import should be given with pav:importedBy.

See pav:importedFrom for a discussion about import vs. retrieval.

has equivalent properties
  • pav1:importedOn
has range
  • xsd:dateTime

Last refreshed ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/lastRefreshedOn

The date of the last re-import of the resource. This property is used in addition to pav:importedOn if this version has been updated due to a re-import. If the re-import created a new resource rather than refreshing an existing, then pav:importedOn should be used together with pav:previousVersion.

has equivalent properties
  • pav1:importedLastOn
has range
  • xsd:dateTime

Last updated ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/lastUpdateOn

The date of the last update of the resource. An update is a change which did not warrant making a new resource related using pav:previousVersion, for instance correcting a spelling mistake.

has equivalent properties
  • pav1:lastUpdateOn
has range
  • xsd:dateTime

Retrieved ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/retrievedOn

The date the source for this resource was retrieved.

The source that was retrieved should be indicated with pav:retrievedFrom. The agent that performed the retrieval may be specified with pav:retrievedBy.

has range
  • xsd:dateTime

Source accessed ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/sourceAccessedOn

The resource is related to a source which was originally accessed or consulted on the given date as part of creating or authoring the resource. The source(s) should be specified using pav:sourceAccessedAt. If the source is subsequently checked again (say to verify validity), this should be indicated with pav:sourceLastAccessedOn.

In the case multiple sources being accessed at different times or by different agents, PAV does not distinguish who accessed when what. If such details are required, they may be provided by additionally using prov:qualifiedInfluence.

has equivalent properties
  • pav1:sourceAccessedOn
  • pav1:sourceFirstAccessedOn
has range
  • xsd:dateTime

Source last accessed ondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/sourceLastAccessedOn

The resource is related to a source which was last accessed or consulted on the given date. The source(s) should be specified using pav:sourceAccessedAt. Usage of this property indicates that the source has been checked previously, which the initial time should be indicated with pav:sourceAccessedOn.

This property can be useful together with pav:lastRefreshedOn or pav:lastUpdateOn in order to indicate a re-import or update, but could also be used alone, for instance when a source was simply verified and no further action was taken for the resource,

has equivalent properties
  • pav1:sourceLastAccessedOn
has range
  • xsd:dateTime

Versiondp back to ToC or Data Property ToC

IRI: http://purl.org/pav/version

The version number of a resource. This is a freetext string, typical values are "1.5" or "21". The URI identifying the previous version can be provided using prov:previousVersion.

has equivalent properties
  • pav1:versionNumber
has range
  • xsd:string

Namespace Declarations back to ToC

default namespace
http://purl.org/pav/
dc
http://purl.org/dc/elements/1.1/
dct
http://purl.org/dc/terms/
foaf
http://xmlns.com/foaf/0.1/
owl
http://www.w3.org/2002/07/owl#
pav
http://purl.org/pav/
pav1
http://swan.mindinformatics.org/ontologies/1.2/pav/
prov
http://www.w3.org/ns/prov#
rdf
http://www.w3.org/1999/02/22-rdf-syntax-ns#
rdfs
http://www.w3.org/2000/01/rdf-schema#
xsd
http://www.w3.org/2001/XMLSchema#

This HTML document was obtained by processing the OWL ontology source code throughLODE, Live OWL Documentation Environment, developed bySilvio Peroni.

+ + diff --git a/pav.owl b/pav.owl index 0d533c6..d5bbbd7 100644 --- a/pav.owl +++ b/pav.owl @@ -1,89 +1,90 @@ + + - - - + ]> - - Provenance, Authoring and Versioning - 2.0 - 2012-03-28T00:00:00 - 2012-04-04T15:23:30+01:00 + + Provenance, Authoring and Versioning (PAV) + 2.1.1 + 2013-03-26T14:49:00Z Marco Ocana Paolo Ciccarese Stian Soiland-Reyes application/rdf+xml en + 2013-03-27T16:03:24Z PAV - Provenance, Authoring and Versioning + PAV is a lightweight ontology for tracking Provenance, Authoring and Versioning. PAV specializes the W3C provenance ontology PROV-O in order to describe authorship, curation and digital creation of online resources. + +This ontology describes the defined PAV properties and their usage. Note that PAV does not define any explicit classes or domain/ranges, as every property is meant to be used directly on the described online resource. + PAV supplies terms for distinguishing between the different roles of the agents contributing content in current web based systems: contributors, authors, curators and digital artifact creators. The ontology also provides terms for tracking provenance of digital entities that are published on the web and then accessed, transformed and consumed. In order to support broader interoperability, PAV specializes the general purpose W3C PROV provenance model (PROV-O). + +PAV distinguishes between the data related to the digital artifact - named Provenance - and those related to the actual knowledge creation and therefore to the intellectual property aspects – named Authoring. The Versioning axis describes the evolution of digital entities in time. + +Using PAV, descriptions can define the Authors that originate or gave existence to the work that is expressed in the digital resource (pav:authoredBy); curators (pav:curatedBy) who are content specialists responsible for shaping the expression in an appropriate format, and contributors (super-property pav:contributedBy) that provided some help in conceiving the resource or in the expressed knowledge creation/extraction. + +These provenance aspects can be detailed with dates using pav:curatedOn, pav:authoredOn, etc. Further details about the creation activities, such as different authors contributing specific parts of the resource at different dates are out of scope for PAV and should be defined using vocabularies like PROV-O and additional intermediate entities to describe the different states. + +For resources based on other resources, PAV allows specification of direct retrieval (pav:retrievedFrom), import through transformations (pav:importedFrom) and sources that were merely consulted (pav:sourceAccessedAt). These aspects can also define the agents responsible using pav:retrievedBy, pav:importedBy and pav:sourceAccessedBy. Version information can be specified using pav:previousVersion and pav:version. + +The creation of the digital representation, for instance an RDF graph, can in many cases be different from the authorship of the knowledge, and in PAV this digital creation is specified using pav:createdBy, pav:createdWith and pav:createdOn. + +PAV 2.1 updates PAV 2.0 with PROV-O specializations and more detailed descriptions of the defined terms. Note that PROV-O is not imported directly by this ontology as PAV can be used independent of PROV. PAV 2 is based on PAV 1.2 but in a new namespace ( http://purl.org/pav/ ). Terms compatible with 1.2 are indicated in this ontology using owl:equivalentProperty. + +The ontology IRI http://purl.org/pav/ always resolve to the latest version of PAV 2. Particular versionIRIs such as http://purl.org/pav/2.1 can be used by clients to force imports of a particular version - note however that all terms are defined directly in the http://purl.org/pav/ namespace. + +The goal of PAV is to provide a lightweight, straight forward way to give the essential information about authorship, provenance and versioning, and therefore these properties are described directly on the published resource. As such, PAV does not define any classes or restrict domain/ranges, as all properties are applicable to any online resource. + + + + + - + - + + + - - - - - - - - - - - - - - - - - @@ -104,9 +105,13 @@ Authored by An agent that originated or gave existence to the work that is expressed by the digital resource. -The author of the content of a resource is different from the creator of that digital resource (although they are often the same). See pav:createdBy for a discussion. +The author of the content of a resource may be different from the creator of the resource representation (although they are often the same). See pav:createdBy for a discussion. + +The date of authoring can be expressed using pav:authoredOn - note however in the case of multiple authors that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation. + + @@ -115,11 +120,17 @@ The author of the content of a resource is different from the creator of that di Contributed by - An agent that provided any sort of help in conceiving the work that is expressed by the digital artifact. + The resource was contributed to by the given agent. + +The agent provided any sort of help in conceiving the work that is expressed by the digital artifact. Superproperty of pav:authoredBy and pav:curatedBy. -The date of contribution can be expressed using pav:contributedOn - note however that there is no relationship in PAV identifying which contributor contributed when or what, such lineage should rather be expressed using a process-centric model such as OPM or PROV. +Note that as pav:contributedBy identifies only agents that contributed to the work, knowledge or intellectual property, and not agents that made the digital artifact or representation (pav:createdBy), thus this property can be considered more precise than dct:contributor. See pav:createdBy for a discussion. -Note that as pav:contributedBy identifies only agents that contributed to the work, and not agents that made the digital artifact, it is more precise than dct:contributor. See pav:createdBy for a discussion. +The date of contribution can be expressed using pav:contributedOn - note however in the case of multiple contributors that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation. + + + + @@ -128,7 +139,7 @@ Note that as pav:contributedBy identifies only agents that contributed to the wo Created at - The geo-location of the agent that created the annotation. + The geo-location of the agents when creating the resource (pav:createdBy). For instance a photographer takes a picture of the Eiffel Tower while standing in front of it. @@ -138,25 +149,27 @@ Note that as pav:contributedBy identifies only agents that contributed to the wo Created by - An entity primary responsible for making the digital artifact. + An agent primary responsible for making the digital artifact or resource representation. -This property is distinct from pav:authoredBy, which identifies who authored the knowledge expressed by this resource, and pav:curatedBy, which identifies who curated the knowledge into its current form. +This property is distinct from forming the content, which is indicated with pav:contributedBy or its subproperties; pav:authoredBy, which identifies who authored the knowledge expressed by this resource; and pav:curatedBy, which identifies who curated the knowledge into its current form. -pav:createdBy is therefore more specific than dct:createdBy - which might or might not be interpreted to cover these creator. +pav:createdBy is more specific than dct:createdBy - which might or might not be interpreted to cover this creator. -For instance, the author wrote 'this species has bigger wings than normal' in his log book. The curator, going through the log book and identifying important knowledge, formalizes this as 'locus perculus has wingspan > 0.5m'. The creator enters this knowledge as a digital resource in the knowledge system, thus creating the digital artifact (say as JSON, RDF, XML or HTML). +For instance, the author wrote 'this species has bigger wings than normal' in his log book. The curator, going through the log book and identifying important knowledge, formalizes this as 'locus perculus has wingspan > 0.5m'. The creator enters this knowledge as a digital resource in the knowledge system, thus creating the digital artifact (say as JSON, RDF, XML or HTML). -A different example is a news article. pav:authoredBy indicates the journalist who wrote the article. pav:curatedBy can indicate the editor who made the article conform to the news paper's style. pav:createdBy can indicate who put the article on the web site. +A different example is a news article. pav:authoredBy indicates the journalist who wrote the article. pav:contributedBy can indicate the artist who added an illustration. pav:curatedBy can indicate the editor who made the article conform to the news paper's style. pav:createdBy can indicate who put the article on the web site. The software tool used by the creator to make the digital resource (say Protege, Wordpress or OpenOffice) can be indicated with pav:createdWith. The date the digital resource was created can be indicated with pav:createdOn. -The location the agent was when creating the digital resource can be made using pav:createdAt. +The location the agent was at when creating the digital resource can be made using pav:createdAt. + + @@ -165,10 +178,10 @@ The location the agent was when creating the digital resource can be made using Created with - The software/tool used by the creator when making the digital resource. - -For instance: Protege, Wordpress, LibreOffice. + The software/tool used by the creator (pav:createdBy) when making the digital resource, for instance a word processor or an annotation tool. A more independent software agent that creates the resource without direct interaction by a human creator should instead should instead by indicated using pav:createdBy. + + @@ -179,9 +192,13 @@ For instance: Protege, Wordpress, LibreOffice. Curated by An agent specialist responsible for shaping the expression in an appropriate format. Often the primary agent responsible for ensuring the quality of the representation. -The curator is different from the creator of the digital resource (although they are often the same), see pav:createdBy for a discussion. +The curator may be different from the creator of the author (pav:authoredBy) and the creator of the digital resource (pav:createdBy). + +The date of curating can be expressed using pav:curatedOn - note however in the case of multiple curators that there is no relationship in PAV identifying which agent contributed when or what. If capturing such lineage is desired, it should be additionally expressed using activity-centric provenance vocabularies, for instance with prov:wasGeneratedBy and prov:qualifiedAssocation. + + @@ -189,6 +206,9 @@ The curator is different from the creator of the digital resource (although they + Curates + true + Provided for backwards compatibility with PAV 1.2 only. Use instead the inverse pav:curatedBy. @@ -197,9 +217,14 @@ The curator is different from the creator of the digital resource (although they - Derived from a different resource. Derivation conserns itself with derived knowledge. If this resource has the same content as the other resource, but has simply been transcribed to fit a different model (like XML -> RDF or SQL -> CVS), use pav:importedFrom. If the content has been further refined or modified, use pav:derivedFrom. + Derived from + Derived from a different resource. Derivation conserns itself with derived knowledge. If this resource has the same content as the other resource, but has simply been transcribed to fit a different model (like XML -> RDF or SQL -> CVS), use pav:importedFrom. If a resource was simply retrieved, use pav:retrievedFrom. If the content has however been further refined or modified, pav:derivedFrom should be used. + +Details about who performed the derivation may be indicated with pav:contributedBy and its subproperties. + + @@ -210,10 +235,15 @@ The curator is different from the creator of the digital resource (although they Imported by An entity responsible for importing the data. -The importer is usually a software entity which has done the transcription from the original source. +The importer is usually a software entity which has done the transcription from the original source. +Note that pav:importedBy may overlap with pav:createdWith. + +The source for the import should be given with pav:importedFrom. The time of the import should be given with pav:importedOn. See pav:importedFrom for a discussion of import vs. retrieve vs. derived. + + @@ -221,20 +251,24 @@ See pav:importedFrom for a discussion of import vs. retrieve vs. derived. - Imported From - The original source of the imported information. + Imported from + The original source of imported information. + +Import means that the content has been preserved, but transcribed somehow, for instance to fit a different representation model. Examples of import are when the original was JSON and the current resource is RDF, or where the original was an document scan, and this resource is the plain text found through OCR. -Import means that the content has been preserved, but transcribed somehow, for instance to fit a different model. Examples of import are when the original was JSON and the current resource is RDF, or where the original was an document scan, and this resource is the text found through OCR. +The imported resource does not have to be complete, but should be consistent with the knowledge conveyed by the original resource. -The difference between prov:derivedFrom and prov:importedFrom is that the imported resource conveys the same knowledge/content as the original, while a derived resource has somehow modified that knowledge to convey something else. +If additional knowledge has been contributed, pav:derivedFrom would be more appropriate. -If the resource has been copied verbatim from the original (e.g. downloaded), use pav:retrievedFrom. +If the resource has been copied verbatim from the original representation (e.g. downloaded), use pav:retrievedFrom. -To indicate which agent(s) performed the import, use pav:importedBy. Use pav:importedOn to indicate when it happened. +To indicate which agent(s) performed the import, use pav:importedBy. Use pav:importedOn to indicate when it happened. + + @@ -242,11 +276,14 @@ To indicate which agent(s) performed the import, use pav:importedBy. Use pav:imp + Previous version The previous version of a resource in a lineage. For instance a news article updated to correct factual information would point to the previous version of the article with pav:previousVersion. If however the content has significantly changed so that the two resources no longer share lineage (say a new news article that talks about the same facts), they should be related using pav:derivedFrom. A version number of this resource can be provided using the data property pav:version. + + @@ -255,7 +292,9 @@ A version number of this resource can be provided using the data property pav:ve Provided by - The provider of the encoded information (PubMed, UniProt, Science Commons). The provider might not coincide with the dct:publisher. + The original provider of the encoded information (e.g. PubMed, UniProt, Science Commons). + +The provider might not coincide with the dct:publisher, which would describe the current publisher of the resource. For instance if the resource was retrieved, imported or derived from a source, that source was published by the original provider. pav:providedBy provides a shortcut to indicate the original provider on the new resource. @@ -267,10 +306,13 @@ A version number of this resource can be provided using the data property pav:ve Retrieved by An entity responsible for retrieving the data from an external source. -The importer is usually a software entity which has done the retrieval from the original source without performing any transcription. +The retrieving agent is usually a software entity, which has done the retrieval from the original source without performing any transcription. + +The source that was retrieved should be given with pav:retrievedFrom. The time of the retrieval should be indicated using pav:retrievedOn. See pav:importedFrom for a discussion of import vs. retrieve vs. derived. + @@ -286,6 +328,7 @@ Retrieval indicates that this resource has the same representation as the origin The time of the retrieval should be indicated using pav:retrievedOn. The agent may be indicated with pav:retrievedBy. + @@ -293,9 +336,16 @@ The time of the retrieval should be indicated using pav:retrievedOn. The agent m - A source which was accessed (but not retrieved or imported). + Source accessed at + The resource is related to a given source which was accessed or consulted (but not retrieved, imported or derived from). This access can be detailed with pav:sourceAccessedBy and pav:sourceAccessedOn. + +For instance, a curator (pav:curatedBy) might have consulted figures in a published paper to confirm that a dataset was correctly pav:importedFrom the paper's supplementary CSV file. + + + + @@ -303,12 +353,18 @@ The time of the retrieval should be indicated using pav:retrievedOn. The agent m - The agent who accessed the source + Source accessed by + The resource is related to a source which was accessed or consulted +by the given agent. The source(s) should be specified using pav:sourceAccessedAt, and the time with pav:sourceAccessedOn. + +For instance, the given agent could be a curator (also pav:curatedBy) which consulted figures in a published paper to confirm that a dataset was correctly pav:importedFrom the paper's supplementary CSV file. + + + Authored on The date this resource was authored. pav:authoredBy gives the authoring agent. @@ -339,9 +396,10 @@ Note that pav:authoredOn is different from pav:createdOn, although they are ofte + Contributed on The date this resource was contributed to. -pav:contributedBy provides the agent that contributed. +pav:contributedBy provides the agent(s) that contributed. @@ -352,8 +410,12 @@ pav:contributedBy provides the agent that contributed. Created On - The date of creation of the resource. + The date of creation of the resource. + +pav:createdBy provides the agent(s) that created the resource. + + @@ -362,9 +424,10 @@ pav:contributedBy provides the agent that contributed. + Curated on The date this resource was curated. -pav:curatedBy gives the agents that performed the curation. +pav:curatedBy gives the agent(s) that performed the curation. @@ -374,11 +437,19 @@ pav:curatedBy gives the agents that performed the curation. - Imported On - The date this resource was imported. + Imported on + The date this resource was imported from a source (pav:importedFrom). + +Note that pav:importedOn may overlap with pav:createdOn, but in cases where they differ, the import time indicates the time of the retrieval and transcription of the original source, while the creation time indicates when the final resource was made, for instance after user approval. + +If the source is later reimported, this should be indicated with pav:lastRefreshedOn. + +The source of the import should be given with pav:importedFrom. The agent that performed the import should be given with pav:importedBy. See pav:importedFrom for a discussion about import vs. retrieval. + + @@ -387,9 +458,13 @@ See pav:importedFrom for a discussion about import vs. retrieval. - Last Refreshed On - The date of the last import of the resource. This property is used if this version has been updated due to a re-import, rather than the import creating new resources related using pav:previousVersion. + Last refreshed on + The date of the last re-import of the resource. This property is used in addition to pav:importedOn if this version has been updated due to a re-import. If the re-import created a new resource rather than refreshing an existing, then pav:importedOn should be used together with pav:previousVersion. + + + + @@ -398,9 +473,11 @@ See pav:importedFrom for a discussion about import vs. retrieval. - Last Updated On + Last updated on The date of the last update of the resource. An update is a change which did not warrant making a new resource related using pav:previousVersion, for instance correcting a spelling mistake. + + @@ -409,7 +486,12 @@ See pav:importedFrom for a discussion about import vs. retrieval. - The date this resource was retrieved. + Retrieved on + The date the source for this resource was retrieved. + +The source that was retrieved should be indicated with pav:retrievedFrom. The agent that performed the retrieval may be specified with pav:retrievedBy. + + @@ -419,9 +501,16 @@ See pav:importedFrom for a discussion about import vs. retrieval. - Source Accessed On - The date when the original source has been accessed to create the resource. + Source accessed on + The resource is related to a source which was originally accessed or consulted on the given date as part of creating or authoring the resource. The source(s) should be specified using pav:sourceAccessedAt. If the source is subsequently checked again (say to verify validity), this should be indicated with pav:sourceLastAccessedOn. + +In the case multiple sources being accessed at different times or by different agents, PAV does not distinguish who accessed when what. If such details are required, they may be provided by additionally using prov:qualifiedInfluence. + + + + + @@ -430,9 +519,14 @@ See pav:importedFrom for a discussion about import vs. retrieval. - Source Last Accessed On - The date when the original source has been last accessed and verified. + Source last accessed on + The resource is related to a source which was last accessed or consulted on the given date. The source(s) should be specified using pav:sourceAccessedAt. Usage of this property indicates that the source has been checked previously, which the initial time should be indicated with pav:sourceAccessedOn. + +This property can be useful together with pav:lastRefreshedOn or pav:lastUpdateOn in order to indicate a re-import or update, but could also be used alone, for instance when a source was simply verified and no further action was taken for the resource, + + + @@ -441,13 +535,18 @@ See pav:importedFrom for a discussion about import vs. retrieval. + Version The version number of a resource. This is a freetext string, typical values are "1.5" or "21". The URI identifying the previous version can be provided using prov:previousVersion. + + + + - +