├── .github
├── utils
│ └── replace-special-tags.js
└── workflows
│ └── cookbook-update.yml
├── .gitignore
├── DCTAP-Cookbook.md
├── ImplementingTAP.md
├── README.md
├── TAPelements.md
├── TAPprimer.md
├── TAPtemplate.csv
├── TAPtemplate.ods
├── TAPtemplate.tsv
├── TAPtemplate.xlsx
├── _config.yml
├── apPage.md
├── dctap.ttl
├── docs
├── DCTAP-Cookbook.md
├── dctapSchema.json
└── index.md
├── examples
├── CourseSchemaOrgAP
│ ├── UMLModel+Instance.png
│ ├── courseSchemaOrgAP.csv
│ └── readme.md
├── Eurostat
│ ├── eurostat.csv
│ ├── eurostat.ttl
│ └── readme.md
├── RDAexample
│ ├── RDAExampleInstanceData.txt
│ ├── rdaExampleProfle.csv
│ └── readme.md
├── SRAP
│ ├── readme.md
│ └── srap1.csv
├── courseSchema.html
├── datacite
│ ├── DataCiteXML.csv
│ ├── DataCiteXMLUsingShapes.csv
│ ├── dataciteUser.csv
│ ├── openaire.csv
│ └── readme.md
├── dcat-ap-us
│ ├── dcat-ap-us.csv
│ ├── dcat-ap-us.json
│ └── readme.md
├── dcat-ap
│ ├── dcat-ap.csv
│ ├── dcat-ap.json
│ ├── dcat-ap.yml
│ ├── dctap.yml
│ └── readme.md
├── displayEG.html
├── readme.md
├── recipe
│ ├── README.md
│ ├── ap_recipe.csv
│ └── guided_recipe.json
├── samvera_mods_to_rdf
│ ├── TAP_Samvera_MODS_to_RDF_direct_mappings.csv
│ ├── TAP_Samvera_MODS_to_RDF_minted_object_mappings.csv
│ ├── TAP_Samvera_MODS_to_RDF_namespaces.csv
│ └── readme.md
├── simple-book-2
│ ├── readme.md
│ ├── simpleBook2.csv
│ └── simpleBook2RDF.csv
├── simple-book
│ ├── SampleData
│ │ ├── invalid_book_2langTitles.ttl
│ │ ├── invalid_book_authString.ttl
│ │ ├── invalid_book_invalidISBN.ttl
│ │ ├── invalid_book_noTitle.ttl
│ │ ├── invalid_book_rptISBN.ttl
│ │ ├── invalid_book_rpt_invalidISBN.ttl
│ │ ├── invalid_book_titleType.ttl
│ │ ├── no_valid_book.ttl
│ │ ├── open_book_extra.ttl
│ │ ├── valid_book.ttl
│ │ ├── valid_book2_bnode.ttl
│ │ ├── valid_book3_mte.ttl
│ │ ├── valid_book_2auths.ttl
│ │ ├── valid_book_2names.ttl
│ │ ├── valid_book_anonAuth.ttl
│ │ └── valid_book_minimal.ttl
│ ├── book.ttl
│ ├── readme.md
│ ├── shacl.ttl
│ └── simpleBookTAP.csv
├── simpler
│ └── contentDMeg1.md
└── wikidata
│ ├── ChileanPoliticians
│ ├── E163.ttl
│ └── E163ChileanPoliticians.csv
│ ├── ScholarlyArticle
│ ├── E292.ttl
│ ├── E292ScholarlyArticle.csv
│ └── readme.md
│ ├── readme.md
│ ├── wikidata_covid-19_contact_tracing_app
│ ├── namespaces.csv
│ ├── profile.csv
│ └── readme.md
│ └── wikidata_nobel_prize_winners
│ ├── namespaces.csv
│ ├── profile.csv
│ ├── readme.md
│ └── schema.png
├── media
├── 2013Sep11W3CWorkshop
│ └── 2013-09-11.rdfvalid_workshop_dcam.pdf
├── 2020Dec17OpenMeeting
│ ├── dctapDecember2020.pdf
│ └── readme.md
├── 2021Feb18OpenMeeting
│ ├── TAPfeb21.pdf
│ ├── profiles_and_validation.pdf
│ └── readme.md
├── code4lib2021
│ ├── DCTAPposter.pdf
│ └── readme.md
└── readme.md
├── talking_about_metadata.md
└── tests
├── IRIwithLiteralDatatype.csv
├── bothBlankAndFilledShapeID.csv
├── literalWithoutDatatype.csv
├── mixOfEmptyCells.csv
├── noPropertyID.csv
├── propIDonly.csv
├── propsBeforeShape.csv
├── readme.md
├── shapeNotReferenced.csv
├── shapewithoutShapeID.csv
├── twoSameShape.csv
├── valueDataTypeWrong.csv
├── valueNodeTypeLowercase.csv
├── valueNodeTypeTwice.csv
└── valueNodeTypeWrong.csv
/.github/utils/replace-special-tags.js:
--------------------------------------------------------------------------------
1 | //config file for replacing sepcial tags in cookbook Markdown File
2 |
3 | function csvToMarkdown(csvContent, delimiter, hasHeader) {
4 | if (delimiter === void 0) {
5 | delimiter = "\t";
6 | }
7 | if (hasHeader === void 0) {
8 | hasHeader = false;
9 | }
10 | if (delimiter != "\t") {
11 | csvContent = csvContent.replace(/\t/g, " ");
12 | }
13 | var columns = csvContent.split(/\r?\n/);
14 | var tabularData = [];
15 | var maxRowLen = [];
16 | columns.forEach(function (e, i) {
17 | if (typeof tabularData[i] == "undefined") {
18 | tabularData[i] = [];
19 | }
20 | var regex = new RegExp(delimiter + '(?![^"]*"\\B)');
21 | var row = e.split(regex);
22 | row.forEach(function (ee, ii) {
23 | if (typeof maxRowLen[ii] == "undefined") {
24 | maxRowLen[ii] = 0;
25 | }
26 | // escape pipes and backslashes
27 | ee = ee.replace(/(\||\\)/g, "\\$1");
28 | maxRowLen[ii] = Math.max(maxRowLen[ii], ee.length);
29 | tabularData[i][ii] = ee;
30 | });
31 | });
32 | var headerOutput = "";
33 | var seperatorOutput = "";
34 | maxRowLen.forEach(function (len) {
35 | var sizer = Array(len + 1 + 2);
36 | seperatorOutput += "|" + sizer.join("-");
37 | headerOutput += "|" + sizer.join(" ");
38 | });
39 | headerOutput += "| \n";
40 | seperatorOutput += "| \n";
41 | if (hasHeader) {
42 | headerOutput = "";
43 | }
44 | var rowOutput = "";
45 | tabularData.forEach(function (col, i) {
46 | maxRowLen.forEach(function (len, y) {
47 | var row = typeof col[y] == "undefined" ? "" : col[y];
48 | var spacing = Array(len - row.length + 1).join(" ");
49 | var out = "| " + row + spacing + " ";
50 | if (hasHeader && i === 0) {
51 | headerOutput += out;
52 | } else {
53 | rowOutput += out;
54 | }
55 | });
56 | if (hasHeader && i === 0) {
57 | headerOutput += "| \n";
58 | } else {
59 | rowOutput += "| \n";
60 | }
61 | });
62 | return "" + headerOutput + seperatorOutput + rowOutput;
63 | }
64 |
65 | function getCurrentDateUTC() {
66 | options = {
67 | year: "numeric",
68 | month: "long",
69 | day: "numeric",
70 | timeZone: "UTC",
71 | };
72 | const date = new Date();
73 | const dateString = new Intl.DateTimeFormat("en-US", options).format(date);
74 | return dateString;
75 | }
76 |
77 | function csvToMarkdownforCookbook(match) {
78 | const tableSCV = match
79 | .replace(/(?:)/gs, "")
80 | .trim();
81 | console.log(`Converting CSV to Markdown:\n${tableSCV}`);
82 | let markdownTable = csvToMarkdown(tableSCV, ",", true);
83 | console.log(`Generated:\n${markdownTable}`);
84 | return markdownTable;
85 | }
86 |
87 | const replaceDateString = `${getCurrentDateUTC()}`;
88 |
89 | module.exports = {
90 | from: [
91 | /(.*)/g,
92 | /(.*?)/gs,
93 | ],
94 | to: [replaceDateString, (match) => csvToMarkdownforCookbook(match)],
95 | };
96 |
--------------------------------------------------------------------------------
/.github/workflows/cookbook-update.yml:
--------------------------------------------------------------------------------
1 | name: Update DCTAP-Cookbook.md table of contents
2 |
3 | on:
4 | workflow_dispatch:
5 | push:
6 | branches:
7 | - main
8 | - master
9 | paths:
10 | - DCTAP-Cookbook.md
11 |
12 | jobs:
13 | build:
14 | runs-on: ubuntu-latest
15 | steps:
16 | - name: Check out repo
17 | uses: actions/checkout@v3
18 | - name: Update TOC
19 | run: npx markdown-toc DCTAP-Cookbook.md -i
20 | - name: Replace special tags in DCTAP-Cookbook.md
21 | run: npx replace-in-file DCTAP-Cookbook.md --configFile=.github/utils/replace-special-tags.js
22 | - name: Commit and push if DCTAP-Cookbook.md changed
23 | run: |-
24 | git diff
25 | git config --global user.email "dcmi-gh-bot@n1sh.com"
26 | git config --global user.name "DCMI GitHub Bot"
27 | git diff --quiet || (git add DCTAP-Cookbook.md && git commit -m "Updated DCTAP-Cookbook.md")
28 | git push
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled source #
2 | ###################
3 | *.com
4 | *.class
5 | *.dll
6 | *.exe
7 | *.o
8 | *.so
9 |
10 | # Packages #
11 | ############
12 | # it's better to unpack these files and commit the raw source
13 | # git has its own built in compression methods
14 | *.7z
15 | *.dmg
16 | *.gz
17 | *.iso
18 | *.jar
19 | *.rar
20 | # *.tar
21 | # *.zip
22 |
23 | # Logs and databases #
24 | ######################
25 | *.log
26 | *.sql
27 | # *.sqlite
28 |
29 | # Windows Specific #
30 | ####################
31 |
32 | # Windows thumbnail cache files
33 | Thumbs.db
34 | Thumbs.db:encryptable
35 | ehthumbs.db
36 | ehthumbs_vista.db
37 |
38 | # Dump file
39 | *.stackdump
40 |
41 | # Folder config file
42 | [Dd]esktop.ini
43 |
44 | # Recycle Bin used on file shares
45 | $RECYCLE.BIN/
46 |
47 | # Windows Installer files
48 | *.cab
49 | *.msi
50 | *.msix
51 | *.msm
52 | *.msp
53 |
54 | # Windows shortcuts
55 | *.lnk
56 |
57 | # MacOS Specific #
58 | ##################
59 | # General
60 | .DS_Store
61 | .AppleDouble
62 | .LSOverride
63 |
64 | # Icon must end with two \r
65 | Icon
66 |
67 |
68 | # Thumbnails
69 | ._*
70 |
71 | # Files that might appear in the root of a volume
72 | .DocumentRevisions-V100
73 | .fseventsd
74 | .Spotlight-V100
75 | .TemporaryItems
76 | .Trashes
77 | .VolumeIcon.icns
78 | .com.apple.timemachine.donotpresent
79 |
80 | # Directories potentially created on remote AFP share
81 | .AppleDB
82 | .AppleDesktop
83 | Network Trash Folder
84 | Temporary Items
85 | .apdisk
86 |
87 |
88 |
--------------------------------------------------------------------------------
/ImplementingTAP.md:
--------------------------------------------------------------------------------
1 | # Implementing DC TAP
2 |
3 | **Status**: Draft in progress
4 | **Date**: November 29, 2021
5 |
6 | ## Introduction
7 |
8 | The DC TAP model is purposely designed to be a simple core for application profiles in tabular form. Although the TAP can be used as is, many implementations of TAP will require extensions to the model. This document addresses some implementation options as examples of use of a profile that has been initially defined in TAP. TAP is an actionable document, but it is primarily a documentation of an application profile. In many cases, make use of the TAP will require some additional information that is needed for implementation of the profile.
9 |
10 | ## Application profiles
11 |
12 | Some statement here about the relationship between APs and base vocabularies
13 |
14 | ## From table to code
15 |
16 | One usually works with tables in a spreadsheet program like MS Excel or Open Office or a document editing program that supports tables. To be actionalable a TAP needs to be saved in a format that can be processed by program code. For the TAP we recommend that the table be saved in a standard comma-separated format, such as [CSV](https://datatracker.ietf.org/doc/html/rfc4180). Other storage forms exist for tabular data, such as tab-separated values, which is widely recognized by programming languages. The important point is to store the TAP in a machine-actionable format so that it can be directly used by programs implementing the profile.
17 |
18 | ## Administrative metadata
19 |
20 | * providing administrative metadata about the TAP (creators, versions, etc.)
21 |
22 | * providing information that is needed to make use of the TAP, such as namespace prefixes, default values
23 | * configuration information that can be used by programs to extend the basic TAP model (such as additional columns) or that can localize the TAP model with translations of headers and terms
24 |
25 | It is best to think of TAP as a basic core that can be extended or molded to meet the needs of different communities and applications. Implementations of TAP can develop this flexibility in the process of converting TAP from its original delimited format into the format needed by the profile applications.
26 |
27 | ## Namespace declarations
28 |
29 | When using IRIs as identifiers in the cells of a tabular profile it is common to shorten the IRI by providing a local name (a prefix) that represents the base of the identifier (a namespace), such that:
30 |
31 | `dct:subject` = `http://purl.org/dc/terms/subject`
32 | `foaf:name` = `http://xmlns.com/foaf/0.1/name`
33 |
34 | Although there are some conventions of short names for frequently used vocabularies, it is always preferable to provide users of your data with your chosen practice so that expansion of the shortened IRIs will be correct. The actual format of the declaration of prefix and namespace varies by programming language although the basic content does not vary. A table could accompany the tabular profile with the basic information, and applications processing the profile could incorporate this information in the format they require. A simple tabular format for prefixes and namespaces could be:
35 |
36 | | prefix | namespace |
37 | | ---- | ---- |
38 | | foaf: | http://xmlns.com/foaf/0.1/ |
39 | | dct: | http://purl.org/dc/terms/ |
40 |
41 | Other methods may be used to convey this essential information in a way that is compatible with your expected programming environment.
42 |
43 | For correct interpretation of the tabular profile it is recommended that this information be made available with the profile.
44 |
45 | ## Default values
46 |
47 | ## Extending TAP with added columns
48 |
49 | ## Creating a TAP using multiple spreadsheet "sheets"
50 |
51 |
52 | ## Localizing TAP
53 | Languages and terminology
54 | Boolean values
55 |
56 | ## How shapes align with metadata
57 |
58 | ## Validating Data Using TAP
59 |
60 | A TAP provides some information that could be used in validating instance data, but formal rules for validation of data are out of scope for TAP. However, the TAP model is expected to define basic rules that may intereact with validation software or practices. This section will give some information on how to view the constraints in a TAP in relation to validation.
61 |
62 | ### Statement Constraints
63 |
64 | A TAP defines the context and constraints for the validation of metadata statements, where a "statement" is a key/value pair in the applicable metadata. The TAP propertyID and its constraints are within the context of the shape in which the property is defined. Thus, within a TAP with:
65 |
66 | |shapeID|propertyID|
67 | |----|----|
68 | |Book|dct:identifier|
69 | |Author|dct:identifier|
70 |
71 | the `Book|dct:identifer` and the `Author|dct:identifier` are different statements.
72 |
73 | Statement constraints within a shape with the same propertyID and different constraints on that property are also separate, unique statements that can be evaluated individually against the metadata the profile describes, such as:
74 |
75 | |shapeID|propertyID| valueNodeType
76 | |----|----|----|
77 | |Book|dct:subject|IRI|
78 | |Book|dct:subject|literal|
79 |
80 | How these are interpreted in terms of validation, for example whether these statements are considered each on their own or together with a logical "OR" or "AND" is determined by the rules of the validation program.
81 |
82 | ### Cardinality
83 |
84 | ### Open/closed
85 |
86 | One decision needed for validation of metadata is whether the validation will be *open* or *closed*. In an open validation, metadata statements that do not match statement constraints in the TAP are not considered errors, although they may produce informational messages; conversely, a closed validation may reject or flag metadata statements that do not match the profile.
87 |
88 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 | # DC Tabular Application Profiles
3 |
4 | ## Primary documents
5 |
6 | * [DCTAP Primer](https://dcmi.github.io/dctap/TAPprimer.html): The best starting point for understanding DCTAP. With just the primer you should be able to create your first DCTAP.
7 | * [DCTAP Elements](https://dcmi.github.io/dctap/TAPelements.html): A basic list of elements with their definitions.
8 | * [Framework for Talking About Metadata and Application Profiles](https://dcmi.github.io/dctap/talking\_about\_metadata.html): If you experience any confusion about the terminology used in the project, see this document.
9 | * [DCTAP Cookbook](https://dcmi.github.io/dctap/DCTAP-Cookbook.html): Examples of extensions and other complex uses of DCTAP. The Cookbook is and will remain a work in progress.
10 | * [Presentations](https://github.com/dcmi/dctap/tree/main/media) and [examples](https://github.com/dcmi/dctap/tree/main/examples) in the github repository.
11 |
12 | ## Introduction
13 |
14 | The concept of the (metadata) application profile is important for DCMI and the Dublin Core community. It has underpinned many of DCMI's development efforts in recent years. There is significant community interest in developing tools to aid in creating and documenting application profiles. There is a related interest in assuring that profiles specify validation rules for the data that they define.
15 |
16 | Previous work in the Dublin Core community defined a [framework](/specifications/dublin-core/singapore-framework/) for application profiles and a [constraint language](http://www.dublincore.org/specifications/dublin-core/dc-dsp/) based on the [Dublin Core Abstract Model](http://www.dublincore.org/specifications/dublin-core/abstract-model/). This current work will use some of the concepts developed previously but will not be bound to those specifications.
17 |
18 | ## A Core Vocabulary for Profiles
19 |
20 | The idea behind this project is that there is a growing need to develop vocabularies for the creation of data and metadata. The goal of interoperability among data stores encourages the reuse of existing vocabularies for this purpose, and thus to create local profiles that can be understood as widely as possible. Some developers of applications work with complex platforms for data creation and validation. However, metadata is used by nearly every information technology function, from the simple web page to an institutional database, and many people involved in those functions are developing their metadata without the aid of complex and often expensive technology nor the use of professional data developers. This project aims to provide a simple core vocabulary that allows the reuse of elements defined in the public sphere of the web, and to assign basic constraints to those elements; a core vocabulary as simple to understand and use as Dublin Core, but with a different set of outcomes.
21 |
22 | ## Tabular Friendly
23 |
24 | Many communities express their metadata profiles as tables, either in document form or using a spreadsheet program. For this reason we decided to constrain the vocabulary to those profile functions that are compatible with a tabular format. The result is a vocabulary that can define basic definitions and rules that adhere to the two-dimensionality of a table, with the limitations that imposes.
25 |
26 | Note that the vocabulary can be used independently of any tabular format, and should be extended as needed.
27 |
28 | ## Comma Separated Values
29 |
30 | There is a standard for [Comma Separated Values](https://tools.ietf.org/html/rfc4180) (CSV) that is offered as output from most spreadsheet programs. There are other possible outputs, such as tab separated values, but CSV is the primary standard. Most programming environments have available functions for the processing of CSV files. For this reason we also have worked to assure that the TAP vocabulary is consistent with the rules for CSV. There is no requirement that tabular profiles must be exported to CSV for processing, although we expect that this common format will be used in many cases.
31 |
32 | # Implementations
33 |
34 | ## Projects
35 | ### dc-srap
36 | [Scholarly Resources Application Profile](https://github.com/dcmi/dc-srap/tree/main) (dc-srap) is a proposal is to enable the description of scholarly resources, such as doctoral dissertations or scientific articles, with Dublin Core Metadata Terms. The proposal is based on a) Scholarly Works Application Profile ([SWAP12](http://www.ukoln.ac.uk/repositories/digirep/index/Scholarly_Works_Application_Profile)), which was developed by UKOLN with JISC funding in 2006, and b) [Finnish metadata guidelines for text documents in institutional repositories3](https://www.kiwi.fi/display/Julkaisuarkistopalvelut/Metadatasuositus+julkaisuarkistojen+tekstiaineistolle) (available only in Finnish).
37 |
38 | ## Software
39 |
40 | ### Validate and convert DCTAP online
41 | * [DCTAP demo hosted at HuggingFace Space](https://huggingface.co/spaces/dcmi/dctap2shex)
42 |
43 | Paste a DCTAP in CSV format into the input box on HuggingFace and select output in either JSON, YAML, or ShEx. There is an option to include warnings that indicate non-standard DCTAP content (although all content is included in the output). Note that HuggingFace "sleeps" code that hasn't been used recently, so you may need to click on the sleep message to wake it. This is normal behavior. For additional information on validation, see the [documentation for dctap-python](https://dctap-python.readthedocs.io/en/latest/).
44 |
45 | ### dctap-python
46 | * [github repo](https://github.com/dcmi/dctap-python)
47 | * [documentation](https://dctap-python.readthedocs.io/en/latest/)
48 |
49 | The program dctap-python reads the TAP in CSV format and outputs the data in the TAP as text, JSON, or YAML. It does some checking of the content of the TAP and issues warnings for unexpected values, but it passes through all content to the output format. It allows configuration of the TAP, including the addition of columns to the TAP.
50 |
51 | ### TAP2SHACL
52 | * [github repo](https://github.com/philbarker/TAP2SHACL)
53 | * [Google sheets template](https://docs.google.com/spreadsheets/d/1A1l2ouF07yXWpHzeA6d6j9FRmXIxrcPsRCEbTvgTNKQ/edit?usp=sharing)
54 | * [Google sheets github repo](https://github.com/philbarker/DCTAPTemplateForGoogleSheets) (For raising issues.)
55 |
56 | The python program builds on dctap-python to create a SHACL representation of the application profile. In order to do this more information is required than can be provided in a standard TAP, and so the Google sheets template includes a separate sheet for shapes allows additional information to be coded relating to SHACL shapes and sheets for administrative information as well as namespaces used and drop-down sets of allowed values.
57 |
58 | There is [an example](https://docs.google.com/spreadsheets/d/1UkYPGkRo9pcxQYZG9E460pMg_WjKAoJO-Z6gwQXXl6M/edit?usp=sharing) of the sheets required for the Simple Book AP similar to the one in the Primer.
59 |
60 | ### Group Information
61 | 1. [Working group space](https://github.com/dcmi/dcap/blob/master/README.md) (Includes [meeting minutes](https://github.com/dcmi/dcap/tree/master/meetings))
62 | 1. [Group charter](http://www.dublincore.org/groups/application_profiles_ig/)
63 | 1. [Email list information](https://lists.dublincore.org/mailman/listinfo/application-profiles-ig)
64 | 1. [Email list archive](https://lists.dublincore.org/pipermail/application-profiles-ig/)
65 |
--------------------------------------------------------------------------------
/TAPelements.md:
--------------------------------------------------------------------------------
1 | # Elements for DC Tabular Application Profiles
2 |
3 | **Date:**
4 | December 16, 2022
5 |
6 | **Status:**
7 | Draft - Request for Comments
8 |
9 | **Editors:**
10 | Karen Coyle
11 |
12 | **Contributors**
13 |
14 | Tom Baker, DCMI
15 |
16 | Phil Barker, Cetis LLP
17 |
18 | John Huck, University of Alberta
19 |
20 | Nishad Thalhath, University of Tsukuba
21 |
22 | ### Documents in this project:
23 |
24 | - [DCTAP Primer](https://dcmi.github.io/dctap/TAPprimer.html)
25 | - [DCTAP Elements](https://dcmi.github.io/dctap/TAPelements.html) (This document)
26 | - [DCTAP Cookbook](https://dcmi.github.io/dctap/DCTAP-Cookbook.html)
27 | - [Framework for Talking About Metadata and Application Profiles](https://dcmi.github.io/dctap/talking_about_metadata.html)
28 |
29 | ## Introduction
30 |
31 | These elements support the specification of [Dublin Core Tabular Application Profiles](https://github.com/dcmi/dctap/blob/main/TAPprimer.md) (DC TAP). They may be used to create a table or spreadsheet that defines an application profile. For convenience, they are provided for download as:
32 | * a [comma separated value template](https://github.com/dcmi/dctap/blob/main/TAPtemplate.csv)
33 | * an [MS Excel file](https://github.com/dcmi/dctap/blob/main/TAPtemplate.xlsx)
34 | * an [OpenOffice file](https://github.com/dcmi/dctap/blob/main/TAPtemplate.ods)
35 |
36 | An application profile comprises a set of templates for metadata statements in the instance data. The templates define and describe local choices for how statements are constructed, which may include constraints and explanatory information such as labels and notes. A set of statement templates that applies to a single entity or concept defines a shape.
37 | 
38 |
39 |
40 | The components of a dctap are shapes and statement templates. A shape combines one or more statement templates that describe a single thing or concept.
41 |
42 | 
43 |
44 |
45 |
46 | ## DCTAP Elements
47 | The table below lists the elements that may appear as column headers in a DCTAP, along with their cardinality and the component of which they are part.
48 |
49 | | Element | Cardinality | Component |
50 | |---|---|--- |
51 | | shapeID | zero or one | shape |
52 | | shapeLabel | zero or one | shape |
53 | | | | |
54 | | propertyID | one | statement template |
55 | | propertyLabel | zero or one | statement template |
56 | | mandatory | zero or one | statement template |
57 | | repeatable | zero or one | statement template |
58 | | valueNodeType | zero or one | statement template |
59 | | valueDataType | zero or one | statement template |
60 | | valueShape | zero or one | statement template |
61 | | valueConstraint | zero or one | statement template |
62 | | valueConstraintType | zero or one | statement template |
63 | | note | zero or one | statement template |
64 |
65 |
66 | ## Concept definitions
67 |
68 | ### Profile
69 |
70 | Using terms from existing vocabularies, an application profile specifies the structures and metadata terms used in a dataset. At a minimum the profile must provide the data elements, or properties, that are valid for use in the metadata. A profile may also further define metadata validity, such as value constraints and cardinality of elements.
71 |
72 | ### Shape
73 |
74 | A shape is a group of statement templates that share a subject and are identified with the same shapeID.
75 | ### Statement template
76 |
77 | A statement template consists of a property, rules that constrain the property and its value, labels, and notes.
78 |
79 | ## Element definitions
80 |
81 | ### shapeID
82 |
83 | A literal or IRI that uniquely identifies the shape within the context of the profile.
84 |
85 | ### shapeLabel
86 |
87 | A human-readable label for the shape.
88 |
89 |
90 | ### propertyID
91 |
92 | An IRI or literal that identifies the property. It is recommended to use an identifier of a vocabulary term defined in an existing vocabulary.
93 |
94 | ### propertyLabel
95 |
96 | A human-readable label for the property.
97 |
98 | ### mandatory
99 |
100 | Indicates whether or not the metadata must contain a statement that is consistent with this statement template. This is a Boolean value such as "true" or "false", or "1" or "0".
101 |
102 | ### repeatable
103 |
104 | Indicates whether or not the metadata may contain multiple instances of statements that are consistent with this statement template. This is a Boolean value such as "true" or "false", or "1" or "0".
105 |
106 | ### valueNodeType
107 |
108 | This is the node type of the value node. When using RDF properties, the minimum set of values is: "IRI", "literal", "bnode".
109 |
110 | ### valueDataType
111 | The data type of the value. This should be expressed with a standard identified type such as those defined in the XML schema datatypes specification ([XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes](http://www.w3.org/TR/xmlschema11-2/)). Where the value must be a valid RDF literal value, use those defined in ([RDF Concepts - Datatypes](https://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#section-Datatypes)).
112 |
113 | ### valueShape
114 |
115 | The valueShape of a property is a string matching a shapeID in the same profile. The string may be in the form of an IRI.
116 |
117 | ### valueConstraint
118 |
119 | The valueConstraint gives rules relating to the value beyond that which has been defined by the property, the valueNodeType and valueDataType.
120 |
121 | ### valueConstraintType
122 |
123 | Value constraints may not be actionable unless the type of constraint is defined. A minimum set of types is: "picklist", "IRIstem", "pattern", "languageTag", "minLength", "maxLength", "minInclusive", "maxInclusive". These are defined in the [DC TAP primer](https://github.com/dcmi/dctap/blob/main/TAPprimer.md#value-constraint-type). Other types may be supplied in the TAP.
124 |
125 | ### note
126 |
127 | Any explanatory information related to the statement template or any part of the statement template, generally in natural language.
128 |
129 |
--------------------------------------------------------------------------------
/TAPtemplate.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueConstraintType,valueShape,note
2 |
--------------------------------------------------------------------------------
/TAPtemplate.ods:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/TAPtemplate.ods
--------------------------------------------------------------------------------
/TAPtemplate.tsv:
--------------------------------------------------------------------------------
1 | shapeID shapeLabel propertyID propertyLabel mandatory repeatable valueNodeType valueDataType valueConstraint valueConstraintType valueShape note
2 |
--------------------------------------------------------------------------------
/TAPtemplate.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/TAPtemplate.xlsx
--------------------------------------------------------------------------------
/_config.yml:
--------------------------------------------------------------------------------
1 | title: DCTAP
2 | description: DC Tabular Application Profiles
3 | show_downloads: false
4 |
--------------------------------------------------------------------------------
/apPage.md:
--------------------------------------------------------------------------------
1 | # Application profiles
2 |
3 | An application profile defines metadata usage for a specific application. It describes, explains, and defines additional rules for how existing vocabularies and models should be used in a metadata instance.
4 |
5 | Creators and users of metadata need to be able to explain to themselves and to others the expected qualities of their metadata. This is frequently done by creating an application profile that defines the elements that will be included and any existing rules for the creation or use of those elements.
6 |
7 | Profiles are often created as texts that are intended for a human audience. These texts generally employ tables to list the elements of the profile and related rules for metadata creation and validation. Such a document is particularly useful in helping a community reach agreement on its needs and desired solutions. To be usable for a specific function these decisions then need to be translated to computer code, which may not be a straightforward task.
8 |
9 | ## Dublin Core Tabular Application Profiles (DCTAP)
10 |
11 | The goal of the DCTAP work is to provide a simple model that anyone can use to define their application profle. In keeping with the "core" philosophy of Dublin Core, this model does not attempt to cover every possible need but can be extended. The DCTAP uses a table format and only 12 primary elements. The table requires no specific technical knowledge beyond the understanding of the metadata use case. It is intended to be eventually saved in a machine-actionable CSV (comma separated values) file which can then be input to application programs.
12 |
13 | ### Documents in this project
14 |
15 | * The [DCTAP Primer](https://dcmi.github.io/dctap/TAPprimer.html) is the best starting point for understanding DCTAP. With just the primer you should be able to create your first DCTAP.
16 | * A basic list of [DCTAP Elements](https://dcmi.github.io/dctap/TAPelements.html) is provided with their definitions
17 | * If you experience any confusion about the terms used in the project, they are defined in the [Framework for Talking About Metadata and Application Profiles](https://dcmi.github.io/dctap/talking\_about\_metadata.html)
18 | * Examples of extensions and other complex uses of DCTAP are in the [DCTAP Cookbook](https://dcmi.github.io/dctap/DCTAP-Cookbook.html), which is (always) a work in progress
19 | * The github repository includes [presentations](https://github.com/dcmi/dctap/tree/main/media) and [examples](https://github.com/dcmi/dctap/tree/main/examples) of uses.
20 |
21 | ## Implementing DCTAP
22 | ### Starter files
23 | There are three files on the working group's github site that you can use to begin your DCTAP. They each contain all of the columns of a DCTAP, but you can delete columns that you do not need.
24 | * [Plain CSV](https://github.com/dcmi/dctap/blob/main/TAPtemplate.csv) which can be read by any spreadsheet program
25 | * [Microsoft Excel](https://github.com/dcmi/dctap/blob/main/TAPtemplate.xlsx) format.
26 | * [Open Office](https://github.com/dcmi/dctap/blob/main/TAPtemplate.ods) format
27 |
28 | ### Processing programs
29 | These programs process the contents of the DCTAP directly and prepare the data for further use.
30 | * dctap-python [documentation](https://dctap-python.readthedocs.io/en/latest/)
31 |
32 | These programs (in progress) make use of the elements of a DCTAP.
33 |
34 | * TAP-to-SHACL [github](https://github.com/philbarker/TAP2SHACL)
35 | * TAP-to-ShEx [github](https://github.com/tombaker/tapshex)
36 |
37 | ### Implementations
38 | TBA
39 |
40 | ## Background work
41 |
42 | * The [Singapore framework](https://www.dublincore.org/specifications/dublin-core/singapore-framework/), developed in 2008, provides a context for application profiles as a stack of work items.
43 | * [DCMI Abstract Model](https://www.dublincore.org/specification_status/recommendation/) is a general model of metadata that informs the application profile work
44 |
45 |
46 |
--------------------------------------------------------------------------------
/dctap.ttl:
--------------------------------------------------------------------------------
1 | @prefix dc11: .
2 | @prefix dc: .
3 | @prefix rdf: .
4 | @prefix rdfs: .
5 | @prefix owl: .
6 | @prefix skos: .
7 |
8 |
9 | a owl:Ontology ;
10 | dcterms:title "dctap ontology"@en .
11 |
12 |
13 | a rdfs:Property ;
14 | rdfs:label "Shape ID"@en ;
15 | skos:definition "A literal or IRI that uniquely identifies the shape within the context of the profile."@en ;
16 | rdfs:isDefinedBy .
17 |
18 |
19 | a rdfs:Property ;
20 | rdfs:label "Shape label"@en ;
21 | skos:definition "A human-readable label for the shape."@en ;
22 | rdfs:isDefinedBy .
23 |
24 |
25 | a rdfs:Property ;
26 | rdfs:label "Property identifier"@en ;
27 | skos:definition "An IRI or literal that identifie the property. It is recommended to use an identifier of a vocabulary term defined in an existing vocabulary."@en ;
28 | rdfs:isDefinedBy .
29 |
30 |
31 | a rdfs:Property ;
32 | rdfs:label "Property label"@en ;
33 | skos:definition "A human-readable label for the property."@en ;
34 | rdfs:isDefinedBy .
35 |
36 |
37 | a rdfs:Property ;
38 | rdfs:label "Mandatory"@en ;
39 | skos:definition """Indicates whether or not the property must be present in the instance data. This is a Boolean value such as "true" or "false", or "1" or "0"."""@en ;
40 | rdfs:isDefinedBy .
41 |
42 |
43 | a rdfs:Property ;
44 | rdfs:label "Shape ID"@en ;
45 | skos:definition """Indicates whether or not the metadata may contain multiple instances of statements that are consistent with this statement template. This is a Boolean value such as "true" or "false", or "1" or "0"."""@en ;
46 | rdfs:isDefinedBy .
47 |
48 |
49 | a rdfs:Property ;
50 | rdfs:label "Value node type"@en ;
51 | skos:definition """This is the node type of the value node. When using RDF properties, the minimum set of values is: "IRI", "LITERAL", "BNODE"."""@en ;
52 | rdfs:isDefinedBy .
53 |
54 |
55 | a rdfs:Property ;
56 | rdfs:label "Value data type"@en ;
57 | skos:definition """The data type of the value. This should be expressed with a standard identified type such as those defined in the XML schema datatypes specification ([XML Schema Definition Language (XSD) 1.1 Part 2: Datatypes](http://www.w3.org/TR/xmlschema11-2/)). Where the value must be a valid RDF literal value, use those defined in ([RDF Concepts - Datatypes](https://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#section-Datatypes))."""@en ;
58 | rdfs:isDefinedBy .
59 |
60 |
61 | a rdfs:Property ;
62 | rdfs:label "Value shape"@en ;
63 | skos:definition "The valueShape of a property is a string matching a shapeID in the same profile. The string may be in the form of an IRI."@en ;
64 | rdfs:isDefinedBy .
65 |
66 |
67 | a rdfs:Property ;
68 | rdfs:label "Note"@en ;
69 | skos:definition "Any additional or explanatory information related to the statement or any part of the statement, generally in natural language."@en ;
70 | rdfs:isDefinedBy .
71 |
72 |
73 | a rdfs:Property ;
74 | rdfs:label "Value constraint"@en ;
75 | skos:definition "The valueConstraint gives rules relating to the value beyond that which has been defined by the property, the valueNodeType and valueDataType."@en ;
76 | rdfs:isDefinedBy .
77 |
78 |
79 | a rdfs:Property ;
80 | rdfs:label "Value constraint type"@en ;
81 | skos:definition """Value constraints may not be actionable unless the type of constraint is defined. A minimum set of types is: "picklist", "IRIstem", "pattern", "languageTag", "minLength", "maxLength", "minInclusive", "maxInclusive". These are defined in the [DC TAP primer](https://github.com/dcmi/dctap/blob/main/TAPprimer.md#value-constraint-type). Other types may be supplied in the TAP."""@en ;
82 | rdfs:isDefinedBy .
83 |
--------------------------------------------------------------------------------
/docs/DCTAP-Cookbook.md:
--------------------------------------------------------------------------------
1 | # DC TAP Cookbook
2 |
3 |
4 |
5 | - [Extension points](#extension-points)
6 | - [Extending elements](#extending-elements)
7 | * [Specific cardinality](#specific-cardinality)
8 | * [Minimum/maximum values](#minimummaximum-values)
9 | * [Minimum/maximum string lengths](#minimummaximum-string-lengths)
10 | - [Extending the table with columns](#extending-the-table-with-columns)
11 | * [Defining order of properties](#defining-order-of-properties)
12 | * [Define ordered values](#define-ordered-values)
13 | - [Namespace declarations](#namespace-declarations)
14 | - [Multiple values in a cell](#multiple-values-in-a-cell)
15 |
16 |
17 |
18 | **NB: This is a work in progress! The document draft can be found at https://hackmd.io/V3LGdBdxTrOid57M2wJUlw. This version is dated July 26, 2022.**
19 |
20 | The Dublin Core Tabular Application Profile has been designed purposely as a simple core of application profile requirements. Like the Dublin Core Metadata Terms, the DC TAP should be seen as a starting point that may be sufficient for some simple applications but may also need to be extended to meet the needs of others. There are no intended limitations in the DC TAP design that would hinder extension.
21 |
22 | This document presents some examples of extensions that may help users of DC TAP create their own extensions. Sections of this document and the solutions provided may change as we learn more about uses of the DC TAP.
23 |
24 | ## Extension points
25 |
26 | There are two primary types of extensions for the DC TAP. The first is to add columns in the table for elements that are not included in the base specification. An example could be for a profile that will specify a maximum length for some data elements. The second is to add capabilities to the values that are defined for the cells of the basic table. This could mean defining ones own `valueConstraintType` or allowing multiple values in some cells in the table.
27 |
28 | ## Extending elements
29 |
30 | ### Specific cardinality
31 | (Issue #50)
32 |
33 | The DC TAP has two cardinality columns that take only the boolean values of "true" or "false" (or "1" or "0" ): `mandatory`, and `repeatable`. In words, mandatory means there *must* be at least one; repeatable means that there *can* be more than one.
34 |
35 | These columns do not allow you to encode requirements like: "there must be at least two of these" or "there can be only as many as 5". These types of requirements are generally written as numeric values, such as "2,5". Because this form of cardinality declaration is not included in the DC TAP it will require the addition of the desired number of extended columns to hold the information.
36 |
37 | Using columns, for those who prefer to store these elements as two separate elements, two extended columns will be needed. For those who prefer a compact version with both minimum and maximum in a single expression, only one added column will be needed. In either case, as these are undefined in the base specification, the heading of these extended columns is not pre-defined. The examples below use headings that are solely suggestive of the functions.
38 |
39 | *Using two columns*
40 |
41 | | shapeID | shapeLabel | propertyID | propertyLabel | minOccur | maxOccur |
42 | |-|-|-|-|-|-|
43 | | BookShape | Book | dct:subject | Subject | 1 | 3 |
44 |
45 | *Using one column*
46 |
47 | | shapeID | shapeLabel | propertyID | propertyLabel | Occur |
48 | |-|-|-|-|-|
49 | | BookShape | Book | dct:subject | Subject | 1,3 |
50 |
51 |
52 |
53 | Note that the use of minimum and maximum cardinality is in most cases not compatible with the use of `mandatory` and `repeatable`. Only one of these ways of expressing cardinality should be used in a TAP.
54 |
55 | ### Minimum/maximum values
56 |
57 | (#57)
58 |
59 | The DC TAP `valueDataType` can be a numeric value such as an integer or a formatted date. It is not uncommon for values such as these to be limited in their lower and/or upper bounds. In a profile for metadata that describes an educational program, there can be an obvious limitation on the ages of the pupils. The rule would be, for example, that students in any class may not be younger than 6 years of age, or older than 18 years of age. Or an inventory system for a business may put limits on a data element for "date of sale" to catch typos.
60 |
61 | Either of these value constraints may be used alone if only a lower or upper bound is needed.
62 |
63 | | propertyID | propertyLabel | valueConstraint | valueConstraintType |
64 | |-|-|-|-|
65 | | ex:date | Date | 2022/01/01 | minValue |
66 |
67 |
68 | One approach to providing minimum and maximum values is to extend the value space for the `valueConstraintType` to include terms such as "min", "max", "minInclusive", "maxInclusive" (these terms follow the vocabulary used by SHACL and other standards). The entry in the `valueConstraint` cell is then interpreted accordingly. For example if the `valueConstraintType` is "min" and the `valueConstraint` is "6" then the value must be over 6; or, if the `valueConstraintType` is "minInclusive" and the `valueConstraint` is "6" then the value must be 6 or over.
69 |
70 | | propertyID | propertyLabel | valueConstraint | valueConstraintType |
71 | |-|-|-|-|
72 | | ex:age | Age | 6 | minValue |
73 | | ex:age | Age | 18 | maxValue |
74 |
75 | See section XX for an explanation on how to interpret the constraints expressed in rows to clarify situations like this.
76 |
77 |
78 | This approach of using the valueConstraintType has the advantage over an alternative of adding columns for each type of constraint (min, max, etc) that it does not lead to wide tables with many, sparsely populated columns, requiring much horizontal scrolling.
79 |
80 | Another way to achieve designating a minimum and maximum value without repetition of the row is by using terms such as "range" and "rangeInclusive" as the `valueConstraintType`. Note that it is necessary to agree with users on the separator to be used between the upper and lower bound in the `valueConstraint` column.
81 |
82 | | propertyID | propertyLabel | valueConstraint | valueConstraintType |
83 | |-|-|-|-|
84 | | ex:age | Age | 6-18 | range |
85 |
86 |
87 | (Note: there's the problem of "if" - "if class is primary, then age range is 6-12; if class if middle, then age range is 11-15" etc. The table format doesn't give you a way to create branches based on "if" operations.)
88 |
89 | ### Minimum/maximum string lengths
90 |
91 | ([#56](https://github.com/dcmi/dctap/issues/56))
92 |
93 | Sometimes it is desirable to limit the length of a string, for example to avoid overly long or too short descriptions.
94 |
95 | One approach for doing this is to have a `valueConstraintType` such as `minLength` and `maxLength` (these terms follow the vocabulary found in the SHACL and XML Schema standards). The entry for the `valueConstraint` is then interpreted as the appropriate limit on the character length. For example, to limit descriptions to 512 characters:
96 |
97 | | propertyID | propertyLabel | valueConstraint | valueConstraintType |
98 | |-|-|-|-|
99 | | dc:description | Description | 512 | maxLength |
100 |
101 | ## Extending the table with columns
102 |
103 | ### Defining order of properties
104 |
105 | It may be desirable to define an order of properties in the metadata. A CSV file is itself in a fixed order, but if this order is not sufficient then a column for the enumeration of the order could be added to the tabular profile. ([Issue #15](https://github.com/dcmi/dctap/issues/15)) This only is workable within a single shape. Ordering across shapes isn't possible.
106 |
107 | Here is an example of this from BIBFRAME:
108 |
109 | | shapeID | shapeLabel | propertyID | propertyLabel | orderNo |
110 | |---------|------------|------------------------|-----------------------------------|---------|
111 | | ISBN | ISBN | rdf:type | Class | 1 |
112 | | | | sp:hasResourceTemplate | Profile ID | 2 |
113 | | | | rdf:value | ISBN | 3 |
114 | | | | bf:qualifier | Qualifier | 4 |
115 | | | | bf:note | Note | 5 |
116 | | | | bf:/status | Incorrect, Invalid or Canceled? | 6 |
117 |
118 |
119 |
120 | For validation, order of properties can be checked with both ShEx and SHACL for RDF data. Here is an example from the SHACL documentation.
121 |
122 | 
123 |
124 |
125 | ### Define ordered values
126 |
127 | Without some extra effort, statements in RDF are not ordered. Where a metadata statement is repeatable but order of the statements is meaningful, it may be desirable to indicate in the profile which properties must be created and maintained in order. Depending on the needs of the applications, this can be done as:
128 | * logic within the application, where order is always enforced for a specific property
129 | * a note, where the main purpose is to inform those creating the metadata
130 | * an added column for `ordered` with a binary value, where this needs to be conveyed to any downstream applications
131 |
132 | ## Namespace declarations
133 |
134 | When using IRIs as identifiers in the cells of a tabular profile it is common to shorten the IRI by providing a local name (a prefix) that represents the base of the identifier (a namespace), such that:
135 |
136 | `dct:subject` = `http://purl.org/dc/terms/subject`
137 | `foaf:name` = `http://xmlns.com/foaf/0.1/name`
138 |
139 | Although there are some conventions of short names for frequently used vocabularies, it is always preferable to provide users of your data with your chosen practice so that expansion of the shortened IRIs will be correct. The actual format of the declaration of prefix and namespace varies by programming language although the basic content does not vary. A table could accompany the tabular profile with the basic information, and applications processing the profile could incorporate this information in the format they require. The proposed format for a table of prefixes and namespaces is:
140 |
141 | | prefix | namespace |
142 | | ---- | ---- |
143 | | foaf: | http://xmlns.com/foaf/0.1/ |
144 | | dct: | http://purl.org/dc/terms/ |
145 |
146 | Other methods may be used to convey this essential information in a way that is compatible with your expected programming environment.
147 |
148 | For correct interpretation of the tabular profile it is recommended that this information be made available with the profile.
149 |
150 | ## Multiple values in a cell
151 |
152 | There are various situations where one may want to have multiple values in a cell that represent a choice of values, such as:
153 |
154 | valueNodeType = IRI **or** BNODE
155 | valueConstraint = red **or** blue **or** green
156 | valueType = xsd:string **or** rdf:langString
157 |
158 | Multiple value options in a single cell need to be delimited to distinguish them from a single value. Both the comma and the pipe character ("|") are commonly used delimiters that are highly visible within a string, but other characters may be used, with the caveat that the meaning of the characters used may need to be communicated to downstream users of the tabular profile. Note that comma characters are a special case in a CSV file, and commas used as multiple value delimiters need to escaped so that they are not confused with commas that separate columns. The CSV specification (https://tools.ietf.org/html/rfc4180) describes how to do this. However, most user-facing tools that are used to edit CSV files, such as spreadsheets, handle this more or less transparently, as do many code libraries for processing CSV files programatically, therefore it often is not necessary to escape the commas when using a table or spreadsheet program.
159 |
160 | Multiple options in a cell should be processed in a logical "or" relation. Thus the cell with contents:
161 |
162 | `A|B|C`
163 |
164 | or
165 |
166 | `A,B,C`
167 |
168 | is processed as:
169 |
170 | `A` or `B` or `C`
171 |
172 | In metadata creation applications this is often referred to as a "picklist".
173 |
174 | Examples:
175 |
176 | | propertyID | valueDatatype | valueConstraint | valueConstraintType
177 | | ---- | ---- | ---- | ---- |
178 | | dct:subject | xsd:string | European History|Science|Fine Arts | picklist
179 |
180 | | propertyID | valueDatatype | valueConstraint | valueConstraintType
181 | | ---- | ---- | ---- | ----|
182 | | dct:subject | xsd:string | European History, Science, Fine Arts | picklist
183 |
184 | Not all columns can work well with multiple values. For example, one cannot have multiple values for the boolean elements of mandatory and repeatable. Likely uses of multiple values are: for labels (especially those using language tags to differentiate them); valueShape; valueConstraint; and valueDataType. Note that where multiple values are used one must be careful that this has not created ambiguity. For example, where there are multiple data types it may not be possible to also include a valueConstraint that would apply to only one of the multiple values.
185 |
186 |
187 |
188 |
189 |
190 |
--------------------------------------------------------------------------------
/docs/dctapSchema.json:
--------------------------------------------------------------------------------
1 | {
2 | "$id": "http://example.com/sb3.json",
3 | "$schema": "https://json-schema.org/draft/2020-12/schema#",
4 | "type": "object",
5 | "properties": {
6 | "shapes": {
7 | "type": "array",
8 | "items": [
9 | {
10 | "type": "object",
11 | "properties": {
12 | "shapeID": {
13 | "type": "string"
14 | },
15 | "shapeLabel": {
16 | "type": "string"
17 | },
18 | "statement_templates": {
19 | "type": "array",
20 | "items": [
21 | {
22 | "type": "object",
23 | "properties": {
24 | "propertyID": {
25 | "type": "string"
26 | },
27 | "propertyLabel": {
28 | "type": "string"
29 | },
30 | "mandatory": {
31 | "type": "boolean"
32 | },
33 | "repeatable": {
34 | "type": "boolean"
35 | },
36 | "valueDataType": {
37 | "type": "string"
38 | },
39 | "valueNodeType": {
40 | "enum": ["IRI", "literal", "bnode"]
41 | },
42 | "valueShape": {
43 | "type": "string"
44 | },
45 | "valueConstraint": {
46 | "type": "string"
47 | },
48 | "valueConstraintType": {
49 | "enum": ["picklist", "IRIstem", "pattern", "languageTag", "minLength", "maxLength", "minInclusive", "maxInclusive"]
50 | },
51 | "note": {
52 | "type": "string"
53 | }
54 | },
55 | "required": [
56 | "propertyID"
57 | ]
58 | }
59 | ]
60 | }
61 | },
62 | "required": [
63 | "shapeID",
64 | "statement_templates"
65 | ]
66 | }
67 | ]
68 | }
69 | },
70 | "required": [
71 | "shapes"
72 | ]
73 | }
74 |
--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 |
2 | [DCTAP-Cookbook](./DCTAP-Cookbook.html)
3 |
--------------------------------------------------------------------------------
/examples/CourseSchemaOrgAP/UMLModel+Instance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/examples/CourseSchemaOrgAP/UMLModel+Instance.png
--------------------------------------------------------------------------------
/examples/CourseSchemaOrgAP/courseSchemaOrgAP.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDatatype,valueShape,valueConstraint,Note
2 | CourseInstance,Course Offering,rdf:type,instance of,TRUE,FALSE,IRI,,,sdo:CourseInstance,
3 | ,,sdo:name,course name,TRUE,FALSE,Literal,xsd:string,,,
4 | ,,sdo:startDate,start date,TRUE,FALSE,Literal,xsd:date,,,date must be in the future
5 | ,,sdo:endDate,end date,TRUE,FALSE,Literal,xsd:date,,,must be after start date
6 | ,,sdo:about,subject,TRUE,TRUE,IRI,,Subject,,
7 | ,,sdo:instructor,primary instructor,TRUE,FALSE,IRI,,Instructor,,list only the instructor responsible for the course
8 | ,,sdo:location,location,TRUE,TRUE,IRI,,Location,,repeat only if a single course offering requires attendance in >1 place.
9 | ,,,,,,,,,,
10 | Subject,Course Subject,rdf:type,instance of,TRUE,FALSE,IRI,,,skos:Concept,
11 | ,,,,,,,,,,
12 | Location,Course Location,rdf:type,instance of,TRUE,FALSE,IRI,,,"sdo:Place,sdo:VirtualLocation",
13 | ,,,,,,,,,,
14 | Instructor,Primary Instructor,rdf:type,instance of,TRUE,FALSE,IRI,,,sdo:Person,
15 | ,,sdo:givenName,given name,TRUE,FALSE,Literal,xsd:string,,,
16 | ,,sdo:familyName,family name,FALSE,FALSE,Literal,xsd:string,,,
17 | ,,sdo:email,email address,FALSE,TRUE,Literal,xsd:string,,,must be format [.+]@[.+].[.+]
18 |
--------------------------------------------------------------------------------
/examples/CourseSchemaOrgAP/readme.md:
--------------------------------------------------------------------------------
1 | # Application Profile for course information using schema.org
2 |
3 | [courseSchemaOrgAP.csv](courseSchemaOrgAP.csv) is a very simplified application profile based on [schema.org](https://schema.org/CourseInstance) to for information about courses.
4 |
5 | ## UML Data model & example instance data
6 |
7 | 
8 |
9 |
10 | ## Comments
11 |
12 | The namespace `sdo:` stands for `https://schema.org/`; this is omitted from the diagram above.
13 |
14 | The location of the course can be either a Place or a VirtualLocation. The TAP csv a comma is used to separate these options though this currently under discussion.
15 |
16 | Some desired constraints that are currently not supported are listed as notes, these are: the start date must be in the future; the end date must be after the start date; and, the text provided for the email must match a suitable regex.
--------------------------------------------------------------------------------
/examples/Eurostat/eurostat.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDatatype,valueConstraint,valueConstraintType,valueShape,note
2 | CatalogRecord_Shape,Catalogue Record,rdf:type,Class,,,,,dcat:CatalogRecord,,,
3 | ,,foaf:primaryTopic,primary topic,TRUE,FALSE,IRI,,,,,
4 | ,,dct:modified,update/ modification date,TRUE,FALSE,literal,xsd:date xsd:dateTime,,,,
5 | ,,dct:issued,listing date,FALSE,,literal,xsd:date xsd:dateTime,,,,
6 | ,,dct:creator,Creator,,,,,,,,
7 | ,,dct:identifier,Identifier,,,,,,,,
8 | ,,dqv:hasQualityMetadata,Has Quality Metadata,,,,,,,,
9 | ,,voc:transIssued,,,,,,,,,
10 | ,,voc:transStatus,,,,,,,,,
11 | ,,spdx:checksum,Checksum,TRUE,FALSE,,,,,checksum-shape,
12 | ,,,,,,,,,,,
13 | checksum-shape,Checksum,rdf:type,Class,TRUE,FALSE,IRI,,,,,
14 | ,,spdx:algorithm,Checksum algorithm,TRUE,FALSE,IRI,,http://spdx.org/rdf/terms,IRIstem,,
15 | ,,spdx:checksumValue,Checksum value,TRUE,FALSE,literal,xsd:string,,,,
16 | ,,,,,,,,,,,
17 | distribution-shape,Distribution,rdf:type,Class,TRUE,FALSE,IRI,,dcat:Distribution,,,
18 | ,,dcat:accessURL,Access URL,TRUE,FALSE,IRI,,,,,
19 | ,,dct:format,Format,FALSE,FALSE,IRI,,eu:file-type/,IRIstem,,
20 | ,,dct:issued,Issued date,FALSE,,,,,,,
21 | ,,dct:title,Title ,TRUE,FALSE,literal,xsd:string,@fr @en @de,languageTag,,
22 | ,,dct:description,Description,FALSE,FALSE,literal,xsd:string,@en,languageTag,,
23 | ,,dct:identifier,Identifier,TRUE,FALSE,IRI,,eu:distribution/,IRIstem,,
24 | ,,dct:license,License,FALSE,FALSE,IRI,,eu:license/,IRIstem,,
25 | ,,dct:type,Distribution type,TRUE,FALSE,IRI,,eu:distribution-type/,IRIstem,,
26 | ,,,,,,,,,,,
27 | skos:Category,Category,skos:prefLabel,Label,TRUE,,,,,,,
28 | ,,,,,,,,,,,
29 | ,,,,,,,,,,,
30 | dataset-shape,Dataset,rdf:type,Class,TRUE,FALSE,IRI,,dcat:Dataset,,,
31 | ,,dct:description,Dataset description,TRUE,TRUE,literal,xsd:string,@en @fr @de,languageTag,,
32 | ,,dct:title,Dataset title,TRUE,FALSE,literal,xsd:string,@en,languageTag,,
33 | ,,dcat:contactPoint,Contact point,TRUE,FALSE,IRI,,,,,
34 | ,,dcat:distribution,Distribution,TRUE,TRUE,,,,,distribution-shape,
35 | ,,dcat:keyword,Keyword,TRUE,TRUE,literal,xsd:string,@en,languageTag,,
36 | ,,dct:subject,Subject,FALSE,TRUE,IRI,,euvoc:,iRIstem,,
37 | ,,dct:publisher,Publisher,TRUE,FALSE,IRI,,eu:corporate-body/,iRIstem,,
38 | ,,dct:temporal,Temporal,TRUE,FALSE,IRI,,dct:PeriodOfTime,,temporal-shape,
39 | ,,dcat:theme,Theme,TRUE,TRUE,IRI,,eu:data-theme/,IRIstem,,
40 | ,,dcat:landingPage,Landing page,TRUE,FALSE,,,,,,
41 | ,,dct:accessRights,Access rights,TRUE,FALSE,,,,,,
42 | ,,dct:identifier,Identifer,TRUE,FALSE,,,,,,
43 | ,,dct:modified,Modified date,TRUE,FALSE,,,,,,
44 | ,,dct:type,Type,TRUE,FALSE,,,,,,
45 | ,,foaf:page,Page,TRUE,TRUE,,,,,,
46 | ,,,,,,,,,,,
47 | temporal-shape,Period of time,rdf:type,Class,TRUE,FALSE,,,dct:PeriodOfTime,,,
48 | ,,dcat:endDate,End date,FALSE,FALSE,literal,xsd:date,,,,
49 | ,,dcat:startDate,State date,FALSE,FALSE,literal,xsd:date,,,,
50 | ,,,,,,,,,,,
51 | ,,,,,,,,,,,
52 | document-shape,Document,rdf:type,Class,TRUE,TRUE,IRI,,foaf:Document,,,
53 | ,,dct:format,Format,TRUE,FALSE,IRI,,eu:file-type/,IRIstem,,
54 | ,,dct:type,Type,TRUE,FALSE,IRI,,eu:documentation-type,IRIstem,,
55 | ,,dct:title,Title ,TRUE,FALSE,literal,xsd:string,@en,languageTag,,
56 | ,,schema:url,URL,TRUE,FALSE,IRI,,,,,
57 | ,,foaf:topic,Topic,TRUE,FALSE,IRI, ,eu:set/data,iRIstem,,
58 | ,,,,,,,,,,,
59 | address-shape,Address,rdf:type,Class,TRUE,FALSE,IRI,,v:Kind,,,
60 | ,,v:hasAddress,Address,TRUE,FALSE,,,street-address-shape,,,
61 | ,,v:hasURL,URL,TRUE,FALSE,IRI,,,,,
62 | ,,v:organizationName,Organization,TRUE,FALSE,literal,xsd:string,,,,
63 | ,,,,,,,,,,,
64 | street-address-shape,Street address,rdf:type,Class,TRUE,FALSE,IRI,,v:Address,,,
65 | ,,v:street-address,Street address,TRUE,FALSE,literal,xsd:string,,,,
66 | ,,,,,,,,,,,
67 | Voice,Contact voice,rdf:type,Class,TRUE,FALSE,IRI,,v:Voice,,,
68 | ,,v:hasValue,Phone number,TRUE,FALSE,literal,xsd:string,,,,
69 |
--------------------------------------------------------------------------------
/examples/Eurostat/eurostat.ttl:
--------------------------------------------------------------------------------
1 | @prefix adms: .
2 | @prefix dcat: .
3 | @prefix dcatap: .
4 | @prefix dct: .
5 | @prefix foaf: .
6 | @prefix gmd: .
7 | @prefix gsp: .
8 | @prefix hydra: .
9 | @prefix locn: .
10 | @prefix odrl: .
11 | @prefix org: .
12 | @prefix owl: .
13 | @prefix prov: .
14 | @prefix rdfs: .
15 | @prefix schema: .
16 | @prefix skos: .
17 | @prefix spdx: .
18 | @prefix time: .
19 | @prefix v: .
20 | @prefix xsd: .
21 |
22 |
23 | a v:Kind ;
24 | v:hasAddress ;
25 | v:hasTelephone ;
26 | v:hasURL ;
27 | v:organisation-name "Eurostat, the statistical office of the European Union" .
28 |
29 |
30 | a v:Voice ;
31 | v:hasValue .
32 |
33 |
34 | a dcat:Distribution ;
35 | dct:format ;
36 | dct:identifier "http://data.europa.eu/88u/distribution/602c42d8-5e1c-4887-b924-befa7c5187fe" ;
37 | dct:license ;
38 | dct:title "[VISUALISATION] Graphique"@fr , "[VISUALISATION] Graph"@en , "[VISUALISATION] Graph"@de ;
39 | dct:type ;
40 | dcat:accessURL .
41 |
42 |
43 | a v:Address ;
44 | v:street-address "Joseph Bech building, 5 Rue Alphonse Weicker, L-2721 Luxembourg" .
45 |
46 |
47 | a foaf:Document ;
48 | dct:format ;
49 | dct:title "ESMS metadata (Euro-SDMX Metadata structure) SDMX"@en ;
50 | dct:type ;
51 | schema:url "http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?file=metadata/t2020_rd100_esmsip2.sdmx.zip"@en ;
52 | foaf:topic .
53 |
54 |
55 | a skos:Concept .
56 |
57 |
58 | a skos:Concept .
59 |
60 |
61 | a skos:Concept .
62 |
63 |
64 | a dct:PeriodOfTime ;
65 | dcat:endDate "2018-01-01"^^xsd:date ;
66 | dcat:startDate "2009-01-01"^^xsd:date .
67 |
68 |
69 | a skos:Concept .
70 |
71 |
72 | a dcat:Distribution ;
73 | dct:description "Download dataset in TSV format"@en ;
74 | dct:format ;
75 | dct:identifier "http://data.europa.eu/88u/distribution/bde58725-5b42-4a67-802f-e065378ed0d9" ;
76 | dct:license ;
77 | dct:title "Productivité des sols artificiels"@fr , "Productivity of artificial land"@en , "Produktivität der künstlich angelegten Flächen"@de ;
78 | dct:type ;
79 | dcat:accessURL .
80 |
81 |
82 | a dct:MediaTypeOrExtent .
83 |
84 |
85 | a dcat:Distribution ;
86 | dct:format ;
87 | dct:identifier "http://data.europa.eu/88u/distribution/535f61c8-e781-4ce1-b30a-bbb47824f08f" ;
88 | dct:license ;
89 | dct:title "[VISUALISATION] Tableau"@fr , "[VISUALISATION] Table"@en , "[VISUALISATION] Tabelle"@de ;
90 | dct:type ;
91 | dcat:accessURL .
92 |
93 |
94 | a foaf:Agent .
95 |
96 |
97 | a dcat:Distribution ;
98 | dct:description "Download dataset in SDMX-ML format"@en ;
99 | dct:format ;
100 | dct:identifier "http://data.europa.eu/88u/distribution/3eafb84f-3faa-40ae-b9dc-a385b9d69b4f" ;
101 | dct:license ;
102 | dct:title "Productivité des sols artificiels"@fr , "Productivity of artificial land"@en , "Produktivität der künstlich angelegten Flächen"@de ;
103 | dct:type ;
104 | dcat:accessURL .
105 |
106 |
107 | a dct:MediaTypeOrExtent .
108 |
109 |
110 | a foaf:Document ;
111 | dct:format ;
112 | dct:title "ESMS metadata (Euro-SDMX Metadata structure) HTML"@en ;
113 | dct:type ;
114 | schema:url "http://ec.europa.eu/eurostat/cache/metadata/en/t2020_rd100_esmsip2.htm"@en ;
115 | foaf:topic .
116 |
117 |
118 | a dcat:Distribution ;
119 | dct:format ;
120 | dct:identifier "http://data.europa.eu/88u/distribution/dd65e035-d336-4bdd-8aa1-594122729de6" ;
121 | dct:license ;
122 | dct:title "[VISUALISATION] Map"@en , "[VISUALISATION] Carte"@fr , "[VISUALISATION] Karte"@de ;
123 | dct:type ;
124 | dcat:accessURL .
125 |
126 |
127 | a dcat:Dataset ;
128 |
129 | "EUODP->DEU xslt, version:20210804" ;
130 | dct:accessRights ;
131 | dct:description "Productivity of artificial land is defined as the gross domestic product (GDP) of a country divided by its total artificial land. Artificial land consists of built-up areas (areas covered with buildings and greenhouses) and non built-up areas (streets and sealed surfaces). Artificial land productivity shows whether built-up and non built-up areas are efficiently used to generate added economic value. For the calculation of artificial land productivity Eurostat uses the GDP in millions of PPS (Purchasing Power Standard). This unit allows to compare countries for the same year. More information on land cover/land use can be found here."@en , "La productivité des sols artificiels est définie comme le produit intérieur brut (PIB) d'un pays divisé par la totalité de ses sols artificiels. Les sols artificiels se composent de zones bâties (les zones couvertes de bâtiments et les serres) et les zones non bâties (les routes et les surfaces étanches). La productivité des sols artificiels indique que les zones bâties et non bâties sont efficacement utilisées pour générer de la valeur ajoutée économique. Pour le calcul de la productivité des sols artificiels, Eurostat utilise le PIB en millions de SPA (Standard de Pouvoir d'Achat). Cette unité permet de comparer les pays pour la même année. Plus d'informations sur la couverture des sols / utilisation des sols peuvent être trouvés ici."@fr , "Produktivität der künstlich angelegte Flächen ist definiert als das Bruttoinlandsprodukt (BIP) eines Landes dividiert durch die gesamten künstlich angelegte Flächen. Künstlich angelegte Flächen bestehen aus bebauten Flächen (Flächen mit Gebäuden und Gewächshäusern) und außerhalb geschlossener Ortschaften aus Straßen und versiegelten Flächen. Die Produktivität künstlich angelegter Flächen zeigt, ob bebaute und unbebaute Gebiete wirksam genutzt werden und einen wirtschaftlichen Mehrwert erzeugen. Für die Berechnung der künstlichen Bodenproduktivität verwendet Eurostat das BIP in KKS (Kaufkraftstandard). Diese Einheit erlaubt einen Vergleich der Länder innerhalb des gleichen Jahres. Weitere Informationen über Bodenbedeckung/Bodennutzung hier."@de ;
132 | dct:identifier "http://data.europa.eu/88u/dataset/gZIJQvqVdCx3aVO3oXnZw" , "t2020_rd100" ;
133 | dct:modified "2021-10-19"^^xsd:date ;
134 | dct:publisher ;
135 | dct:subject , ;
136 | dct:temporal ;
137 | dct:title "Produktivität der künstlich angelegten Flächen"@de , "Productivité des sols artificiels"@fr , "Productivity of artificial land"@en ;
138 | dct:type ;
139 | dcat:contactPoint ;
140 | dcat:distribution , , , , , ;
141 | dcat:keyword "ESTAT"@en ;
142 | dcat:landingPage ;
143 | dcat:theme , , ;
144 | foaf:page , , .
145 |
146 |
147 | a dct:MediaTypeOrExtent .
148 |
149 |
150 | a dcat:Distribution ;
151 | dct:description "Download dataset in TSV format (unzipped)"@en ;
152 | dct:format ;
153 | dct:identifier "http://data.europa.eu/88u/distribution/8ea764a8-2764-4325-973d-96568f2ca468" ;
154 | dct:license ;
155 | dct:title "Produktivität der künstlich angelegten Flächen"@de , "Productivity of artificial land"@en , "Productivité des sols artificiels"@fr ;
156 | dct:type ;
157 | dcat:accessURL .
158 |
159 |
160 | a dcat:CatalogRecord ;
161 | dct:creator ;
162 | dct:identifier "gZIJQvqVdCx3aVO3oXnZw" ;
163 | dct:issued "2021-09-06T08:07:51Z"^^xsd:dateTime ;
164 | dct:modified "2021-10-19T18:04:04Z"^^xsd:dateTime ;
165 |
166 | ;
167 | foaf:primaryTopic ;
168 |
169 | "2021-10-19T18:04:04Z"^^xsd:dateTime ;
170 |
171 | ;
172 | spdx:checksum [ a spdx:Checksum ;
173 | spdx:algorithm spdx:checksumAlgorithm_md5 ;
174 | spdx:checksumValue "c9790b9ce8b96b55b2d25e856aab8abd"
175 | ] .
176 |
177 |
178 | a dct:RightsStatement .
179 |
180 |
181 | a foaf:Document ;
182 | dct:format ;
183 | dct:title "More information on Eurostat Website"@en ;
184 | dct:type ;
185 | schema:url "http://ec.europa.eu/eurostat/web/products-datasets/-/t2020_rd100"@en , "http://ec.europa.eu/eurostat/web/products-datasets/-/t2020_rd100" ;
186 | foaf:topic .
187 |
188 |
189 | a skos:Concept .
190 |
191 |
192 | a skos:Concept .
193 |
194 |
195 | a dct:LicenseDocument .
196 |
197 |
198 | a foaf:Document ;
199 | schema:url "http://ec.europa.eu/eurostat/help/support" ;
200 | foaf:topic .
201 |
--------------------------------------------------------------------------------
/examples/Eurostat/readme.md:
--------------------------------------------------------------------------------
1 | # Eurostat profile
2 |
3 | Eurostat is one of the many data providers using the DCAT-AP. Based on looking at Eurostat data, it uses a subset of DCAT-AP, and makes use of some EU vocabulary lists. These variants can be expressed in a DC TAP allowing for specific validation and processing of the Eurostat data.
4 |
5 | The files are:
6 | * eurostat.csv - the DC TAP
7 | * eurostat.ttl - the data file from which the TAP was derived
8 |
9 | The DC TAP presented here makes some guesses regarding cardinality; ideally it would be reviewed by someone close to the data.
10 |
--------------------------------------------------------------------------------
/examples/RDAexample/RDAExampleInstanceData.txt:
--------------------------------------------------------------------------------
1 | Example: Volume (text) 1 from [Complete examples – bibliographic records - 9 Dec 2015](https://github.com/RDARegistry/RDA-Vocabularies/tree/master/ttl/Examples)
2 |
3 | ex:A1
4 | rdaa:P50094 "Taylor, Arlene G., 1941-" ;
5 | rdaa:P50117 "Taylor, Arlene G." ;
6 | rdaa:P50103 "Arlene G. Taylor" ;
7 | rdaa:P50121 "1941" .
8 | ex:E1
9 | rdae:P20001 rdaco:1020 ;
10 | rdae:P20006 "English"@en ;
11 | rdae:P20206 "Includes bibliography and index"@en ;
12 | rdae:P20231 ex:W1 .
13 |
14 | ex:W1
15 | rdaw:P10002 "Taylor, Arlene G., 1941- . The organization of information" ;
16 | rdaw:P10061 ex:A1 ;
17 | rdaw:P10102 ex:W2 ;
18 | rdaw:P10223 "The organization of information" ;
19 | rdaw:P10256 "Information organization"@en .
20 |
--------------------------------------------------------------------------------
/examples/RDAexample/rdaExampleProfle.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueDataType,mandatory,repeatable,valueShape,constraintType,constraint
2 | person,rdaa:P50094,xsd:string,TRUE,FALSE,,,
3 | ,rdaa:P50117,xsd:string,FALSE,FALSE,,,
4 | ,rdaa:P50103,xsd:string,FALSE,FALSE,,,
5 | ,rdaa:P50121,xsd:string,FALSE,FALSE,,,
6 | work,rdaw:P10001,xsd:string,TRUE,FALSE,,,
7 | ,rdaw:P10061,,,,person,,
8 | ,rdaw:P10102,,,,work,,
9 | ,rdaw:P10223,xsd:string,TRUE,FALSE,,,
10 | ,rdaw:P10256,rdf:langString,TRUE,FALSE,,,
11 | expression,rdae:P20001,xsd:string,TRUE,FALSE,,uristem,http://rdaregistry.info/termList/RDAContentType/
12 | ,rdae:P20231,,,,work,,
13 | ,rdae:P20006,rdf:langString,TRUE,FALSE,,,
14 | ,rdae:P20206,rdf:langString,FALSE,FALSE,,,
15 |
--------------------------------------------------------------------------------
/examples/RDAexample/readme.md:
--------------------------------------------------------------------------------
1 | # RDA example
2 |
3 | This is a TAP template that was derived from a portion of some RDA instance data.
4 |
5 | * [Example RDA instance data](RDAExampleInstanceData.txt)
6 | * [TAP table](rdaExampleProfle.csv)
7 |
--------------------------------------------------------------------------------
/examples/SRAP/readme.md:
--------------------------------------------------------------------------------
1 | # SRAP - Scholarly Resources Application Profile
2 |
3 | [SRAP1.csv](srap1.csv)
4 |
5 | This is a very first proof-of-concept TAP based on a proposed application profile for scholarly resources.
6 |
--------------------------------------------------------------------------------
/examples/SRAP/srap1.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyLabel,propertyID,Mandatory,Repeatable,valueNodeType,valueDatatype,valueShape,valueConstraint,valueConstraintType,Note
2 | ,,,,,,,,,,,
3 | :admin,Admin data,Metadata source,dct:metadataSource,FALSE,TRUE,LITERAL,xsd:string,,,,Name of the organization
4 | :doc,Document,Abstract,dct:abstract,FALSE,TRUE,LITERAL,,,,,Free text
5 | ,,Access rights,dct:accessRights,FALSE,TRUE,IRI,,,http://vocabularies.coar-repositories.org/documentation/access_rights/,IRIstem,A term from COAR vocabulary
6 | ,,Date,dct:date,TRUE,FALSE,LITERAL,xsd:date,,,,Date according to ISO 8601-1
7 | ,,Description,dct:description,TRUE,FALSE,LITERAL,rdf:langString,,,,Free text; different languages shall be provided separately (as different Description elements)
8 | ,,Embargo date,dct:embargoDate,FALSE,TRUE,LITERAL,xsd:date,,,,Date according to ISO 8601-1
9 | ,,Format,dct:format,TRUE,FALSE,,,,,,MIME type registered by IANA
10 | ,,Grant number,dct:grantNumber,FALSE,TRUE,LITERAL,xsd:string,,,,Free text
11 | ,,Has Part,dct:hasPart,FALSE,TRUE,IRI LITERAL,,,,,URI or other identifier of the related resource
12 | ,,Identifier,dct:identifier,TRUE,TRUE,IRI LITERAL,,,,,URI
13 | ,,Is Part Of,dct:isPartOf,FALSE,TRUE,IRI LITERAL,,,,,URI or other identifier of the related resource
14 | ,,Language,dct:language,TRUE,TRUE,LITERAL,xsd:string,,,,A code from ISO 639-2
15 | ,,Opponent,http://id.loc.gov/vocabulary/relators/opn,FALSE,TRUE,,,:person,,,Name and identifier of the person
16 | ,,Presented at,bibo:presentedAt,FALSE,TRUE,,,:conference,,,Free text or URI
17 | ,,Related dataset,dct:relatedDataset,FALSE,TRUE,IRI,,,,,URI
18 | ,,Relation,dct:relation,FALSE,TRUE,IRI,,,,,URI
19 | ,,Rights,dct:rights,FALSE,TRUE,IRI,,,,,Free text or URI of the appropriate license
20 | ,,Status,dct:status,FALSE,TRUE,IRI,,,info:eu-repo/semantics/,IRIstem,OpenAire publication status code from https://guidelines.openaire.eu/en/latest/literature/field_publicationversion.html
21 | ,,Subject,dct:subject,FALSE,TRUE,,,:subject,,,A concept from a controlled vocabulary such as LCSH or MeSH
22 | ,,Title,dct:title,TRUE,FALSE,LITERAL,xsd:string,,,,Free text
23 | ,,Type,dct:type,FALSE,TRUE,,,,http://purl.org/coar/resource_type,IRIstem,A term from COAR resource type vocabulary
24 | ,,Degree supervisor,http://id.loc.gov/vocabulary/relators/dgs,FALSE,TRUE,,,:person,,,Person
25 | ,,Editor,https://id.loc.gov/vocabulary/relators/edt,FALSE,TRUE,,,":person, :organization",,,Name and identifier of persons
26 | ,,Funder,https://id.loc.gov/vocabulary/relators/fnd,FALSE,TRUE,,,":person, :organization",,,Name and identifier of persons and/or organizations
27 | ,,Contributor,dct:contributor,FALSE,TRUE,,,:person,,,Name and identifier of persons and/or organizations
28 | ,,Creator,dct:creator,FALSE,TRUE,,,:person,,,Name and identifier of persons and/or organizations
29 | ,,Publisher,dct:publisher,FALSE,TRUE,,,:organization,,,Name and URI of the organization
30 | ,,,,,,,,,,,
31 | :person,Person,Class,rdf:type,FALSE,FALSE,IRI,,,foaf:Person,,
32 | ,,Class,rdf:type,FALSE,FALSE,IRI,,,dct:Agent,,
33 | ,,Affiliation,dct:affiliation,FALSE,TRUE,,,:organization,,,Name and identifier of the organization or organizations
34 | ,,Name,foaf:Name,FALSE,FALSE,LITERAL,,,,,
35 | ,,Identifier,dct:Identifier,FALSE,TRUE,IRI,,,,,
36 | ,,,,,,,,,,,
37 | ,,,,,,,,,,,
38 | :organization,Organization,Class,rdf:type,FALSE,FALSE,,,,dct:Agent,,
39 | ,,Class,rdf:type,FALSE,FALSE,,,,foaf:Organization,,
40 | ,,Identifier,dct:identifier,FALSE,TRUE,IRI,,,,,
41 | ,,Name,foaf:name,FALSE,FALSE,LITERAL,xsd:string,,,,
42 | ,,,,,,,,,,,
43 | :subject,Subject,Identifier,dct:identifier,FALSE,TRUE,IRI,,,,,
44 | ,,Display label,rdf:label,FALSE,TRUE,LITERAL,xsd:string,,,,
45 | ,,,,,,,,,,,
46 | ,,,,,,,,,,,
47 | :conference,Conference,Identifier,dct:identifier,FALSE,TRUE,IRI,,,,,
48 | ,,Name,foaf:name,FALSE,FALSE,LITERAL,xsd:string,,,,
49 | ,,Date,dct:date,FALSE,FALSE,LITERAL,xsd:date,,,,
50 | ,,Location,https://schema.org/location,FALSE,FALSE,LITERAL,xsd:string,,,,
51 |
--------------------------------------------------------------------------------
/examples/courseSchema.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
35 |
36 |
37 |
38 |
39 | Course Offering
instance of (rdf:type)- mandatory "true"
- repeatable "false"
- valueNodeType "iri"
- valueConstraint "sdo:CourseInstance"
course name (sdo:name)- mandatory "true"
- repeatable "false"
- valueNodeType "literal"
- valueDataType "xsd:string"
start date (sdo:startDate)- mandatory "true"
- repeatable "false"
- valueNodeType "literal"
- valueDataType "xsd:date"
- note "date must be in the future"
end date (sdo:endDate)- mandatory "true"
- repeatable "false"
- valueNodeType "literal"
- valueDataType "xsd:date"
- note "must be after start date"
subject (sdo:about)- mandatory "true"
- repeatable "true"
- valueNodeType "iri"
- valueShape "Subject"
primary instructor (sdo:instructor)- mandatory "true"
- repeatable "false"
- valueNodeType "iri"
- valueShape "Instructor"
- note "list only the instructor responsible for the course"
location (sdo:location)- mandatory "true"
- repeatable "true"
- valueNodeType "iri"
- valueShape "Location"
- note "repeat only if a single course offering requires attendance in >1 place."
Course Subject
instance of (rdf:type)- mandatory "true"
- repeatable "false"
- valueNodeType "iri"
- valueConstraint "skos:Concept"
Course Location
instance of (rdf:type)- mandatory "true"
- repeatable "false"
- valueNodeType "iri"
- valueConstraint "sdo:Place,sdo:VirtualLocation"
Primary Instructor
instance of (rdf:type)- mandatory "true"
- repeatable "false"
- valueNodeType "iri"
- valueConstraint "sdo:Person"
given name (sdo:givenName)- mandatory "true"
- repeatable "false"
- valueNodeType "literal"
- valueDataType "xsd:string"
family name (sdo:familyName)- mandatory "false"
- repeatable "false"
- valueNodeType "literal"
- valueDataType "xsd:string"
email address (sdo:email)- mandatory "false"
- repeatable "true"
- valueNodeType "literal"
- valueDataType "xsd:string"
- note "must be format [.+]@[.+].[.+]"
40 |
41 |
42 |
--------------------------------------------------------------------------------
/examples/datacite/DataCiteXML.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraintType,valueConstraint,valueShape,note,note2,note3
2 | resourceSHP,,identifier,,TRUE,FALSE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,A persistent identifier that identifies a resource.,,
3 | ,,identifier/@identifierType,,TRUE,FALSE,literal,xs:anySimpleType,,,,,,
4 | ,,creators,,TRUE,FALSE,,,,,,,,
5 | ,,creators/creator,,TRUE,TRUE,,,,,creatorSHP,"The main researchers involved working on the data, or the authors of the publication in priority order. May be a corporate/institutional or personal name.",,
6 | ,,titles,,TRUE,FALSE,,,,,,,,
7 | ,,titles/title,,TRUE,TRUE,literal,xs:string,,,,A name or title by which a resource is known.,,
8 | ,,titles/title/@titleType,,FALSE,FALSE,literal,titleType [xs:string],picklist,"AlternativeTitle, Subtitle, TranslatedTitle, Other",,,,
9 | ,,titles/title/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
10 | ,,publisher,,TRUE,FALSE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,"The name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource. This property will be used to formulate the citation, so consider the prominence of the role.","In the case of datasets, ""publish"" is understood to mean making the data available to the community of researchers.",
11 | ,,publisher/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
12 | ,,publicationYear,,TRUE,FALSE,literal,yearType [xs:token],pattern,[\d]{4},,"Year when the data is made publicly available. If an embargo period has been in effect, use the date when the embargo period ends.","In the case of datasets, ""publish"" is understood to mean making the data available on a specific date to the community of researchers. If there is no standard publication year value, use the date that would be preferred from a citation perspective.",YYYY
13 | ,,resourceType,,TRUE,FALSE,literal,xs:string,,,,The type of a resource. You may enter an additional free text description.,"The format is open, but the preferred format is a single term of some detail so that a pair can be formed with the sub-property.",
14 | ,,resourceType/@resourceTypeGeneral,,TRUE,FALSE,literal,resourceType [xs:string],picklist,"Audiovisual, Collection, DataPaper, Dataset, Event, Image, InteractiveResource, Model, PhysicalObject, Service, Software, Sound, Text, Workflow, Other",,The general type of a resource.,,
15 | ,,subjects,,FALSE,FALSE,,,,,,,,
16 | ,,subjects/subject,,FALSE,TRUE,literal,xs:string,,,,"Subject, keywords, classification codes, or key phrases describing the resource.",,
17 | ,,subjects/subject/@subjectScheme,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
18 | ,,subjects/subject/@schemeURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
19 | ,,subjects/subject/@valueURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
20 | ,,subjects/subject/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
21 | ,,contributors,,FALSE,FALSE,,,,,,,,
22 | ,,contributors/contributor,,FALSE,TRUE,,,,,contributorSHP,"The institution or person responsible for collecting, creating, or otherwise contributing to the developement of the dataset.",,
23 | ,,dates,,FALSE,FALSE,,,,,,,,
24 | ,,dates/date,,FALSE,TRUE,literal,xs:string,,,,,,
25 | ,,dates/date/@dateType,,TRUE,FALSE,literal,dateType [xs:string],picklist,"Accepted, Available, Collected, Copyrighted, Created, Issued, Other, Submitted, Updated, Valid, Withdrawn",,Different dates relevant to the work.,"YYYY,YYYY-MM-DD, YYYY-MM-DDThh:mm:ssTZD or any other format or level of granularity described in W3CDTF. Use RKMS-ISO8601 standard for depicting date ranges.","The type of date. Use RKMS‐ISO8601 standard for depicting date ranges.To indicate the end of an embargo period, use Available. To indicate the start of an embargo period, use Submitted or Accepted, as appropriate."
26 | ,,dates/date/@dateInformation,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
27 | ,,language,,FALSE,FALSE,literal,xs:language,,,,"Primary language of the resource. Allowed values are taken from IETF BCP 47, ISO 639-1 language codes.",,
28 | ,,alternateIdentifiers,,FALSE,FALSE,,,,,,,,
29 | ,,alternateIdentifiers/alternateIdentifier,,FALSE,TRUE,literal,xs:string,,,,"An identifier or identifiers other than the primary Identifier applied to the resource being registered. This may be any alphanumeric string which is unique within its domain of issue. May be used for local identifiers. AlternateIdentifier should be used for another identifier of the same instance (same location, same file).",,
30 | ,,alternateIdentifiers/alternateIdentifier/@alternateIdentifierType,,TRUE,FALSE,literal,xs:anySimpleType,,,,,,
31 | ,,relatedIdentifiers,,FALSE,FALSE,,,,,,,,
32 | ,,relatedIdentifiers/relatedIdentifier,,FALSE,TRUE,literal,xs:string,,,,"Identifiers of related resources. Use this property to indicate subsets of properties, as appropriate.",,
33 | ,,relatedIdentifiers/relatedIdentifier/@resourceTypeGeneral,,FALSE,FALSE,literal,resourceType [xs:string],picklist,"Audiovisual, Collection, DataPaper, Dataset, Event, Image, InteractiveResource, Model, PhysicalObject, Service, Software, Sound, Text, Workflow, Other",,The general type of a resource.,,
34 | ,,relatedIdentifiers/relatedIdentifier/@relatedIdentifierType,,TRUE,FALSE,literal,relatedIdentifierType [xs:string],picklist,"ARK, arXiv, bibcode, DOI, EAN13, EISSN, Handle, IGSN, ISBN, ISSN, ISTC, LISSN, LSID, PMID, PURL, UPC, URL, URN, w3id",,The type of the RelatedIdentifier.,,
35 | ,,relatedIdentifiers/relatedIdentifier/@relationType,,TRUE,FALSE,literal,relationType [xs:string],picklist,"IsCitedBy, Cites, IsSupplementTo, IsSupplementedBy, IsContinuedBy, Continues, IsNewVersionOf, IsPreviousVersionOf, IsPartOf, HasPart, IsReferencedBy, References, IsDocumentedBy, Documents, IsCompiledBy, Compiles, IsVariantFormOf, IsOriginalFormOf, IsIdenticalTo, HasMetadata, IsMetadataFor, Reviews, IsReviewedBy, IsDerivedFrom, IsSourceOf, Describes, IsDescribedBy, HasVersion, IsVersionOf, Requires, IsRequiredBy, Obsoletes, IsObsoletedBy",,Description of the relationship of the resource being registered (A) and the related resource (B).,,
36 | ,,relatedIdentifiers/relatedIdentifier/@relatedMetadataScheme,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
37 | ,,relatedIdentifiers/relatedIdentifier/@schemeURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
38 | ,,relatedIdentifiers/relatedIdentifier/@schemeType,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
39 | ,,sizes,,FALSE,FALSE,,,,,,,,
40 | ,,sizes/size,,FALSE,TRUE,literal,xs:string,,,,Unstructures size information about the resource.,,
41 | ,,formats,,FALSE,FALSE,,,,,,,,
42 | ,,formats/format,,FALSE,TRUE,literal,xs:string,,,,Technical format of the resource.,Use file extension or MIME type where possible.,
43 | ,,version,,FALSE,FALSE,literal,xs:string,,,,Version number of the resource. If the primary resource has changed the version number increases.,Register a new identifier for a major version change. Individual stewards need to determine which are major vs. minor versions. May be used in conjunction with properties 11 and 12 (AlternateIdentifier and RelatedIdentifier) to indicate various information updates. May be used in conjunction with property 17 (Description) to indicate the nature and file/record range of version.,
44 | ,,rightsList,,FALSE,FALSE,,,,,,,,
45 | ,,rightsList/rights,,FALSE,TRUE,literal,xs:string,,,,Any rights information for this resource. Provide a rights management statement for the resource or reference a service providing such information. Include embargo information if applicable. Use the complete title of a license and include version information if applicable.,,
46 | ,,rightsList/rights/@rightsURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
47 | ,,rightsList/rights/@rightsIdentifier,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
48 | ,,rightsList/rights/@rightsIdentifierScheme,,FALSE,FALSE,literal,xs:anySimpleType,,,,,,
49 | ,,rightsList/rights/@schemeURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
50 | ,,rightsList/rights/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
51 | ,,descriptions,,FALSE,FALSE,,,,,,,,
52 | ,,descriptions/description,,FALSE,TRUE,,,pattern,Mixed content allowed: character data and
elements,,All additional information that does not fit in any of the other categories. May be used for technical information. It is a best practice to supply a description.,,
53 | ,,descriptions/description/@descriptionType,,TRUE,FALSE,literal,descriptionType [xs:string],picklist,"Abstract, Methods, SeriesInformation, TableOfContents, TechnicalInfo, Other",,The type of the description.,,
54 | ,,descriptions/description/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
55 | ,,geoLocations,,FALSE,FALSE,,,,,,,,
56 | ,,geoLocations/geoLocation,,FALSE,TRUE,,,,,geoLocationSHP,,,
57 | ,,fundingReferences,,FALSE,FALSE,,,,,,,,
58 | ,,fundingReferences/fundingReference,,FALSE,TRUE,,,,,fundingReferenceSHP,Information about financial support (funding) for the resource being registered.,,
59 | ,,,,,,,,,,,,,
60 | creatorSHP,,creatorName,,TRUE,FALSE,literal,xs:string,,,,"Format: Family, Given.",Personal names can be further specified using givenName and familyName.,
61 | ,,creatorName/@nameType,,FALSE,FALSE,literal,nameType [xs:string],picklist,"Organizational, Personal",,,,
62 | ,,creatorName/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
63 | ,,givenName,,FALSE,FALSE,literal,xs:anyType,,,,,,
64 | ,,familyName,,FALSE,FALSE,literal,xs:anyType,,,,,,
65 | ,,nameIdentifier,,FALSE,TRUE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,,,
66 | ,,nameIdentifier/@nameIdentifierScheme,,TRUE,FALSE,literal,xs:string,,,,,,
67 | ,,nameIdentifier/@schemeURI,,FALSE,FALSE,literal,xs:anyURI,,,,,,
68 | ,,affiliation,,FALSE,TRUE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,,,
69 | ,,affiliation/@affiliationIdentifier,,FALSE,FALSE,,xs:string,,,,,,
70 | ,,affiliation/@affiliationIdentifierScheme,,FALSE,FALSE,,xs:string,,,,,,
71 | ,,affiliation/@schemeURI,,FALSE,FALSE,,xs:anyURI,,,,,,
72 | ,,,,,,,,,,,,,
73 | contributorSHP,,@contributorType,,TRUE,FALSE,literal,contributorType [xs:string],picklist,"ContactPerson, DataCollector, DataCurator, DataManager, Distributor, Editor, HostingInstitution, Other, Producer, ProjectLeader, ProjectManager, ProjectMember, RegistrationAgency, RegistrationAuthority, RelatedPerson, ResearchGroup, RightsHolder, Researcher, Sponsor, Supervisor, WorkPackageLeader",,The type of contributor of the resource.,,
74 | ,,contributorName,,TRUE,FALSE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,"The personal name format should be: Family, Given.",,
75 | ,,contributorName/@nameType,,FALSE,FALSE,literal,nameType [xs:string],picklist,"Organizational, Personal",,,,
76 | ,,contributorName/@xml:lang,,FALSE,FALSE,literal,xs:language,,,,,,
77 | ,,givenName,,FALSE,FALSE,literal,xs:anyType,,,,,,
78 | ,,familyName,,FALSE,FALSE,literal,xs:anyType,,,,,,
79 | ,,nameIdentifier,,FALSE,TRUE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,,,
80 | ,,nameIdentifier/@nameIdentifierScheme,,TRUE,FALSE,literal,xs:string,,,,,,
81 | ,,nameIdentifier/@schemeURI,,FALSE,FALSE,IRI,xs:anyURI,,,,,,
82 | ,,affiliation,,FALSE,TRUE,literal,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,,,
83 | ,,affiliation/@affiliationIdentifier,,FALSE,FALSE,literal,xs:string,,,,,,
84 | ,,affiliation/@affiliationIdentifierScheme,,FALSE,FALSE,literal,xs:string,,,,,,
85 | ,,affiliation/@schemeURI,,FALSE,FALSE,IRI,xs:anyURI,,,,,,
86 | ,,,,,,,,,,,,,
87 | geoLocationSHP,,geoLocationPlace,,FALSE,TRUE,literal,xs:anyType,,,,Spatial region or named place where the data was gathered or about which the data is focused.,,
88 | ,,geoLocationPoint,,FALSE,TRUE,,,,,,A point contains a single latitude-longitude pair.,,
89 | ,,geoLocationPoint/pointLongitude,,TRUE,FALSE,,longitudeType [xs:float],pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,,
90 | ,,geoLocationPoint/pointLatitude,,TRUE,FALSE,,latitudeType [xs:float],pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,,
91 | ,,geoLocationBox,,FALSE,TRUE,,,,,,"A box contains two white space separated latitude-longitude pairs, with each pair separated by whitespace. The first pair is the lower corner, the second is the upper corner.",,
92 | ,,geoLocationBox/westBoundLongitude,,TRUE,FALSE,,longitudeType [xs:float],pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,,
93 | ,,geoLocationBox/eastBoundLongitude,,TRUE,FALSE,,longitudeType [xs:float],pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,,
94 | ,,geoLocationBox/southBoundLatitude,,TRUE,FALSE,,latitudeType [xs:float],pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,,
95 | ,,geoLocationBox/northBoundLatitude,,TRUE,FALSE,,latitudeType [xs:float],pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,,
96 | ,,geoLocationPolygon,,FALSE,TRUE,,,,,,"A drawn polygon area, defined by a set of points and lines connecting the points in a closed chain.",,
97 | ,,geoLocationPolygon/polygonPoint,,TRUE,TRUE,,,,,,"[the cardinality is minOccurs=""4"", maxOccurs=""unbounded""]",,
98 | ,,geoLocationPolygon/polygonPoint/pointLongitude,,TRUE,FALSE,,longitudeType [xs:float],pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,,
99 | ,,geoLocationPolygon/polygonPoint/pointLatitude,,TRUE,FALSE,,latitudeType [xs:float],pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,,
100 | ,,geoLocationPolygon/inPolygonPoint,,FALSE,TRUE,,,,,,,,
101 | ,,geoLocationPolygon/inPolygonPoint/pointLongitude,,TRUE,FALSE,,longitudeType [xs:float],pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,,
102 | ,,geoLocationPolygon/inPolygonPoint/pointLatitude,,TRUE,FALSE,,latitudeType [xs:float],pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,,
103 | ,,,,,,,,,,,,,
104 | fundingReferenceSHP,,funderName,,TRUE,FALSE,,nonemptycontentStringType [xs:string],pattern,"xs:minLength value=""1""",,Name of the funding provider.,,
105 | ,,funderIdentifier,,FALSE,FALSE,,xs:string,,,,"Uniquely identifies a funding entity, according to various types.",,
106 | ,,funderIdentifier/@funderIdentifierType,,TRUE,FALSE,,funderIdentifierType [xs:string],picklist,"ISNI, GRID, ROR, Crossref Funder ID, Other",,The type of the funderIdentifier.,,
107 | ,,funderIdentifier/@schemeURI,,FALSE,FALSE,,xs:anyURI,,,,,,
108 | ,,awardNumber,,FALSE,FALSE,,xs:string,,,,The code assigned by the funder to a sponsored award (grant).,,
109 | ,,awardNumber/@awardURI,,FALSE,FALSE,,xs:anyURI,,,,,,
110 | ,,awardTitle,,FALSE,FALSE,,xs:anyType,,,,The human readable title of the award (grant).,,
--------------------------------------------------------------------------------
/examples/datacite/DataCiteXMLUsingShapes.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,_mapping,mandatory,repeatable,valueNodeType,elementContentType,valueShape,valueDataType,valueConstraintType,valueConstraint,note,note2,note3
2 | resourceSHP,,identifier,,dcterms:identifer,TRUE,FALSE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""",A persistent identifier that identifies a resource.,,
3 | ,,identifier/@identifierType,,,TRUE,FALSE,literal,,,,,,,,
4 | ,,creators,,,TRUE,FALSE,,element-only content,creatorSHP,,,,,,
5 | ,,titles,,,TRUE,FALSE,,element-only content,titleSHP,,,,,,
6 | ,,publisher,,dcterms:publisher,TRUE,FALSE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""","The name of the entity that holds, archives, publishes prints, distributes, releases, issues, or produces the resource. This property will be used to formulate the citation, so consider the prominence of the role.","In the case of datasets, ""publish"" is understood to mean making the data available to the community of researchers.",
7 | ,,publisher/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
8 | ,,publicationYear,,dcterms:date,TRUE,FALSE,literal,simple,,xs:token,pattern,[\d]{4},"Year when the data is made publicly available. If an embargo period has been in effect, use the date when the embargo period ends.","In the case of datasets, ""publish"" is understood to mean making the data available on a specific date to the community of researchers. If there is no standard publication year value, use the date that would be preferred from a citation perspective.",YYYY
9 | ,,resourceType,,dcterms:type,TRUE,FALSE,literal,simple,,xs:string,,,The type of a resource. You may enter an additional free text description.,"The format is open, but the preferred format is a single term of some detail so that a pair can be formed with the sub-property.",
10 | ,,resourceType/@resourceTypeGeneral,,,TRUE,FALSE,literal,,,xs:string,picklist,"Audiovisual, Collection, DataPaper, Dataset, Event, Image, InteractiveResource, Model, PhysicalObject, Service, Software, Sound, Text, Workflow, Other",The general type of a resource.,,
11 | ,,subjects,,,FALSE,FALSE,,element-only content,subjectSHP,,,,,,
12 | ,,contributors,,,FALSE,FALSE,,element-only content,contributorSHP,,,,,,
13 | ,,dates,,,FALSE,FALSE,,element-only content,dateSHP,,,,,,
14 | ,,language,,dcterms:language,FALSE,FALSE,literal,simple,,xs:language,,,"Primary language of the resource. Allowed values are taken from IETF BCP 47, ISO 639-1 language codes.",,
15 | ,,alternateIdentifiers,,,FALSE,FALSE,,element-only content,alternateIdentifierSHP,,,,,,
16 | ,,relatedIdentifiers,,,FALSE,FALSE,,element-only content,relatedIdentifierSHP,,,,,,
17 | ,,sizes,,,FALSE,FALSE,,element-only content,sizeSHP,,,,,,
18 | ,,formats,,,FALSE,FALSE,,element-only content,formatSHP,,,,,,
19 | ,,version,,"[not dcterms:hasVersion, which is meant to link to another version]",FALSE,FALSE,literal,simple,,xs:string,,,Version number of the resource. If the primary resource has changed the version number increases.,Register a new identifier for a major version change. Individual stewards need to determine which are major vs. minor versions. May be used in conjunction with properties 11 and 12 (AlternateIdentifier and RelatedIdentifier) to indicate various information updates. May be used in conjunction with property 17 (Description) to indicate the nature and file/record range of version.,
20 | ,,rightsList,,,FALSE,FALSE,,element-only content,rightsSHP,,,,,,
21 | ,,descriptions,,,FALSE,FALSE,,element-only content,descriptionsSHP,,,,,,
22 | ,,geoLocations,,,FALSE,FALSE,,element-only content,geoLocationSHP,,,,,,
23 | ,,fundingReferences,,,FALSE,FALSE,,element-only content,fundingReferenceSHP,,,,,,
24 | ,,,,,,,,,,,,,,,
25 | creatorSHP,,creator,,,TRUE,TRUE,,element-only content,,,,,"The main researchers involved working on the data, or the authors of the publication in priority order. May be a corporate/institutional or personal name.",,
26 | ,,creator/creatorName,,,TRUE,FALSE,literal,simple,,xs:string,,,"Format: Family, Given.",Personal names can be further specified using givenName and familyName.,
27 | ,,creator/creatorName/@nameType,,,FALSE,FALSE,literal,,,xs:string,picklist,"Organizational, Personal",,,
28 | ,,creator/creatorName/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
29 | ,,creator/givenName,,,FALSE,FALSE,literal,simple,,,,,,,
30 | ,,creator/familyName,,,FALSE,FALSE,literal,simple,,,,,,,
31 | ,,creator/nameIdentifier,,,FALSE,TRUE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""",,,
32 | ,,creator/nameIdentifier/@nameIdentifierScheme,,,TRUE,FALSE,literal,,,xs:string,,,,,
33 | ,,creator/nameIdentifier/@schemeURI,,,FALSE,FALSE,literal,,,xs:anyURI,,,,,
34 | ,,creator/affiliation,,,FALSE,TRUE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""",,,
35 | ,,creator/affiliation/@affiliationIdentifier,,,FALSE,FALSE,,,,xs:string,,,,,
36 | ,,creator/affiliation/@affiliationIdentifierScheme,,,FALSE,FALSE,,,,xs:string,,,,,
37 | ,,creator/affiliation/@schemeURI,,,FALSE,FALSE,,,,xs:anyURI,,,,,
38 | titleSHP,,title,,"dcterms:title, dcterms:alternative",TRUE,TRUE,literal,simple,,xs:string,,,A name or title by which a resource is known.,,
39 | ,,title/@titleType,,,FALSE,FALSE,literal,,,xs:string,picklist,"AlternativeTitle, Subtitle, TranslatedTitle, Other",,,
40 | ,,title/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
41 | subjectSHP,,subject,,"dc:subject, dcterms:subject",FALSE,TRUE,literal,simple,,xs:string,,,"Subject, keywords, classification codes, or key phrases describing the resource.",,
42 | ,,subject/@subjectScheme,,,FALSE,FALSE,literal,,,,,,,,
43 | ,,subject/@schemeURI,,,FALSE,FALSE,literal,,,xs:anyURI,,,,,
44 | ,,subject/@valueURI,,dcterms:subject,FALSE,FALSE,literal,,,xs:anyURI,,,,,
45 | ,,subject/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
46 | contributorSHP,,contributor,,,FALSE,TRUE,,element-only content,,,,,"The institution or person responsible for collecting, creating, or otherwise contributing to the developement of the dataset.",,
47 | ,,contributor/@contributorType,,,TRUE,FALSE,literal,,,xs:string,picklist,"ContactPerson, DataCollector, DataCurator, DataManager, Distributor, Editor, HostingInstitution, Other, Producer, ProjectLeader, ProjectManager, ProjectMember, RegistrationAgency, RegistrationAuthority, RelatedPerson, ResearchGroup, RightsHolder, Researcher, Sponsor, Supervisor, WorkPackageLeader",The type of contributor of the resource.,,
48 | ,,contributor/contributorName,,,TRUE,FALSE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""","The personal name format should be: Family, Given.",,
49 | ,,contributor/contributorName/@nameType,,,FALSE,FALSE,literal,,,xs:string,picklist,"Organizational, Personal",,,
50 | ,,contributor/contributorName/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
51 | ,,contributor/givenName,,,FALSE,FALSE,literal,simple,,,,,,,
52 | ,,contributor/familyName,,,FALSE,FALSE,literal,simple,,,,,,,
53 | ,,contributor/nameIdentifier,,,FALSE,TRUE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""",,,
54 | ,,contributor/nameIdentifier/@nameIdentifierScheme,,,TRUE,FALSE,literal,,,xs:string,,,,,
55 | ,,contributor/nameIdentifier/@schemeURI,,,FALSE,FALSE,IRI,,,xs:anyURI,,,,,
56 | ,,contributor/affiliation,,,FALSE,TRUE,literal,simple,,xs:string,pattern,"xs:minLength value=""1""",,,
57 | ,,contributor/affiliation/@affiliationIdentifier,,,FALSE,FALSE,literal,,,xs:string,,,,,
58 | ,,contributor/affiliation/@affiliationIdentifierScheme,,,FALSE,FALSE,literal,,,xs:string,,,,,
59 | ,,contributor/affiliation/@schemeURI,,,FALSE,FALSE,IRI,,,xs:anyURI,,,,,
60 | dateSHP,,date,,"dcterms:available, dcterms:created, dcterms:dateAccepted, dcterms:dateCopyrighted, dcterms:dateSubmitted, dcterms:issued, dcterms:modified, dcterms:valid",FALSE,TRUE,literal,simple,dateSHP,xs:string,,,,,
61 | ,,date/@dateType,,,TRUE,FALSE,literal,,,xs:string,picklist,"Accepted, Available, Collected, Copyrighted, Created, Issued, Other, Submitted, Updated, Valid, Withdrawn",Different dates relevant to the work.,"YYYY,YYYY-MM-DD, YYYY-MM-DDThh:mm:ssTZD or any other format or level of granularity described in W3CDTF. Use RKMS-ISO8601 standard for depicting date ranges.","The type of date. Use RKMS‐ISO8601 standard for depicting date ranges.To indicate the end of an embargo period, use Available. To indicate the start of an embargo period, use Submitted or Accepted, as appropriate."
62 | ,,date/@dateInformation,,,FALSE,FALSE,literal,,,,,,,,
63 | alternateIdentifierSHP,,alternateIdentifier,,"dcterms:identifier, dc:identifier",FALSE,TRUE,literal,simple,,xs:string,,,"An identifier or identifiers other than the primary Identifier applied to the resource being registered. This may be any alphanumeric string which is unique within its domain of issue. May be used for local identifiers. AlternateIdentifier should be used for another identifier of the same instance (same location, same file).",,
64 | ,,alternateIdentifier/@alternateIdentifierType,,,TRUE,FALSE,literal,,,,,,,,
65 | relatedIdentifierSHP,,relatedIdentifier,,dcterms:relation OR one of the subproperties of dcterms:relation,FALSE,TRUE,literal,simple,,xs:string,,,"Identifiers of related resources. Use this property to indicate subsets of properties, as appropriate.",,
66 | ,,relatedIdentifier/@resourceTypeGeneral,,,FALSE,FALSE,literal,,,xs:string,picklist,"Audiovisual, Collection, DataPaper, Dataset, Event, Image, InteractiveResource, Model, PhysicalObject, Service, Software, Sound, Text, Workflow, Other",The general type of a resource.,,
67 | ,,relatedIdentifier/@relatedIdentifierType,,,TRUE,FALSE,literal,,,xs:string,picklist,"ARK, arXiv, bibcode, DOI, EAN13, EISSN, Handle, IGSN, ISBN, ISSN, ISTC, LISSN, LSID, PMID, PURL, UPC, URL, URN, w3id",The type of the RelatedIdentifier.,,
68 | ,,relatedIdentifier/@relationType,,,TRUE,FALSE,literal,,,xs:string,picklist,"IsCitedBy, Cites, IsSupplementTo, IsSupplementedBy, IsContinuedBy, Continues, IsNewVersionOf, IsPreviousVersionOf, IsPartOf, HasPart, IsReferencedBy, References, IsDocumentedBy, Documents, IsCompiledBy, Compiles, IsVariantFormOf, IsOriginalFormOf, IsIdenticalTo, HasMetadata, IsMetadataFor, Reviews, IsReviewedBy, IsDerivedFrom, IsSourceOf, Describes, IsDescribedBy, HasVersion, IsVersionOf, Requires, IsRequiredBy, Obsoletes, IsObsoletedBy",Description of the relationship of the resource being registered (A) and the related resource (B).,,
69 | ,,relatedIdentifier/@relatedMetadataScheme,,,FALSE,FALSE,literal,,,,,,,,
70 | ,,relatedIdentifier/@schemeURI,,,FALSE,FALSE,literal,,,xs:anyURI,,,,,
71 | ,,relatedIdentifier/@schemeType,,,FALSE,FALSE,literal,,,,,,,,
72 | sizeSHP,,size,,dcterms:extent,FALSE,TRUE,literal,simple,,xs:string,,,Unstructures size information about the resource.,,
73 | formatSHP,,format,,dcterms:format,FALSE,TRUE,literal,simple,,xs:string,,,Technical format of the resource.,Use file extension or MIME type where possible.,
74 | rightsSHP,,rights,,dcterms:rights,FALSE,TRUE,literal,simple,,xs:string,,,Any rights information for this resource. Provide a rights management statement for the resource or reference a service providing such information. Include embargo information if applicable. Use the complete title of a license and include version information if applicable.,,
75 | ,,rights/@rightsURI,,,FALSE,FALSE,literal,,,xs:anyURI,,,,,
76 | ,,rights/@rightsIdentifier,,,FALSE,FALSE,literal,,,,,,,,
77 | ,,rights/@rightsIdentifierScheme,,,FALSE,FALSE,literal,,,,,,,,
78 | ,,rights/@schemeURI,,,FALSE,FALSE,literal,,,xs:anyURI,,,,,
79 | ,,rights/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
80 | descriptionsSHP,,description,,"dcterms:description, dcterms:abstract, dcterms:tableOfContents",FALSE,TRUE,,mixed content,,,pattern,Mixed content allowed: character data and
elements,All additional information that does not fit in any of the other categories. May be used for technical information. It is a best practice to supply a description.,,
81 | ,,description/@descriptionType,,,TRUE,FALSE,literal,,,xs:string,picklist,"Abstract, Methods, SeriesInformation, TableOfContents, TechnicalInfo, Other",The type of the description.,,
82 | ,,description/@xml:lang,,,FALSE,FALSE,literal,,,xs:language,,,,,
83 | geoLocationSHP,,geoLocation,,,FALSE,TRUE,,element-only content,,,,,,,
84 | ,,geoLocation/geoLocationPlace,,,FALSE,TRUE,literal,simple,,,,,Spatial region or named place where the data was gathered or about which the data is focused.,,
85 | ,,geoLocation/geoLocationPoint,,,FALSE,TRUE,,element-only content,pointSHP,,,,A point contains a single latitude-longitude pair.,,
86 | ,,geoLocation/geoLocationBox,,,FALSE,TRUE,,element-only content,geoLocationBoxSHP,,,,"A box contains two white space separated latitude-longitude pairs, with each pair separated by whitespace. The first pair is the lower corner, the second is the upper corner.",,
87 | ,,geoLocation/geoLocationPolygon,,,FALSE,TRUE,,element-only content,polygonPointSHP,,,,"A drawn polygon area, defined by a set of points and lines connecting the points in a closed chain.",,
88 | polygonPointSHP,,polygonPoint,,,TRUE,TRUE,,element-only content,pointSHP,,,,"[the cardinality is minOccurs=""4"", maxOccurs=""unbounded""]",,
89 | ,,inPolygonPoint,,,FALSE,TRUE,,element-only content,pointSHP,,,,,,
90 | pointSHP,,pointLongitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,
91 | ,,pointLatitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,
92 | geoLocationBoxSHP,,westBoundLongitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,
93 | ,,eastBoundLongitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"xs:minInclusive value=""-180""/, xs:maxInclusive value=""180""/",,,
94 | ,,southBoundLatitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,
95 | ,,northBoundLatitude,,,TRUE,FALSE,,simple,,xs:float,pattern,"minInclusive value=""-90"", xs:maxInclusive value=""90""",,,
96 | fundingReferenceSHP,,fundingReference,,,FALSE,TRUE,,element-only content,,,,,Information about financial support (funding) for the resource being registered.,,
97 | ,,fundingReference/funderName,,,TRUE,FALSE,,simple,,xs:string,pattern,"xs:minLength value=""1""",Name of the funding provider.,,
98 | ,,fundingReference/funderIdentifier,,,FALSE,FALSE,,simple,,xs:string,,,"Uniquely identifies a funding entity, according to various types.",,
99 | ,,fundingReference/funderIdentifier/@funderIdentifierType,,,TRUE,FALSE,,,,xs:string,picklist,"ISNI, GRID, ROR, Crossref Funder ID, Other",The type of the funderIdentifier.,,
100 | ,,fundingReference/funderIdentifier/@schemeURI,,,FALSE,FALSE,,,,xs:anyURI,,,,,
101 | ,,fundingReference/awardNumber,,,FALSE,FALSE,,simple,,xs:string,,,The code assigned by the funder to a sponsored award (grant).,,
102 | ,,fundingReference/awardNumber/@awardURI,,,FALSE,FALSE,,,,xs:anyURI,,,,,
103 | ,,fundingReference/awardTitle,,,FALSE,FALSE,,simple,,,,,The human readable title of the award (grant).,,
--------------------------------------------------------------------------------
/examples/datacite/dataciteUser.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,path,propertyLabel,AltPropertyID,mandatory,repeatable,valueNodeType,valueDataType,valueShape,valueConstraint,valueConstraintType,note
2 | ,,,,,,,FALSE,,,,,,
3 | resource,Datacite resource,language,,language,dct:language,FALSE,FALSE,,xsd:language,,,,
4 | ,,publicationYear,,publication year,dct:date,TRUE,FALSE,,xsd:token,,/[\d]{4}/,pattern,
5 | ,,version,,version,dct:hasVersion,FALSE,FALSE,,xsd:string,,,,
6 | ,,publisher,,publisher,dct:publisher,TRUE,FALSE,,xsd:string,,,pattern,"In fact, the constraint is non-zero length, but the xs:string type does not normalize whitespace, so a single blank character also satisfies the constraint."
7 | ,,resourceType,,resource type,dct:type,TRUE,FALSE,,xsd:string,,,picklist,
8 | ,,resourceTypeGeneral,,resource type-general,dct:type,TRUE,FALSE,,xsd:string,,,picklist,
9 | ,,identifier,,identifer,dct:identifier,TRUE,FALSE,,xsd:string,,/.+/,pattern,
10 | ,,identifierType,,identifier type,,TRUE,FALSE,,xsd:anyType,,,,
11 | ,,size,/resource/sizes/size,size,dct:extent,FALSE,TRUE,,xsd:string,,,,
12 | ,,format,/resource/formats/format,format,dct:format,FALSE,TRUE,,xsd:string,,,,
13 | ,,,,,,,,,,,,,
14 | ,,creator,/resource/creators/creator,,,TRUE,TRUE,,,creator-S,,,
15 | ,,titles,/resource/titles,,,TRUE,TRUE,,,title-S,,,
16 | ,,subjects,/resource/subjects,,,FALSE,TRUE,,,subjects-S,,,
17 | ,,contributors,/resource/contributors,,,FALSE,TRUE,,,contributor-S,,,
18 | ,,dates,/resource//res,,,FALSE,TRUE,,,dates-S,,,
19 | ,,alternateIdentifiers,/resource/alternateIdentifiers,,,FALSE,TRUE,,,alternateIdentifiers-S,,,
20 | ,,relatedIdentifiers,/resource/relatedIdentifiers,,,FALSE,TRUE,,,relatedIdentifiers-S,,,
21 | ,,rightsList,/resource//rightsList,,,FALSE,FALSE,,,rightsList-S,,,
22 | ,,descriptions,/resource/descriptions,,,FALSE,TRUE,,,descriptions-S,,,
23 | ,,geoLocations,/resource/geoLocations,,,FALSE,TRUE,,,geoLocations-S,,,
24 | ,,fundingReferences,/resource/fundingReferences,,,FALSE,FALSE,,,fundingReferences-S,,,
25 | ,,relatedItems,/resource/relatedItems,,,FALSE,FALSE,,,relatedItems-S,,,
26 | ,,,,,,,,,,,,,
27 | ,,,,,,,,,,,,,
28 | ,,,,,,,,,,,,,
29 | ,,,,,,,,,,,,,
30 | creators-S,Creators,creatorName,/resource/creators/creator/creatorName,creator name,dct:creator,TRUE,FALSE,,xsd:string,,,,
31 | ,,givenName,/resource/creators/creator/givenName,given name,foaf:givenName,FALSE,FALSE,,xsd:anyType,,,,Not a valid data type for TAP
32 | ,,familyName,/resource/creators/creator/familyName,family name,foaf:familyName,FALSE,FALSE,,xsd:anyType,,,,Not a valid data type for TAP
33 | ,,nameType,/resource/creators/creator/nameType,name type,METS or MADS :type,FALSE,FALSE,,xsd:string,,"Organizational, Personal",picklist,
34 | ,,nameIdentifier,/resource/creators/creator/nameIdentifier,name identifier,dct:identifier,FALSE,TRUE,,xsd:string,,/.+/,pattern,"In fact, the constraint is non-zero length, but the xs:string type does not normalize whitespace, so a single blank character also satisfies the constraint."
35 | ,,nameIdentifierScheme,/resource/creators/creator/nameIdentifierScheme,name identifier scheme,,TRUE,FALSE,,xsd:string,,,,
36 | ,,schemeURI,/resource/creators/creator/schemeURI,scheme URI,,FALSE,FALSE,,xsd:anyURI,,,,
37 | ,,affiliation,/resource/creators/creator/affiliation,affiliation ,,FALSE,TRUE,,,affiliation-S,,,
38 | ,,,,,,,,,,,,,
39 | affiliation-S,Affiliation,affiliationIdentifier ,/resource/creators/creator/affiliationIdentifier,affiliation ,"dct:contributor, schema:affiliation",FALSE,FALSE,,xsd:string,,/.+/,pattern,"In fact, the constraint is non-zero length, but the xs:string type does not normalize whitespace, so a single blank character also satisfies the constraint."
40 | ,,affiliationIdentifierScheme,/resource/creators/creator/affiliationIdentfierScheme,affiliation Identifier Scheme,,TRUE,FALSE,,xsd:string,,,,
41 | ,,schemeURI,/resource/creators/creator/schemeURI,schemeURI,,FALSE,FALSE,,xsd:anyURI,,,,
42 | ,,,,,,,,,,,,,
43 | title-S,Titles,title,/resource/titles/title,title,dct:title,TRUE,TRUE,,xsd:string,,,,This is not required to be non-empty or non-blank.
44 | ,,titleType,/resource/titles/titleType,title type,dct:alternative,FALSE,FALSE,,xsd:string,,"Alternative Title, Subtitle, Translated Title, Other",picklist,
45 | ,,,,,,,,,,,,,
46 | subject-S,Subjects,subject,/resource/subjects/subject,subject,dct:subject,FALSE,TRUE,,xsd:string,,,,
47 | ,,subjectScheme,/resource/subjects/subjectScheme,subject scheme,,FALSE,FALSE,,xsd:anySimpleType,,,,Not a valid data type for TAP
48 | ,,schemeURI,/resource/subjects/schemeURI,scheme URI,,FALSE,FALSE,,xsd:anyURI,,,,
49 | ,,valueURI,/resource/subjects/valueURI,value URI,dct:subject,FALSE,FALSE,,xsd:anyURI,,,,
50 | ,,classificationCode,/resource/subjects/classificationCode,classification code,dct:subject,FALSE,FALSE,,xsd:anyURI,,,,"This appears to be an error in the XSD schema - the type should be ""xsd:string""."
51 | ,,,,,,,,,,,,,
52 | contributors-S,Contributors,contributorName,/resource/contributors/contributorName,Contributor name,dct:contributor,TRUE,TRUE,,xsd:string,,,,
53 | ,,contributorType,/resource/contributors/contributorType,contributor type,,TRUE,FALSE,,,,[link],picklist,
54 | ,,givenName,/resource/contributors/givenName,given name,foaf:givenName,FALSE,FALSE,,xsd:string,,,,
55 | ,,familyName,/resource/contributors/familyName,family name,foaf:familyName,FALSE,FALSE,,xsd:string,,,,
56 | ,,contributorNameType,/resource/contributors/contributorNameType,name type,,FALSE,FALSE,,,,"Organizational, Personal",picklist,
57 | ,,nameIdentifier,/resource/contributors/nameIdentifier,name identifier,dct:identifier,TRUE,FALSE,,,,/.+/,pattern,
58 | ,,nameIdentifierScheme,/resource/contributors/nameIdentifierScheme,name identifier scheme,,TRUE,FALSE,,,,,,
59 | ,,schemeURI,/resource/contributors/schemeURI,scheme URI,,FALSE,FALSE,,,,,,
60 | ,,affiliation,/resource/contributors/affilitation,affiliation ,,FALSE,TRUE,,,,/.+/,pattern,
61 | ,,nameType,/resource/contributors/nameType,nameType,,FALSE,FALSE,,xsd:string,,"Organizational, Personal",picklist,
62 | ,,,,,,,,,,,,,
63 | ,,,,,,,,,,,,,
64 | ,,,,,,,,,,,,,
65 | dates-S,Dates,date,/resource/dates/date,date,dct:date,FALSE,TRUE,,xsd:string,,,,
66 | ,,dateType,/resource/dates/dateType,date type,dct:dateAccepted; dct:available; dct:date; dct:dateCopyrighted; dct:created; dct:issued; dct:date; dct:dateSubmitted; dct:modified; dct:valid; dct:date,TRUE,FALSE,,xsd:string,,"Accepted, Available, Collected, Copyrighted, Created, Issued, Other, Submitted, Updated, Valid, Withdrawn",picklist,
67 | ,,dateInformation,/resource/dates/dateInformation,date information,,FALSE,FALSE,,xsd:anySimpleType,,,,Not a valid data type for TAP
68 | ,,,,,,,,,,,,,
69 | alternateidentifier-S,Alternate Identifiers,alternateIdentifier,/resource/alternateIdentifers/alternateIdentifier,alternateIdentifier,dct:identifier,FALSE,TRUE,,xsd:string,,,,
70 | ,,alternateIdentifierType,/resource/alternateIdentifers/alternateIdentifierType,alternateIdentifierType,METS:metsDocumentID/TYPE,TRUE,FALSE,,xsd:anySimpleType,,,,Not a valid data type for TAP
71 | ,,,,,,,,,,,,,
72 | relatedIdentifier-S,Related Identifiers,relatedIdentifier,/resource/relatedIdentifiers/relatedIdentifier,related identifier,dct:relation,FALSE,FALSE,,xsd:string,,,,
73 | ,,resourceTypeGeneral,/resource/relatedIdentifiers/resourceTypeGeneral,general resource type,dct:type,FALSE,FALSE,,xsd:string,,[link],picklist,
74 | ,,relatedIdentifierType,/resource/relatedIdentifiers/relatedIdentifierType,related identifier type,,TRUE,FALSE,,xsd:string,,[link],picklist,
75 | ,,relationType,/resource/relatedIdentifiers/relationType,relationType,"dct:isReferencedBy;
76 | dct:references;
77 | dct:isVersionOf;
78 | dct:hasVersion;
79 | dct:isFormatOf;
80 | dct:isPartOf;
81 | dct:hasPart;
82 | dct:isReplacedBy;
83 | dct:replaces;
84 | dct:source;
85 | dct:relation;
86 | dct:relation
87 | ",TRUE,FALSE,,xsd:string,,[link],picklist,
88 | ,,relatedMetadataScheme,/resource/relatedIdentifiers/relatedMetadataScheme,related metadata scheme,,FALSE,FALSE,,xsd:anySimpleType,,,,
89 | ,,schemeURI,/resource/relatedIdentifiers/schemeURI,scheme URI,,FALSE,FALSE,,xsd:anyURI,,,,
90 | ,,schemeType,/resource/relatedIdentifiers/schemeType,scheme type,,FALSE,FALSE,,xsd:anySimpleType,,,,
91 | ,,,,,,,,,,,,,
92 | rightsList-S,Rights List,rights ,/resource/rightsList/rights,rights,dct:rights,TRUE,FALSE,,xsd:string,,,,The first rights listed is treated as copyright.
93 | ,,schemeURI,/resource/rightsList/schemaURI,rights URI,dct:rights,FALSE,FALSE,,xsd:anyURI,,,,
94 | ,,rightsIdentifier,/resource/rightsList/rightsIdentifier,rights Identifier,dct:rights,FALSE,FALSE,,xsd:anySimpleType,,,,Not a valid data type for TAP
95 | ,,rightsIdentifierScheme,/resource/rightsList/rightsIdentifierScheme,rights Identifier Scheme,,FALSE,FALSE,,xsd:anySimpleType,,,,Not a valid data type for TAP
96 | ,,,,,,,,,,,,,
97 | descriptions-S,Descriptions,description,/resource/descriptions/description,description,dct:description,TRUE,FALSE,,[mixed content],,,,Not sure if this is a valid type for TAP or not.
98 | ,,descriptionType,/resource/descriptions/descriptionType,description Type,dct:abstract; dct:description; dct:description; dct:tableOfContents; dct:description; dct:description,TRUE,FALSE,,xsd:string,,"Abstract, Methods, SeriesInformation, TableOfContents, TechnicalInfo, Other",picklist,
99 | ,,br,/resource/descriptions/br,??,,FALSE,FALSE,,xsd:language,,,,
100 | ,,,,,,,,,,,,,
101 | fundingReferences-S,Funding References,funderName,/resource/fundingReferences/funderName,funderName,dct:contributor,TRUE,FALSE,,xsd:string,,/.+/,pattern,"In fact, the constraint is non-zero length, but the xs:string type does not normalize whitespace, so a single blank character also satisfies the constraint."
102 | ,,awardTitle,/resource/fundingReferences/awardTitle,awardTitle,dct:description,FALSE,FALSE,,xsd:any,,,,Not a valid data type for TAP
103 | ,,funderIdentifier,/resource/fundingReferences/funderIdentifier,funderIdentifier,dct:contributor,FALSE,FALSE,,xsd:string,,,,
104 | ,,funderIdentifierType,/resource/fundingReferences/funderIdentifierType,funderIdentifierType,dct:identifier,FALSE,FALSE,,xsd:string,,"ISNI, GRID, ROR, Crossref Funder ID, Other",picklist,
105 | ,,schemeURI,/resource/fundingReferences/schemeURI,schemeURI,,FALSE,FALSE,,xsd:anyURI,,,,
106 | ,,awardNumber,/resource/fundingReferences/awardNumber,awardNumber,dct:identifier,FALSE,FALSE,,xsd:string,,,,
107 | ,,awardURI,/resource/fundingReferences/awardURI,awardURI,dct:identifier,FALSE,FALSE,,xsd:anyURI,,,,
108 | ,,,,,,,,,,,,,
109 | ,,,,,,,,,,,,,
110 | geoLocation-S,geolocation-S,geoLocationPlace,/resource/geolocations/geoLocationPlace,GeoLocation Place,dct:spatial,FALSE,TRUE,,xsd:anyType,,,,Not a valid data type for TAP
111 | ,,point,/resource/geolocations/geolocationPoint,Geolocation Point,,FALSE,TRUE,,,geoLocationPoint-S,,,
112 | ,,box,/resource/geolocation/geolocationBox,Geolocation Box,,FALSE,TRUE,,,geoLocationBox-S,,,
113 | ,,,,,,FALSE,TRUE,,,geoLocationPolygon-S,,,
114 | ,,,,,,,,,,,,,
115 | geoLocationPoint-S,Geolocation Point,pointLongitude,/resource/geolocations/geoLocationPoint,pointLongitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -180; x <= 180,,
116 | ,,pointLatitude,/resource/geolocations/geolocationBox,pointLatitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -90; x <= 90,,
117 | ,,,,,,,,,,,,,
118 | geoLocationBox-S,Geolocation Box,westBoundLongitude,/resource/geolocations/geolocationBox/westBoundLongitude,westBoundLongitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -180; x <= 180,,
119 | ,,eastBoundLongitue,/resource/geolocations/geolocationBox/eastBoundLongitude,eastBoundLongitue,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -180; x <= 180,,
120 | ,,southBoundLatitude,/resource/geolocations/geolocationBox/southBoundLongitude,southBoundLatitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -90; x <= 90,,
121 | ,,northBoundLatitude,/resource/geolocations/geolocationBox/northBoundLongitude,northBoundLatitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -90; x <= 90,,
122 | ,,,,,,,,,,,,,
123 | geoLocationPolygon-S,Geolocation Polygon,geoLocationPolygon,/resource/geolocations/geolocationPolygon,,,FALSE,TRUE,,,polygonPoint-S,,,Requires 4 occurrences
124 | ,,geoLocationPolygon,/resource/geolocations/geolocationPolygon,,,FALSE,FALSE,,,inPolygonPoint-S,,,
125 | ,,,,,,,,,,,,,
126 | polygonPoint-S,Polygon Point,pointLongitude,/resource/geolocations/geoLocationPolygon/polygonPoint/pointLongitude,pointLongitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -180; x <= 180,,
127 | ,,pointLatitude,/resource/geolocations/geoLocationPolygon/polygonPoint/pointLatitude,pointLatitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -90; x <= 90,,
128 | ,,,,,,,,,,,,,
129 | inPolygonPoint-S,inPolygon Point,pointLongitude,/resource/geolocations/geoLocationPolygon/inPolygonPoint/pointLongitude,pointLongitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -180; x <= 180,,
130 | ,,pointLatitude,/resource/geolocations/geoLocationPolygon/inPolygonPoint/pointLatitude,pointLatitude,dct:spatial,TRUE,FALSE,,xsd:float,,x >= -90; x <= 90,,
--------------------------------------------------------------------------------
/examples/datacite/openaire.csv:
--------------------------------------------------------------------------------
1 | "propertyLabel","propertyID","mandatory","repeatable","usage","valueType","valueConstraintType","ValueConstraint","Note"
2 | "Title ","datacite:title","TRUE",FALSE,,"xsd:string",,,"Preserve the original wording, order and spelling of the resource title. Only capitalize proper nouns. Punctuation need not reflect the usage of the original. Subtitles should be separated from the title by a colon. This instruction would result in Title:Subtitle (i.e. no space). If necessary, repeat this element for multiple titles."
3 | "title type",,FALSE,FALSE,,"xsd:string","picklist","AlternativeTitle, Subtitle, TranslatedTitle, Other",
4 | "Creator ","datacite:creator","TRUE",TRUE,,"xsd:string",,,
5 | "name type",,,,,"xsd:string","picklist","Organizational, Personal",
6 | "Contributor ","datacite:contributor","FALSE",,"MA","xsd:string",,,
7 | "name type",,,,,"xsd:string","picklist","Organizational, Personal",
8 | "contributor type",,,,,"xsd:string","picklist","ContactPerson, DataCollector, DataCurator, DataManager, Distributor, Editor, HostingInstitution, Producer, ProjectLeader, ProjectManager, ProjectMember, RegistrationAgency, RegistrationAuthority, RelatedPerson, Researcher, ResearchGroup, RightsHolder, Sponsor, Supervisor, WorkPackageLeader, Other",
9 | "Funding Reference ","oaire:fundingReference","FALSE",,"MA","xsd:string",,,
10 | "Alternate Identifier ","datacite:alternateIdentifier","FALSE",,"R","xsd:string","picklist","alternateIdentifier type",
11 | "alternate identifier type","datacite:alternateIdentifierType",,,,"xsd:string",,,
12 | "Related Identifier ","datacite:relatedIdentifier","FALSE",,"R","xsd:string",,"relatedIdentifier type relation type resourcetypegeneral ",
13 | "relatedIdentifierType","datacite:relatedIdentifierTy[e",,,,"xsd:string","picklist",,
14 | "relationType","datacite:relationType",,,,"xsd:string","picklist",,
15 | "resourceTypeGeneral","datacite:resourceTypeGeneral",,,,"xsd:string","picklist",,
16 | "Embargo Period Date ","resourceTypeGeneral ","FALSE",,"MA","xsd:date","picklist",,
17 | "date type","datacite:dateType",,,,"xsd:string","picklist",,
18 | "Language ","dc:language","FALSE",,"MA","xsd:string","picklist","IETF BCP 47, ISO 639-3",
19 | "Publisher ","dc:publisher","FALSE",,"MA","xsd:string",,,
20 | "Publication Date ","datacite:date","TRUE",,,"xsd:date",,,
21 | "Date type","datacite:dateType",,,,"xsd:string","picklist","Accepted, Available, Issued",
22 | "Resource Type ","oaire:resourceType","TRUE",,,"xsd:string","picklist","COAR Resource Type Vocabulary",
23 | "Description ","dc:description","FALSE",,"MA","xsd:string",,,
24 | "Format ","dc:format","FALSE",,"R","xsd:string",,,
25 | "Resource Identifier ","datacite:identifier","TRUE",,,"xsd:string",,,
26 | "Identifier type","oaire:identifierType",,,,"xsd:string","picklist",,
27 | "Access Rights ","datacite:rights","TRUE",,,"xsd:string","picklist","COAR Access Right Vocabulary",
28 | "Source ","dc:source","FALSE",,"R","xsd:string",,,
29 | "Subject ","datacite:subject","FALSE",,"MA","xsd:string",,,
30 | "License Condition ","oaire:licenseCondition","FALSE",,"R","xsd:string",,,
31 | "Coverage ","dc:coverage","FALSE",,"R","xsd:string",,,
32 | "Size ","datacite:size","FALSE",,,,,,
33 | "Geo Location ","datacite:geoLocation","FALSE",,,"xsd:string",,,
34 | "Resource Version ","oaire:version","FALSE",,"R","xsd:string","picklist","COAR Version Vocabulary",
35 | "File Location ","oaire:file","FALSE",,"MA","xsd:string",,,
36 | "Citation Title ","oaire:citationTitle","FALSE",,"R","xsd:string",,,
37 | "Citation Volume ","oaire:citationVolume","FALSE",,"R","xsd:string",,,
38 | "Citation Issue ","oaire:citationIssue","FALSE",,"R","xsd:string",,,
39 | "Citation Start Page ","oaire:citationStartPage","FALSE",,"R","xsd:string",,,
40 | "Citation End Page ","oaire:citationEndPage","FALSE",,"R","xsd:string",,,
41 | "Citation Edition ","oaire:citationEdition","FALSE",,"R","xsd:string",,,
42 | "Citation Conference Place ","oaire:citationConferencePlace","FALSE",,"R","xsd:string",,,
43 | "Citation Conference Date ","oaire:citationConferenceDate","FALSE",,"R","xsd:string",,,
44 | "Audience ","dcterms:audience","FALSE",,,"xsd:string",,,
45 |
--------------------------------------------------------------------------------
/examples/datacite/readme.md:
--------------------------------------------------------------------------------
1 | # DataCite examples
2 |
3 | We welcome comments on this work, preferably using github issues.
4 |
5 | ## DataCite itself
6 |
7 | DataCite is an XML schema metadata format that is used by many organizations. Being in XML, with the metadata defined in XML schema, this poses some interesting challenges for DCTAP, which was developed with RDF data in mind.
8 |
9 | One of the questions is: which view should be profiled? The XSD itself? Or the user documentation? We tried both:
10 | * [DataCite-TAP](dataciteUser.csv) from User Documentation
11 | * [DataCite-TAP](DataCiteXML.csv) from XSD using "sequence" from XSD
12 | * [DataCite-TAP](DataCiteXMLUsingShapes.csv) from XSD using shapes in the place of "sequence"
13 |
14 | It is possible that both approaches are useful. For the XSD transformation, there appear to be a number of different ways this can be done with different levels of adhering strictly to the XSD elements (sequence, attributes, element content types, etc.) Note that these are attempts to "DCTAP-ize" the full vocabulary. The OpenAIRE example below is a profile that uses DataCite elements.
15 |
16 | ## OpenAIRE Application Profile
17 |
18 | The [OpenAIRE Application Profile](https://openaire-guidelines-for-literature-repository-managers.readthedocs.io/en/v4.0.0/application_profile.html) uses elements from Dublin Core Terms, from DataCite, and from its own OpenAIRE vocabulary. The DCTAP of the OpenAIRE AP is based on the user documentation for version 4.0. It appears that the next version of OpenAire is more closely aligned with DataCite.
19 |
20 | * [OpenAIRE4-TAP](openaire.csv)
21 |
--------------------------------------------------------------------------------
/examples/dcat-ap-us/dcat-ap-us.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDatatype,valueShape,valueConstraint,valueConstraintType,note
2 | catalog,Catalog,@context,JSON-LD context,FALSE,FALSE,literal,xsd:string,,,,
3 | catalog,,@id,Identifier,FALSE,FALSE,IRI,,,,,
4 | catalog,,@type,JSON-LD data type,FALSE,FALSE,literal,xsd:string,,,,
5 | catalog,,dcat:dataset,dataset,TRUE,TRUE,IRI,,dataset-shape,,,This property links the Catalogue with a Dataset that is part of the Catalogue.
6 | catalog,,dct:conformsTo,Project schema,FALSE,FALSE,IRI,,,,,
7 | catalog,,dct:description,description,TRUE,TRUE,literal,xsd:string,,,,This property contains a free-text account of the Catalogue. This property can be repeated for parallel language versions of the description. For further information on multilingual issues
8 | catalog,,dct:publisher,publisher,TRUE,FALSE,IRI,,,,,This property refers to an entity (organisation) responsible for making the Catalogue available.
9 | catalog,,dct:title,Title,TRUE,TRUE,literal,xsd:string,,,,This property contains a name given to the Catalogue. This property can be repeated for parallel language versions of the name.
10 | catalog,,describedBy,Described by,FALSE,FALSE,,,,,,
11 | catalog,,rdf:type,Class,TRUE,FALSE,IRI,,,dcat:Catalog,,This property links the Catalogue with a Dataset that is part of the Catalogue.
12 | contact,Contact Point,rdf:type,Class,FALSE,FALSE,IRI,,,vcard:Contact,,
13 | contact,,vcard:fn,Formatted name,TRUE,FALSE,literal,xsd:string,,,,
14 | contact,,vcard:hasEmail,Email,TRUE,FALSE,literal,xsd:string,,,,
15 | dataset-shape,Dataset,@type,JSON-LD type,FALSE,FALSE,IRI,,,dcat:Dataset,,For RDF this should be rdf:type
16 | dataset-shape,,accessLevel,Access level,TRUE,FALSE,literal,xsd:string,,"public, restricted public, non-public",picklist,
17 | dataset-shape,,bureauCode,Bureau Code,FALSE,TRUE,literal,xsd:string,,,,From OMA Circular A-11
18 | dataset-shape,,dataquality,Data quality,FALSE,FALSE,literal,xsd:boolean,,,,
19 | dataset-shape,,dcat:contactPoint,Contact point,FALSE,FALSE,,,contact,,,
20 | dataset-shape,,dcat:distribution,Distribution,FALSE,TRUE,,,,,,
21 | dataset-shape,,dct:identifier,Identifier,TRUE,FALSE,IRI,,,,,
22 | dataset-shape,,dct:isPartOf,Is part of,FALSE,FALSE,literal,xsd:string,,,,
23 | dataset-shape,,dcat:keyword,Keyword,FALSE,TRUE,literal,xsd:string,,,,
24 | dataset-shape,,dcat:landingPage,Landing page,FALSE,FALSE,IRI,,,,,
25 | dataset-shape,,dct:license,License,FALSE,FALSE,IRI,,,,,
26 | dataset-shape,,dcat:theme,Theme,FALSE,TRUE,IRI literal,,,,,
27 | dataset-shape,,dct:accrualPeriodicity,Periodicity,FALSE,FALSE,literal,xsd:string,,,,ISO 8601 repeating duration
28 | dataset-shape,,dct:conformsTo,Conforms to,FALSE,FALSE,IRI,,,,,
29 | dataset-shape,,dct:description,description,FALSE,FALSE,literal,xsd:string,,,,
30 | dataset-shape,,dct:issued,Issued,FALSE,FALSE,literal,xsd:date,,,,
31 | dataset-shape,,dct:language,Language,FALSE,TRUE,literal,xsd:string,,,,
32 | dataset-shape,,dct:modified,Modified date,TRUE,FALSE,literal,xsd:date,,,,
33 | dataset-shape,,dct:publisher,Publisher,TRUE,FALSE,,,pubShape,,,
34 | dataset-shape,,dct:spatial,Spatial,FALSE,FALSE,literal,xsd:string,,,,
35 | dataset-shape,,dct:temporal,Temporal,FALSE,FALSE,literal,xsd:date,,,,
36 | dataset-shape,,dct:title,Dataset title,TRUE,FALSE,literal,xsd:string,,,,
37 | dataset-shape,,describedBy,Described by,FALSE,FALSE,IRI,,,,,
38 | dataset-shape,,describedByType,Described by Type,FALSE,FALSE,literal,xsd:string,,,,use MIME type
39 | distribution,Distribution,dcat:accessURL,Access URL,FALSE,FALSE,IRI,,,,,
40 | distribution,,dcat:downloadURL,Download URL,FALSE,FALSE,IRI,,,,,
41 | distribution,,dcat:mediaType,Media type,FALSE,FALSE,literal,xsd:string,,,,use IANA media type
42 | distribution,,dct:conformsTo,Conforms to,FALSE,FALSE,IRI,,,,,
43 | distribution,,dct:description,description,FALSE,FALSE,literal,xsd:string,,,,
44 | distribution,,dct:format,Format,FALSE,FALSE,literal,xsd:string,,,,
45 | distribution,,dct:title,Title ,FALSE,FALSE,literal,xsd:string,,,,
46 | distribution,,describedBy,Described by,FALSE,FALSE,IRI,,,,,
47 | distribution,,describedByType,Described by Type,FALSE,FALSE,IRI,,,,,use IANA media type
48 | distribution,,@type,Class,FALSE,FALSE,IRI,,,dcat:Distribution,,
49 | pubShape,Publisher,@type,Class,FALSE,FALSE,IRI,,,org:Organization,,
50 | pubShape,,name,Publisher name,TRUE,FALSE,literal,xsd:string,,,,
51 | pubShape,,subOrganizationOf,Sub-organization of,FALSE,FALSE,literal,xsd:string,,,,
52 |
--------------------------------------------------------------------------------
/examples/dcat-ap-us/readme.md:
--------------------------------------------------------------------------------
1 | # DCAT-AP-US
2 |
3 | The DCAT application profile for US government sites.
4 |
5 | The documentation for this is at https://resources.data.gov/resources/dcat-us/. The schema is based on the DCAT-AP but is oriented toward JSON. It includes JSON entities like `@type`, which is similar to `rdf:type`. Other properties did not include namespaces but in the TAP most of these have been added from DCAT-AP. Some still are missing namespace prefixes in this TAP version.
6 |
--------------------------------------------------------------------------------
/examples/dcat-ap/dcat-ap.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDatatype,valueConstraint,LocalRange,note
2 | Catalogue,catalogue,rdf:type,,,,,,dcat:Catalog,,
3 | ,,dcat:dataset,dataset,TRUE,TRUE,IRI,,,,This property links the Catalogue with a Dataset that is part of the Catalogue.
4 | ,,dct:description,description,TRUE,TRUE,literal,xsd:string,,,This property contains a free-text account of the Catalogue. This property can be repeated for parallel language versions of the description. For further information on multilingual issues
5 | ,,dct:publisher,publisher,TRUE,FALSE,IRI,,,,This property refers to an entity (organisation) responsible for making the Catalogue available.
6 | ,,dct:title,Title,TRUE,TRUE,literal,xsd:string,,,This property contains a name given to the Catalogue. This property can be repeated for parallel language versions of the name.
7 | ,,,,,,,,,,
8 | ,,foaf:homepage,homepage,FALSE,FALSE,IRI,,,,This property refers to a web page that acts as the main page for the Catalogue.
9 | ,,dct:language,language,FALSE,TRUE,IRI,,,,This property refers to a language used in the textual metadata describing titles
10 | ,,dct:license,licence,FALSE,FALSE,IRI,,,,This property refers to the licence under which the Catalogue can be used or reused.
11 | ,,dct:issued,release date,FALSE,FALSE,literal,xsd:date xsd:dateTime,,,This property contains the date of formal issuance
12 | ,,dct:spatial,spatial/ geographic,FALSE,TRUE,IRI,,,,This property refers to a geographical area covered by the Catalogue.
13 | ,,dcat:themeTaxonomy,themes,FALSE,TRUE,IRI,,,skos:ConceptScheme,This property refers to a knowledge organization system used to classify the Catalogue's Datasets.
14 | ,,dct:modified,update/ modification date,FALSE,TRUE,literal,xsd:date xsd:dateTime,,,This property contains the most recent date on which the Catalogue was modified.
15 | ,,,,,,,,,,
16 | ,,dct:hasPart,has part,FALSE,TRUE,IRI,,,dcat:Catalog,This property refers to a related Catalogue that is part of the described Catalogue
17 | ,,dct:isPartOf,is part of,FALSE,FALSE,IRI,,,dcat:Catalog,This property refers to a related Catalogue in which the described Catalogue is physically or logically included.
18 | ,,dcat:record,record,FALSE,TRUE,IRI,,,dcat:CatalogRecord,This property refers to a Catalogue Record that is part of the Catalogue
19 | ,,dct:rights,Rights,FALSE,FALSE,IRI,,,,This property refers to a statement that specifies rights associated with the Catalogue.
20 | ,,dcat:service,service ,FALSE,TRUE,IRI,,,dcat:DataService,This property refers to a site or end-point that is listed in the catalog.
21 | ,,dcat:catalog,catalogue ,FALSE,TRUE,IRI,,,dcat:Catalog,This property refers to a catalog whose contents are of interest in the context of this catalog
22 | ,,dct:creator,creator,FALSE,FALSE,IRI,,,,This property refers to the entity primarily responsible for producing the catalogue
23 | CatalogRecord,Catalogue Record,rdf:type,,TRUE,FALSE,,,dcat:CatalogRecord,,
24 | ,,foaf:primaryTopic,primary topic,TRUE,FALSE,IRI,,,dcat:Dataset or dcat:Dataservice or dcat:Catalog,This property links the Catalogue Record to the Dataset
25 | ,,dct:modified,update/ modification date,TRUE,FALSE,literal,xsd:date xsd:dateTime,,,This property contains the most recent date on which the Catalogue entry was changed or modified.
26 | ,,dct:conformsTo,application profile,FALSE,FALSE,IRI,,,,This property refers to an Application Profile that the Dataset’s metadata conforms to
27 | ,,adms:status,change type,FALSE,FALSE,IRI,,,skos:Concept,This property refers to the type of the latest revision of a Dataset's entry in the Catalogue.
28 | ,,dct:issued,listing date,FALSE,FALSE,literal,xsd:date xsd:dateTime,,,This property contains the date on which the description of the Dataset was included in the Catalogue.
29 | ,,dct:description,description,FALSE,TRUE,literal,xsd:string,,,This property contains a free-text account of the record. This property can be repeated for parallel language versions of the description.
30 | ,,dct:language,language,FALSE,TRUE,IRI,,,,This property refers to a language used in the textual metadata describing titles
31 | ,,dct:source,source metadata,FALSE,FALSE,IRI,,,dcat:CatalogRecord,This property refers to the original metadata that was used in creating metadata for the Dataset
32 | ,,dct:title,Title,FALSE,TRUE,literal,xsd:string,,,This property contains a name given to the Catalogue Record. This property can be repeated for parallel language versions of the name.
33 | Agent,Agent,rdf:type,,TRUE,FALSE,IRI,,foaf:Agent,,
34 | ,,foaf:name,Name,TRUE,TRUE,literal,,,,
35 | ,,dct:type,,FALSE,FALSE,,,,,
36 | ,,,,,,,,,,
37 | ,,,,,,,,,,
38 | skos:CategoryScheme?,Category scheme,dct:title,Scheme name,TRUE,,,,,,
39 | ,,,,,,,,,,
40 | Checksum,Checksum,rdf:type,,TRUE,FALSE,IRI,,spdx:Checksum,,
41 | ,,spdx:algorithm,algorithm,TRUE,FALSE,literal,,,,
42 | ,,spds:checksumValue,checksum value,TRUE,FALSE,literal,,,,
43 | ,,,,,,,,,,
44 | DataService,Data service,rdf:type,,TRUE,FALSE,IRI,,dcat:DataService,,
45 | ,,dcat:endpointURL,Endpoint URL,TRUE,TRUE,IRI,,,,
46 | ,,dct:title,Service name,TRUE,TRUE,literal,,,,
47 | ,,dcat:endpointDescription,Endpoint description,FALSE,TRUE,literal,,,,
48 | ,,dcat:servesDataset,Serves dataset,FALSE,TRUE,IRI,,,,
49 | ,,dct:accessRights,Access rights,FALSE,FALSE,literal,,,,
50 | ,,dct:description,Service description,FALSE,TRUE,literal,,,,
51 | ,,dct:license,Service license,FALSE,FALSE,literal,,,,
52 | ,,,,,,,,,,
53 | Dataset,Dataset,rdf:type,,TRUE,FALSE,IRI,,dcat:Dataset,,
54 | ,,dct:description,Dataset description,TRUE,TRUE,literal,,,,
55 | ,,dct:title,Dataset title,TRUE,TRUE,literal,,,,
56 | ,,dcat:contactPoint,Contact point,FALSE,TRUE,IRI,,,,
57 | ,,dcat:distribution,Distribution,FALSE,TRUE,IRI,,,,
58 | ,,dcat:keyword,Keyword,FALSE,TRUE,literal,,,,
59 | ,,dct:publisher,Publisher,FALSE,FALSE,literal,,,,
60 | ,,dct:spatial,Spatial,FALSE,TRUE,literal,,,,
61 | ,,dct:temporal,Temporal,FALSE,TRUE,literal,,,,
62 | ,,dcat:theme,Theme,FALSE,TRUE,IRI,,,,
63 | ,,,,,,,,,,
64 | ,,adms:identifier,Identifier,FALSE,TRUE,literal,,,,
65 | ,,adms:sample,Sample,FALSE,TRUE,literal,,,,
66 | ,,adms:versionNotes,Version notes,FALSE,TRUE,literal,,,,
67 | ,,dcat:landingPage,Landing page,FALSE,TRUE,IRI,,,,
68 | ,,dcat:spatialResolutionInMeters,Spatial resolution in meters,FALSE,TRUE,literal,,,,
69 | ,,dcat:temporalResolution,Temporal resolution,FALSE,TRUE,literal,,,,
70 | ,,dcat:qualifiedRelation,Qualified relation,FALSE,TRUE,IRI,,,,
71 | ,,dct:accessRights,Accessrights,FALSE,FALSE,literal,,,,
72 | ,,dct:accrualPeriodicity,Periodicity,FALSE,FALSE,literal,,,,
73 | ,,dct:conformsTo,Standard,FALSE,TRUE,IRI,,,,
74 | ,,dct:creator,creator,FALSE,FALSE,IRI,,,,
75 | ,,dct:hasVersion,Version notes,FALSE,TRUE,literal,,,,
76 | ,,dct:isReferencedBy,Referenced by,FALSE,TRUE,IRI,,,,
77 | ,,dct:isVersionOf,Version of,FALSE,TRUE,IRI,,,,
78 | ,,dct:identifier,Identifier,FALSE,TRUE,literal,,,,
79 | ,,dct:issued,Date issued,FALSE,FALSE,literal,,,,
80 | ,,dct:language,Language,FALSE,TRUE,literal,,,,
81 | ,,dct:modified,Date modified,FALSE,FALSE,literal,,,,
82 | ,,dct:provenance,Provenance,FALSE,TRUE,literal,,,,
83 | ,,dct:relation,Relation,FALSE,TRUE,literal,,,,
84 | ,,dct:source,source,FALSE,TRUE,literal,,,,
85 | ,,dct:type,Type,FALSE,FALSE,literal,,,,
86 | ,,foaf:page,Page,FALSE,TRUE,IRI,,,,
87 | ,,owl:versionInfo,Version,FALSE,FALSE,literal,,,,
88 | ,,prov:qualifiedAttribution,Qualified attribution,FALSE,TRUE,IRI,,,,
89 | ,,prov:wasGeneratedBy ,Generated by,FALSE,TRUE,IRI,,,,
90 | ,,,,,,,,,,
91 | Distribution,Distribution,rdf:type,,TRUE,FALSE,IRI,,dcat:Distribution,,
92 | ,,dcat:accessURL,Access URL,TRUE,TRUE,IRI,,,,
93 | ,,dcatap:availability,Availability,FALSE,FALSE,literal,,,,
94 | ,,adms:status,Status,FALSE,FALSE,IRI,,,,
95 | ,,dcat:accessService,Access service,FALSE,TRUE,literal,,,,
96 | ,,dct:format,Format,FALSE,FALSE,IRI,,,,
97 | ,,dct:license,License,FALSE,FALSE,literal,,,,
98 | ,,dcat:byteSize,Byte size,FALSE,FALSE,literal,,,,
99 | ,,dcat:compressFormat,Compress format,FALSE,FALSE,literal,,,,
100 | ,,dcat:downloadURL,Download URL,FALSE,TRUE,IRI,,,,
101 | ,,dcat:mediaType,Media type,FALSE,FALSE,IRI,,,,
102 | ,,dcat:packageFormat,Package format,FALSE,FALSE,IRI,,,,
103 | ,,dcat:spatialResolutionInMeters,Spatial resolution in meters,FALSE,TRUE,literal,,,,
104 | ,,dcat:temporalResolution,Temporal resolution,FALSE,TRUE,literal,,,,
105 | ,,dct:conformsTo,Conforms to,FALSE,TRUE,IRI,,,,
106 | ,,dct:issued,Issued date,FALSE,FALSE,literal,,,,
107 | ,,dct:language,Language,FALSE,TRUE,literal,,,,
108 | ,,dct:modified,Modified date,FALSE,FALSE,literal,,,,
109 | ,,dct:rights,Rights statement,FALSE,FALSE,literal,,,,
110 | ,,dct:title,Title ,FALSE,TRUE,literal,,,,
111 | ,,foaf:page,Web page,FALSE,TRUE,IRI,,,,
112 | ,,odrl:hasPolicy,Policy,FALSE,FALSE,IRI,,,,
113 | ,,spdx:checksum,Checksum,FALSE,FALSE,literal,,,,
114 | ,,,,,,,,,,
115 | Identifier,Identifier,skos:notation,,TRUE,FALSE,literal,,,,
116 | ,,,,,,,,,,
117 | License,License,rdf:type,Class,TRUE,FALSE,IRI,,dct:LicenseDocument,,
118 | ,,dct:type,Type,FALSE,TRUE,literal,,,,
119 | LicenseType,License type,rdf:type,,FALSE,TRUE,IRI,,skos:Concept,,
120 | ,,,,,,,,,,
121 | PublisherType,Publisher type,rdf:type,Class,FALSE,FALSE,IRI,,skos:Concept,,
122 | ,,,,,,,,,,
123 | dct:Location,Location,dcat:bbox,Bbox,FALSE,FALSE,literal,,,,
124 | ,,dcat:centroid,Centroid,FALSE,FALSE,literal,,,,
125 | ,,locn:geometry,Geometry,FALSE,FALSE,literal,,,,
126 | ,,,,,,,,,,
127 | PeriodOfTime,Period of time,rdf:type,,TRUE,FALSE,IRI,,dct:PeriodOfTime,,
128 | ,,dcat:startDate,Start date,FALSE,FALSE,literal,,,,
129 | ,,dcat:endDate,End date,FALSE,FALSE,literal,,,,
130 | ,,time:hasBeginning,Has Beginning,FALSE,FALSE,literal,,,,
131 | ,,time:hasEnd,Has end,FALSE,FALSE,literal,,,,
132 | ,,,,,,,,,,
133 | Relationship,Relationship,rdf:type,,TRUE,FALSE,IRI,,dcat:Relationship,,
134 | ,,dct:relation,Relation,TRUE,TRUE,literal,,,,
135 | ,,dcat:hadRole,Had role,TRUE,TRUE,literal,,,,
136 |
--------------------------------------------------------------------------------
/examples/dcat-ap/dctap.yml:
--------------------------------------------------------------------------------
1 | # dctap configuration file (in YAML format)
2 |
3 | ## This module ignores elements (column headers) that are not part of the
4 | ## base DCTAP model unless they are configured here as "extra" elements.
5 | ##
6 | ## Extra elements must be designated either as "shape" elements (eg, "closed
7 | ## or "start") or as "statement constraint" elements (eg, "min" and "max").
8 | ## As extra elements are not supported by this module, their values are
9 | ## simply passed through to the text, JSON, and YAML outputs.
10 |
11 | # extra_shape_elements:
12 | # - closed
13 | # - start
14 |
15 | extra_statement_constraint_elements:
16 | - localRange
17 | # - max
18 |
19 | ## This module has three built-in value node types: "iri", "literal", and "bnode".
20 | ## Extra node types can be added here, for example as aliases, such as "uri" for "iri",
21 | ## or as combinations of node types, such as "shacl:BlankNodeOrLiteral".
22 | # extra_value_node_types:
23 | # - uri
24 |
25 | # Aliases (case-insensitive) mapped to "official" element names (case-sensitive)
26 | element_aliases:
27 | "mand": "mandatory"
28 | "rep": "repeatable"
29 |
30 | prefixes:
31 | ":": "http://example.org/"
32 | "dc:": "http://purl.org/dc/elements/1.1/"
33 | "dcterms:": "http://purl.org/dc/terms/"
34 | "dct:": "http://purl.org/dc/terms/"
35 | "foaf:": "http://xmlns.com/foaf/0.1/"
36 | "owl:": "http://www.w3.org/2002/07/owl#"
37 | "rdf:": "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
38 | "rdfs:": "http://www.w3.org/2000/01/rdf-schema#"
39 | "schema:": "http://schema.org/"
40 | "skos:": "http://www.w3.org/2004/02/skos/core#"
41 | "skosxl:": "http://www.w3.org/2008/05/skos-xl#"
42 | "wdt:": "http://www.wikidata.org/prop/direct/"
43 | "xsd:": "http://www.w3.org/2001/XMLSchema#"
44 | "dcat:": "http://www.w3.org/ns/dcat#"
45 | "dcatap:": "http://data.europa.eu/r5r/"
46 |
47 | ## There must be a shape identifier in order to ensure consistency
48 | ## of JSON and YAML output. A different default identifier can be
49 | ## set here, but the module will not permit the identifier to be a
50 | ## string of zero length (and will revert to "default").
51 | # default_shape_identifier: "default"
52 |
53 | ## The default separator for items in a picklist is a single blank space
54 | ## but this could be replaced with other common separators, such as commas
55 | ## or pipes (or-bars). The program routinely strips extra whitespace from
56 | ## the start and end of picklist items.
57 | # picklist_item_separator: ','
58 |
59 |
--------------------------------------------------------------------------------
/examples/dcat-ap/readme.md:
--------------------------------------------------------------------------------
1 | # DCAT-AP
2 |
3 | The [DataCatalog vocabulary community](https://www.w3.org/2017/dxwg/wiki/Main_Page) has created a base [application profile](https://joinup.ec.europa.eu/collection/semantic-interoperability-community-semic/dcat-ap), with many variations on that profile that have been created for national applications or for specific data types (e.g. geographic data).
4 |
5 | This is a preliminary attempt to express the DCAT-AP in DCTAP.
6 |
7 | * [DCAT-AP in DCTAP](dcat-ap.csv)
8 | * [Configuration file for use with dctap-python](dctap.yml)
9 | * Some output files from dctap-python - [JSON](dcat-ap.json), [YAML](dcat-ap.yml)
10 |
--------------------------------------------------------------------------------
/examples/displayEG.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
Book
44 |
45 |
46 |
47 |
dct:title(Book title)
48 |
49 | -
50 | mandatory "true"
51 |
52 | -
53 | repeatable "false"
54 |
55 | -
56 | valueDataType "xsd:string"
57 |
58 |
59 |
60 |
61 |
dct:description(Book description)
62 |
63 | -
64 | mandatory "false"
65 |
66 | -
67 | repeatable "true"
68 |
69 | -
70 | valueDataType "xsd:string"
71 |
72 |
73 |
74 |
75 |
dct:date(Publication date)
76 |
77 | -
78 | valueDataType "xsd:date"
79 |
80 |
81 |
82 |
83 |
dct:extent(Pages)
84 |
85 | -
86 | valueDataType "xsd:decimal"
87 |
88 |
89 |
90 |
91 |
sdo:isbn(ISBN)
92 |
93 | -
94 | valueDataType "xsd:string"
95 |
96 |
97 |
98 |
99 |
dct:creator(Author)
100 |
101 | -
102 | mandatory "true"
103 |
104 | -
105 | repeatable "true"
106 |
107 | -
108 | valueShape "authorShape"
109 |
110 |
111 |
112 |
113 |
dct:publisher(Publisher)
114 |
115 | -
116 | mandatory "true"
117 |
118 | -
119 | repeatable "false"
120 |
121 | -
122 | valueShape "publisherShape"
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
Author
131 |
132 |
133 |
134 |
foaf:name(Author name)
135 |
136 | -
137 | mandatory "true"
138 |
139 | -
140 | repeatable "false"
141 |
142 | -
143 | valueDataType "xsd:string"
144 |
145 |
146 |
147 |
148 |
foaf:mailbox(Email)
149 |
150 | -
151 | mandatory "false"
152 |
153 | -
154 | repeatable "false"
155 |
156 | -
157 | valueDataType "xsd:string"
158 |
159 |
160 |
161 |
162 |
foaf:accountName(User Name)
163 |
164 | -
165 | mandatory "false"
166 |
167 | -
168 | repeatable "false"
169 |
170 | -
171 | valueDataType "xsd:string"
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
Publisher
180 |
181 |
182 |
183 |
sdo:name(Publisher name)
184 |
185 | -
186 | mandatory "true"
187 |
188 | -
189 | repeatable "false"
190 |
191 | -
192 | valueDataType "xsd:string"
193 |
194 |
195 |
196 |
197 |
sdo:location(Publisher place)
198 |
199 | -
200 | mandatory "true"
201 |
202 | -
203 | repeatable "false"
204 |
205 | -
206 | valueDataType "xsd:string"
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
--------------------------------------------------------------------------------
/examples/readme.md:
--------------------------------------------------------------------------------
1 | # Examples using DCTAP
2 |
3 | These files are examples using DCTAP. Some are invented, and others profile existing vocabularies or profiles. These illustrate some of the possilities of DCTAP.
4 |
5 | You are free to copy any of these and use them as the basis for your own work.
6 |
7 | ## Some book profiles
8 |
9 | * [Simplest book profile](simple-book-2)
10 | * [Book profile](simple-book) with turtle output, SHACL validation schema and sample data.
11 |
12 | ## Examples using Wikidata
13 |
14 | * [Scholarly Article](wikidata/ScholarlyArticle)
15 | * [Nobel prize winners](wikidata/wikidata_nobel_prize_winners)
16 | * [COVID-19 tracking](wikidata/wikidata_covid-19_contact_tracing_app)
17 |
18 | For others, see the examples/wikidata directory in the DCTAP github repository: https://github.com/dcmi/dctap/
19 |
--------------------------------------------------------------------------------
/examples/recipe/README.md:
--------------------------------------------------------------------------------
1 | # Recipe
2 | Attempt to represent the [Google guided recipe guidelines](https://developers.google.com/search/docs/data-types/recipe) as an application profile of schema.org recipe.
3 |
--------------------------------------------------------------------------------
/examples/recipe/ap_recipe.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,valueNodeTypevalueDataType,Value Space,Mandatory,Repeatable,valueShape,note
2 | ,,,,,,,,,
3 | Recipe,Recipe,,,,,,,,
4 | ,,rdf:type,instance of,URI ,sdo:Recipe,TRUE,FALSE,,
5 | ,,sdo:image,image, ,xsd:anyURI Image,TRUE,TRUE,,Image of the completed dish.
6 | ,,sdo:name,name,Literal,xsd:string,TRUE,FALSE,,The name of the dish.
7 | ,,sdo:url,page URL,URI ,xsd:anyURI, FALSE,FALSE,,The URL of the recipe's web page
8 | ,,sdo:aggregateRating,aggregate rating,Entity,, FALSE,FALSE,Aggregate,
9 | ,,sdo:author,author,Entity,,FALSE,TRUE,Author,
10 | ,,sdo:cookTime,cook time,Literal,xsd:duratio FALSE,FALSE,FALSE,,Use ISO 8601 duration format
11 | ,,sdo:datePublished,date published,Literal,xsd:date, FALSE,FALSE,,
12 | ,,sdo:description,description,Literal,xsd:string, FALSE,FALSE,,
13 | ,,sdo:keywords,keywords,Literal,xsd:string,FALSE,TRUE,,
14 | ,,sdo:nutrition,nutrition,Entity,,FALSE,FALSE,NutritionalInformation,
15 | ,,sdo:prepTime,prep time,Literal,xsd:duratio FALSE,FALSE,FALSE,,
16 | ,,sdo:recipeCategory,recipe category,Literal,xsd:string,FALSE,TRUE,,
17 | ,,sdo:recipeCuisine,cuisine,Literal,xsd:string,FALSE,TRUE,,
18 | ,,sdo:recipeIngredient,recipe ingredient,Literal,xsd:string,TRUE,TRUE,,
19 | ,,sdo:recipeInstructions,recipe instructions,,,TRUE,FALSE,HowToStep HowToSection,Required for guided recipes
20 | ,,sdo:recipeYield,yield,Literal,xsd:string, FALSE,FALSE,,
21 | ,,sdo:totalTime,total time,Literal,xsd:duratioN, FALSE,FALSE,,
22 | ,,sdo:video,video,Entity, Video,FALSE,TRUE,Video,
23 | ,,,,,,,,,
24 | Image,image object,,,,,,,,
25 | ,,rdf:type,instance of,URI ,sdo:ImageObject,TRUE,FALSE,,
26 | ,,sdo:contentUrl,location,URI ,xsd:anyURI,TRUE,FALSE,,
27 | ,,sdo:caption,image caption,Literal,xsd:string, FALSE,FALSE,,
28 | ,,,,,,,,,
29 | AggregateRating,Rating,,,,,,,,
30 | ,,rdf:type,instance of,URI,sdo:AggregateRating,TRUE,FALSE,,
31 | ,,sdo:itemReviewed,item reviewed,URI,,TRUE,FALSE,,
32 | ,,sdo:ratingCount,rating count,Literal,xsd:integer,TRUE,FALSE,,The total number of ratings
33 | ,,sdo:reviewCount,review count,Literal,xsd:integer,TRUE,FALSE,,Specifies the number of people who provided a review with or without an accompanying rating.
34 | ,,sdo:ratingValue,rating value,Literal,xsd:float xsd:string,TRUE,FALSE,,"The aggregate rating, e.g. 4.1 or 82%"
35 | ,,sdo:bestRating,best rating,Literal,xsd:float, FALSE,FALSE,,The best rating possible
36 | ,,sdo:worstRating,worst rating,Literal,xsd:float, FALSE,FALSE,,The worst rating possible
37 | ,,,,,,,,,
38 | Author,Recipe author,,,,,,,,The name of the person or organization that wrote the recipe.
39 | ,,rdf:type,instance of,URI ,sdo:Person :Organization,TRUE,FALSE,,
40 | ,,sdo:name,Name,Literal,xsd:string,TRUE,TRUE,,
41 | ,,,,,,,,,
42 | NutritionInformation,Nutritional Information,,,,,,,,
43 | ,,rdf:type,instance of,URI,sdo:NutritionInformation,TRUE,FALSE,,
44 | ,,sdo:calories,calories,Literal,xsd:string,TRUE,FALSE,,Energy per serving in form e.g. 420kCal
45 | ,,sdo:servingSize,serving size,Literal,xsd:string,TRUE,FALSE,,
46 | ,,,,,,,,,
47 | HowToSection,,,,,,,,,
48 | ,Set of instructions,rdf:type,instance of ,URI,sdo:HowToSection,TRUE,FALSE,,
49 | ,,sdo:name,title for this section,Literal,xsd:string,TRUE,FALSE,,
50 | ,,sdo:text,summary of this section,Literal,xsd:string,TRUE,FALSE,,
51 | ,,sdo:itemListElement,instruction,,,TRUE,TRUE,HowToStep,
52 | ,,sdo:itemListOrder,item list order,URI,sdo:ItemListOrderAscending,TRUE,FALSE,,
53 | ,,,,,,,,,
54 | HowToStep,Instruction step,,,,,,,,
55 | ,,rdf:type,,URI,sdo:HowToStep,TRUE,FALSE,,
56 | ,,sdo:name,heading for instructions,Literal,xsd:string,TRUE,FALSE,,
57 | ,,sdo:text,detailed instructions,Literal,xsd:string, FALSE,FALSE,,
58 | ,,sdo:url,link to this step,URI,,FALSE,TRUE,,
59 | ,,sdo:image,image(s) for this step,,xsd:anyURI image,FALSE,TRUE,,
60 | ,,sdo:video,a video of this step,,,,,Video,
61 | ,,,,,,,,,
62 | Video,Video,,Image Object,,,,,,
63 | ,,rdf:type,,URI ,sdo:VideoObject,TRUE,FALSE,,
64 | ,,sdo:name,title,,xsd:string,TRUE,FALSE,,
65 | ,,sdo:contentUrl,location,URI ,xsd:anyURI,TRUE,FALSE,,
66 | ,,sdo:embedUrl,embed URL,URI ,xsd:anyURI,TRUE,TRUE,,
67 | ,,sdo:url,URL,URI ,xsd:anyURI,TRUE,FALSE,,
68 | ,,sdo:hasPart,A clip from a video,,,FALSE,TRUE,VideoClip,
69 | ,,sdo:thumbnailUrl,thumbnail URL,URI ,xsd:anyURI, FALSE,FALSE,,
70 | ,,,,,,,,,
71 | ,,,,,,,,,
72 | ,,,,,,,,,
73 | VideoClip,Video Clip,,,,,,,,
74 | ,,sdo:startOffset,The start of a clip,Literal,xsd:integer,TRUE,FALSE,,Required for clips
75 | ,,sdo:endOffset,The end of a clip,Literal,xsd:integer,TRUE,FALSE,,Required for clips
--------------------------------------------------------------------------------
/examples/recipe/guided_recipe.json:
--------------------------------------------------------------------------------
1 |
2 | {
3 | "@context": "https://schema.org/",
4 | "@type": "Recipe",
5 | "name": "Party Coffee Cake",
6 | "image": [
7 | "https://example.com/photos/1x1/photo.jpg",
8 | "https://example.com/photos/4x3/photo.jpg",
9 | "https://example.com/photos/16x9/photo.jpg"
10 | ],
11 | "author": {
12 | "@type": "Person",
13 | "name": "Mary Stone"
14 | },
15 | "datePublished": "2018-03-10",
16 | "description": "This coffee cake is awesome and perfect for parties.",
17 | "prepTime": "PT20M",
18 | "cookTime": "PT30M",
19 | "totalTime": "PT50M",
20 | "keywords": "cake for a party, coffee",
21 | "recipeYield": "10",
22 | "recipeCategory": "Dessert",
23 | "recipeCuisine": "American",
24 | "nutrition": {
25 | "@type": "NutritionInformation",
26 | "calories": "270 calories"
27 | },
28 | "recipeIngredient": [
29 | "2 cups of flour",
30 | "3/4 cup white sugar",
31 | "2 teaspoons baking powder",
32 | "1/2 teaspoon salt",
33 | "1/2 cup butter",
34 | "2 eggs",
35 | "3/4 cup milk"
36 | ],
37 | "recipeInstructions": [
38 | {
39 | "@type": "HowToStep",
40 | "name": "Preheat",
41 | "text": "Preheat the oven to 350 degrees F. Grease and flour a 9x9 inch pan.",
42 | "url": "https://example.com/party-coffee-cake#step1",
43 | "image": "https://example.com/photos/party-coffee-cake/step1.jpg"
44 | },
45 | {
46 | "@type": "HowToStep",
47 | "name": "Mix dry ingredients",
48 | "text": "In a large bowl, combine flour, sugar, baking powder, and salt.",
49 | "url": "https://example.com/party-coffee-cake#step2",
50 | "image": "https://example.com/photos/party-coffee-cake/step2.jpg"
51 | },
52 | {
53 | "@type": "HowToStep",
54 | "name": "Add wet ingredients",
55 | "text": "Mix in the butter, eggs, and milk.",
56 | "url": "https://example.com/party-coffee-cake#step3",
57 | "image": "https://example.com/photos/party-coffee-cake/step3.jpg"
58 | },
59 | {
60 | "@type": "HowToStep",
61 | "name": "Spread into pan",
62 | "text": "Spread into the prepared pan.",
63 | "url": "https://example.com/party-coffee-cake#step4",
64 | "image": "https://example.com/photos/party-coffee-cake/step4.jpg"
65 | },
66 | {
67 | "@type": "HowToStep",
68 | "name": "Bake",
69 | "text": "Bake for 30 to 35 minutes, or until firm.",
70 | "url": "https://example.com/party-coffee-cake#step5",
71 | "image": "https://example.com/photos/party-coffee-cake/step5.jpg"
72 | },
73 | {
74 | "@type": "HowToStep",
75 | "name": "Enjoy",
76 | "text": "Allow to cool and enjoy.",
77 | "url": "https://example.com/party-coffee-cake#step6",
78 | "image": "https://example.com/photos/party-coffee-cake/step6.jpg"
79 | }
80 | ],
81 | "aggregateRating": {
82 | "@type": "AggregateRating",
83 | "ratingValue": "5",
84 | "ratingCount": "18"
85 | },
86 | "video": {
87 | "@type": "VideoObject",
88 | "name": "How to make a Party Coffee Cake",
89 | "description": "This is how you make a Party Coffee Cake.",
90 | "thumbnailUrl": [
91 | "https://example.com/photos/1x1/photo.jpg",
92 | "https://example.com/photos/4x3/photo.jpg",
93 | "https://example.com/photos/16x9/photo.jpg"
94 | ],
95 | "contentUrl": "http://www.example.com/video123.mp4",
96 | "embedUrl": "http://www.example.com/videoplayer?video=123",
97 | "uploadDate": "2018-02-05T08:00:00+08:00",
98 | "duration": "PT1M33S",
99 | "interactionStatistic": {
100 | "@type": "InteractionCounter",
101 | "interactionType": { "@type": "http://schema.org/WatchAction" },
102 | "userInteractionCount": 2347
103 | },
104 | "expires": "2019-02-05T08:00:00+08:00"
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/examples/samvera_mods_to_rdf/TAP_Samvera_MODS_to_RDF_namespaces.csv:
--------------------------------------------------------------------------------
1 | Vocabulary,Prefix,Namespace
2 | BIBFRAME (v.2),bf,http://id.loc.gov/ontologies/bibframe/
3 | The Bibliographic Ontology,bibo,http://purl.org/ontology/bibo/
4 | Classification Schemes,classSchemes,http://id.loc.gov/vocabulary/classSchemes
5 | DBPedia Ontology,dbo,http://dbpedia.org/ontology/
6 | "Dublin Core Metadata Element Set, Version 1.1",dce,http://purl.org/dc/elements/1.1/
7 | DCMI Metadata Terms,dcterms,http://purl.org/dc/terms/
8 | DCMI Type Vocabulary,dcmitype,http://dublincore.org/documents/2000/07/11/dcmi-type-vocabulary/#
9 | EBUCore,ebucore,https://www.ebu.ch/metadata/ontologies/ebucore/ebucore#
10 | Europeana Data Model,edm,http://www.europeana.eu/schemas/edm/
11 | FOAF (Friend of a Friend),foaf,http://xmlns.com/foaf/spec/#
12 | GeoJSON-LD,geojson,https://purl.org/geojson/vocab#
13 | MARC Code List for Relators,relators,http://id.loc.gov/vocabulary/relators
14 | OpaqueNamespace (used as a placeholder for proposed predicates),opaque,http://opaquenamespace.org/
15 | OWL 2,owl,https://www.w3.org/2002/07/owl#
16 | Portland Common Data Model,pcdm,http://pcdm.org/models#
17 | RDA Unconstrained,rdau,http://rdaregistry.info/Elements/u/#
18 | The RDF Concepts Vocabulary (RDF),rdf,http://www.w3.org/1999/02/22-rdf-syntax-ns#
19 | RDF Schema 1.1,rdfs,https://www.w3.org/TR/rdf-schema/
20 | Schema.org,schema,http://schema.org/
21 | SKOS Simple Knowledge Organization System,skos,http://www.w3.org/2004/02/skos/core#
22 | SKOS Simple Knowledge Organization System eXtension for Labels,skosxl,http://www.w3.org/2008/05/skos-xl
23 | Standard Identifiers Scheme,identifiers,http://id.loc.gov/vocabulary/identifiers
--------------------------------------------------------------------------------
/examples/samvera_mods_to_rdf/readme.md:
--------------------------------------------------------------------------------
1 | # Samvera MODS to RDF Recommendations - Represented in DC TAP format
2 |
3 | These Tabular Application Profile (TAP) examples represent an adaptation of the MODS to RDF Mapping Recommendations (v.1.0) completed by the Samvera MODS to RDF Working Group in January of 2019, which are available from the group's [wiki](https://samvera.atlassian.net/wiki/spaces/samvera/pages/405212148/MODS+and+RDF+Descriptive+Metadata+Subgroup).
4 |
5 | I made these adaptations in November of 2020. Generally speaking, I tried to stay as close to the details of the document as I could. Here are some points of difference.
6 |
7 | - The set of recommendations addresses the top-level MODS elements, although it does not map all of them. It also provides two options for certain elements: a direct mapping option and a more complex minted-object mapping option. I represented these options in separate sheets, but I supplemented the minted-object mapping sheet with the direct mapping options for the MODS elements that did not have a minted-object option, for the sake of completeness.
8 |
9 | - The minted-object mapping option specifies classes for the minted objects. I included these statements in the TAP adaptation. The class is given as a valueConstraint value.
10 |
11 | - In order to preserve the references to the MODS top-level elements, I used their names for the shapeID values in the minted-object mappings, and I prepended a statement to the note values of the direct-mapping options.
12 |
13 | - I devised propertyLabel values with reference variously to the MODS elements names, the propertyID values, hints in the notes and so forth.
14 |
15 | - I added mandatory and repeatable values based on the MODS specification, which states that no element is mandatory and every element is repeatable with the exception of recordInfo.
16 |
17 | - Predicates that could take an IRI or a literal are represented twice, to conform to the limitations of the current TAP format. Accompanying notes were modified accordingly.
18 |
19 | - Where the Recommendations had URI, I replaced it with IRI for consistency with the TAP format.
20 |
21 | - The Recommendations included proposals for predicates that could be created and hosted in the OpaqueNamespace platform. I left those as-is.
22 |
23 | - The Recommendations included predicates from some vocabularies like the MARC Code List for Relators, indicating that any predicate from that vocabulary could be used, and presenting this with form such as relators:[term] or classSchemes:[code]. Where this form was found, I replaced the bracketed element with a sample term and amended the note to convey the intended meaning.
24 |
25 | - I would like to acknowledge the tremendous amount of work carried out by members of the Samvera community over a long period of time that went into the creation of this set of recommendations, and to applaud them for it. I encourage interested parties to consult the Recommendations document itself for full details on the process and its outcomes.
26 |
27 | John Huck
28 | November, 2020
29 | john.huck@ualberta.ca
30 |
--------------------------------------------------------------------------------
/examples/simple-book-2/readme.md:
--------------------------------------------------------------------------------
1 | This profiles a simple metadata design for a book with an author and a publisher as separate shapes. In a simple diagram, it looks like:
2 |
3 | 
4 |
5 | There are two files:
6 | * [file 1](simpleBook2.csv) does not assume that the metadata will use RDF as its format.
7 | * [file 2](simpleBook2RDF.csv) includes RDF node information
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/examples/simple-book-2/simpleBook2.csv:
--------------------------------------------------------------------------------
1 | "shapeID","shapeLabel","propertyID","propertyLabel","valueDataType","valueShape","mandatory","repeatable"
2 | "bookShape","Book","dct:title","Book title","xsd:string",," TRUE","FALSE"
3 | ,,"dct:description","Book description","xsd:string",,"FALSE","TRUE"
4 | ,,"dct:date","Publication date","xsd:date",,,
5 | ,,"dct:extent","Pages","xsd:decimal",,,
6 | ,,"sdo:isbn","ISBN","xsd:string",,,
7 | ,,"dct:creator","Author",,"authorShape","TRUE","TRUE"
8 | ,,"dct:publisher","Publisher",,"publisherShape","TRUE","FALSE"
9 | "authorShape","Author","foaf:name","Author name","xsd:string",,"TRUE","FALSE"
10 | ,,"foaf:mailbox","Email","xsd:string",,"FALSE","FALSE"
11 | ,,"foaf:accountName","User Name","xsd:string",,"FALSE","FALSE"
12 | "publisherShape",Publisher,"sdo:name","Publisher name","xsd:string",,"TRUE","FALSE"
13 | ,,"sdo:location","Publisher place","xsd:string",,"TRUE","FALSE"
14 |
--------------------------------------------------------------------------------
/examples/simple-book-2/simpleBook2RDF.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,valueNodeType,valueDataType,valueShape,mandatory,repeatable,valueConstraint,valueConstraintType
2 | bookShape,Book,dct:title,Book title,literal,xsd:string,,TRUE,FALSE,,
3 | ,,dct:description,Book description,literal,xsd:string,,FALSE,TRUE,,
4 | ,,dct:date,Publication date,literal,xsd:date,,,,,
5 | ,,dct:extent,Pages,literal,xsd:decimal,,,,,
6 | ,,sdo:isbn,ISBN,literal,xsd:string,,,,,
7 | ,,dct:creator,Author,BNODE,,authorShape,TRUE,TRUE,,
8 | ,,dct:publisher,Publisher,BNODE,,publisherShape,TRUE,FALSE,,
9 | authorShape,Author,sdo:identifier,Author ID,IRI,,,TRUE,FALSE,https://viaf.org,iriStem
10 | ,,foaf:name,Author name,literal,xsd:string,,TRUE,FALSE,,
11 | ,,foaf:mailbox,Email,literal,xsd:string,,FALSE,FALSE,^[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*@[a-zA-Z0-9]+(?:\.[a-zA-Z0-9]+)*$,pattern
12 | ,,foaf:accountName,User name,literal,xsd:string,,FALSE,FALSE,,
13 | publisherShape,Publisher,sdo:name,Publisher name,literal,xsd:string,,TRUE,FALSE,,
14 | ,,sdo:identifier,Publisher ID,IRI,,,FALSE,FALSE,https://isni.org/isni/,iriStem
15 | ,,sdo:location,Publisher place,literal,xsd:string,,TRUE,FALSE,,
16 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_2langTitles.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # invalid data for a book, title in two Languages
6 | a sdo:Book ;
7 | dct:title "Testing Shapes"@en, "Probando Formas"@es .
8 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_authString.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Invalid data for a book, Author is Literal.
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator "John Doe" ;
12 | sdo:isbn "1234567890123" .
13 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_invalidISBN.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Invalid data: isbn mis-formatted
6 | a sdo:Book ;
7 | dct:title "Testing Shapes"@en ;
8 | sdo:isbn "123-4567-89012-3".
9 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_noTitle.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Invalid data : no title
6 | a sdo:Book .
7 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_rptISBN.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Invalid data: isbn repeated
6 | a sdo:Book ;
7 | dct:title "Testing Shapes"@en ;
8 | sdo:isbn "1234567890123", "3210987654321".
9 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_rpt_invalidISBN.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Open: isbn repeated, but second does not match pattern
6 | a sdo:Book ;
7 | dct:title "Testing Shapes"@en ;
8 | sdo:isbn "1234567890123", "123456789".
9 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/invalid_book_titleType.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Invalid data for a book, title not LangString
6 | a sdo:Book ;
7 | dct:title "Testing Shapes" .
8 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/no_valid_book.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # No data for a book
9 | a foaf:Person ;
10 | foaf:givenName "John" ;
11 | foaf:familyName "Doe" .
12 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/open_book_extra.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Data for a book, some properties not in AP
6 | # Valid if profile is "open"
7 | a sdo:Book ;
8 | dct:title "Testing Shapes"@en ;
9 | dct:description "Not really a book."@en .
10 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Valid data for a book
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator ;
12 | sdo:isbn "1234567890123".
13 |
14 | a foaf:Person ;
15 | foaf:givenName "John" ;
16 | foaf:familyName "Doe" .
17 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book2_bnode.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Reasonably extensive data for a book, with BNODE
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator [
12 | a foaf:Person ;
13 | foaf:givenName "John" ;
14 | foaf:familyName "Doe"
15 | ] ;
16 | sdo:isbn "1234567890123".
17 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book3_mte.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Reasonably extensive data for a book, multiple types for person
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator [
12 | a foaf:Person , sdo:Person ;
13 | foaf:givenName "John" ;
14 | foaf:familyName "Doe"
15 | ] ;
16 | sdo:isbn "1234567890123".
17 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book_2auths.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Valid data for a book with two authors
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator , ;
12 | sdo:isbn "1234567890123".
13 |
14 | a foaf:Person ;
15 | foaf:givenName "John" ;
16 | foaf:familyName "Doe" .
17 |
18 | a foaf:Person ;
19 | foaf:givenName "Jane" ;
20 | foaf:familyName "Doe" .
21 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book_2names.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Valid data for a book
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator ;
12 | sdo:isbn "1234567890123".
13 |
14 | a foaf:Person ;
15 | foaf:givenName "Jane" ;
16 | foaf:familyName "Doe", "née Smith" .
17 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book_anonAuth.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix foaf: .
4 | @prefix rdf: .
5 | @prefix sdo: .
6 | @prefix xsd: .
7 |
8 | # Valid data for a book, author has no names
9 | a sdo:Book ;
10 | dct:title "Testing Shapes"@en ;
11 | dct:creator ;
12 | sdo:isbn "1234567890123".
13 |
14 | a foaf:Person .
15 |
--------------------------------------------------------------------------------
/examples/simple-book/SampleData/valid_book_minimal.ttl:
--------------------------------------------------------------------------------
1 | @base .
2 | @prefix dct: .
3 | @prefix sdo: .
4 |
5 | # Invalid data for a book, title not LangString
6 | a sdo:Book ;
7 | dct:title "Testing Shapes"@en .
8 |
--------------------------------------------------------------------------------
/examples/simple-book/book.ttl:
--------------------------------------------------------------------------------
1 | @prefix dct: # DCMI Metadata Terms
2 | @prefix foaf: # Friend of a Friend
3 | @prefix sdo: # Schema.org
4 | @prefix rdf: # RDF
5 | @prefix xsd: # XSD: use for data types
6 |
7 | a sdo:Book ;
8 | dct:title "A Book of Mediterranean Food"@en ;
9 | dct:creator ;
10 | sdo:isbn "0123456789123"^^xsd:string .
11 |
12 | a foaf:Person ;
13 | foaf:givenName "Elizabeth"^^xsd:string
14 | foaf:familyName "David"^^xsd:string
15 |
--------------------------------------------------------------------------------
/examples/simple-book/readme.md:
--------------------------------------------------------------------------------
1 | ## Simple Book examples
2 | A simple but hopefully reasonably realistic application profile for describing books and their authors using terms from DCMI Metadata Terms [dct](http://purl.org/dc/terms/)
3 | Friend of a Friend [foaf](http://xmlns.com/foaf/0.1/)
4 | and Schema.org [sdo](https://schema.org/)
5 |
6 | * [The simple book DCTAP in CSV](simpleBookTAP.csv)
7 | * [A vocabulary derived from the DCTAP in turtle format](book.ttl)
8 | * [A SHACL validation document derived from the DCTAP](shacl.ttl)
9 | * [Files of valid and invalid data for this DCTAP](SampleData)
10 |
11 | Line 1: Book instance data must have one and only one dct:title of type rdf:langString.
12 |
13 | Line 2: Book instance data may have zero or more dct:creator described as an RDF instance with a URI or a BNODE, matching the #Author shape.
14 |
15 | Line 3: Book instance data may have zero or one sdo:isbn with Literal value being an xsd:string composed of 13 digits only.
16 |
17 | Line 4: Book instance data must have rdf:type of sdo:Book.
18 |
19 | Line 5: Author instance data may have zero or more foaf:givenName with Literal value type xsd:string.
20 |
21 | Line 6: Author instance data may have zero or more foaf:familyName with Literal value type xsd:string
22 |
23 | Line 7: Author instance data must have rdf:type of foaf:Person
24 |
25 | * shacl.ttl : a SHACL file generated from this TAP.
26 |
27 | * SampleData : some valid and invalid sample data, useful for testing validation artefacts (e.g. SHACL or ShEx files) generated from the TAP.
28 |
--------------------------------------------------------------------------------
/examples/simple-book/shacl.ttl:
--------------------------------------------------------------------------------
1 | # SHACL generated by python AP to shacl converter
2 | @base .
3 | @prefix base: .
4 | @prefix dct: .
5 | @prefix foaf: .
6 | @prefix rdf: .
7 | @prefix sdo: .
8 | @prefix sh: .
9 | @prefix xsd: .
10 |
11 | a sh:NodeShape ;
12 | sh:class sdo:Book ;
13 | sh:description "Shape for describing books"@en ;
14 | sh:name "Book"@en ;
15 | sh:property ,
16 | ,
17 | ;
18 | sh:targetClass sdo:Book .
19 |
20 | a sh:NodeShape ;
21 | sh:class foaf:Person ;
22 | sh:description "Shape for describing authors"@en ;
23 | sh:name "Author"@en ;
24 | sh:property ,
25 | ;
26 | sh:targetObjectsOf dct:creator .
27 |
28 | a sh:PropertyShape ;
29 | sh:datatype xsd:string ;
30 | sh:name "Family name"@en ;
31 | sh:nodeKind sh:Literal ;
32 | sh:path foaf:familyName .
33 |
34 | a sh:PropertyShape ;
35 | sh:datatype xsd:string ;
36 | sh:name "Given name"@en ;
37 | sh:nodeKind sh:Literal ;
38 | sh:path foaf:givenName .
39 |
40 | a sh:PropertyShape ;
41 | sh:name "Author"@en ;
42 | sh:node ;
43 | sh:nodeKind sh:BlankNodeOrIRI ;
44 | sh:path dct:creator ;
45 | sh:severity sh:Warning .
46 |
47 | a sh:PropertyShape ;
48 | sh:datatype xsd:string ;
49 | sh:maxCount 1 ;
50 | sh:minCount 1 ;
51 | sh:name "ISBN-13"@en ;
52 | sh:nodeKind sh:Literal ;
53 | sh:path sdo:isbn ;
54 | sh:pattern "^(\\d{13})?$" ;
55 | sh:severity sh:Violation .
56 |
57 | a sh:PropertyShape ;
58 | sh:datatype rdf:langString ;
59 | sh:maxCount 1 ;
60 | sh:minCount 1 ;
61 | sh:name "Title"@en ;
62 | sh:nodeKind sh:Literal ;
63 | sh:path dct:title ;
64 | sh:severity sh:Violation .
65 |
--------------------------------------------------------------------------------
/examples/simple-book/simpleBookTAP.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueConstraintType,valueShape,note,severity
2 | BookShape,dct:title,Title,TRUE,FALSE,Literal,rdf:langString,,,,,Violation
3 | BookShape,dct:creator,Author,FALSE,TRUE,IRI BNODE,,,,AuthorShape,,Warning
4 | BookShape,sdo:isbn,ISBN-13,FALSE,FALSE,Literal,xsd:string,^(\d{13})?$,pattern,,"Just the 13 numbers, no spaces or separators.",Violation
5 | BookShape,rdf:type,Type,TRUE,FALSE,IRI,,sdo:Book,,,,Warning
6 | AuthorShape,rdf:type,Type,TRUE,TRUE,IRI,,foaf:Person,,,,Warning
7 | AuthorShape,foaf:givenName,Given name,FALSE,TRUE,Literal,xsd:string,,,,,
8 | AuthorShape,foaf:familyName,Family name,FALSE,TRUE,Literal,xsd:string,,,,,
9 |
--------------------------------------------------------------------------------
/examples/simpler/contentDMeg1.md:
--------------------------------------------------------------------------------
1 |
2 | ContentDM elements
3 |
4 | | Field name | DC mapping | Data type | Authority File |
5 | | ------| ------| ------|---|
6 | | Title | Title | Text | |
7 | | Subject |Subject | Text | |
8 | | Description | Description | Text | |
9 | | Creator | Creator | Text | LCA |
10 | | Publisher | Publisher |Text | |
11 | | Date | Date | Text| |
12 |
13 | DCTAP elements
14 |
15 | | propertyLabel | propertyID | ValueDataType|valueConstraint|valueConstraintType|
16 | | ------| ------| ------|---|---|
17 | | Title | dc:title | Text| | |
18 | | Subject |dc:subject | Text| | |
19 | | Description | dc:description | Text | | |
20 | | Creator | dc:creator | Text | https://authorities.loc.gov/ | picklist |
21 | | Publisher | dc:publisher |Text | | |
22 | | Date | dc:date | Text | | |
23 |
24 | ContentDM property tables can also include values for "hidden" (whether a term is hidden in the interface) and "big field" (which determines the type of input box in the user interface). Although these are not natively included in DCTAP, additional columns can be added to include these. Because these are both binary fields, values in them can be created as true/false, 1/0, or another value like yes/no:
25 |
26 | | propertyLabel | propertyID | ValueDataType|valueConstraint|valueConstraintType|hidden|bigField|
27 | | ------| ------| ------|---|---|--|--|
28 | | Title | dc:title | Text| | | false|true|
29 | | Subject |dc:subject | Text| | |false|false|
30 | | Description | dc:description | Text | | |false|false|
31 | | Creator | dc:creator | Text | https://authorities.loc.gov/ | picklist |false|false|
32 | | Publisher | dc:publisher |Text | | |false|false|
33 | | Date | dc:date | Text | | |false|false|
34 |
--------------------------------------------------------------------------------
/examples/wikidata/ChileanPoliticians/E163.ttl:
--------------------------------------------------------------------------------
1 | PREFIX wdt:
2 | PREFIX wd:
3 | start = @
4 |
5 | {
6 | wdt:P31 [wd:Q5];
7 | wdt:P106 IRI +;
8 | wdt:P27 [wd:Q298];
9 | wdt:P21 [wd:Q6581097 wd:Q6581072 ];
10 | wdt:P102 IRI +;
11 | wdt:P569 LITERAL;
12 | }
13 |
--------------------------------------------------------------------------------
/examples/wikidata/ChileanPoliticians/E163ChileanPoliticians.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueConstraintType,valueShape,note
2 | ,,wdt:P31,,TRUE,FALSE,,,wd:Q5,,,
3 | ,,wdt:P106,,TRUE,TRUE,IRI,,,,,
4 | ,,wdt:P27,,TRUE,FALSE,,,wd:Q298,,,
5 | ,,wdt:P21,,TRUE,FALSE,,,wd:Q6581097 wd:Q6581072,picklist,,
6 | ,,wdt:P102,,TRUE,TRUE,IRI,,,,,
7 | ,,wdt:P569,,TRUE,FALSE,LITERAL,,,,,
8 |
--------------------------------------------------------------------------------
/examples/wikidata/ScholarlyArticle/E292.ttl:
--------------------------------------------------------------------------------
1 | ## This schema describes the shapes of a subgraph in Wikidata on scholarly articles
2 | ## sourced from plazi (http://plazi.org/) and crossref.
3 | ## This schema is drafted from wd:Q105626665
4 |
5 | ## Work in progress
6 |
7 | prefix p:
8 | prefix pq:
9 | prefix wd:
10 | prefix pr:
11 | PREFIX prn:
12 | prefix ps:
13 | prefix psn:
14 | PREFIX psv:
15 | prefix schema:
16 | prefix xsd:
17 | prefix rdf:
18 | prefix rdfs:
19 | prefix prov:
20 | prefix skos:
21 |
22 | {
23 | rdfs:label rdf:langString* ;
24 | schema:description rdf:langString* ;
25 | schema:name rdf:langString* ;
26 | skos:prefLabel rdf:langString* ;
27 |
28 | p:P31 @<#P31_instance_of> ;
29 | p:P1433 @<#P1433_published_in> ;
30 | p:P1476 @<#P1478_title> ;
31 | p:P2093 @<#P2093_author_name_string>* ;
32 | p:P304 @<#P304_pages>;
33 | p:P433 @<#P433_issue>;
34 | p:P478 @<#P478_volume>;
35 | p:P577 @<#P577_publication_data>;
36 |
37 | # external identifiers
38 | p:P356 @<#P356_DOI> ;
39 | }
40 |
41 | <#P31_instance_of> {
42 | ps:P31 [wd:Q13442814 ] ;
43 | prov:wasDerivedFrom @<#reference> ;
44 | }
45 |
46 |
47 |
48 | <#P304_pages> {
49 | ps:P304 xsd:string;
50 | prov:wasDerivedFrom @<#reference> ;
51 | }
52 |
53 | <#P356_DOI> {
54 | ps:P356 xsd:string;
55 | psn:P356 IRI ;
56 | prov:wasDerivedFrom @<#reference> ;
57 | }
58 |
59 | <#P433_issue> {
60 | ps:P433 xsd:string ;
61 | prov:wasDerivedFrom @<#reference> ;
62 | }
63 |
64 | <#P478_volume> {
65 | ps:P478 xsd:string;
66 | prov:wasDerivedFrom @<#reference> ;
67 | }
68 |
69 | <#P577_publication_data> {
70 | ps:P577 xsd:dateTime;
71 | psv:P577 IRI ;
72 | prov:wasDerivedFrom @<#reference> ;
73 | }
74 |
75 | <#P1433_published_in> {
76 | ps:P1433 [ wd:~] ;
77 | prov:wasDerivedFrom @<#reference> ;
78 | }
79 |
80 |
81 | <#P1478_title> {
82 | ps:P1476 rdf:langString ;
83 | prov:wasDerivedFrom @<#reference> ;
84 | }
85 |
86 | <#P2093_author_name_string> {
87 | pq:P1545 xsd:string;
88 | prov:wasDerivedFrom @<#reference>;
89 | ps:P2093 xsd:string;
90 | }
91 |
92 | <#reference> {
93 | pr:P248 [wd:~] ;
94 | pr:P356 xsd:string;
95 | prn:P356 IRI ;
96 | pr:P813 xsd:dateTime;
97 | pr:P854 IRI ;
98 | }
99 |
--------------------------------------------------------------------------------
/examples/wikidata/ScholarlyArticle/E292ScholarlyArticle.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueConstraintType,valueShape,note
2 | ,,rdfs:label,,FALSE,TRUE,,rdf:langString,,,,
3 | ,,schema:description,,FALSE,TRUE,,rdf:langString,,,,
4 | ,,skos:prefLabel,,FALSE,TRUE,,rdf:langString,,,,
5 | ,,p:P31,,TRUE,FALSE,,,,,<#P31_instance_of>,
6 | ,,p:P1433,,TRUE,FALSE,,,,,<#P1433_published_in>,
7 | ,,p:P2093,,FALSE,TRUE,,,,,<#P2093_author_name_string,
8 | ,,p:P304,,TRUE,FALSE,,,,,<#P304_pages>,
9 | ,,p:P433,,TRUE,FALSE,,,,,<#P433_issue>,
10 | ,,p:P478,,TRUE,FALSE,,,,,<#P478_volume>,
11 | ,,p:P577,,TRUE,FALSE,,,,,<#P557_publication_data>,
12 | ,,p:P356,,TRUE,FALSE,,,,,<#P356_DOI>,
13 | ,,,,,,,,,,,
14 | <#P31_instance_of>,,ps:P31,,TRUE,FALSE,,,wd:Q13442814,,,
15 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
16 | ,,,,,,,,,,,
17 | <#P304_pages>,,ps:P304,,TRUE,FALSE,,xsd:string,,,,
18 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
19 | ,,,,,,,,,,,
20 | <#P356_DOI>,,ps:P356,,TRUE,FALSE,,xsd:string,,,,
21 | ,,psn:P356,,,,IRI,,,,,
22 | ,,,,,,,,,,,
23 | <#P433_issue>,,ps:P433,,TRUE,FALSE,,xsd:string,,,,
24 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
25 | ,,,,,,,,,,,
26 | <#P478_volume>,,ps:P478,,TRUE,FALSE,,xsd:string,,,,
27 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
28 | ,,,,,,,,,,,
29 | ,,,,,,,,,,,
30 | <#P577_publication_data>,,ps:P577,,TRUE,FALSE,,xsd:dateTime,,,,
31 | ,,psv:P577,,TRUE,FALSE,IRI,,,,,
32 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
33 | ,,,,,,,,,,,
34 | <#P1433_published_in>,,ps:P1433,,,,IRI,,http://wikidata.org/entity/,iriStem,,
35 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
36 | ,,,,,,,,,,,
37 | <#P1478_title>,,ps:P1478,,TRUE,FALSE,,rdf:langString,,,,
38 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
39 | ,,,,,,,,,,,
40 | <#P2093_author_name_string>,,pq:P1545,,TRUE,FALSE,,xsd:string,,,,
41 | ,,prov:wasDerivedFrom,,TRUE,FALSE,,,,,<#reference>,
42 | ,,ps:P2093,,TRUE,FALSE,,xsd:string,,,,
43 | ,,,,,,,,,,,
44 | <#reference>,,pr:P248,,TRUE,FALSE,,,http://wikidata.org/entity/,iriStem,,
45 | ,,pr:P356,,TRUE,FALSE,,xsd:string,,,,
46 | ,,prn:P356,,TRUE,FALSE,IRI,,,,,
47 | ,,pr:P813,,TRUE,FALSE,,xsd:dateTime,,,,
48 | ,,pr:P854,,TRUE,FALSE,IRI,,,,,
49 |
--------------------------------------------------------------------------------
/examples/wikidata/ScholarlyArticle/readme.md:
--------------------------------------------------------------------------------
1 | # Scholarly Article in Wikidata
2 | Wikidata's scholarly article profile has a number of entities that are translated to shapes in the DCTAP:
3 | * pages
4 | * DOI
5 | * issue
6 | * volume
7 | * publication data
8 | * published in
9 | * author name
10 | As well as various properties used as qualifiers.
11 |
12 | The DCTAP CSV here is derived from the Wikidata turtle file below.
13 | * [DCTAP](E292ScholarlyArticle.csv)
14 | * [Wikidata turtle](292E.ttl)
15 |
--------------------------------------------------------------------------------
/examples/wikidata/readme.md:
--------------------------------------------------------------------------------
1 | Translation of Wikidata schemas for use in a DC TAP is based on the RDF model for Wikidata.
2 |
3 | Here is a snippet from https://www.wikidata.org/wiki/EntitySchema:E66, the schema for Mozart compositions.
4 |
5 | p:P528 {
6 | ps:P528 xsd:string ;
7 | pq:P972 [
8 | wd:Q162478 # Köchel catalogue
9 | wd:Q22338962 # Köchel catalogue (1st edition)
10 | wd:Q22340538 # Köchel catalogue (6th edition)
11 | ];
12 | }+ ;
13 |
14 | In this example `p:P528` defines the entity, which would correspond to a TAP shapeID. The `ps:P528` is a propertyID and xsd:string is the value datatype. `pq:P972` is the qualifier, and there are 3 items in its "picklist". This translates to this TAP:
15 |
16 | | shapeID | propertyID |valueDatatype| valueConstraint | valueConstraintType |
17 | | ---- | ---- | ---- | ---- | ---- |
18 | | p:P528 | ps:P528 | xsd:string | | |
19 | | pq:P972 | | | wd:Q162478 wd:Q22338962 wd:Q22340538 | picklist |
20 |
21 | Because the qualifiers "self-identify" with their namespace, and because WD code appears to treat them side-by-side with other properties, then it does not appear that they need a separate column in TAP.
22 |
23 | The examples in this folder follow this logic.
24 |
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_covid-19_contact_tracing_app/namespaces.csv:
--------------------------------------------------------------------------------
1 | Vocabulary,Prefix,Namespace
2 | Wikidata Entities,wd,http://www.wikidata.org/entity/
3 | Wikidata Properties,wdt,http://www.wikidata.org/prop/direct/
4 | XML Schema,xsd,http://www.w3.org/2001/XMLSchema#
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_covid-19_contact_tracing_app/profile.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueShape,note
2 | contacttracingapp,Contact Tracing App,wdt:P31,Instance of,y,n,IRI,,wd:Q89288125,,Instance of a COVID-19 contact tracing application
3 | contacttracingapp,Contact Tracing App,wdt:P1476,Title,n,y,LITERAL,,,,Title of the contact tracing app
4 | contacttracingapp,Contact Tracing App,wdt:P366,Use,n,y,IRI,,,"
5 | ",Use of the app
6 | contacttracingapp,Contact Tracing App,wdt:P123,Publisher,y,n,IRI,,,,Official publisher of the App
7 | contacttracingapp,Contact Tracing App,wdt:P178,Developers,n,y,IRI,,,,Developers of the App
8 | contacttracingapp,Contact Tracing App,wdt:P495,Country,n,y,IRI,,wd:Q6256,,Country of origin
9 | contacttracingapp,Contact Tracing App,wdt:P306,Operating System,n,y,IRI,,wd:Q9135,,Operating System
10 | contacttracingapp,Contact Tracing App,wdt:P275,License,n,y,IRI,,wd:Q79719,,License under which this app is released
11 | contacttracingapp,Contact Tracing App,wdt:P856,Website,n,y,IRI,,,,"Official Website of the App
12 | "
13 | contacttracingapp,Contact Tracing App,wdt:P577,Publication Date,n,y,LITERAL,xsd:date,,,Date of publication
14 | contacttracingapp,Contact Tracing App,wdt:P5008,Wikimedia Project,n,y,IRI,,,,If the app is on focus list of any Wikimedia project
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_covid-19_contact_tracing_app/readme.md:
--------------------------------------------------------------------------------
1 | # Wikidata - COVID-19 contact tracing app
2 | A simplified profile of COVID-19 contact tracing app entities in Wikidata expressed in DCTAP. This profile is an abstraction of entity schema [E195](https://www.wikidata.org/wiki/EntitySchema:E195) and [COVID-19 Apps data models](https://www.wikidata.org/wiki/Wikidata:WikiProject_COVID-19/Data_models/COVID-19_apps).
3 |
4 | |Label|Property|
5 | |:--|:--|
6 | |Instance of|[P31](https://www.wikidata.org/wiki/Property:P31)|
7 | |Title|[P1476](https://www.wikidata.org/wiki/Property:P1476)|
8 | |Use|[P366](https://www.wikidata.org/wiki/Property:P366)|
9 | |Publisher|[P123](https://www.wikidata.org/wiki/Property:P123)|
10 | |Developers|[P178](https://www.wikidata.org/wiki/Property:P178)|
11 | |Country|[P495](https://www.wikidata.org/wiki/Property:P495)|
12 | |Operating System|[P306](https://www.wikidata.org/wiki/Property:P306)|
13 | |License|[P275](https://www.wikidata.org/wiki/Property:P275)|
14 | |Website|[P856](https://www.wikidata.org/wiki/Property:P856)|
15 | |Publication Date|[P577](https://www.wikidata.org/wiki/Property:P577)|
16 | |Wikimedia Project|[P5008](https://www.wikidata.org/wiki/Property:P5008)|
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_nobel_prize_winners/namespaces.csv:
--------------------------------------------------------------------------------
1 | Vocabulary,Prefix,Namespace
2 | Wikidata Entities,wd,http://www.wikidata.org/entity/
3 | Wikidata Properties,wdt,http://www.wikidata.org/prop/direct/
4 | XML Schema,xsd,http://www.w3.org/2001/XMLSchema#
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_nobel_prize_winners/profile.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,mandatory,repeatable,valueNodeType,valueDataType,valueConstraint,valueShape,note
2 | nobel_winner,Nobel Winner,wdt:P31,Instance of,y,n,IRI,,"wd:Q5,wd:Q43229",,Instance of human OR instance of organization
3 | nobel_winner,Nobel Winner,wdt:P8024,Nobel Laureate API ID,y,y,LITERAL,,,,API ID for Nobel Prize API
4 | nobel_winner,Nobel Winner,wdt:P166,Award Received,y,y,,,,"nobel_award",Type of award received
5 | nobel_award,Nobel Award,wdt:P31,Instance of,n,y,IRI,,wd:Q7191,,The award can be an Instance of a Nobel Prize
6 | nobel_award,Nobel Award,wdt:P279,Subclass of,n,y,IRI,,wd:Q7191,,Or a subclass of Nobel Prize
7 |
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_nobel_prize_winners/readme.md:
--------------------------------------------------------------------------------
1 | # Wikidata - Nobel Prize Winners
2 |
3 | A simplified profile of Nobel prize winners in Wikidata expressed in DCTAP. This profile is an abstraction of entity schema [E126](https://www.wikidata.org/wiki/EntitySchema:E126).
4 |
5 | 
6 |
7 | Notes :
8 | In TAP, comma separation for indicating 'one of' the values is currently under discussion, used as an example.
--------------------------------------------------------------------------------
/examples/wikidata/wikidata_nobel_prize_winners/schema.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/examples/wikidata/wikidata_nobel_prize_winners/schema.png
--------------------------------------------------------------------------------
/media/2013Sep11W3CWorkshop/2013-09-11.rdfvalid_workshop_dcam.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/media/2013Sep11W3CWorkshop/2013-09-11.rdfvalid_workshop_dcam.pdf
--------------------------------------------------------------------------------
/media/2020Dec17OpenMeeting/dctapDecember2020.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/media/2020Dec17OpenMeeting/dctapDecember2020.pdf
--------------------------------------------------------------------------------
/media/2020Dec17OpenMeeting/readme.md:
--------------------------------------------------------------------------------
1 | As an introduction to the Dublin Core community, we held an open meeting on Zoom on December 17, 2020. The meeting was recorded and is available on Youtube.
2 |
3 | Available here are the slides of the [opening presentation](dctapDecember2020.pdf) by Karen Coyle, and the presentation by Tom Baker of software being developed that processes and creates validation code that implements the constraints in the profile. A [video of the meeting](https://www.youtube.com/watch?v=BDsJU5P5xQY) is available on DCMI's Youtube channel.
4 |
--------------------------------------------------------------------------------
/media/2021Feb18OpenMeeting/TAPfeb21.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/media/2021Feb18OpenMeeting/TAPfeb21.pdf
--------------------------------------------------------------------------------
/media/2021Feb18OpenMeeting/profiles_and_validation.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/media/2021Feb18OpenMeeting/profiles_and_validation.pdf
--------------------------------------------------------------------------------
/media/2021Feb18OpenMeeting/readme.md:
--------------------------------------------------------------------------------
1 | The 2021 February 18 Open Meeting covered the same topics as the meeting in December of 2020, although it updates some of the changes made to the TAP since December.
2 |
3 | * [TAP introduction slides](TAPfeb21.pdf)
4 | * Code illustrating from TAP to validation programing
5 | * [Video of meeting](https://www.youtube.com/watch?v=p_aSCl_SxX0)
6 |
--------------------------------------------------------------------------------
/media/code4lib2021/DCTAPposter.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/dcmi/dctap/203f0695cba1730b628129ae17bc634d64c1dcba/media/code4lib2021/DCTAPposter.pdf
--------------------------------------------------------------------------------
/media/code4lib2021/readme.md:
--------------------------------------------------------------------------------
1 | # Code4Lib 2021
2 |
3 | DC TAP is being showcased as a poster in the virtual [Code4Lib 2021](https://2021.code4lib.org/). It includes a video of the initial introduction given in the February, 2021 open meeting.
4 |
--------------------------------------------------------------------------------
/media/readme.md:
--------------------------------------------------------------------------------
1 | # Presentations and media
2 |
3 | There have been two open meetings which were recorded and are available on Youtube. The [February 2021](2021Feb18OpenMeeting) provides the most up to date information. There are also files of the slides that were used in the presentations.
4 |
5 | There was a poster session at [Code4lib 2021](code4lib2021) which used a two-page visual description of the creation of a DC TAP.
6 |
--------------------------------------------------------------------------------
/talking_about_metadata.md:
--------------------------------------------------------------------------------
1 | # Talking about metadata and application profiles
2 |
3 | Authors: [DCMI Application Profile Interest Group](https://www.dublincore.org/groups/application_profiles_ig/).
4 |
5 | Date: June 9, 2022
6 |
7 | ### Documents in this project
8 |
9 | - [DCTAP Primer](https://dcmi.github.io/dctap/TAPprimer.html)
10 | - [DCTAP Elements](https://dcmi.github.io/dctap/TAPelements.html)
11 | - [DCTAP Cookbook](https://dcmi.github.io/dctap/DCTAP-Cookbook.html)
12 | - [Framework for Talking About Metadata and Application Profiles](https://dcmi.github.io/dctap/talking_about_metadata.html) (This document)
13 |
14 | ## Introduction
15 |
16 | It is hard to talk about application profiles because they are two degrees of abstraction removed from reality. Application profiles are about metadata. Metadata, in turn, is about things in the world that are being described.
17 |
18 | The many technologies used for metadata today describe themselves in terms that may sound superficially similar while being based on subtly different concepts. Consider the many meanings of "class" or "type" or of our favorite: "schema" (see "How to confuse yourself and everyone else" below).
19 |
20 | This style guide presents the terminology we used in designing the DC Tabular Application Profiles model [[DCTAP](https://www.dublincore.org/groups/application_profiles_ig/dctap_primer/)]. Every term here is used with multiple meanings elsewhere, but following this pattern consistently can help avoid (or at least resolve) potential confusion.
21 |
22 | This terminology largely follows the Resource Description Framework (RDF) because RDF is the most widely recognized language for "graph metadata"—a modern approach to metadata that favors the ability to link or combine data from different sources on the basis of a generically interoperable model [[RDF Primer](https://www.w3.org/TR/rdf11-primer/)]. Most metadata in the world is not natively expressed in RDF but can, *in principle*, be converted into RDF for the purpose of interoperability. Expression in RDF requires clarity about the things being described and their characteristics. The modeling discipline required by RDF makes for well-designed, interoperable metadata, and thus provides a good foundation for DC TAP.
23 |
24 | [Orwell's rule 6](https://en.wikipedia.org/wiki/Politics_and_the_English_Language#Remedy_of_Six_Rules) applies: "break any of these rules sooner than say anything outright barbarous".
25 |
26 | ## The things being described
27 | **Entities** exist in the real or imaginary world, they may be material, digital or purely conceptual. RDF calls them resources.
28 |
29 | Entities have **characteristics** and **relationships** to other entities.
30 |
31 | Entities may be grouped by shared characteristic or relationship, or by enumeration into **types or classes of entity**.
32 |
33 | In RDF, entities and types of entity are identified with IRIs.
34 |
35 | ## The metadata
36 | **Metadata instances** describe entities. In the case of a conceptual enitity, the metadata may act as a definition. Metadata instances are composed of **statement**s.
37 |
38 | A **statement** in a metadata instance asserts a value for a single characteristic of a single entity or one relationship between it and another entity.
39 |
40 | In RDF, as in natural languages, a statement has a **subject**, a **predicate** and an **object**.
41 |
42 | The **subject**, is an identifier for the entity being described.
43 |
44 | The **predicate** is an identifier for the characteristic or relationship in the statement.
45 |
46 | The **object** is a description of the characteristic or an identifier the related entity.
47 |
48 | An object in one statement may be the subject or object of other statements, so that RDF metadata may be visualized as a network or **graph** of **nodes** connected by predicates. The connecting predicates are often called **edges**.
49 |
50 | An arrangement of nodes and edges forms a **shape**.
51 |
52 | Other metadata frameworks have elements, or attributes and values, or key-value pairs. For example XML and JSON are hierarchical tree-like structures. XML documents are structured as nested elements, which may have attributes.
53 |
54 | In the TAP, we often refer to the **object** as the **value** of the property in a metadata instance.
55 |
56 | ## The vocabularies and models
57 | **Vocabularies** and **data models** are the raw materials of metadata. These may be published community standards or as ad hoc specifications. Metadata standards and specifications may define usage rules. Sometimes the combination of a vocabulary and a model is called a schema, however the term schema is used in very different ways in different metadata frameworks (see below).
58 |
59 | One type of vocabulary comprises **descriptive terms**, such as **properties** and **classes** and relationships between the terms. Another type of vocabulary may be a list of values which can be used in describing the characteristics of an entity.
60 |
61 | Vocabularies in RDF identify their terms with IRIs. In RDF instance data **predicates** are identified as **properties**, that is, they describe a **characteristic** or **relationship** that may be asserted. An **RDF class** identifies a type or class of entity.
62 |
63 | Other metadata frameworks follow a similar pattern of a vocabulary (sometimes called data elements or terms) and a model.
64 |
65 | ## The application profile, including TAPs
66 | An **application profile** describes, explains, and defines additional **rules** for how existing vocabularies and models should be used in a metadata instance.
67 |
68 | An application profile comprises a set of **templates** for metadata statements in the instance data. The templates define and describe local choices for how statements are constructed, which may include constraints and explanatory information such as labels and notes. Examples of **constraints** are cardinality of statements, type of the value of a property, and specific rules for the property values.
69 |
70 | The DC TAP specification defines a tabular format for application profiles in which statement templates are the *rows* and the individual **elements** of those templates form the *columns*.
71 |
72 | A set of statement templates that applies to a single entity or concept defines a **shape**. A **shape** comprises **statement templates** for a **node** in the metadata that meets some criterion or criteria, for example all nodes belonging to a given class or that are an **object** of a given **property**. Shapes in the profile may be the same as the structures defined in the metadata **model**, or they may be defined in the profile as a derived view over the metadata.
73 |
74 |
75 | ## WARNING: How to confuse yourself and everyone else
76 | Since entities in the world include digital and conceptual things, it follows that metadata, vocabularies, models and application profiles, properties, statements and all the rest are entities, and that you can have metadata about any of these things. Likewise, metadata vocabularies and application profiles describe and/or define concepts and so are forms of metadata. However, pursuing this line of thinking will only serve to confuse.
77 |
78 | We have tried to avoid using the word "**schema**". Originating from philosophy and then used in psychology to mean something like a mental model or framework by which the world is interpreted, it was co-opted by computer science to mean some sort of data model. Unfortunately we now find ourselves in a world where we have relational database schemas, XML Schema Definitions (XSD), RDF-Schema (RDFS), JSON-Schema, schema.org, as well as informal use of the word to mean a data standard. There is also potential for use as a malapropism for the words 'scheme' and 'schematic [diagram]'. If used without qualification as to which of these is intended, the word on its own is hopelessly ambiguous. We have used **data model** when we mean the broad computer science sense of the word schema.
79 |
80 | ## In summary
81 | For real world things: use **entity**, **characteristic**, **relationship** and **type** or **class of entity**.
82 |
83 | For metadata: use **instance** (data); and in RDF metadata: **statement**, **subject**, **predicate**, **object**, **value**, **node**, **graph** and **edge**.
84 |
85 | For **vocabularies** and **data models**: use **term**, **property** and (metadata) **class**.
86 |
87 | For application profiles (especially TAPs): use **statement template** **constraint**, **element** and **shape**.
88 |
89 |
90 | ### References
91 | **[DCTAP]** Karen Coyle (*ed.*) [DC Tabular Application Profiles (DC TAP) - Primer](https://www.dublincore.org/groups/application_profiles_ig/dctap_primer/) DCMI working draft for comment. URL: https://www.dublincore.org/groups/application_profiles_ig/dctap_primer/ (This reference should be updated when the final version is published. Current work can be found on the [DCTAP Github repository](https://github.com/dcmi/dctap).)
92 |
93 | **[RDF Primer]** Guus Schreiber and Yves Raimond (*eds.*), [RDF 1.1 Primer](https://www.w3.org/TR/rdf11-primer/). W3C Working Group Note 24 June 2014. URL: https://www.w3.org/TR/rdf11-primer/
94 |
--------------------------------------------------------------------------------
/tests/IRIwithLiteralDatatype.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,valueNodeType,valueDataType
2 | book,Book,dct:publisher,IRI,xsd:string
3 |
--------------------------------------------------------------------------------
/tests/bothBlankAndFilledShapeID.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueShape
2 | book,dct:title,
3 | ,,dct:creator,author
4 | author,rdf:type,
5 | author,foaf:name,
6 |
--------------------------------------------------------------------------------
/tests/literalWithoutDatatype.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueNodeType
2 | book,dct:title,literal
3 |
--------------------------------------------------------------------------------
/tests/mixOfEmptyCells.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,valueNodeType,valueDataType,valueConstraint,valueConstraintType,valueShape
2 | book,Book,dct:title,Title,literal,xsd:string,,,
3 | ,,dct:publisher,Publisher,IRI,,,,
4 | book,Book,dct:creator,Author,BNODE,,,,author
5 | author,Author,rdf:type,,IRI,,foaf:Person,,
6 |
--------------------------------------------------------------------------------
/tests/noPropertyID.csv:
--------------------------------------------------------------------------------
1 | propertyLabel
2 | Title
3 | Publisher
4 |
5 | Name
6 |
--------------------------------------------------------------------------------
/tests/propIDonly.csv:
--------------------------------------------------------------------------------
1 | propertyID
2 | dct:title
3 | dct:publisher
4 | dct:creator
5 |
--------------------------------------------------------------------------------
/tests/propsBeforeShape.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueNodeType
2 | ,dct:title,literal
3 | ,dct:publisher,URI
4 | book,dct:creator,BNODE
5 | author,rdf:type,URI
6 |
--------------------------------------------------------------------------------
/tests/readme.md:
--------------------------------------------------------------------------------
1 | # Tests in CSV
2 |
3 | This lists data situations to be tested. As they are created, they will be linked. Note that some tests may move from Good to Bad or vice versa as we decide what software should tolerate.
4 |
5 | ## Good
6 | * Only propertyID [propIDonly.csv](propIDonly.csv)
7 | * propertyID and label
8 | * label first then propertyID
9 | * shapeID not as first column
10 | * one with everything
11 | *
12 | * valueConstraints:
13 | * picklist
14 | * URIstem - one, and more than one
15 | * picklist with quoted string
16 | * regex
17 | * single value, no valueConstraintType
18 |
19 | ## Bad (?)
20 | * No propertyID [noPropertyID.csv](noPropertyID.csv)
21 | * propertyID rows before first shapeID row [propsBeforeShape.csv](propsBeforeShape.csv)
22 | * shapeID appears more than once, but without intervening shapes [twoSameShape.csv](twoSameShape.csv)
23 | * shapeID appears more than once, but with intervening shapes [mixOfEmptyCells.csv](mixOfEmptyCells.csv)
24 | * ValueNodeType in lower case [valueNodeTypeLowercase.csv](valueNodeTypeLowercase.csv)
25 | * valueNodeWrong [valueNodeTypeWrong.csv](valueNodeTypeWrong.csv)
26 | * Node type IRI with literal datatype [IRIwithLiteralDatatype.csv](IRIwithLiteralDatatype.csv)
27 | * ShapeID with some blank and some filled [bothBlankAndFilledShapeID.csv](bothBlankAndFilledShapeID.csv)
28 | * Literal node but no datatype [literalWithoutDatatype.csv](literalWithoutDatatype.csv)
29 | * [ValueDataType wrong](valueDataTypeWrong.csv)
30 | * Shape not referenced in valueShape [shapeNotReferenced.csv](shapeNotReferenced.csv)
31 | * Value shape does not match a shape [shapewithoutShapeID.csv](shapewithoutShapeID.csv) *No message, gets default shapeID*
32 | * Two valueNodeType columns [valueNodeTypeTwice.csv](valueNodeTypeTwice.csv) *No message, second column ignored*
33 | * literal not an xsd:literal [valueDataTypeWrong.csv](https://github.com/dcmi/dctap/blob/main/tests/valueDataTypeWrong.csv)
34 | *
35 |
36 |
--------------------------------------------------------------------------------
/tests/shapeNotReferenced.csv:
--------------------------------------------------------------------------------
1 | shapeID,shapeLabel,propertyID,propertyLabel,valueNodeType,valueDataType
2 | book,Book,dct:title,Title,literal,xsd:string
3 | author,Author,foaf:name,Name,literal,xsd:string
4 |
--------------------------------------------------------------------------------
/tests/shapewithoutShapeID.csv:
--------------------------------------------------------------------------------
1 | shapeLabel,propertyID,valueNodeType,valueDataType
2 | Book,dct:title,literal,xsd:string
3 | Author,foaf:name,literal,xsd:string
4 |
--------------------------------------------------------------------------------
/tests/twoSameShape.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueShape
2 | book,dct:title,
3 | author,rdf:type,
4 | book,dct:creator,author
5 | author,foaf:name,
6 |
--------------------------------------------------------------------------------
/tests/valueDataTypeWrong.csv:
--------------------------------------------------------------------------------
1 | propertyID,valueNodeType,valueDataType
2 | dct:creator,BNODE,wrong
3 |
--------------------------------------------------------------------------------
/tests/valueNodeTypeLowercase.csv:
--------------------------------------------------------------------------------
1 | propertyID,valueNodeType
2 | dct:title,literal
3 | dct:publisher,iri
4 | dct:creator,bnode
5 |
--------------------------------------------------------------------------------
/tests/valueNodeTypeTwice.csv:
--------------------------------------------------------------------------------
1 | propertyID,valueNodeType,valueNodeType
2 | dct:title,literal,LITERAL
3 | dct:publisher,iri,IRI
4 |
--------------------------------------------------------------------------------
/tests/valueNodeTypeWrong.csv:
--------------------------------------------------------------------------------
1 | shapeID,propertyID,valueNodeType,valueShape
2 | book,dct:creator,wrong,author
3 | author,rdf:type,URI,
4 |
--------------------------------------------------------------------------------