Revision 63172
Added by Michele Artini about 2 months ago
modules/dnet-isti/trunk/src/main/java/eu/dnetlib/msro/workflows/nodes/PatchCinecaIdsJobNode.java | ||
---|---|---|
1 |
package eu.dnetlib.msro.workflows.nodes; |
|
2 |
|
|
3 |
import java.io.IOException; |
|
4 |
import java.io.InputStream; |
|
5 |
import java.io.InputStreamReader; |
|
6 |
import java.util.HashMap; |
|
7 |
import java.util.Map; |
|
8 |
|
|
9 |
import org.apache.commons.lang3.StringUtils; |
|
10 |
import org.dom4j.Document; |
|
11 |
import org.dom4j.DocumentHelper; |
|
12 |
import org.dom4j.Element; |
|
13 |
import org.dom4j.Namespace; |
|
14 |
import org.dom4j.Node; |
|
15 |
import org.dom4j.QName; |
|
16 |
import org.springframework.beans.factory.annotation.Autowired; |
|
17 |
import org.springframework.beans.factory.annotation.Required; |
|
18 |
import org.springframework.core.io.Resource; |
|
19 |
|
|
20 |
import com.google.gson.Gson; |
|
21 |
import com.google.gson.reflect.TypeToken; |
|
22 |
|
|
23 |
import eu.dnetlib.enabling.resultset.factory.ResultSetFactory; |
|
24 |
import eu.dnetlib.msro.workflows.graph.Arc; |
|
25 |
import eu.dnetlib.msro.workflows.procs.Env; |
|
26 |
import eu.dnetlib.rmi.common.ResultSet; |
|
27 |
import eu.dnetlib.rmi.manager.MSROException; |
|
28 |
|
|
29 |
public class PatchCinecaIdsJobNode extends SimpleJobNode { |
|
30 |
|
|
31 |
private String inputEprParam; |
|
32 |
private String outputEprParam; |
|
33 |
|
|
34 |
public static final String cinecaOaiPrefix = "oai:iris.cnr.it:"; |
|
35 |
public static final String peopleOaiPrefix = "oai:it.cnr:prodotti:"; |
|
36 |
|
|
37 |
private Resource idMapFile; |
|
38 |
|
|
39 |
@Autowired |
|
40 |
private ResultSetFactory resultSetFactory; |
|
41 |
|
|
42 |
@Override |
|
43 |
protected String execute(final Env env) throws Exception { |
|
44 |
|
|
45 |
@SuppressWarnings("unchecked") |
|
46 |
final ResultSet<String> rsIn = env.getAttribute(inputEprParam, ResultSet.class); |
|
47 |
|
|
48 |
final Map<String, String> idMap = loadMap(idMapFile); |
|
49 |
|
|
50 |
if (rsIn == null) { throw new MSROException("Passed rs is null"); } |
|
51 |
|
|
52 |
final ResultSet<String> rsOut = resultSetFactory.map(rsIn, String.class, xml -> patchId(xml, idMap)); |
|
53 |
|
|
54 |
env.setAttribute(outputEprParam, rsOut); |
|
55 |
|
|
56 |
return Arc.DEFAULT_ARC; |
|
57 |
} |
|
58 |
|
|
59 |
protected Map<String, String> loadMap(final Resource mapResource) throws IOException { |
|
60 |
|
|
61 |
final Gson gson = new Gson(); |
|
62 |
|
|
63 |
final TypeToken<HashMap<String, String>> tt = new TypeToken<HashMap<String, String>>() {}; |
|
64 |
|
|
65 |
try (InputStream is = mapResource.getInputStream(); InputStreamReader reader = new InputStreamReader(is)) { |
|
66 |
return gson.fromJson(reader, tt.getType()); |
|
67 |
} |
|
68 |
|
|
69 |
} |
|
70 |
|
|
71 |
protected String patchId(final String xml, final Map<String, String> idMap) { |
|
72 |
try { |
|
73 |
|
|
74 |
final Document doc = DocumentHelper.parseText(xml); |
|
75 |
|
|
76 |
final Element header = (Element) doc.selectSingleNode("//*[local-name() = 'header']"); |
|
77 |
for (final Object o : header.selectNodes("./*[local-name() = 'identifier']")) { |
|
78 |
final Node n = (Node) o; |
|
79 |
final String oldValue = n.getText().trim(); |
|
80 |
|
|
81 |
if (oldValue.startsWith(cinecaOaiPrefix)) { |
|
82 |
|
|
83 |
final String peopleId = idMap.get(StringUtils.substringAfter(oldValue, cinecaOaiPrefix)); |
|
84 |
|
|
85 |
if (StringUtils.isNotBlank(peopleId)) { |
|
86 |
n.setText(peopleOaiPrefix + peopleId); |
|
87 |
header.addElement(new QName("hiddenIdentifier", new Namespace("isti", "http://openportal.isti.cnr.it"))).setText(oldValue); |
|
88 |
} |
|
89 |
} |
|
90 |
} |
|
91 |
|
|
92 |
return doc.asXML(); |
|
93 |
} catch (final Exception e) { |
|
94 |
throw new RuntimeException(e); |
|
95 |
} |
|
96 |
} |
|
97 |
|
|
98 |
public String getInputEprParam() { |
|
99 |
return inputEprParam; |
|
100 |
} |
|
101 |
|
|
102 |
public void setInputEprParam(final String inputEprParam) { |
|
103 |
this.inputEprParam = inputEprParam; |
|
104 |
} |
|
105 |
|
|
106 |
public String getOutputEprParam() { |
|
107 |
return outputEprParam; |
|
108 |
} |
|
109 |
|
|
110 |
public void setOutputEprParam(final String outputEprParam) { |
|
111 |
this.outputEprParam = outputEprParam; |
|
112 |
} |
|
113 |
|
|
114 |
public Resource getIdMapFile() { |
|
115 |
return idMapFile; |
|
116 |
} |
|
117 |
|
|
118 |
@Required |
|
119 |
public void setIdMapFile(final Resource idMapFile) { |
|
120 |
this.idMapFile = idMapFile; |
|
121 |
} |
|
122 |
|
|
123 |
} |
modules/dnet-isti/trunk/src/main/resources/cineca-people/id_mapping.json | ||
---|---|---|
1 |
{} |
modules/dnet-isti/trunk/src/main/resources/eu/dnetlib/isti/applicationContext-isti.properties | ||
---|---|---|
6 | 6 |
|
7 | 7 |
db.affiliations.url = jdbc:mysql://localhost:8889/isti_affiliations |
8 | 8 |
db.affiliations.username = dnet |
9 |
db.affiliations.password = dnetPwd |
|
9 |
db.affiliations.password = dnetPwd |
|
10 |
|
|
11 |
patch.cineca.ids.file = classpath:/cineca-people/id_mapping.json |
modules/dnet-isti/trunk/src/main/resources/eu/dnetlib/isti/applicationContext-isti.xml | ||
---|---|---|
9 | 9 |
class="eu.dnetlib.msro.workflows.nodes.PimpaUpdateJobNode" |
10 | 10 |
scope="prototype" /> |
11 | 11 |
|
12 |
<bean id="wfNodePatchCinecaIds" |
|
13 |
class="eu.dnetlib.msro.workflows.nodes.PatchCinecaIdsJobNode" |
|
14 |
scope="prototype" |
|
15 |
p:idMapFile="${patch.cineca.ids.file}"/> |
|
16 |
|
|
12 | 17 |
<!-- MDStore plugins --> |
13 | 18 |
<bean id="enrichOpenaireMDstorePlugin" class="eu.dnetlib.data.mdstore.plugins.EnrichOpenairePlugin" /> |
14 | 19 |
|
modules/dnet-isti/trunk/src/test/java/eu/dnetlib/msro/workflows/nodes/PatchCinecaIdsJobNodeTest.java | ||
---|---|---|
1 |
package eu.dnetlib.msro.workflows.nodes; |
|
2 |
|
|
3 |
import static org.junit.Assert.assertTrue; |
|
4 |
import static org.junit.jupiter.api.Assertions.assertEquals; |
|
5 |
import static org.junit.jupiter.api.Assertions.assertNotEquals; |
|
6 |
|
|
7 |
import java.util.HashMap; |
|
8 |
import java.util.Map; |
|
9 |
|
|
10 |
import org.apache.commons.io.IOUtils; |
|
11 |
import org.dom4j.DocumentException; |
|
12 |
import org.dom4j.DocumentHelper; |
|
13 |
import org.junit.Before; |
|
14 |
import org.junit.Ignore; |
|
15 |
import org.junit.Test; |
|
16 |
import org.springframework.core.io.FileSystemResource; |
|
17 |
import org.springframework.core.io.Resource; |
|
18 |
|
|
19 |
public class PatchCinecaIdsJobNodeTest { |
|
20 |
|
|
21 |
private PatchCinecaIdsJobNode node = new PatchCinecaIdsJobNode(); |
|
22 |
|
|
23 |
private Map<String, String> idMap; |
|
24 |
|
|
25 |
@Before |
|
26 |
public void setUp() throws Exception { |
|
27 |
idMap = new HashMap<>(); |
|
28 |
idMap.put("20.500.14243/404244", "425561"); |
|
29 |
idMap.put("20.500.14243/340721", "377451"); |
|
30 |
idMap.put("20.500.14243/340722", "377452"); |
|
31 |
idMap.put("20.500.14243/340723", "377453"); |
|
32 |
} |
|
33 |
|
|
34 |
@Test |
|
35 |
@Ignore |
|
36 |
public void testLoadMap() throws Exception { |
|
37 |
final Resource r = new FileSystemResource("/Users/michele/Develop/scripts/openportal_cineca/people-iris-ids.json"); |
|
38 |
final Map<String, String> map = node.loadMap(r); |
|
39 |
System.out.println("MAP SIZE: " + map.size()); |
|
40 |
assertTrue(map.size() > 10000); |
|
41 |
} |
|
42 |
|
|
43 |
@Test |
|
44 |
public void testPatchId_1() throws Exception { |
|
45 |
final String[] arr = patchId("record-01.xml"); |
|
46 |
assertEquals("oai:it.cnr:prodotti:294753", arr[0]); |
|
47 |
assertEquals("oai:it.cnr:prodotti:294753", arr[1]); |
|
48 |
assertEquals(arr[0], arr[1]); |
|
49 |
} |
|
50 |
|
|
51 |
@Test |
|
52 |
public void testPatchId_2() throws Exception { |
|
53 |
final String[] arr = patchId("record-02.xml"); |
|
54 |
assertEquals("oai:iris.cnr.it:20.500.14243/404244", arr[0]); |
|
55 |
assertEquals("oai:it.cnr:prodotti:425561", arr[1]); |
|
56 |
assertNotEquals(arr[0], arr[1]); |
|
57 |
} |
|
58 |
|
|
59 |
@Test |
|
60 |
public void testPatchId_3() throws Exception { |
|
61 |
final String[] arr = patchId("record-03.xml"); |
|
62 |
assertEquals("oai:iris.cnr.it:20.500.14243/43516", arr[0]); |
|
63 |
assertEquals("oai:iris.cnr.it:20.500.14243/43516", arr[1]); |
|
64 |
assertEquals(arr[0], arr[1]); |
|
65 |
} |
|
66 |
|
|
67 |
private String[] patchId(final String file) throws Exception { |
|
68 |
final String xmlIn = IOUtils.toString(getClass().getResourceAsStream(file)); |
|
69 |
final String xmlOut = node.patchId(xmlIn, idMap); |
|
70 |
return new String[] { extractId(xmlIn), extractId(xmlOut) }; |
|
71 |
} |
|
72 |
|
|
73 |
private String extractId(final String xml) throws DocumentException { |
|
74 |
return DocumentHelper.parseText(xml).valueOf("//*[local-name()='header']/*[local-name()='identifier']"); |
|
75 |
} |
|
76 |
|
|
77 |
} |
modules/dnet-isti/trunk/src/test/resources/eu/dnetlib/msro/workflows/nodes/record-01.xml | ||
---|---|---|
1 |
<oai:record xmlns:oai="http://www.openarchives.org/OAI/2.0/" |
|
2 |
xmlns:dri="http://www.driver-repository.eu/namespace/dri" |
|
3 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
|
4 |
<oai:header> |
|
5 |
<identifier xmlns="http://www.openarchives.org/OAI/2.0/">oai:it.cnr:prodotti:294753</identifier> |
|
6 |
<datestamp xmlns="http://www.openarchives.org/OAI/2.0/">2017-10-20T16:09:09Z</datestamp> |
|
7 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">openaire</setSpec> |
|
8 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">CDS074</setSpec> |
|
9 |
</oai:header> |
|
10 |
<metadata xmlns="http://www.openarchives.org/OAI/2.0/"> |
|
11 |
<oai_dc:dc xmlns:oai_dc="http://www.openarchives.org/OAI/2.0/oai_dc/" xmlns="" |
|
12 |
xmlns:dc="http://purl.org/dc/elements/1.1/" |
|
13 |
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"> |
|
14 |
<dc:type>info:eu-repo/semantics/other</dc:type> |
|
15 |
<dc:type>Software</dc:type> |
|
16 |
<dc:title>gCube Tabular Data Manager portlet</dc:title> |
|
17 |
<dc:creator>Panichi G.</dc:creator> |
|
18 |
<dc:creator>Mangiacrapa F.</dc:creator> |
|
19 |
<dc:language>eng</dc:language> |
|
20 |
<dc:description>A portlet for tabular data visualization and manipulation</dc:description> |
|
21 |
<dc:source>2014</dc:source> |
|
22 |
<dc:date>2014</dc:date> |
|
23 |
<dc:identifier>http://www.cnr.it/prodotto/i/294753</dc:identifier> |
|
24 |
<dc:identifier>https://publications.cnr.it/doc/294753</dc:identifier> |
|
25 |
<dc:identifier>http://www.gcube-system.org/index.php?option=com_distribution&view=distribution&release=stable#Portlets%20User</dc:identifier> |
|
26 |
<dc:relation>info:eu-repo/grantAgreement/EC/FP7/283644//Data e-Infrastructure Initiative for Fisheries Management and Conservation of Marine Living Resources/IMARINE</dc:relation> |
|
27 |
<dc:relation>info:cnr-pdr/author/idpersonaleesterno:18715/MANGIACRAPA/FRANCESCO</dc:relation> |
|
28 |
<dc:relation>info:cnr-pdr/author/matricola:15409/PANICHI/GIANCARLO</dc:relation> |
|
29 |
<dc:subject>Tabular</dc:subject> |
|
30 |
<dc:subject>Data</dc:subject> |
|
31 |
<dc:subject>Portlet</dc:subject> |
|
32 |
</oai_dc:dc> |
|
33 |
</metadata> |
|
34 |
</oai:record> |
modules/dnet-isti/trunk/src/test/resources/eu/dnetlib/msro/workflows/nodes/record-02.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<oai:record xmlns:oai="http://www.openarchives.org/OAI/2.0/" |
|
3 |
xmlns:dri="http://www.driver-repository.eu/namespace/dri" |
|
4 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
|
5 |
<oai:header> |
|
6 |
<dri:objIdentifier>iris_test_::00082934128cc79ed2e35d1a71c4cbaf</dri:objIdentifier> |
|
7 |
<dri:recordIdentifier>oai:iris.cnr.it:20.500.14243/404244</dri:recordIdentifier> |
|
8 |
<dri:dateOfCollection>2024-04-24T08:34:52.44+02:00</dri:dateOfCollection> |
|
9 |
<dri:repositoryId>c2be2c55-fae6-4c86-bb78-a1664cceac9e_UmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZXMvUmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZVR5cGU=</dri:repositoryId> |
|
10 |
<dri:datasourceprefix>iris_test_</dri:datasourceprefix> |
|
11 |
<identifier xmlns="http://www.openarchives.org/OAI/2.0/">oai:iris.cnr.it:20.500.14243/404244</identifier> |
|
12 |
<datestamp xmlns="http://www.openarchives.org/OAI/2.0/">2024-03-02T03:04:55Z</datestamp> |
|
13 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">com_20.500.14243_22</setSpec> |
|
14 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">com_20.500.14243_21</setSpec> |
|
15 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">col_20.500.14243_23</setSpec> |
|
16 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">ou_ou294</setSpec> |
|
17 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">openaire</setSpec> |
|
18 |
</oai:header> |
|
19 |
<metadata xmlns="http://www.openarchives.org/OAI/2.0/"> |
|
20 |
<oaire:resource xmlns:oaire="http://namespace.openaire.eu/schema/oaire/" xmlns="" |
|
21 |
xmlns:rdf="http://www.w3.org/TR/rdf-concepts/" |
|
22 |
xmlns:datacite="http://datacite.org/schema/kernel-4" |
|
23 |
xmlns:doc="http://www.lyncode.com/xoai" |
|
24 |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
|
25 |
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" |
|
26 |
xmlns:dc="http://purl.org/dc/elements/1.1/" |
|
27 |
xmlns:exslt="http://exslt.org/common" |
|
28 |
xsi:schemaLocation="http://namespace.openaire.eu/schema/oaire/ https://www.openaire.eu/schema/repo-lit/4.0/openaire.xsd"> |
|
29 |
<datacite:titles> |
|
30 |
<datacite:title xml:lang="en">A digital system for image processing</datacite:title> |
|
31 |
</datacite:titles> |
|
32 |
<datacite:creators> |
|
33 |
<datacite:creator> |
|
34 |
<datacite:creatorName>Azzarelli L</datacite:creatorName> |
|
35 |
</datacite:creator> |
|
36 |
<datacite:creator> |
|
37 |
<datacite:creatorName>Chimenti M</datacite:creatorName> |
|
38 |
</datacite:creator> |
|
39 |
</datacite:creators> |
|
40 |
<datacite:alternateIdentifiers> |
|
41 |
<datacite:alternateIdentifier alternateIdentifierType="URN">https://hdl.handle.net/20.500.14243/404244</datacite:alternateIdentifier> |
|
42 |
</datacite:alternateIdentifiers> |
|
43 |
<datacite:dates> |
|
44 |
<datacite:date dateType="Available">2024-02-21</datacite:date> |
|
45 |
<datacite:date dateType="Accepted">1979</datacite:date> |
|
46 |
<datacite:date dateType="Issued">1979</datacite:date> |
|
47 |
</datacite:dates> |
|
48 |
<dc:language>eng</dc:language> |
|
49 |
<oaire:resourceType resourceTypeGeneral="literature" |
|
50 |
uri="http://purl.org/coar/resource_type/c_6501">journal article</oaire:resourceType> |
|
51 |
<dc:description>No abstract available</dc:description> |
|
52 |
<dc:format>application/pdf</dc:format> |
|
53 |
<datacite:identifier identifierType="Handle">https://hdl.handle.net/20.500.14243/404244</datacite:identifier> |
|
54 |
<datacite:rights rightsURI="http://purl.org/coar/access_right/c_14cb">metadata only access</datacite:rights> |
|
55 |
<datacite:subjects> |
|
56 |
<datacite:subject>image processing</datacite:subject> |
|
57 |
</datacite:subjects> |
|
58 |
<datacite:sizes> |
|
59 |
<datacite:size>2841010 bytes</datacite:size> |
|
60 |
</datacite:sizes> |
|
61 |
<oaire:file accessRightsURI="" mimeType="application/pdf" objectType="fulltext">https://iris.cnr.it/bitstream/20.500.14243/404244/1/prod_425561-doc_151796.pdf</oaire:file> |
|
62 |
</oaire:resource> |
|
63 |
</metadata> |
|
64 |
<oai:about> |
|
65 |
<provenance xmlns="http://www.openarchives.org/OAI/2.0/provenance" |
|
66 |
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/provenance http://www.openarchives.org/OAI/2.0/provenance.xsd"> |
|
67 |
<originDescription xmlns="" altered="true" harvestDate="2024-04-24T08:34:52.44+02:00"> |
|
68 |
<baseURL>https%3A%2F%2Firis.cnr.it%2Foai%2Fopenaire4</baseURL> |
|
69 |
<identifier>oai:iris.cnr.it:20.500.14243/404244</identifier> |
|
70 |
<datestamp>2024-03-02T03:04:55Z</datestamp> |
|
71 |
<metadataNamespace/> |
|
72 |
</originDescription> |
|
73 |
</provenance> |
|
74 |
</oai:about> |
|
75 |
</oai:record> |
modules/dnet-isti/trunk/src/test/resources/eu/dnetlib/msro/workflows/nodes/record-03.xml | ||
---|---|---|
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<oai:record xmlns:oai="http://www.openarchives.org/OAI/2.0/" |
|
3 |
xmlns:dri="http://www.driver-repository.eu/namespace/dri" |
|
4 |
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> |
|
5 |
<oai:header> |
|
6 |
<dri:objIdentifier>iris_test_::000749fdd2010ce3df070928cb48ba76</dri:objIdentifier> |
|
7 |
<dri:recordIdentifier>oai:iris.cnr.it:20.500.14243/43516</dri:recordIdentifier> |
|
8 |
<dri:dateOfCollection>2024-04-24T08:34:40.537+02:00</dri:dateOfCollection> |
|
9 |
<dri:repositoryId>c2be2c55-fae6-4c86-bb78-a1664cceac9e_UmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZXMvUmVwb3NpdG9yeVNlcnZpY2VSZXNvdXJjZVR5cGU=</dri:repositoryId> |
|
10 |
<dri:datasourceprefix>iris_test_</dri:datasourceprefix> |
|
11 |
<identifier xmlns="http://www.openarchives.org/OAI/2.0/">oai:iris.cnr.it:20.500.14243/43516</identifier> |
|
12 |
<datestamp xmlns="http://www.openarchives.org/OAI/2.0/">2024-03-19T09:30:12Z</datestamp> |
|
13 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">com_20.500.14243_29</setSpec> |
|
14 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">com_20.500.14243_21</setSpec> |
|
15 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">col_20.500.14243_30</setSpec> |
|
16 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">ou_ou294</setSpec> |
|
17 |
<setSpec xmlns="http://www.openarchives.org/OAI/2.0/">openaire</setSpec> |
|
18 |
</oai:header> |
|
19 |
<metadata xmlns="http://www.openarchives.org/OAI/2.0/"> |
|
20 |
<oaire:resource xmlns:oaire="http://namespace.openaire.eu/schema/oaire/" xmlns="" |
|
21 |
xmlns:rdf="http://www.w3.org/TR/rdf-concepts/" |
|
22 |
xmlns:datacite="http://datacite.org/schema/kernel-4" |
|
23 |
xmlns:doc="http://www.lyncode.com/xoai" |
|
24 |
xmlns:xs="http://www.w3.org/2001/XMLSchema" |
|
25 |
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" |
|
26 |
xmlns:dc="http://purl.org/dc/elements/1.1/" |
|
27 |
xmlns:exslt="http://exslt.org/common" |
|
28 |
xsi:schemaLocation="http://namespace.openaire.eu/schema/oaire/ https://www.openaire.eu/schema/repo-lit/4.0/openaire.xsd"> |
|
29 |
<datacite:titles> |
|
30 |
<datacite:title xml:lang="en">Supporting Web usability for vision impaired users</datacite:title> |
|
31 |
</datacite:titles> |
|
32 |
<datacite:creators> |
|
33 |
<datacite:creator> |
|
34 |
<datacite:creatorName>Correani F</datacite:creatorName> |
|
35 |
</datacite:creator> |
|
36 |
<datacite:creator> |
|
37 |
<datacite:creatorName>Leporini B</datacite:creatorName> |
|
38 |
<datacite:nameIdentifier nameIdentifierScheme="ORCID" schemeURI="https://orcid.org">0000-0003-2469-9648</datacite:nameIdentifier> |
|
39 |
</datacite:creator> |
|
40 |
<datacite:creator> |
|
41 |
<datacite:creatorName>Paternò€ F</datacite:creatorName> |
|
42 |
</datacite:creator> |
|
43 |
</datacite:creators> |
|
44 |
<datacite:alternateIdentifiers> |
|
45 |
<datacite:alternateIdentifier alternateIdentifierType="DOI">10.1007/b95185</datacite:alternateIdentifier> |
|
46 |
<datacite:alternateIdentifier alternateIdentifierType="ISBN">978-3-540-23375-6</datacite:alternateIdentifier> |
|
47 |
<datacite:alternateIdentifier alternateIdentifierType="URN">000224665300020</datacite:alternateIdentifier> |
|
48 |
<datacite:alternateIdentifier alternateIdentifierType="URN">2-s2.0-35048856115</datacite:alternateIdentifier> |
|
49 |
<datacite:alternateIdentifier alternateIdentifierType="URN">https://hdl.handle.net/20.500.14243/43516</datacite:alternateIdentifier> |
|
50 |
<datacite:alternateIdentifier alternateIdentifierType="URL">http://www.springerlink.com/content/n6db4fmfgac2/tribution.as</datacite:alternateIdentifier> |
|
51 |
</datacite:alternateIdentifiers> |
|
52 |
<datacite:dates> |
|
53 |
<datacite:date dateType="Available">2024-02-19</datacite:date> |
|
54 |
<datacite:date dateType="Accepted">2004</datacite:date> |
|
55 |
<datacite:date dateType="Issued">2004</datacite:date> |
|
56 |
</datacite:dates> |
|
57 |
<dc:language>eng</dc:language> |
|
58 |
<oaire:resourceType resourceTypeGeneral="literature" |
|
59 |
uri="http://purl.org/coar/resource_type/c_3248">book part</oaire:resourceType> |
|
60 |
<dc:description>The aim of this work is to provide designers and developers of Web applications with support to obtain systems that are usable for vision-impaired users. To this end, we have defined a number of design criteria to improve Web site navigation through screen readers or other similar devices. A test of navigation by blind and vision-impaired subjects showed that our criteria improved Web site usability both qualitatively and quantitatively. Subsequently, an inspection-based tool was developed to ease application of such criteria. Its main features are presented along with a discussion of some of the first application results.</dc:description> |
|
61 |
<dc:format>application/pdf</dc:format> |
|
62 |
<datacite:identifier identifierType="Handle">https://hdl.handle.net/20.500.14243/43516</datacite:identifier> |
|
63 |
<datacite:rights rightsURI="http://purl.org/coar/access_right/c_16ec">restricted access</datacite:rights> |
|
64 |
<datacite:subjects> |
|
65 |
<datacite:subject>Accessibility</datacite:subject> |
|
66 |
<datacite:subject>Usability</datacite:subject> |
|
67 |
<datacite:subject>Tool</datacite:subject> |
|
68 |
<datacite:subject>Evaluation</datacite:subject> |
|
69 |
<datacite:subject>Web</datacite:subject> |
|
70 |
</datacite:subjects> |
|
71 |
<datacite:sizes> |
|
72 |
<datacite:size>274753 bytes</datacite:size> |
|
73 |
</datacite:sizes> |
|
74 |
<oaire:file accessRightsURI="" mimeType="application/pdf" objectType="fulltext">https://iris.cnr.it/bitstream/20.500.14243/43516/1/prod_43914-doc_125140.pdf</oaire:file> |
|
75 |
</oaire:resource> |
|
76 |
</metadata> |
|
77 |
<oai:about> |
|
78 |
<provenance xmlns="http://www.openarchives.org/OAI/2.0/provenance" |
|
79 |
xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/provenance http://www.openarchives.org/OAI/2.0/provenance.xsd"> |
|
80 |
<originDescription xmlns="" altered="true" harvestDate="2024-04-24T08:34:40.537+02:00"> |
|
81 |
<baseURL>https%3A%2F%2Firis.cnr.it%2Foai%2Fopenaire4</baseURL> |
|
82 |
<identifier>oai:iris.cnr.it:20.500.14243/43516</identifier> |
|
83 |
<datestamp>2024-03-19T09:30:12Z</datestamp> |
|
84 |
<metadataNamespace/> |
|
85 |
</originDescription> |
|
86 |
</provenance> |
|
87 |
</oai:about> |
|
88 |
</oai:record> |
Also available in: Unified diff
patch node for iris-people ids