Difference between revisions of "Dataset preservation"
(28 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
+ | [[Category:Feature requirements]] | ||
+ | |||
+ | <div style="padding: 10px 10px; border: 1px solid black; background-color: #F79086;">This page is no longer being maintained and may contain inaccurate information. Please see the [https://www.archivematica.org/docs/latest/ Archivematica documentation] for up-to-date information.</div><p> | ||
+ | |||
=Workflow= | =Workflow= | ||
*'''Composition of AIPs''': Large datasets may be divided into multiple transfers prior to ingest, so that one dataset ultimately consists of a number of AIPs. See '''Hierarchical AIC/AIP structure''', below. | *'''Composition of AIPs''': Large datasets may be divided into multiple transfers prior to ingest, so that one dataset ultimately consists of a number of AIPs. See '''Hierarchical AIC/AIP structure''', below. | ||
**''note:'' a related, follow-up Archivematica requirement is to break up large files (e.g. video) that exceed a configurable maximum file size into multiple AIPs, to which the hierarchical structure described below would also apply | **''note:'' a related, follow-up Archivematica requirement is to break up large files (e.g. video) that exceed a configurable maximum file size into multiple AIPs, to which the hierarchical structure described below would also apply | ||
*'''Metadata ingest''': Metadata will be created outside of Archivematica prior to ingest, and may be referenced from the dmdSec of the AIP METS file as an xlink reference. See '''Metadata''', below. | *'''Metadata ingest''': Metadata will be created outside of Archivematica prior to ingest, and may be referenced from the dmdSec of the AIP METS file as an xlink reference. See '''Metadata''', below. | ||
− | *'''Normalization''':Some types of data files may require manual normalization: see https://projects.artefactual.com/issues/1499. | + | *'''Normalization''': Some types of data files may require manual normalization: see https://projects.artefactual.com/issues/1499. |
</br> | </br> | ||
Line 28: | Line 32: | ||
*Because datasets can be large and heterogeneous, one "dataset" may be broken into multiple AIPs. In such cases, the multiple AIPs can be intellectually combined into one AIC, or Archival Information Collection, defined by the OAIS reference model as "[a]n Archival Information Package whose Content Information is an aggregation of other Archival Information Packages." (OAIS 1-9). | *Because datasets can be large and heterogeneous, one "dataset" may be broken into multiple AIPs. In such cases, the multiple AIPs can be intellectually combined into one AIC, or Archival Information Collection, defined by the OAIS reference model as "[a]n Archival Information Package whose Content Information is an aggregation of other Archival Information Packages." (OAIS 1-9). | ||
− | ** | + | **A basic AIC in Archivematica consists of 1) any number of related AIPs and 2) a METS file containing a fileSec and a logical structMap listing all the related AIPs. |
− | **In storage, a pointer.xml file gives storage and compression information for each AIC and AIP. | + | **In storage, a pointer.xml file gives storage and compression information for each AIC METS file and each AIP. |
− | *This diagram shows a storage area with standalone AIPs, an AIC with child AIPs, and related pointer.xml files. | + | |
+ | </br> | ||
+ | |||
+ | ==Workflow for preserving a dataset as an Archival Information Collection== | ||
+ | |||
+ | <br> | ||
+ | |||
+ | [[File:Dataset_workflow1.png|800px|thumb|center]] | ||
+ | |||
+ | </br> | ||
+ | |||
+ | ==Metadata entry== | ||
+ | |||
+ | ===Metadata entry for the AIC=== | ||
+ | |||
+ | This screenshot shows sample metadata entry for the AIC (an AIP consisting of program/project-level metadata and documentation). The screenshot also shows the Dublin Core values that would be generated from the data entry. Note that that Dublin Core values would also be copied to the AIC METS file generated at the end of the workflow. | ||
+ | |||
+ | </br> | ||
+ | |||
+ | [[File:AIC_metadata.png|600px|thumb|center]] | ||
+ | |||
+ | </br> | ||
+ | |||
+ | ===Metadata for AIPs=== | ||
+ | |||
+ | This screenshot shows sample metadata entry for an AIP (consisting of data files and associated metadata). The screenshot also shows the Dublin Core values that would be generated from the data entry. These values are saved in the AIP METS file but are not copied to the AIC METS file. | ||
+ | |||
+ | </br> | ||
+ | |||
+ | [[File:AIP_metadata.png|600px|thumb|center]] | ||
+ | |||
+ | </br> | ||
+ | |||
+ | ===AIC METS file=== | ||
+ | |||
+ | This shows the AIC METS file which is generated at the end of the workflow. Note the Dublin Core metadata copied from the METS file in the AIC (the AIP containing program/project-level metadata and documentation). | ||
+ | |||
+ | <pre> | ||
+ | <?xml version='1.0' encoding='ASCII'?> | ||
+ | <mets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.loc.gov/METS/" xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd"> | ||
+ | <metsHdr CREATEDATE="2013-06-13T20:39:08"/> | ||
+ | <dmdSec ID="dmdSec_1"> | ||
+ | <mdWrap MDTYPE="DC"> | ||
+ | <xmlData> | ||
+ | <dublincore xmlns="http://purl.org/dc/terms/" xsi:schemaLocation="http://purl.org/dc/terms/ http://dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd"> | ||
+ | <title>Global Warming and Arctic Marine Mammals (GWAMM)</title> | ||
+ | <type>Archival Information Collection</type> | ||
+ | <identifier>AIC#1774.28/D</identifier> | ||
+ | </dublincore> | ||
+ | </xmlData> | ||
+ | </mdWrap> | ||
+ | </dmdSec> | ||
+ | <fileSec> | ||
+ | <fileGrp> | ||
+ | <file ID="GWAMM01-3b2be1ec-c70a-4270-9993-01c85d22c975"/> | ||
+ | <file ID="GWAMM02-cfd9a713-6980-45cf-9db1-86f1cdcf3611"/> | ||
+ | <file ID="GWAMM03-tgd9a814-4955-45cf-9db1-23f1gjkf3956"/> | ||
+ | </fileGrp> | ||
+ | </fileSec> | ||
+ | <structMap TYPE="logical"> | ||
+ | <div TYPE="Archival Information Collection" DMDID="dmdSec_1"> | ||
+ | <div LABEL="Global Warming and Arctic Marine Mammals (GWAMM)"> | ||
+ | <fptr FILEID="GWAMM01-3b2be1ec-c70a-4270-9993-01c85d22c975"/> | ||
+ | </div> | ||
+ | <div LABEL="Year two observations: Baffin Island"> | ||
+ | <fptr FILEID="GWAMM02-cfd9a713-6980-45cf-9db1-86f1cdcf3611"/> | ||
+ | </div> | ||
+ | <div LABEL="Beaufort Sea 2008-2009"> | ||
+ | <fptr FILEID="GWAMM03-tgd9a814-4955-45cf-9db1-23f1gjkf3956"/> | ||
+ | </div> | ||
+ | </div> | ||
+ | </structMap> | ||
+ | </mets> | ||
+ | </pre> | ||
+ | |||
+ | [[Media:AIC_METS.png|Original screenshot]] | ||
+ | |||
+ | ===Creating an AIC structMap in the archival storage tab=== | ||
+ | |||
+ | Once all the AIPs have been created and stored, the user searches for them in the archival storage tab. Selecting the "Show AICs?" box at the top of the screen causes an AIC# column to appear in the search results. The user then clicks on a "Create/update AIC structMap" button below the search results table. | ||
+ | |||
+ | <br> | ||
+ | |||
+ | [[File:Archival_storage_AIC1.png|1200px|thumb|center]] | ||
+ | |||
+ | <br> | ||
+ | |||
+ | ==AICs and AIPs in archival storage== | ||
+ | |||
+ | *This diagram shows a storage area with standalone AIPs, an AIC METS file with child AIPs, and related pointer.xml files. Note that from a storage/data management standpoint, Archivematica considers the AIC METS file to be the AIC. | ||
+ | |||
</br> | </br> | ||
Line 36: | Line 130: | ||
</br> | </br> | ||
− | ==Possible AIC/AIP designs | + | ==Sample pointer.xml file== |
+ | |||
+ | <pre> | ||
+ | <mets xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd"> | ||
+ | <metsHdr CREATEDATE="2013-06-13T20:39:08"/> | ||
+ | <amdSec ID="amdSec_1" > | ||
+ | <techMD ID="techMD_1" > | ||
+ | <mdWrap MDTYPE="PREMIS:OBJECT" > | ||
+ | <xmlData> | ||
+ | <object xsi:type="file" xsi:schemaLocation="info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd" | ||
+ | version="2.2" > | ||
+ | <objectIdentifier> | ||
+ | <objectIdentifierType>UUID</objectIdentifierType> | ||
+ | <objectIdentifierValue>3b2be1ec-c70a-4270-9993-O1c85d22c975</objectIdentifierValue> | ||
+ | </objectIdentifier> | ||
+ | <objectCharacteristics> | ||
+ | <compositionLevel>0</compositionLevel> | ||
+ | <fixity> | ||
+ | <messageDigestAlgorithm>sha256</messageDigestAlgorithm> | ||
+ | <messageDigest> | ||
+ | c7eefbc60558cc127becb290c09d5e3cb90ce886504b79f33d94bcccOOb1728c | ||
+ | </messageDigest> | ||
+ | </fixity> | ||
+ | <size>4367852658</size> | ||
+ | <format> | ||
+ | <formatDesignation> | ||
+ | <formatName>7Zip format</formatName> | ||
+ | <formatVersion/> | ||
+ | </formatDesignation> | ||
+ | <formatRegistry> | ||
+ | <formatRegistryName>PRONOM</formatRegistryName> | ||
+ | <formatRegistryKey>fmt/484</formatRegistryKey> | ||
+ | </formatRegistry> | ||
+ | </format> | ||
+ | <creatingApplication> | ||
+ | <creatingApplicationName>7-Zip</creatingApplicationName> | ||
+ | <creatingApplicationVersion>9.20</creatingApplicationVersion> | ||
+ | <dateCreatedByApplication>2013-06-13T20:39:08</dateCreatedByApplication> | ||
+ | </creatingApplication> | ||
+ | </objectCharacteristics> | ||
+ | </object> | ||
+ | </xmlData> | ||
+ | </mdWrap> | ||
+ | </techMD> | ||
+ | </amdSec> | ||
+ | <fileSec> | ||
+ | <fileGrp> | ||
+ | <file ID="GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975" ADMID="amdSec_1" > | ||
+ | <FLocat xlini:href="filepath/GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975.7z" LOCTYPE="OTHER" OTHERLOCTYPE="SYSTEM"/> | ||
+ | </file> | ||
+ | </fileGrp> | ||
+ | </fileSec> | ||
+ | <structMap TYPE="physical"> | ||
+ | <div TYPE="Archival Information Package"> | ||
+ | <fptr FILEID="GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975"/> | ||
+ | </div> | ||
+ | </structMap> | ||
+ | </mets> | ||
+ | |||
+ | </pre> | ||
+ | |||
+ | Pre-OCR: [[media:pointer6G.png | first half of image]], [[media:pointer7G.png | second half of image]] | ||
+ | |||
+ | ==Previously-discussed options and analysis== | ||
+ | |||
+ | {| class="mw-collapsible mw-collapsed wikitable" | ||
+ | |- | ||
+ | ! Possible AIC/AIP designs | ||
+ | |- | ||
+ | | | ||
===Option 1 (preferred)=== | ===Option 1 (preferred)=== | ||
Line 126: | Line 289: | ||
'''Cons''' | '''Cons''' | ||
− | *The process of creating an AIC first, then adding AIPs and having the system automatically add the AIC UUID to the AIP, would be complex and could not easily be built on existing code for generating AIP METS files. | + | *The process of creating an AIC first, then adding AIPs and having the system automatically add the AIC UUID to the AIP, would be complex and could not easily be built on existing code for generating AIP METS files. |
− | *"System prepares the whole package for preservation (AIC/AIPs/structMap) and sends it to archival storage" - this does not match Archivematica's basic pipeline | + | *"System prepares the whole package for preservation (AIC/AIPs/structMap) and sends it to archival storage" - this does not match Archivematica's basic processing pipeline design, which generates AIPs and places them individually in archival storage. In reference to point 1, above, there would be no obvious mechanism for finding the UUID of the AIC and adding it to an AIP if the AIC has not already been placed in archival storage. |
− | *"Over time, user can add new AIPs. Generate AIC structMap step can either replace structMap or update the old one" - it is not clear where or how this step would occur, since this would require searching for an AIC and its constituent AIPs in archival storage, then generating a new structMap from stored AIPs plus | + | *"Over time, user can add new AIPs. Generate AIC structMap step can either replace structMap or update the old one" - it is not clear where or how this step would occur, since this would require searching for an AIC and its constituent AIPs in archival storage, then generating a new structMap from stored AIPs plus the AIP that is currently being created (and this process would need to be run separately for each new AIP). |
− | *Updating the documentation AIP would be problematic if the documentation AIP doubled as the AIC. There is currently no mechanism for AIP versioning, and it is likely that "versioning" will actually mean creating replacement AIPs. In this case, updating the documentation would result in the creation of a new AIC with a new UUID, which would mean that all the AIC UUIDs in the child AIPs would become obsolete. | + | *Updating the documentation AIP would be problematic if the documentation AIP doubled as the AIC. There is currently no mechanism for AIP versioning, and it is likely that "versioning" will actually mean creating replacement AIPs. In this case, updating the documentation would result in the creation of a new AIC with a new UUID, '''which would mean that all the AIC UUIDs in the child AIPs would become obsolete'''. |
− | |||
</br> | </br> | ||
Line 229: | Line 391: | ||
</br> | </br> | ||
− | + | |} | |
− |
Latest revision as of 16:16, 11 February 2020
Workflow[edit]
- Composition of AIPs: Large datasets may be divided into multiple transfers prior to ingest, so that one dataset ultimately consists of a number of AIPs. See Hierarchical AIC/AIP structure, below.
- note: a related, follow-up Archivematica requirement is to break up large files (e.g. video) that exceed a configurable maximum file size into multiple AIPs, to which the hierarchical structure described below would also apply
- Metadata ingest: Metadata will be created outside of Archivematica prior to ingest, and may be referenced from the dmdSec of the AIP METS file as an xlink reference. See Metadata, below.
- Normalization: Some types of data files may require manual normalization: see https://projects.artefactual.com/issues/1499.
Metadata[edit]
METS and DDI/FGDC[edit]
- DDI is Data Documentation Initiative, a metadata specification for the social and behavioral sciences; see http://www.ddialliance.org/.
- FGDC is Federal Geographic Data Committee Metadata Standard [FGDC-STD-001-1998]; see http://www.fgdc.gov/metadata/csdgm/
- DDI and FGDC are considered descriptive metadata (dmdSec) in METS. From http://www.loc.gov/standards/mets/METSOverview.v2.html: "Valid values for the MDTYPE element [in dmdSec] include...DDI (Data Documentation Initiative), FGDC (Federal Geographic Data Committee Metadata Standard [FGDC-STD-001-1998]."
- In the Archivematica METS file, a DDI or FGDC file could be referenced from the dmdSec using mdRef, for example as follows: <mdRef LABEL="CCRI-CDN-Census1911V20110628.xml-73b93b28-be1b-433f-861e-03bc321dfe7e" xlink:href="metadata/CCRI-CDN-Census1911V20110628.xml" MDTYPE="DDI" LOCTYPE="OTHER" OTHERLOCTYPE="SYSTEM"/>.
METS and other metadata standards[edit]
- Other metadata standards that could be used for ingested datasets include:
- North American Profile (NAP) of ISO 19119, for geospatial metadata: http://www.fgdc.gov/metadata/geospatial-metadata-standards
- SDMX for aggregate data: http://sdmx.org/?page_id=10
- EML, the Ecological Metadata Language: http://knb.ecoinformatics.org/software/eml/eml-2.1.1/index.html
- If these standards are used, the mdRef in the METS file would need to use OTHER as MDTYPE, for example: <mdRef LABEL="CCRI-CDN-Census1911V20110628.xml-73b93b28-be1b-433f-861e-03bc321dfe7e" xlink:href="metadata/CCRI-CDN-Census1911V20110628.xml" MDTYPE="OTHER" OTHERMDTYPE="SDMX" LOCTYPE="OTHER" OTHERLOCTYPE="SYSTEM"/>
Hierarchical AIC/AIP structure[edit]
- Because datasets can be large and heterogeneous, one "dataset" may be broken into multiple AIPs. In such cases, the multiple AIPs can be intellectually combined into one AIC, or Archival Information Collection, defined by the OAIS reference model as "[a]n Archival Information Package whose Content Information is an aggregation of other Archival Information Packages." (OAIS 1-9).
- A basic AIC in Archivematica consists of 1) any number of related AIPs and 2) a METS file containing a fileSec and a logical structMap listing all the related AIPs.
- In storage, a pointer.xml file gives storage and compression information for each AIC METS file and each AIP.
Workflow for preserving a dataset as an Archival Information Collection[edit]
Metadata entry[edit]
Metadata entry for the AIC[edit]
This screenshot shows sample metadata entry for the AIC (an AIP consisting of program/project-level metadata and documentation). The screenshot also shows the Dublin Core values that would be generated from the data entry. Note that that Dublin Core values would also be copied to the AIC METS file generated at the end of the workflow.
Metadata for AIPs[edit]
This screenshot shows sample metadata entry for an AIP (consisting of data files and associated metadata). The screenshot also shows the Dublin Core values that would be generated from the data entry. These values are saved in the AIP METS file but are not copied to the AIC METS file.
AIC METS file[edit]
This shows the AIC METS file which is generated at the end of the workflow. Note the Dublin Core metadata copied from the METS file in the AIC (the AIP containing program/project-level metadata and documentation).
<?xml version='1.0' encoding='ASCII'?> <mets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.loc.gov/METS/" xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd"> <metsHdr CREATEDATE="2013-06-13T20:39:08"/> <dmdSec ID="dmdSec_1"> <mdWrap MDTYPE="DC"> <xmlData> <dublincore xmlns="http://purl.org/dc/terms/" xsi:schemaLocation="http://purl.org/dc/terms/ http://dublincore.org/schemas/xmls/qdc/2008/02/11/dcterms.xsd"> <title>Global Warming and Arctic Marine Mammals (GWAMM)</title> <type>Archival Information Collection</type> <identifier>AIC#1774.28/D</identifier> </dublincore> </xmlData> </mdWrap> </dmdSec> <fileSec> <fileGrp> <file ID="GWAMM01-3b2be1ec-c70a-4270-9993-01c85d22c975"/> <file ID="GWAMM02-cfd9a713-6980-45cf-9db1-86f1cdcf3611"/> <file ID="GWAMM03-tgd9a814-4955-45cf-9db1-23f1gjkf3956"/> </fileGrp> </fileSec> <structMap TYPE="logical"> <div TYPE="Archival Information Collection" DMDID="dmdSec_1"> <div LABEL="Global Warming and Arctic Marine Mammals (GWAMM)"> <fptr FILEID="GWAMM01-3b2be1ec-c70a-4270-9993-01c85d22c975"/> </div> <div LABEL="Year two observations: Baffin Island"> <fptr FILEID="GWAMM02-cfd9a713-6980-45cf-9db1-86f1cdcf3611"/> </div> <div LABEL="Beaufort Sea 2008-2009"> <fptr FILEID="GWAMM03-tgd9a814-4955-45cf-9db1-23f1gjkf3956"/> </div> </div> </structMap> </mets>
Creating an AIC structMap in the archival storage tab[edit]
Once all the AIPs have been created and stored, the user searches for them in the archival storage tab. Selecting the "Show AICs?" box at the top of the screen causes an AIC# column to appear in the search results. The user then clicks on a "Create/update AIC structMap" button below the search results table.
AICs and AIPs in archival storage[edit]
- This diagram shows a storage area with standalone AIPs, an AIC METS file with child AIPs, and related pointer.xml files. Note that from a storage/data management standpoint, Archivematica considers the AIC METS file to be the AIC.
Sample pointer.xml file[edit]
<mets xsi:schemaLocation="http://www.loc.gov/METS/ http://www.loc.gov/standards/mets/version18/mets.xsd"> <metsHdr CREATEDATE="2013-06-13T20:39:08"/> <amdSec ID="amdSec_1" > <techMD ID="techMD_1" > <mdWrap MDTYPE="PREMIS:OBJECT" > <xmlData> <object xsi:type="file" xsi:schemaLocation="info:lc/xmlns/premis-v2 http://www.loc.gov/standards/premis/v2/premis-v2-2.xsd" version="2.2" > <objectIdentifier> <objectIdentifierType>UUID</objectIdentifierType> <objectIdentifierValue>3b2be1ec-c70a-4270-9993-O1c85d22c975</objectIdentifierValue> </objectIdentifier> <objectCharacteristics> <compositionLevel>0</compositionLevel> <fixity> <messageDigestAlgorithm>sha256</messageDigestAlgorithm> <messageDigest> c7eefbc60558cc127becb290c09d5e3cb90ce886504b79f33d94bcccOOb1728c </messageDigest> </fixity> <size>4367852658</size> <format> <formatDesignation> <formatName>7Zip format</formatName> <formatVersion/> </formatDesignation> <formatRegistry> <formatRegistryName>PRONOM</formatRegistryName> <formatRegistryKey>fmt/484</formatRegistryKey> </formatRegistry> </format> <creatingApplication> <creatingApplicationName>7-Zip</creatingApplicationName> <creatingApplicationVersion>9.20</creatingApplicationVersion> <dateCreatedByApplication>2013-06-13T20:39:08</dateCreatedByApplication> </creatingApplication> </objectCharacteristics> </object> </xmlData> </mdWrap> </techMD> </amdSec> <fileSec> <fileGrp> <file ID="GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975" ADMID="amdSec_1" > <FLocat xlini:href="filepath/GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975.7z" LOCTYPE="OTHER" OTHERLOCTYPE="SYSTEM"/> </file> </fileGrp> </fileSec> <structMap TYPE="physical"> <div TYPE="Archival Information Package"> <fptr FILEID="GWAMM01-3b2be1ec-c70a-4270-9993-O1c85d22c975"/> </div> </structMap> </mets>
Pre-OCR: first half of image, second half of image
Previously-discussed options and analysis[edit]
Possible AIC/AIP designs |
---|
Option 1 (preferred)[edit]
Description: An AIC consisting of only a fileSec and structMap; AIPs consisting of data files and metadata for those data files; an AIP consisting of project/program-level (i.e. dataset) metadata and documentation.
Workflow:
Pros:
Cons:
Sample AIC METS file
Sample pointer.xml file
Option 1A (supplied by U of A)[edit]
Description:
Workflow
Pros
Cons
Option 2[edit]
Description: An AIC consisting of a METS structMap and project/program-level (i.e. dataset) metadata and documentation; content AIPs consisting of data files and metadata about the data files. AIPs have information in the METS files (in the structMap?) linking them to the parent AIC.
Workflow: To be determined - probably a dashboard tab with a gui to allow users to arrange existing AIPs into an AIC
Pros:
Cons:
Option 3[edit]
Description: An AIC with a unique identifier consisting of project/program-level (i.e. dataset) metadata and documentation only (no structMap); AIPs consisting of data files, metadata for those data files, and the same identifier as the AIC. The relationship between the AIC and AIPs in this scenario is inferred from the matching identifiers.
Workflow:
Pros:
Cons:
Option 4[edit]
Description: No AIC; project/program-level metadata and documentation duplicated in all AIPs; links between AIPs belonging to one dataset inferred from metadata only
Workflow: User creates any number of AIPs with complete copies of the project/program-leve (i.e. dataset) metadata and documentation in each AIP
Pros:
Cons:
|