|
|
(14 intermediate revisions by 4 users not shown) |
Line 1: |
Line 1: |
− | == VDL Creation and Management ==
| |
− |
| |
− | == Resources Management ==
| |
− | === Generic Resources Management ===
| |
− | In order to properly setup a VDL, several Generic Reosources are needed to be published on DIS.
| |
− | The VDL Administrator can create them by using the Generic Resource Portlet.
| |
− | Additionally, every time that a new schema appears on VDL, a MetadataSchemaInfo, a PresentationXSLT_<schemaName>_<xsltName> and a MetadataXSLT_<schemaName>_<xsltName> Generic Resources must be created for this schema.
| |
− |
| |
− | ==== ScenarioCollectionInfo ====
| |
− | This Generic Resource contains information about the available collections for a specific VDL and their hierarchical structure.
| |
− | The collections can be clustered in group so as to help end users to identify similar collections and to present the collections in a human managable way.<br>
| |
− | <br>
| |
− | The VDL Administrator must create a Generic Resource named: "'''ScenarioCollectionInfo'''" whose body must be in the following form:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color: green;">DL</span> name="''<AbsoluteDLName>''"><br>
| |
− | <<span style="color: green;">collections</span> <span style="color: red;">name</span>="''collection group 1 name''" <span style="color: red;">shortname</span>="''short name''" <span style="color: red;">description</span>="''description of group of callections''"><br>
| |
− | <<span style="color: green;">collection</span> <span style="color: red;">name</span>="''collection 1.1 name''" <span style="color: red;">reference</span>="''reference url for this collection''" <span style="color: red;">shortname</span>="''short name for the collection''" <span style="color: red;">description</span>="''collection desription''"/><br>
| |
− | <<span style="color: green;">collection</span> <span style="color: red;">name</span>="''collection 1.2 name''" <span style="color: red;">reference</span>="''reference url for this collection''" <span style="color: red;">shortname</span>="''short name for the collection''" <span style="color: red;">description</span>="''collection desription''"/><br> <<span style="color: green;">collection</span> <span style="color: red;">name</span>="''collection 1.3 name''" <span style="color: red;">reference</span>="''reference url for this collection''" <span style="color: red;">shortname</span>="''short name for the collection''" <span style="color: red;">description</span>="''collection desription''"/><br>
| |
− | '''...'''<br>
| |
− | </<span style="color: green;">collections</span>><br>
| |
− | <<span style="color: green;">collections</span> <span style="color: red;">name</span>="''collection group 2 name''" <span style="color: red;">shortname</span>="''short name''" <span style="color: red;">description</span>="''description of group of callections''"><br>
| |
− | <<span style="color: green;">collection</span> <span style="color: red;">name</span>="''collection 2.1 name''" <span style="color: red;">reference</span>="''reference url for this collection''" <span style="color: red;">shortname</span>="''short name for the collection''" <span style="color: red;">description</span>="''collection desription''"/><br> <<span style="color: green;">collection</span> <span style="color: red;">name</span>="''collection 2.2 name''" <span style="color: red;">reference</span>="''reference url for this collection''" <span style="color: red;">shortname</span>="''short name for the collection''" <span style="color: red;">description</span>="''collection desription''"/><br>
| |
− | '''...'''<br>
| |
− | </<span style="color: green;">collections</span>><br>
| |
− | '''...'''<br>
| |
− | </<span style="color: green;">DL</span>><br>
| |
− | </div>
| |
− | The root element is '''''DL''''' and it has an attribute named "'''''name'''''". The name attribute is very important and it has to be in the form: ''/<VO>/<Community>/<DLName>''<br>
| |
− | Additionally, the DL element, contains an arbitrary number of "'''''collections'''''" elements. Each of these elements represent a group of collections.<br>
| |
− | Its attributes are:<br>
| |
− | #'''''name''''': The name of the group
| |
− | #'''''shortname''''': The shortname of the group
| |
− | #'''''description''''': Its description
| |
− | <br>Furthermore, its collections element contains an arbitrary number of "'''''collection'''''" elements. Each of these elements represents an actual collection.<br>
| |
− | Its attributes are:
| |
− | #'''''name''''': The name of the colection. This name '''must''' be a perfect match with the collection name as it exists in collection management service.
| |
− | #'''''shortname''''': The shortname of the collection
| |
− | #'''''description''''': Its description
| |
− | #'''''reference''''': A reference URL for this collection
| |
− |
| |
− | ==== MetadataSchemaInfo ====
| |
− | One such Generic Resource must exist for each schema of the VDL.<br>
| |
− | It contains information about which are the searchable and the browsable fields in addition to what type of search must be applied.
| |
− |
| |
− | The VDL Administrator must create one Generic Resource for each schema named "'''MetadataSchemaInfo '''".<br>
| |
− | The body of this resource must be in the following form:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color: green;">schemaName</span>><br>
| |
− | <<span style="color: green;">option</span>><br>
| |
− | <<span style="color: green;">option-name</span>>displayed name in search fields</<span style="color: green;">option-name</span>><br>
| |
− | <<span style="color: green;">option-value</span>>actual xml-element name in metadata or an XPath expression</<span style="color: green;">option-value</span>><br>
| |
− | <<span style="color: green;">option-type</span>>type of search to apply</<span style="color: green;">option-type</span>><br>
| |
− | <<span style="color: green;">option-sort</span>>XPath expression to be used for sort (exist only for browsable fields)</<span style="color: green;">option-sort</span>><br>
| |
− | </<span style="color: green;">option</span>><br>
| |
− | '''...'''<br>
| |
− | </<span style="color: green;">schemaName</span>><br>
| |
− | </div>
| |
− | The root element is the name of the corresponding schema. This node contains an arbitrary nmber of "'''''option'''''" elements.
| |
− | Each option element contains the following elements:<br>
| |
− | #'''''option-name''''': This is the displayed name in the search fields.
| |
− | #'''''option-type''''': It can either be '''fielded''' or '''xpath'''. If it is '''fielded''' it means that the fielded search operator must be used in search. On the other hand, if it is xpath, the filter by xpath search operator must be used in search.
| |
− | #'''''option-value''''': If type is '''fielded''' the name of the field (xml-element) must be here. Otherwise, it must contain the xpath expression that identifies the field in xml schema. (Xpath is usually used when the corresponding field is not an element but an attribute in the metadata).
| |
− | #'''''option-sort''''':This is an optional element. If it exists, it means that this field is browsable (the user can browse the collection and receive the results sorted by this field). So, the XPath expression that identifies this field must exist here.
| |
− |
| |
− | ==== TitleXSLT ====
| |
− | This Generic Resource contains an XSLT that extracts from every Result-Record the title field, regardless the schema, or where it came from (google, full text, quick serach etc).
| |
− |
| |
− | The VDL Administrator must create a Generic Resource named "'''TitleXSLT'''" whose body must be an XSLT. Bellow you can find a template XSLT:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color:green;">xsl:stylesheet</span> <span style="color:red;">xmlns:xsl</span>="http://www.w3.org/1999/XSL/Transform" <span style="color:red;">version</span>="1.0"><br>
| |
− | <<span style="color:green;">xsl:output</span> <span style="color:red;">encoding</span>="UTF-8" <span style="color:red;">method</span>="html" <span style="color:red;">omit-xml-declaration</span>="yes"/><br>
| |
− | <<span style="color:green;">xsl:template</span> <span style="color:red;">match</span>="/"><br>
| |
− | <<span style="color:green;">xsl:choose</span>><br>
| |
− | <<span style="color:green;">xsl:when</span> <span style="color:red;">test</span>="//*[local-name()='title'][1]"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='title'][1]"/><br>
| |
− | </<span style="color:green;">xsl:when</span>><br>
| |
− | <<span style="color:green;">xsl:when</span> <span style="color:red;">test</span>="//*[local-name()='resTitle'][1]"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='resTitle'][1]"/><br>
| |
− | </<span style="color:green;">xsl:when</span>><br>
| |
− | <<span style="color:green;">xsl:when</span> <span style="color:red;">test</span>="//titleStmt/title[@type='main'][1]"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//titleStmt/title[@type='main'][1]"/><br>
| |
− | </<span style="color:green;">xsl:when</span>><br>
| |
− | <<span style="color:green;">xsl:otherwise</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="/root/docFields/*[1]"/><br>
| |
− | </<span style="color:green;">xsl:otherwise</span>><br>
| |
− | </<span style="color:green;">xsl:choose</span>><br>
| |
− | </<span style="color:green;">xsl:template</span>><br>
| |
− | </<span style="color:green;">xsl:stylesheet</span>><br>
| |
− | </div>
| |
− |
| |
− | ==== GenericXSLT ====
| |
− | This Generic Resource contains an XSLT that transforms Result-Record of QuickSearch to html records so as to be presented to the end user.
| |
− |
| |
− | The VDL Administrator must create a Generic Resource named "'''GenericXSLT'''" whose body must be an XSLT. Bellow you can find a template XSLT:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color: green;">xsl:stylesheet</span> <span style="color: red;">xmlns:xsl</span>="http://www.w3.org/1999/XSL/Transform" <span style="color: red;">version</span>="1.0"><br>
| |
− | <<span style="color: green;">xsl:output</span> <span style="color: red;">encoding</span>="UTF-8" <span style="color: red;">method</span>="html" <span style="color: red;">omit-xml-declaration</span>="yes"/><br>
| |
− | <<span style="color: green;">xsl:template</span> <span style="color: red;">match</span>="/"><br>
| |
− | <<span style="color: green;">table</span> <span style="color: red;">width</span>="100%"><br>
| |
− | <<span style="color: green;">xsl:for-each</span> <span style="color: red;">select</span>="root/docFields/*"><br>
| |
− | <<span style="color: green;">tr</span>><br>
| |
− | <<span style="color: green;">td</span> <span style="color: red;">align</span>="right" <span style="color: red;">class</span>="window-title-inactive" <span style="color: red;">width</span>="120"><br>
| |
− | <<span style="color: green;">b</span>><<span style="color: green;">xsl:value-of</span> <span style="color: red;">select</span>="local-name()"/>:</<span style="color: green;">b</span>><br>
| |
− | </<span style="color: green;">td</span>><br>
| |
− | <<span style="color: green;">td</span>><br>
| |
− | <<span style="color: green;">xsl:value-of</span> <span style="color: red;">select</span>="substring(self::node(),1,100)"/><br>
| |
− | <<span style="color: green;">xsl:if</span> <span style="color: red;">test</span>="string-length(self::node()) > 100"><br>
| |
− | <<span style="color: green;">i</span>>... (more)</<span style="color: green;">i</span>><br>
| |
− | </<span style="color: green;">xsl:if</span>><br>
| |
− | </<span style="color: green;">td</span>><br>
| |
− | </<span style="color: green;">tr</span>><br>
| |
− | </<span style="color: green;">xsl:for-each</span>><br>
| |
− | <<span style="color: green;">tr</span>><br>
| |
− | <<span style="color: green;">td</span> <span style="color: red;">align</span>="right" <span style="color: red;">class</span>="window-title-inactive" <span style="color: red;">width</span>="120"><br>
| |
− | <<span style="color: green;">b</span>>Collection:</<span style="color: green;">b</span>><br>
| |
− | </<span style="color: green;">td</span>><br>
| |
− | <<span style="color: green;">td</span>>collection-name-here</<span style="color: green;">td</span>><br>
| |
− | </<span style="color: green;">tr</span>>
| |
− | </<span style="color: green;">table</span>><br>
| |
− | </<span style="color: green;">xsl:template</span>><br>
| |
− | </<span style="color: green;">xsl:stylesheet</span>><br>
| |
− | </div>
| |
− |
| |
− | ==== GoogleXSLT ====
| |
− | This Generic Resource contains an XSLT that transforms Result-Record of GoogleSearch to html records so as to be presented to the end user.
| |
− |
| |
− | The VDL Administrator must create a Generic Resource named "'''GoogleXSLT'''" whose body must be an XSLT. Bellow you can find a template XSLT:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color:green;">xsl:stylesheet</span> <span style="color:red;">xmlns:xsl</span>="http://www.w3.org/1999/XSL/Transform" <span style="color:red;">version</span>="1.0"><br>
| |
− | <<span style="color:green;">xsl:output</span> <span style="color:red;">encoding</span>="UTF-8" <span style="color:red;">method</span>="html" <span style="color:red;">omit-xml-declaration</span>="yes"/><br>
| |
− | <<span style="color:green;">xsl:template</span> <span style="color:red;">match</span>="/"><br>
| |
− | <<span style="color:green;">a</span> <span style="color:red;">target</span>="_blanck"><br>
| |
− | <<span style="color:green;">xsl:attribute</span> <span style="color:red;">name</span>="href"><<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()</span>='URL']"/></<span style="color:green;">xsl:attribute</span>><br>
| |
− | <<span style="color:green;">i</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()</span>='title']"/><br>
| |
− | </<span style="color:green;">i</span>><br>
| |
− | </<span style="color:green;">a</span>><br>
| |
− | <<span style="color:green;">br</span>/><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()</span>='snippet']"/><br>
| |
− | </<span style="color:green;">xsl:template</span>><br>
| |
− | </<span style="color:green;">xsl:stylesheet</span>><br>
| |
− | </div>
| |
− |
| |
− | ==== PresentationXSLT_<schemaName>_<xsltName> ====
| |
− | At least one such Generic Resource must exist for each schema of the VDL.<br>
| |
− | It contains an XSLT that transforms the Result-Record to html records so as to be presented to the end user.
| |
− |
| |
− | The VDL Administrator must create at least one Generic Resource for each schema named "'''PresentationXSLT_<schemaName>_<xsltName>'''" whose body must be an XSLT, where '''schemaName''' is the name of the corresponding schema and '''xsltName''' is a name for the xslt.<br>
| |
− | '''Notice''': There must be at least one xslt per schema. This xslt must be named "'''default'''" and it is the one that will be used in the user-profile as the selected xslt for this schema when the profile will be created.
| |
− | Bellow you can see a template XSLT:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color:green;">xsl:stylesheet</span> <span style="color:red;">xmlns:xsl</span>="http://www.w3.org/1999/XSL/Transform" <span style="color:red;">version</span>="1.0"><br>
| |
− | <<span style="color:green;">xsl:output</span> <span style="color:red;">encoding</span>="UTF-8" <span style="color:red;">method</span>="html" <span style="color:red;">omit-xml-declaration</span>="yes"/><br>
| |
− | <<span style="color:green;">xsl:template</span> <span style="color:red;">match</span>="/"><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='creator']"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='creator']"/><br>
| |
− | ,<br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='title']"><br>
| |
− | <<span style="color:green;">i</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='title']"/><br>
| |
− | </<span style="color:green;">i</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | (<br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='date']"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='date']"/><br>
| |
− | ,<br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='language']"><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="//*[local-name()='language']"/><br>
| |
− | ,<br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | collection-short-here)<br>
| |
− | </<span style="color:green;">xsl:template</span>><br>
| |
− | </<span style="color:green;">xsl:stylesheet</span>><br>
| |
− | </div>
| |
− |
| |
− | ==== MetadataXSLT_<schemaName>_<xsltName> ====
| |
− | At least one such Generic Resource must exist for each schema of the VDL.<br>
| |
− | It contains an XSLT that transforms the metadata record to html so as to be presented to the end user.
| |
− |
| |
− | The VDL Administrator must create at least one Generic Resource for each schema named "'''MetadataXSLT_<schemaName>_<xsltName>'''" whose body must be an XSLT, where '''schemaName''' is the name of the corresponding schema and '''xsltName''' is a name for the xslt.<br>
| |
− | '''Notice''': There must be at least one xslt per schema. This xslt must be named "'''default'''" and it is the one that will be used in the user-profile as the selected xslt for this schema when the profile will be created.
| |
− | Bellow you can see a template XSLT:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color:green;">xsl:stylesheet</span> <span style="color:red;">xmlns:xsl</span>="http://www.w3.org/1999/XSL/Transform" <span style="color:red;">version</span>="2.0"><br>
| |
− | <<span style="color:green;">xsl:output</span> <span style="color:red;">encoding</span>="UTF-8" <span style="color:red;">indent</span>="yes" <span style="color:red;">method</span>="html" <span style="color:red;">version</span>="1.0"/><br>
| |
− | <<span style="color:green;">xsl:template</span> <span style="color:red;">match</span>="/"><br>
| |
− | <<span style="color:green;">table</span> <span style="color:red;">border</span>="1" <span style="color:red;">style</span>="border-collapse: collapse;" <span style="color:red;">width</span>="60%"><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='title']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Title</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='title']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='creator']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Creator</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='creator']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='subject']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Subject</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='subject']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='description']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Description</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='description']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='publisher']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Publisher</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='publisher']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='contributor']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Contributor</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='contributor']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='date']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Date</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='date']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='type']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Type</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='type']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='format']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Format</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='format']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='identifier']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Identifier</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='identifier']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='source']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Source</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='source']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='language']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Language</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='language']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='relation']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Relation</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='relation']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='coverage']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Coverage</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='coverage']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | <<span style="color:green;">xsl:if</span> <span style="color:red;">test</span>="//*[local-name()='rights']"><br>
| |
− | <<span style="color:green;">th</span> <span style="color:red;">align</span>="left" <span style="color:red;">class</span>="diligent-header">Rights</<span style="color:green;">th</span></span>><br>
| |
− | <<span style="color:green;">xsl:for-each</span> <span style="color:red;">select</span>="//*[local-name()='rights']"><br>
| |
− | <<span style="color:green;">tr</span>><br>
| |
− | <<span style="color:green;">td</span>><br>
| |
− | <<span style="color:green;">xsl:value-of</span> <span style="color:red;">select</span>="self::node()"/><br>
| |
− | </<span style="color:green;">td</span>><br>
| |
− | </<span style="color:green;">tr</span>><br>
| |
− | </<span style="color:green;">xsl:for-each</span>><br>
| |
− | </<span style="color:green;">xsl:if</span>><br>
| |
− | </<span style="color:green;">table</span>><br>
| |
− | </<span style="color:green;">xsl:template</span>><br>
| |
− | </<span style="color:green;">xsl:stylesheet</span>><br>
| |
− | </div>
| |
− |
| |
− | ==== DefaultUserProfile ====
| |
− | The DefaultUserProfile Generic Resource contains information about the mandatory elements that all user's profiles must have.<br>
| |
− |
| |
− | The VDL Administrator must create this Generic Resource named "'''DefaultUserProfile'''".<br>
| |
− | The body of this resource must be in the following form:
| |
− | <div style="background-color:#F9F9F9;border:1px dashed #2F6FAB;color:black;line-height:1.1em;padding:1em;">
| |
− | <<span style="color: green;">userprofile</span>><br>
| |
− | <<span style="color: green;">userinfo</span>><br>
| |
− | <<span style="color: green;">username</span>></<span style="color: green;">username</span>><br>
| |
− | <<span style="color: green;">fullname</span>></<span style="color: green;">fullname</span>><br>
| |
− | <<span style="color: green;">email</span>></<span style="color: green;">email</span>><br>
| |
− | </<span style="color: green;">userinfo</span>><br>
| |
− | <<span style="color: green;">userpreferences</span>><br>
| |
− | <<span style="color: green;">language</span>></<span style="color: green;">language</span>><br>
| |
− | <<span style="color: green;">langcolpairs</span>></<span style="color: green;">langcolpairs</span>><br>
| |
− | <<span style="color: green;">xslts</span>><br>
| |
− | <<span style="color: green;">metadataxslt</span>></<span style="color: green;">metadataxslt</span>><br>
| |
− | <<span style="color: green;">presentationxslt</span>></<span style="color: green;">presentationxslt</span>><br>
| |
− | </<span style="color: green;">xslts</span>><br>
| |
− | </<span style="color: green;">userpreferences</span>><br>
| |
− | </<span style="color: green;">userprofile</span>><br>
| |
− | </div>
| |
− | <br>
| |
− | If the DefaultUserProfile Generic Resource should be changed, the Profile Administration Portlet can be used in order to apply the changes.<br>
| |
− |
| |
− | == VO and Users Management ==
| |
| | | |
| == Content & Storage Management == | | == Content & Storage Management == |
Line 506: |
Line 136: |
| | | |
| == Metadata Management == | | == Metadata Management == |
| + | |
| + | The Metadata Management aims at modelling of arbitrary metadata relationships (IDB-relationships). The only assumption it does is that the metadata objects are serialized as well-formed XML documents. The service has a two-fold role: |
| + | * to manage Metadata Objects and Metadata Collections |
| + | * to establish secondary role-typed links. Such relationships can be in place between any type of Information Object and in the scope of a Collection or not |
| + | |
| + | '''The Metadata Management Components''' |
| + | |
| + | The main functionality of the Metadata Management components is the management of Metadata Objects, Metadata Collection and their relationships. To operate over Metadata Collections, the Metadata Management instantiates Collection Managers for each collection. A Collection Manager is the access point to all the possible operations over a specific Metadata Collection. |
| + | From an architectural point of view, the Metadata Manager adopts the Factory pattern and Collection Managers are implemented as a GCUBEWSResource. Physically, the service is composed by: |
| + | * the MetadataManagerFactory, a factory service that creates new Collection Managers and offers some cross-Collection operations |
| + | * the MetadataManagerService, a service that operates over Metadata Collections (MCs) and on Metadata Objects as Elements, i.e. members of a specific Metadata Collection |
| + | |
| + | === The MetadataManagerFactory === |
| + | |
| + | The MetadataManagerFactor Service creates new Collection Managers and offers some cross-Collection operations. Moreover, it operates on Metadata Objects as Information Objects related to other Information Objects and not as Members of Metadata Collections. |
| + | * createManager(CollectionID, params): This operation takes a Collection ID and a set of creation parameters and creates a new Manager in order to manage a Metadata Collection bound to such a Collection. If a Metadata Collection with the specified Metadata characteristics does not exist, the Manager creates the Metadata Collection, binds it with the Document Collection with the given secondary role relationship and publishes its profile in the Information System. |
| + | The Creation parameters are a set of key-value;the following keys are defined in the MMLibrary, the mandatory parameter accepted by the operation: |
| + | # COLLECTIONNAME -> name of the collection |
| + | # DESCRIPTION -> description |
| + | # ISUSERCOLLECTION -> if the collection is a user collection or not (“True”/”False”) |
| + | # ISINDEXABLE -> if the collection is indexable or not (“True”/”False”) |
| + | # RELATEDCOLLECTION -> the information |
| + | # METADATAFORMAT -> the metadata name and the metadata language as specified in the ISO 639-2 |
| + | # SECONDARYROLE -> the secondary role |
| + | |
| + | The optional parameter accepted by the operation are: |
| + | # GENERATEDBY -> the source Metadata Collection from which the current one has been generated (by the Metadata Broker), if any |
| + | # ISEDITABLE -> if the collection is editable or not (“True”/”False”) |
| + | # CREATOR -> the name of the creator of the Metadata Collection |
| + | |
| + | * createManagerFromCollection (MetadataCollectionID): This operation takes a Metadata Collection ID. It returns: |
| + | # the related CollectionManager, if it already exists |
| + | # creates a new CollectionManager and returns it, if the Metadata Collection exists |
| + | # an error, if the Collection ID is not valid |
| + | |
| + | * addMetadata(ObjectID, MO, SecondaryRole): This operation takes a new non-collectable Metadata Object and |
| + | # completes the metadata header information (e.g. the MOID, if it is not specified) |
| + | # stores (or updates if the MOID is already included in the MO header) the object on the Storage Management Service as Information Object |
| + | # creates a <is-described-by, <SecondaryRole>> binding in the Storage Management Service between the Metadata Object and the Information Object identified by the given Object ID |
| + | # returns the assigned MOID |
| + | |
| + | * deleteMetadata(MOID): This operation deletes from the Storage Management Service the Metadata Object identified by the given ID. |
| + | |
| + | * getMetadata ((ObjectID, SecondaryRole, CollectionID, Rank)[]): For each given ObjectID, this operation returns the Metadata Objets. They are: |
| + | # bound with the specified secondary role (the primary role is, of course, is-described-by) to the Information Object identified by that ObjectID |
| + | # members of the specified Metadata Collection. The operation relies on the String[] retrieveReferred(String targetObjectID, String role, String secondaryrole) operation of the Storage Management Service. |
| | | |
| == Index Management == | | == Index Management == |
Line 525: |
Line 201: |
| | | |
| == Process Management == | | == Process Management == |
| + | |
| + | Most Process Management Services do not require any manual configuration after deployment, with the exception of the GLite Job Wrapper Service. The required configuration steps are outlined below. |
| + | |
| + | ==== GLite Job Wrapper Service configuration ==== |
| + | There are two settings that must be defined in the JNDI configuration file of the service (usually $GLOBUS_LOCATION/etc/org_diligentproject_glite_jobwrapper/jndi-config.xml). These settings are used to specify the WMProxy endpoint to use for job submissions, and the user certificate for running the jobs. The format in the JNDI configuration file is as follows: |
| + | |
| + | |
| + | <environment name="proxyCredentialsFile" type="java.lang.String" value="/tmp/x509up_u1000"/> |
| + | |
| + | <environment name="WMProxyURL" type="java.lang.String" value="https://dil01.cs.unibas.ch:7443/glite_wms_wmproxy_server"/> |
| + | |
| + | The rest of the configuration should not be modified. |
| + | |
| + | The proxyCredentialsFile is a VOMS proxy file on the local file system. The administrator of the node is responsible for making sure that this proxy certificate is valid (i.e. not expired) at all times, and that it is a certificate accepted by the WMProxy server pointed to by the WMProxyURL. |
Content Management strictly relies on Storage Management. Therefore it is a prerequisite to setup a running instance of Storage Management before Content Management can be successfully started. There are two possibilities to setup Storage Management: a simple one using Apache Derby as a database backend and an advanced one, where an existing database is used via JDBC.
If Storage Management is deployed dynamically or manually from the GAR, it's default installation places a configuration file in $GLOBUS_LOCATION/etc/<Service-Gar-Filename>/StorageManager.properties that expects Derby to be available and have permissions to write at file under ./StorageManagementService/db/storage_db.
Derby is started in embedded mode, for which it doesn't even need a username or password. Multiple connections from the same Java Virtual Machine are possible and are also quite fast, but no two Java VM can access the DB at the same time.
If all dependencies have been installed correctly, the container should start and create a new database if needed.
The lines defining the JDBC connection to the database in the above mentioned configuration files are:
after derby\: you can choose another place to store the database.
In this setting, all relationships and properties as well as the raw file content are stored inside the Derby database. This is defined in the first two lines of the configurtaion snipped shown above.
The first one should get dynamically deployed, the second you will have to install since it depends only on the RDBMS you want to use. Most common choice is to use MySQL, since it is used for many of the gLite components as well like DPM or LFC, such that there is no need to set up another RDBMS. The corresponding JDBC driver is named Connector/J and is released under a dual-lincesing strategy like the MySQL RDBMS itself: a commercial license and the GNU General Public License. For this reason, neither the RDBMS nor the JDBC driver are directly distributed with the gCube software. The JDBC driver must be available to the container and therefore its .jar file(s) may need to be stored in $GLOBUS_LOCATION/lib/.
You will have to prepare the DBMS manually to create a new database that will get used for Storage Management. For this, you may also want to install mysql-client, MySQL Administrator, and
MySQL Query Browser - or a database-independent tool like ExecuteQuery.
On Scientific Linux 3, the following steps need to be performed:
This will install the MySQL server (if not already present) and the corresponding command-line client. The next line will create a new, empty database. The last line will connect to this database using the comand-line client. If the RDBMS has been set up to require a password for the local root account, use the option -p to be promted for the password. Once you are logged in, you have to create a new user with sufficient rights to connect, create new and alter tables and perform all kinds of selects, inserts, updates, delete from them in this database.
(MySQL has its very own syntax instead of CREATE USER here until version 5.0 - see
If you use MySQL versions < 5, it has by default a limited file size of individual
database files of 4GB or even 2GB on some filesystems. This might become
a problem if you either store many, many files or just a couple of huge
files and MySQL might start to complain "Table is full". In this case, execute the SQL command
Due to some inconvenience in the MySQL protocol for transfering BLOBs of
several megabytes, you might have to increase the MAX_ALLOWED_PACKET
variable in the my.cnf. On Scientif Linux this is located in
/var/lib/mysql/ - see
[3] for details.
For using MySQL, you can use the following lines in the above mentioned configuration file:
in order to use the correct IP-address of your server, the database name, the username and the password. This is nothing else than a regular JDBC connection (plus \ infront of each : to escape them in the Java property file) string, so if you are familiar with that, it should be quite simple to use; otherwise there is plenty of documentation how to make sense out of this, e.g.
.
In addition, you have to set the Storage Manager to use this database by default. Therefore simply edit the lines on top to:
Storage Management is able to use a couple of other protocols to retrieve and store files. The default configuration contains the following entries:
The handlers are used in the order they are defined in the configuration file. If several handlers claim to handle the same protocol, only the one with the lowest number is used. The count must be in line with the defined handlers from 0 to count-1.
The next two lines set up handlers for downloading from FTP and HTTP locations using the build-in clients of the Java Class Library. For better performance and also deal with some security issues in SUNs implementation
can also be used. For this, simply comment out
This will require that the correct .jar file from above mentioned location (or from the Service Archive) is also installed in
.
A template for using the file system instead of the RDBMS is presented in the configuration file:
To make this the default location to store the content, you have to set in the first lines of the configuration file:
Another option would be to use GridFTP here to store the files in a Storage Element on the Grid.
Content & Collection Management entirely rely on Storage Management and interact heavily with it. Therefore it is a good choice to deploy
them on the same node that is hosting Storage Management to avoid that network communication becames the bottleneck for perfermance.
The only parameter that might need adjustment can be found in both configuration files at $GLOBUS_LOCATION/etc/<CMS-GAR-Filename>/ContentManager.properties and $GLOBUS_LOCATION/etc/<ColMS-GAR-Filename>/CollectionManager.properties, respectively.
This line must point to the EPR of the Storage Management Service that should be used. If the GT4 container is running on it's default port 8080 and all three services are deployed on the same node, there should be no need to adjust this. Otherwise the port might need to get corrected (in both configruation files).
The Metadata Management aims at modelling of arbitrary metadata relationships (IDB-relationships). The only assumption it does is that the metadata objects are serialized as well-formed XML documents. The service has a two-fold role:
The main functionality of the Metadata Management components is the management of Metadata Objects, Metadata Collection and their relationships. To operate over Metadata Collections, the Metadata Management instantiates Collection Managers for each collection. A Collection Manager is the access point to all the possible operations over a specific Metadata Collection.
From an architectural point of view, the Metadata Manager adopts the Factory pattern and Collection Managers are implemented as a GCUBEWSResource. Physically, the service is composed by:
The MetadataManagerFactor Service creates new Collection Managers and offers some cross-Collection operations. Moreover, it operates on Metadata Objects as Information Objects related to other Information Objects and not as Members of Metadata Collections.
The Creation parameters are a set of key-value;the following keys are defined in the MMLibrary, the mandatory parameter accepted by the operation:
Each of the Search Framework Services, once deployed along with their dependencies, are designed to be autonomous and needs no user parametrization or supervising. Two issues that may come up and should be mentioned are the following:
Currently, feature extraction reuses existing feature extractors that where developed and used in the ISIS/OSIRIS prototype system. These have been implemented in C++ using many libraries that are not easily portable to any other platform than Windows, on which the ISIS system is running. The Feature Extraction Service wraps an instance demo installation hosted at UNIBAS. The configuration of the service contains the URL of the service. Since this ISIS service is not a DILIGENT service, it cannot be dynamically retrived from the DIS. The other configuration parameter is the EPR of Content Management; this is configured in the service for debugging and performance reasons, since it allows for assignment of Feature Extraction Service to the closest CMS instance to reduce network traffic. In subsequent releases, the default is expected to change to dynamic retrieval of the CMS to contact and only allowing optional configuration to use dedicated instances. The configuration file can be found at $GLOBUS_LOCATION/etc/<FE-GAR-Filename>/FeatureExtraction.properties
Most Process Management Services do not require any manual configuration after deployment, with the exception of the GLite Job Wrapper Service. The required configuration steps are outlined below.
There are two settings that must be defined in the JNDI configuration file of the service (usually $GLOBUS_LOCATION/etc/org_diligentproject_glite_jobwrapper/jndi-config.xml). These settings are used to specify the WMProxy endpoint to use for job submissions, and the user certificate for running the jobs. The format in the JNDI configuration file is as follows:
The rest of the configuration should not be modified.
The proxyCredentialsFile is a VOMS proxy file on the local file system. The administrator of the node is responsible for making sure that this proxy certificate is valid (i.e. not expired) at all times, and that it is a certificate accepted by the WMProxy server pointed to by the WMProxyURL.