Skip to content

Commit cbd1966

Browse files
authored
Merge pull request #3 from datosgobes/develop
Añadidos ejemplos para migración a DCAT-AP-ES y mejora descripcion/SHACL `dct:accrualPeriodicity`
2 parents a8bb420 + 879f75b commit cbd1966

File tree

7 files changed

+205
-29
lines changed

7 files changed

+205
-29
lines changed

docs/examples.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,3 +103,31 @@ La distribución `http://datos.gob.es/catalogo/2332/SHP` proporciona el acceso a
103103
```turtle linenums="1"
104104
--8<-- "examples/ttl/NTI-RISP_Distribution.ttl"
105105
```
106+
107+
# Ejemplo de migración: [Catálogo NTI-RISP a DCAT-AP-ES](/catalogo_-_nti_dcatapes)
108+
Este ejemplo muestra cómo un catálogo modelado originalmente según NTI-RISP (2013) puede adaptarse al perfil [DCAT-AP-ES](https://datosgobes.github.io/DCAT-AP-ES). Sirve como plantilla para la transición porque mantiene la estructura básica del catálogo NTI-RISP y la enriquece con metadatos interoperables a nivel europeo, facilitando la integración en portales nacionales y europeos.
109+
110+
El catálogo `http://dcat-ap-es.ejemplo.org/catalogo` incluye información esencial como título, descripción, publicador, fechas clave, página web, temáticas, idiomas, términos de uso y referencia a datasets. Además, incorpora elementos recomendados por DCAT-AP-ES, como la cobertura geográfica y la alineación con vocabularios europeos, lo que permite una migración progresiva y compatible.
111+
112+
Este ejemplo es útil como plantilla porque:
113+
- Muestra cómo mapear propiedades NTI-RISP a DCAT-AP-ES sin perder información relevante.
114+
- Permite enriquecer el catálogo con nuevos metadatos exigidos por DCAT-AP-ES.
115+
- Facilita la interoperabilidad y el cumplimiento de estándares europeos.
116+
- Es fácilmente adaptable a otros catálogos NTI-RISP existentes.
117+
118+
!!! tip "Ejemplos disponibles"
119+
120+
Puedes consultar versiones de ejemplo migradas al perfil DCAT-AP-ES en los siguientes enlaces:
121+
122+
- [Catálogo NTI-RISP a DCAT-AP-ES](https://datosgobes.github.io/DCAT-AP-ES/examples/#catalogo_-_nti_dcatapes)
123+
- [Catálogo NTI-RISP a DCAT-AP-ES HVD](https://datosgobes.github.io/DCAT-AP-ES/examples/#catalogo_-_nti_dcatapes_hvd)
124+
125+
=== "RDF/XML"
126+
```xml linenums="1"
127+
--8<-- "examples/rdf/E_NTI-RISP_Catalog.rdf"
128+
```
129+
130+
=== "TTL"
131+
```turtle linenums="1"
132+
--8<-- "examples/ttl/E_NTI-RISP_Catalog.ttl"
133+
```

docs/index.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ Cada conjunto de recursos de información presente en el catálogo se describir
214214
| Identificador | URI que identifica al documento o recurso de información. | dct:identifier | R | 0..1 | **xsd:anyURI**<br>*URI que identifica la ficha descriptiva del documento o recurso de información.* |
215215
| Fecha de creación | Fecha de creación del documento o recurso de información. | dct:issued | R | 0..1 | **rdfs:Literal**<br>*Fecha/Hora con formato ISO-8601: `YYYY-MM-DDThh:mm:ssTZD`.* |
216216
| Fecha de última actualización | Última fecha conocida en la que se modificó o actualizó el contenido del documento o recurso de información. | dct:modified | R | 0..1 | **rdfs:Literal**<br>*Fecha/Hora con formato ISO-8601: `YYYY-MM-DDThh:mm:ssTZD`.* |
217-
| Frecuencia de actualización | Periodo de tiempo aproximado entre actualizaciones del documento o recurso de información, si hubiera. | dct:accrualPeriodicity | R | 0..1 | **dct:Frequency**<br>*Se recomienda especificar periodos normalizados con formato ISO8601 (`P<date>T<time>`), o similar.* |
217+
| Frecuencia de actualización | Periodo de tiempo aproximado entre actualizaciones del documento o recurso de información, si hubiera. | dct:accrualPeriodicity | R | 0..1 | **dct:Frequency**<br>*Se recomienda describir la frecuencia mediante un recurso de tipo `dct:Frequency`, siguiendo el modelo de datos RDF. Si se desea indicar el periodo en formato ISO8601, debe especificarse en el valor de `rdf:value` dentro del nodo `dct:Frequency`. Ver [ejemplos](/examples/#__codelineno-2-14). |
218218
| Idioma(s) | Idioma(s) en el(los) que se encuentra la información del documento o recurso de información. | dc:language | R | 0..n | **dct:LinguisticSystem**<br>*Valores normalizados de etiquetas para identificar idiomas definidos en el RFC 5646 `es`, `ga`, `ca`, `eu`, `en`, `fr`<br>Se usará una etiqueta por propiedad.* |
219219
| Organismo que expone y publica los datos | Organismo que publica el documento o recurso de información. | dct:publisher | Ob | 1..1 | **foaf:Agent**<br>*Se especificará el URI correspondiente a un organismo público diferenciados por un código alfanumérico único para cada órgano/unidad/oficina, que será extraído del Directorio Común gestionado por el MINHAP según el esquema siguiente: `http://datos.gob.es/recurso/sector-publico/org/Organismo/{ID}`* |
220220
| Condiciones de uso | Recurso que describe las condiciones de uso o licencia específica aplicable al propio documento o recurso de información. | dct:license | R | 0..1 | **dct:LicenseDocument**<br>*Se especificará un URI que referencia al recurso que define las condiciones de uso. Si no es una licencia-tipo, y si fuese necesario, en la descripción se podría indicar contraprestación económica utilizando valores del código de divisa normalizado por el estándar [ISO-4217](https://www.iso.org/iso-4217-currency-codes.html) (`EUR`, `USD`, `GBP`, etc.).* |
@@ -236,11 +236,11 @@ A continuación se muestra una tabla con valores de ejemplo que podrían tomar l
236236
| Identificador | `http://datos.gob.es/catalogo/2332` | |
237237
| Fecha de creación | `2012-12-26` | |
238238
| Fecha de última actualización | `2012-12-26` | |
239-
| Frecuencia de actualización | `P0Y3M0DT0H0M0S` |(Trimestral |
239+
| Frecuencia de actualización | `P0Y3M0DT0H0M0S` |Trimestral |
240240
| Idioma(s) | `es` `ga` `ca` `en` | Castellano, gallego, catalán e inglés |
241241
| Organismo que expone y publica los datos | `http://datos.gob.es/recurso/sector-publico/org/Organismo/E00004401` | URI correspondiente al Ministerio de Hacienda y Administraciones Públicas |
242242
| Condiciones de uso | `http://www.minhap.gob.es/Documentacion/Publico/NormativaDoctrina/Catastro/Acceso%20a%20la%20informacion%20catastral/res_230311.pdf` | |
243-
| Cobertura geográfica | `http://datos.gob.es/recurso/sector-publico/territorio/Pais/España` |(toda España |
243+
| Cobertura geográfica | `http://datos.gob.es/recurso/sector-publico/territorio/Pais/España` |toda España |
244244
| Cobertura temporal | `2012-12-26` `2013-03-26` | Del *2012-12-26* al *2013-03-26*
245245
| Vigencia del recurso | `2013-03-26` | Válido hasta el *2013-03-26* |
246246
| Recurso(s) relacionado(s) | `http://www1.sedecatastro.gob.es` | Sede Electrónica del Catastro |
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
3+
xmlns:dcat="http://www.w3.org/ns/dcat#"
4+
xmlns:dct="http://purl.org/dc/terms/"
5+
xmlns:foaf="http://xmlns.com/foaf/0.1/"
6+
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
7+
xmlns:dc="http://purl.org/dc/elements/1.1/"
8+
xmlns:time="http://www.w3.org/2006/time#">
9+
10+
<dcat:Catalog rdf:about="http://dcat-ap-es.ejemplo.org/catalogo">
11+
<dct:title xml:lang="es">Catálogo de Datos Abiertos</dct:title>
12+
<dct:title xml:lang="en">Open Data Catalog</dct:title>
13+
<dct:description xml:lang="es">Catálogo de Datos Abiertos que sirve de ejemplo en DCAT-AP-ES.</dct:description>
14+
<dct:description xml:lang="en">Open Data Catalogue that serves as an example in DCAT-AP-ES.</dct:description>
15+
<foaf:homepage rdf:resource="http://dcat-ap-es.ejemplo.org"/>
16+
<dct:publisher rdf:resource="http://datos.gob.es/recurso/sector-publico/org/Organismo/E0DAT0001"/>
17+
<dcat:themeTaxonomy rdf:resource="http://datos.gob.es/kos/sector-publico/sector"/>
18+
<dcat:themeTaxonomy rdf:resource="http://publications.europa.eu/resource/authority/data-theme"/>
19+
<dct:issued rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2025-01-01T09:00:00+01:00</dct:issued>
20+
<dct:modified rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2025-01-02T12:00:00+01:00</dct:modified>
21+
<dc:language>es</dc:language>
22+
<dc:language>en</dc:language>
23+
<dct:spatial rdf:resource="http://datos.gob.es/recurso/sector-publico/territorio/Pais/España"/>
24+
<dct:license rdf:resource="http://publications.europa.eu/resource/authority/licence/CC_BY_4_0"/>
25+
26+
<dcat:dataset>
27+
<dcat:Dataset rdf:about="http://dcat-ap-es.ejemplo.org/dataset/dataset-ejemplo-1">
28+
<dct:identifier>http://dcat-ap-es.ejemplo.org/dataset/dataset-ejemplo-1</dct:identifier>
29+
<dct:title xml:lang="es">Dataset de ejemplo</dct:title>
30+
<dct:title xml:lang="en">Example Dataset</dct:title>
31+
<dct:description xml:lang="es">Descripción de un dataset de ejemplo.</dct:description>
32+
<dct:description xml:lang="en">Example dataset description.</dct:description>
33+
<dct:publisher rdf:resource="http://datos.gob.es/recurso/sector-publico/org/Organismo/E0DAT0001"/>
34+
<dcat:theme rdf:resource="http://datos.gob.es/kos/sector-publico/sector/medio-ambiente"/>
35+
<dct:spatial rdf:resource="http://datos.gob.es/recurso/sector-publico/territorio/Pais/España"/>
36+
<dcat:keyword xml:lang="es">estadísticas</dcat:keyword>
37+
<dct:license rdf:resource="http://publications.europa.eu/resource/authority/licence/CC_BY_4_0" />
38+
<dc:language>es</dc:language>
39+
<dc:language>en</dc:language>
40+
<dct:temporal>
41+
<time:Interval>
42+
<rdf:type rdf:resource="http://purl.org/dc/terms/PeriodOfTime" />
43+
<time:hasBeginning>
44+
<time:Instant>
45+
<time:inXSDDateTime rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">2021-01-01T00:00:00</time:inXSDDateTime>
46+
</time:Instant>
47+
</time:hasBeginning>
48+
<time:hasEnd>
49+
<time:Instant>
50+
<time:inXSDDateTime rdf:datatype="http://www.w3.org/2001/XMLSchema#dateTime">20255-01-01T00:00:00</time:inXSDDateTime>
51+
</time:Instant>
52+
</time:hasEnd>
53+
</time:Interval>
54+
</dct:temporal>
55+
56+
<dcat:distribution>
57+
<dcat:Distribution rdf:about="http://dcat-ap-es.ejemplo.org/distribucion/dataset-ejemplo-1-CSV">
58+
<dct:title xml:lang="es">Distribución de ejemplo</dct:title>
59+
<dct:title xml:lang="en">Example distribution</dct:title>
60+
<dct:description xml:lang="es">Descripción de un distribución de ejemplo.</dct:description>
61+
<dcat:accessURL rdf:resource="http://dcat-ap-es.ejemplo.org/files/dataset-ejemplo-1.CSV"/>
62+
<dct:format>
63+
<dct:IMT>
64+
<rdf:value>text/csv</rdf:value>
65+
<rdfs:label>CSV</rdfs:label>
66+
</dct:IMT>
67+
</dct:format>
68+
</dcat:Distribution>
69+
</dcat:distribution>
70+
71+
</dcat:Dataset>
72+
</dcat:dataset>
73+
74+
</dcat:Catalog>
75+
</rdf:RDF>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
@prefix dcat: <http://www.w3.org/ns/dcat#> .
2+
@prefix dct: <http://purl.org/dc/terms/> .
3+
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
4+
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
5+
@prefix dc: <http://purl.org/dc/elements/1.1/> .
6+
@prefix time: <http://www.w3.org/2006/time#> .
7+
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
8+
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
9+
10+
<http://dcat-ap-es.ejemplo.org/catalogo>
11+
a dcat:Catalog ;
12+
dct:title "Catálogo de Datos Abiertos"@es, "Open Data Catalog"@en ;
13+
dct:description "Catálogo de Datos Abiertos que sirve de ejemplo en DCAT-AP-ES."@es, "Open Data Catalogue that serves as an example in DCAT-AP-ES."@en ;
14+
foaf:homepage <http://dcat-ap-es.ejemplo.org> ;
15+
dct:publisher <http://datos.gob.es/recurso/sector-publico/org/Organismo/E0DAT0001> ;
16+
dcat:themeTaxonomy <http://datos.gob.es/kos/sector-publico/sector>, <http://publications.europa.eu/resource/authority/data-theme> ;
17+
dct:issued "2025-01-01T09:00:00+01:00"^^xsd:dateTime ;
18+
dct:modified "2025-01-02T12:00:00+01:00"^^xsd:dateTime ;
19+
dc:language "es", "en" ;
20+
dct:spatial <http://datos.gob.es/recurso/sector-publico/territorio/Pais/España> ;
21+
dct:license <http://publications.europa.eu/resource/authority/licence/CC_BY_4_0> ;
22+
dcat:dataset <http://dcat-ap-es.ejemplo.org/dataset/dataset-ejemplo-1> .
23+
24+
<http://dcat-ap-es.ejemplo.org/dataset/dataset-ejemplo-1>
25+
a dcat:Dataset ;
26+
dct:identifier "http://dcat-ap-es.ejemplo.org/dataset/dataset-ejemplo-1" ;
27+
dct:title "Dataset de ejemplo"@es, "Example Dataset"@en ;
28+
dct:description "Descripción de un dataset de ejemplo."@es, "Example dataset description."@en ;
29+
dct:publisher <http://datos.gob.es/recurso/sector-publico/org/Organismo/E0DAT0001> ;
30+
dcat:theme <http://datos.gob.es/kos/sector-publico/sector/medio-ambiente> ;
31+
dct:spatial <http://datos.gob.es/recurso/sector-publico/territorio/Pais/España> ;
32+
dcat:keyword "estadísticas"@es ;
33+
dct:license <http://publications.europa.eu/resource/authority/licence/CC_BY_4_0> ;
34+
dc:language "es", "en" ;
35+
dct:temporal [
36+
a time:Interval, dct:PeriodOfTime ;
37+
time:hasBeginning [
38+
a time:Instant ;
39+
time:inXSDDateTime "2021-01-01T00:00:00"^^xsd:dateTime
40+
] ;
41+
time:hasEnd [
42+
a time:Instant ;
43+
time:inXSDDateTime "20255-01-01T00:00:00"^^xsd:dateTime
44+
]
45+
] ;
46+
dcat:distribution <http://dcat-ap-es.ejemplo.org/distribucion/dataset-ejemplo-1-CSV> .
47+
48+
<http://dcat-ap-es.ejemplo.org/distribucion/dataset-ejemplo-1-CSV>
49+
a dcat:Distribution ;
50+
dct:title "Distribución de ejemplo"@es, "Example distribution"@en ;
51+
dct:description "Descripción de un distribución de ejemplo."@es ;
52+
dcat:accessURL <http://dcat-ap-es.ejemplo.org/files/dataset-ejemplo-1.CSV> ;
53+
dct:format [
54+
a dct:IMT ;
55+
rdf:value "text/csv" ;
56+
rdfs:label "CSV"
57+
] .

overrides/dcatapes/index_header.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@
9393
{{ config.dcatapes[lang].period.start.value }}
9494
</span>
9595
{% endif %}
96-
{% if config.dcatapes[lang].period.start.value and config.dcatapes[lang].period.end.value %}
96+
{% if config.dcatapes[lang].period.start.value and period_end_value %}
9797
&nbsp;–&nbsp;
9898
{% endif %}
99-
{% if config.dcatapes[lang].period.end.value %}
100-
<span class="period-end tooltip" title="{{ config.dcatapes[lang].period.end.title }}">
101-
{{ config.dcatapes[lang].period.end.value }}
99+
{% if period_end_value %}
100+
<span class="period-end tooltip" title="{{ period_end.title }}">
101+
{{ period_end_value }}
102102
</span>
103103
{% endif %}
104104
</dd>

shacl/1.0.0/nti-risp_common_shapes.ttl

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,39 @@
117117
:Frequency_Shape
118118
a sh:NodeShape ;
119119
rdfs:comment "Validación para estructuras dct:Frequency usadas en dct:accrualPeriodicity"@es ;
120-
sh:property [
121-
sh:path rdf:value ;
122-
sh:minCount 1 ;
123-
sh:maxCount 1 ;
124-
sh:nodeKind sh:BlankNodeOrIRI ;
125-
sh:node :TimeDurationDescription_Shape ;
126-
sh:message "dct:Frequency debe contener exactamente un rdf:value con una estructura time:DurationDescription válida"@es ;
127-
] ;
120+
sh:or (
121+
# Opción 1: Estructura time:DurationDescription
122+
[
123+
sh:property [
124+
sh:path rdf:value ;
125+
sh:minCount 1 ;
126+
sh:maxCount 1 ;
127+
sh:nodeKind sh:BlankNodeOrIRI ;
128+
sh:node :TimeDurationDescription_Shape ;
129+
sh:message "dct:Frequency debe contener exactamente un rdf:value con una estructura time:DurationDescription válida"@es ;
130+
]
131+
]
132+
# Opción 2: rdf:value como literal xsd:duration o xsd:timePeriod y rdfs:label
133+
[
134+
sh:property [
135+
sh:path rdf:value ;
136+
sh:or (
137+
[ sh:datatype xsd:duration ]
138+
[ sh:datatype <http://www.w3.org/2001/XMLSchema#timePeriod> ]
139+
) ;
140+
sh:pattern "^P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+S)?)?$" ;
141+
sh:minCount 1 ;
142+
sh:maxCount 1 ;
143+
sh:message "rdf:value debe ser un literal xsd:duration o xsd:timePeriod (ejemplo: P0Y3M0DT0H0M0S) y cumplir el patrón ISO-8601"@es ;
144+
] ;
145+
sh:property [
146+
sh:path rdfs:label ;
147+
sh:minCount 1 ;
148+
sh:nodeKind sh:Literal ;
149+
sh:message "Debe incluir al menos un rdfs:label descriptivo"@es ;
150+
]
151+
]
152+
) ;
128153
sh:message "La estructura dct:Frequency no cumple con los requisitos"@es .
129154

130155
:TimeDurationDescription_Shape

shacl/1.0.0/nti-risp_dataset_shape.ttl

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,11 @@
140140
[
141141
sh:path dct:accrualPeriodicity ;
142142
sh:maxCount 1 ;
143-
sh:or (
144-
[
145-
# Literal con formato ISO8601
146-
sh:nodeKind sh:Literal ;
147-
sh:pattern "^P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+S)?)?$" ;
148-
sh:message "El valor debe ser un período ISO8601 válido, ejemplo: 'P0Y3M0DT0H0M0S' para trimestral"@es ;
149-
]
150-
[
151-
# Estructura compleja con dct:Frequency
152-
sh:nodeKind sh:BlankNodeOrIRI ;
153-
sh:class dct:Frequency ;
154-
sh:node :Frequency_Shape ;
155-
]
156-
) ;
143+
144+
# Estructura compleja con dct:Frequency
145+
sh:nodeKind sh:BlankNodeOrIRI ;
146+
sh:class dct:Frequency ;
147+
sh:node :Frequency_Shape ;
157148
sh:severity sh:Violation ;
158149
],
159150

0 commit comments

Comments
 (0)