Commit ac5756a1 by Tom Laudeman

Merge remote-tracking branch 'origin/master' into tom

parents b05d6875 728ec78d
SNAC Cooperative Meeting
ArchivesSpace Integration Discussion Notes
2015-12-02
Discussion leaders: Brad Westbrook and Mike Rush
What can it do for you? What functionality would you like to see?
- “Start reconciliation” button
- Compare ASpace w/ SNAC, create linkages
- Scope to resource or larger set
- Add prompt to create SNAC entry
- Making sure matching happens on the right data
- Accommodating legacy data
- Creation of content
- Identities not in SNAC
- Upload/add to SNAC
- Identities in SNAC
- Download form SNAC
- Local extension/customization
- Controls for process of amending SNAC
- Remember ASpace may be a local source of authority
- Record refresh function
- Local version not intended for SNAC inclusion
- Refresh different sections of EAC record on different schedules or
w/ different permissions
- Working off of central source or off of local cache? Fundamental
issue to resolve
- Spawn EAC bioghist into exported EAD (as an option)
- SNAC discovery interface
- Search additional sources beyond SNAC (part of the SNAC research
interface)
- Feed repository holding info back into SNAC
- Discovery of unknown identities
- Use case: download an entity and all related entities at the start
of a processing project
- Notifications of refresh changes
- Maintain timestamps for record downloads and refreshes
BENEFITS
- Coupling increases sustainability of both ASpace and SNAC
- Efficiences
- Packages workflows
- Shares the work
- Makes relationships easier to manage and share
- Spark uptake of SNAC
- Bigger entity set
- Bigger relation set
- More use of collections
- One less interface for staff users
Scope of Grant
- Central vs. Local copy use cases
- EAD3 export (to include relations)
- Contribution function
- EAC-CPF data model compliance
......@@ -9,6 +9,7 @@ This repository contains all the documentation for the SNAC Web Application and
* [Historical Documentation](Historical Documentation) on previous iterations of SNAC
* Technical [Discussions](Discussion) related to the SNAC project
* [Notes](Notes) from the technical team.
* Database schema diagrams auto-generated by SchemaSpy http://shannonvm.village.virginia.edu/~twl8n/schema_spy_output/
The best place to start is the big, overall [plan](plan.md) document, which describes the process forward with defining requirements and specifications.
......@@ -25,6 +26,7 @@ limited set of conventions to denote headers, lists, URLs and so on. When upload
markdown files are rendered into nicely styled HTML. Tools are available to convert markdown into .doc, .pdf,
LaTex and other formats. For more information on Markdown, see [this guide](Help/Markdown.md).
#### Help Links
* [Git and Gitlab](Help/Git-and-Gitlab.md)
......
# EAC-CPF XML Output Requirements
When generating EAC-CPF out of the database, the system should be able to provide the following pieces of information and follow these guidelines.
## Control/Source Data
Daniel has given the following requirement for sources: "What scholars and archivists want is to be able to say who provided the descriptive data, when, and based on what sources. A description is a constellation of assertions made by one or more agents/editors based on one or more sources. Thus Source Statement should be repeatable, as any given assertion can be revised over time, or a new editor comes along and simply provides corroborating data from a new source without revising the description otherwise."
A source block should be creatable for the tags for descriptive data (first-order data, FOD) in a constellation. There may be multiple blocks for each piece of data, thus they are repeatable blocks. Each block must contain:
* Scholar or archivist responsible for the descriptive assertion (FOD)
* Latest transaction date for the source block (the date the assertion was made or updated)
* Transaction type (was this a new descriptive assertion (FOD) or a revision)
* Source citation (the URI, citation, or source for this assertion (FOD))
* Source data (the text of what the scholar or archivist got out of the source)
* Descriptive rules (any rules that the scholar or activist used to formulate the assertion (FOD) from the source)
* Language and script associated with the assertion (used by the scholar or archivist, or source)
* Note (a human-readable note from the scholar or activist about the assertion (FOD))
\ No newline at end of file
The following tags and attribute structure is currently being parsed by SNAC's EAC-CPF parser:
<ul>
<li><code>eac-cpf</code>
<ul>
<li><code>control</code>
<ul>
<li><code>recordId</code></li>
<li><code>otherRecordId</code>
<ul>
<li><code>@localType</code></li>
</ul></li>
<li><code>maintenanceStatus</code></li>
<li><code>maintenanceAgency</code>
<ul>
<li><code>agencyName</code></li>
</ul></li>
<li><code>languageDeclaration</code>
<ul>
<li><code>language</code>
<ul>
<li><code>@languageCode</code></li>
<li><code>@scriptCode</code></li>
</ul></li>
</ul></li>
<li><code>maintenanceHistory</code>
<ul>
<li><code>maintenanceEvent</code>
<ul>
<li><code>eventType</code></li>
<li><code>eventDateTime</code>
<ul>
<li><code>@standardDateTime</code></li>
</ul></li>
<li><code>agentType</code></li>
<li><code>agent</code></li>
<li><code>eventDescription</code></li>
</ul></li>
</ul></li>
<li><code>conventionDeclaration</code></li>
<li><code>sources</code>
<ul>
<li><code>source</code>
<ul>
<li><code>@type</code></li>
<li><code>@href</code></li>
</ul></li>
</ul></li>
</ul></li>
<li><code>cpfDescription</code>
<ul>
<li><code>identity</code>
<ul>
<li><code>entityType</code></li>
<li><code>nameEntry</code>
<ul>
<li><code>@preferenceScore</code></li>
<li><code>@lang</code></li>
<li><code>@scriptCode</code></li>
<li><code>part</code></li>
<li><code>alternativeForm</code></li>
<li><code>authorizedForm</code></li>
<li><code>useDates</code>
<ul>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>date</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
<li><code>description</code>
<ul>
<li><code>existDates</code>
<ul>
<li><code>dateSet</code>
<ul>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>date</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>date</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>descriptiveNote</code></li>
</ul></li>
<li><code>place</code>
<ul>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>date</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>descriptiveNote</code></li>
<li><code>placeRole</code></li>
<li><code>placeEntry</code>
<ul>
<li><code>@latitude</code></li>
<li><code>@longitude</code></li>
<li><code>@localType</code></li>
<li><code>@administrationCode</code></li>
<li><code>@countryCode</code></li>
<li><code>@vocabularySource</code></li>
<li><code>@certaintyScore</code></li>
<li><code>placeEntry</code></li>
<li><code>placeEntryBestMaybeSame</code>
<ul>
<li><code>@latitude</code></li>
<li><code>@longitude</code></li>
<li><code>@localType</code></li>
<li><code>@administrationCode</code></li>
<li><code>@countryCode</code></li>
<li><code>@vocabularySource</code></li>
<li><code>@certaintyScore</code></li>
</ul></li>
<li><code>placeEntryLikelySame</code>
<ul>
<li><code>@latitude</code></li>
<li><code>@longitude</code></li>
<li><code>@localType</code></li>
<li><code>@administrationCode</code></li>
<li><code>@countryCode</code></li>
<li><code>@vocabularySource</code></li>
<li><code>@certaintyScore</code></li>
</ul></li>
<li><code>placeEntryMaybeSame</code>
<ul>
<li><code>@latitude</code></li>
<li><code>@longitude</code></li>
<li><code>@localType</code></li>
<li><code>@administrationCode</code></li>
<li><code>@countryCode</code></li>
<li><code>@vocabularySource</code></li>
<li><code>@certaintyScore</code></li>
</ul></li>
</ul></li>
</ul></li>
<li><code>localDescription</code>
<ul>
<li><code>@localType (AssociatedSubject, nationalityOfEntity, gender)</code></li>
<li><code>term</code></li>
</ul></li>
<li><code>languageUsed</code>
<ul>
<li><code>language</code>
<ul>
<li><code>@languageCode</code></li>
<li><code>@scriptCode</code></li>
</ul></li>
</ul></li>
<li><code>occupation</code>
<ul>
<li><code>term</code>
<ul>
<li><code>@vocabularySource</code></li>
</ul></li>
<li><code>descriptiveNote</code></li>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
</ul></li>
<li><code>function</code>
<ul>
<li><code>@localType</code></li>
<li><code>term</code>
<ul>
<li><code>@vocabularySource</code></li>
</ul></li>
<li><code>descriptiveNote</code></li>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
</ul></li>
<li><code>biogHist</code></li>
<li><code>generalContext</code></li>
<li><code>legalStatus</code>
<ul>
<li><code>term</code>
<ul>
<li><code>@vocabularySource</code></li>
</ul></li>
</ul></li>
<li><code>mandate</code></li>
<li><code>structureOrGenealogy</code></li>
</ul></li>
<li><code>relations</code>
<ul>
<li><code>cpfRelation</code>
<ul>
<li><code>@arcrole</code></li>
<li><code>@href</code></li>
<li><code>@role</code></li>
<li><code>@type</code></li>
<li><code>@cpfRelationType</code></li>
<li><code>relationEntry</code></li>
<li><code>descriptiveNote</code></li>
<li><code>dateRange</code>
<ul>
<li><code>fromDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
<li><code>toDate</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>date</code>
<ul>
<li><code>@standardDate</code></li>
<li><code>@localType</code></li>
<li><code>@notBefore</code></li>
<li><code>@notAfter</code></li>
</ul></li>
</ul></li>
<li><code>resourceRelation</code>
<ul>
<li><code>@role</code></li>
<li><code>@href</code></li>
<li><code>@type</code></li>
<li><code>@arcrole</code></li>
<li><code>relationEntry</code>
<ul>
<li><code>@localType</code></li>
</ul></li>
<li><code>objectXMLWrap</code></li>
<li><code>descriptiveNote</code></li>
</ul></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
# Codebase Organization
We define the following PHP namespace organization, with mirroring directory structure.
```
\snac
\client
\webui
\workflow
\rest
\testui
\server
\workflow
\identityReconciliation
\dateParser
\nameEntryParser
\dataValidation
\reporting % Wrapper
\authentication % Wrapper for OAuth
\authorization
\database % Database interaction (mainly wrappers)
% possible wrappers for Neo4J and Elastic Search
\exceptions % SNAC exceptions to be thrown on error
\interfaces % interfaces used throughout the codebase
```
A key note here is that the client applications (web ui and rest api) will then need to make internal server API calls over the local server API to handle any back-end requests. This addresses a separation of concerns, keeps the server more secure, and allows for a higher level of scalability.
All endpoints (server, webui, and rest) will share the same codebase, but with an `index.php` that includes the codebase and instantiates and executes the appropriate handler class. Then, we may have:
```
/var/www/snac-www instantiates \snac\client\webui\WebUI
/var/www/snac-api instantiates \snac\client\rest\RestAPI
/var/www/snac-internal instantiates \snac\server\Server
```
### Repo Organization
```
/
/src % containing all snac sourcecode
/snac % ...
/virtualhosts
/www % landing for /var/www/snac-www
/rest % landing for /var/www/snac-api
/internal % landing for /var/www/snac-internal
/test % containing all unit tests (mirrors /src)
/snac % ...
LICENSE % code license
README.md % readme file for the repo
```
......@@ -18,20 +18,26 @@ Source code must match the following style guidelines:
* Class names start with upper-case letters
* Variable and field names start with lower-clase letters
* No underscores allowed in variable names
* Filenames must match the name of the class defined within (exactly)
* Directory structure must mirror the namespace structure (PHP)
## Test-Driven Development
Each class that is written should have matching and appropriate unit tests written. For PHP code, those tests will be executed using the [PHPUnit](https://phpunit.de/index.html) unit testing framework.
## Internal Documentation of Code
All code will be internally-documented using [Javadoc](http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html) style documentation, which has been ported to PHP as [phpdoc](http://www.phpdoc.org/docs/latest/guides/docblocks.html) and XSLT as [XSLTdoc](http://www.pnp-software.com/XSLTdoc/). Tools to generate documentation from the code is also available for [Java](http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html), [PHP](http://www.phpdoc.org/), and [XSLT](http://www.pnp-software.com/XSLTdoc/).
* All files, regardless of language, must have javadoc-style documentation with author attribution, definition of the file, and short-text of the code license, as defined below (in PHP):
```php
<?php
/**
* File Description Headline
*
* Paragraphs describing the file
*
*
* License:
* ....
*
......@@ -57,7 +63,7 @@ All code will be internally-documented using [Javadoc](http://www.oracle.com/tec
*/
class ReconciliationEngine {
/**
* Main reconciliation function
*
......@@ -65,8 +71,8 @@ All code will be internally-documented using [Javadoc](http://www.oracle.com/tec
* the engine. Other top identities and their corresponding score vectors
* may be obtained by other functions within this class.
*
* @param identity $identity The identity to be searched. This identity
* must be in the proper form
* @param identity $identity The identity to be searched. This identity
* must be in the proper form
* @return identity The top identity by the reconciliation
* engine
*/
......@@ -83,7 +89,7 @@ Each code repository must contain the full BSD 3-Clause license below. It must
```
Copyright (c) 2015, the Rector and Visitors of the University of Virginia, and
the Regents of the University of California
the Regents of the University of California
All rights reserved.
Redistribution and use in source and binary forms, with or without
......@@ -111,5 +117,3 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
```
# SNAC Control Metadata
Each piece of first-order data in the database may have metadata associated with it. The information the database will keep track of is:
* _source citation_ : The citation associated with this particular first-order data.
* _sub citation_ : The part of the citation associated with this first-order data (i.e. "page 5").
* _source data_ : The text found in the citation related to this first-order data. This is an "as seen" field.
* _descriptive rules_ : The rules associated with creating this first-order data from the source citation.
* _language_ : The language in which the source data was found or user was working.
* _script_ : The script in which the source data was found or user was working.
* _note_ : The note from the user associated with this citation and first-order data.
This specification leads to a SQL database with the following structure:
```
id int primary key default nextval('id_seq'), -- id for Metadata
fk_id int , -- FK to data described
fk_table text , -- table name for FK
version int , -- version from version_history
citation int , -- FK to source table
sub_citation text , -- subcitation information
source_data text , -- source data
descriptive_rules int , -- FK to vocabulary
language int , -- FK to vocabulary
script int , -- FK to vocabulary
note text -- human-readable note
```
This data will be used to build EAC-CPF source control blocks, as defined in [the EAC-CPF Output requirements](/Requirements/EAC-CPF Output.md). The user who made the assertion and created the first-order data and the associated timestamp will be pulled from the `version_history` table through the `version` foreign-key.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -8,43 +8,43 @@
</defs>
<defs>
<font id="EmbeddedFont_1" horiz-adv-x="2048">
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1855" descent="428"/>
<font-face font-family="Liberation Sans embedded" units-per-em="2048" font-weight="normal" font-style="normal" ascent="1863" descent="423"/>
<missing-glyph horiz-adv-x="2048" d="M 0,0 L 2047,0 2047,2047 0,2047 0,0 Z"/>
<glyph unicode="y" horiz-adv-x="1028" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="w" horiz-adv-x="1514" d="M 1174,0 L 965,0 776,765 740,934 C 734,904 725,861 712,805 699,748 631,480 508,0 L 300,0 -3,1082 175,1082 358,347 C 363,331 377,265 401,149 L 418,223 644,1082 837,1082 1026,339 1072,149 1103,288 1308,1082 1484,1082 Z"/>
<glyph unicode="v" horiz-adv-x="1028" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 446,351 469,272 506,141 L 541,258 580,376 826,1082 1017,1082 Z"/>
<glyph unicode="u" horiz-adv-x="914" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-5 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 Z"/>
<glyph unicode="t" horiz-adv-x="543" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 Z"/>
<glyph unicode="s" horiz-adv-x="942" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="543" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 Z"/>
<glyph unicode="p" horiz-adv-x="943" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="971" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="914" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 Z"/>
<glyph unicode="m" horiz-adv-x="1485" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 Z"/>
<glyph unicode="l" horiz-adv-x="229" d="M 138,0 L 138,1484 318,1484 318,0 Z"/>
<glyph unicode="k" horiz-adv-x="914" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 Z"/>
<glyph unicode="i" horiz-adv-x="229" d="M 137,1312 L 137,1484 317,1484 317,1312 Z M 137,0 L 137,1082 317,1082 317,0 Z"/>
<glyph unicode="h" horiz-adv-x="914" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 Z"/>
<glyph unicode="g" horiz-adv-x="942" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-221 392,-248 433,-275 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="f" horiz-adv-x="571" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1303 203,1374 246,1417 289,1460 356,1482 445,1482 495,1482 537,1478 572,1470 L 572,1333 C 542,1338 515,1341 492,1341 446,1341 413,1329 392,1306 371,1283 361,1240 361,1179 L 361,1082 572,1082 572,951 Z"/>
<glyph unicode="e" horiz-adv-x="971" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 Z"/>
<glyph unicode="d" horiz-adv-x="942" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="885" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="943" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1057" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="V" horiz-adv-x="1371" d="M 782,0 L 584,0 9,1409 210,1409 600,417 684,168 768,417 1156,1409 1357,1409 Z"/>
<glyph unicode="S" horiz-adv-x="1199" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="O" horiz-adv-x="1428" d="M 1495,711 C 1495,564 1467,435 1411,324 1354,213 1273,128 1168,69 1063,10 938,-20 795,-20 650,-20 526,9 421,68 316,127 235,212 180,323 125,434 97,563 97,711 97,936 159,1113 282,1240 405,1367 577,1430 797,1430 940,1430 1065,1402 1170,1345 1275,1288 1356,1205 1412,1096 1467,987 1495,859 1495,711 Z M 1300,711 C 1300,886 1256,1024 1169,1124 1081,1224 957,1274 797,1274 636,1274 511,1225 423,1126 335,1027 291,889 291,711 291,534 336,394 425,291 514,187 637,135 795,135 958,135 1083,185 1170,286 1257,386 1300,528 1300,711 Z"/>
<glyph unicode="L" horiz-adv-x="942" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 Z"/>
<glyph unicode="I" horiz-adv-x="230" d="M 189,0 L 189,1409 380,1409 380,0 Z"/>
<glyph unicode="E" horiz-adv-x="1142" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 Z"/>
<glyph unicode="C" horiz-adv-x="1342" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode="?" horiz-adv-x="1028" d="M 1063,1032 C 1063,982 1056,937 1041,898 1026,859 1005,822 978,789 951,756 906,716 844,671 L 764,612 C 716,577 680,541 657,503 634,464 622,422 621,377 L 446,377 C 447,423 455,463 468,498 481,533 497,563 518,590 539,617 562,641 588,662 614,683 640,703 667,722 694,741 720,760 746,779 771,798 794,819 814,842 834,865 850,892 863,921 875,950 881,985 881,1024 881,1100 855,1160 804,1204 752,1248 679,1270 586,1270 493,1270 419,1247 364,1200 309,1153 277,1089 268,1008 L 84,1020 C 101,1152 153,1253 240,1324 327,1395 441,1430 584,1430 733,1430 850,1395 935,1325 1020,1254 1063,1157 1063,1032 Z M 438,0 L 438,201 633,201 633,0 Z"/>
<glyph unicode="/" horiz-adv-x="572" d="M 0,-20 L 411,1484 569,1484 162,-20 Z"/>
<glyph unicode="-" horiz-adv-x="514" d="M 91,464 L 91,624 591,624 591,464 Z"/>
<glyph unicode=")" horiz-adv-x="572" d="M 555,528 C 555,335 525,162 465,9 404,-144 311,-289 186,-424 L 12,-424 C 137,-284 229,-137 287,19 345,174 374,344 374,530 374,716 345,887 287,1042 228,1197 137,1345 12,1484 L 186,1484 C 312,1348 405,1203 465,1050 525,896 555,723 555,532 Z"/>
<glyph unicode="(" horiz-adv-x="572" d="M 127,532 C 127,725 157,898 218,1051 278,1204 371,1349 496,1484 L 670,1484 C 545,1345 454,1198 396,1042 337,886 308,715 308,530 308,345 337,175 395,20 452,-135 544,-283 670,-424 L 496,-424 C 370,-288 277,-143 217,11 157,164 127,337 127,528 Z"/>
<glyph unicode=" " horiz-adv-x="571"/>
<glyph unicode="y" horiz-adv-x="1017" d="M 191,-425 C 142,-425 100,-421 67,-414 L 67,-279 C 92,-283 120,-285 151,-285 263,-285 352,-203 417,-38 L 434,5 5,1082 197,1082 425,484 C 428,475 432,464 437,451 442,438 457,394 482,320 507,246 521,205 523,196 L 593,393 830,1082 1020,1082 604,0 C 559,-115 518,-201 479,-258 440,-314 398,-356 351,-384 304,-411 250,-425 191,-425 Z"/>
<glyph unicode="w" horiz-adv-x="1497" d="M 1174,0 L 965,0 776,765 740,934 C 734,904 725,861 712,805 699,748 631,480 508,0 L 300,0 -3,1082 175,1082 358,347 C 363,331 377,265 401,149 L 418,223 644,1082 837,1082 1026,339 1072,149 1103,288 1308,1082 1484,1082 Z"/>
<glyph unicode="v" horiz-adv-x="1017" d="M 613,0 L 400,0 7,1082 199,1082 437,378 C 446,351 469,272 506,141 L 541,258 580,376 826,1082 1017,1082 Z"/>
<glyph unicode="u" horiz-adv-x="876" d="M 314,1082 L 314,396 C 314,325 321,269 335,230 349,191 371,162 402,145 433,128 478,119 537,119 624,119 692,149 742,208 792,267 817,350 817,455 L 817,1082 997,1082 997,231 C 997,105 999,28 1003,0 L 833,0 C 832,3 832,12 831,27 830,42 830,59 829,78 828,97 826,132 825,185 L 822,185 C 781,110 733,58 679,27 624,-5 557,-20 476,-20 357,-20 271,10 216,69 161,128 133,225 133,361 L 133,1082 Z"/>
<glyph unicode="t" horiz-adv-x="537" d="M 554,8 C 495,-8 434,-16 372,-16 228,-16 156,66 156,229 L 156,951 31,951 31,1082 163,1082 216,1324 336,1324 336,1082 536,1082 536,951 336,951 336,268 C 336,216 345,180 362,159 379,138 408,127 450,127 474,127 509,132 554,141 Z"/>
<glyph unicode="s" horiz-adv-x="905" d="M 950,299 C 950,197 912,118 835,63 758,8 650,-20 511,-20 376,-20 273,2 200,47 127,91 79,160 57,254 L 216,285 C 231,227 263,185 311,158 359,131 426,117 511,117 602,117 669,131 712,159 754,187 775,229 775,285 775,328 760,362 731,389 702,416 654,438 589,455 L 460,489 C 357,516 283,542 240,568 196,593 162,624 137,661 112,698 100,743 100,796 100,895 135,970 206,1022 276,1073 378,1099 513,1099 632,1099 727,1078 798,1036 868,994 912,927 931,834 L 769,814 C 759,862 732,899 689,925 645,950 586,963 513,963 432,963 372,951 333,926 294,901 275,864 275,814 275,783 283,758 299,738 315,718 339,701 370,687 401,673 467,654 568,629 663,605 732,583 774,563 816,542 849,520 874,495 898,470 917,442 930,410 943,377 950,340 950,299 Z"/>
<glyph unicode="r" horiz-adv-x="509" d="M 142,0 L 142,830 C 142,906 140,990 136,1082 L 306,1082 C 311,959 314,886 314,861 L 318,861 C 347,954 380,1017 417,1051 454,1085 507,1102 575,1102 599,1102 623,1099 648,1092 L 648,927 C 624,934 592,937 552,937 477,937 420,905 381,841 342,776 322,684 322,564 L 322,0 Z"/>
<glyph unicode="p" horiz-adv-x="904" d="M 1053,546 C 1053,169 920,-20 655,-20 488,-20 376,43 319,168 L 314,168 C 317,163 318,106 318,-2 L 318,-425 138,-425 138,861 C 138,972 136,1046 132,1082 L 306,1082 C 307,1079 308,1070 309,1054 310,1037 312,1012 314,978 315,944 316,921 316,908 L 320,908 C 352,975 394,1024 447,1055 500,1086 569,1101 655,1101 788,1101 888,1056 954,967 1020,878 1053,737 1053,546 Z M 864,542 C 864,693 844,800 803,865 762,930 698,962 609,962 538,962 482,947 442,917 401,887 371,840 350,777 329,713 318,630 318,528 318,386 341,281 386,214 431,147 505,113 607,113 696,113 762,146 803,212 844,277 864,387 864,542 Z"/>
<glyph unicode="o" horiz-adv-x="960" d="M 1053,542 C 1053,353 1011,212 928,119 845,26 724,-20 565,-20 407,-20 288,28 207,125 126,221 86,360 86,542 86,915 248,1102 571,1102 736,1102 858,1057 936,966 1014,875 1053,733 1053,542 Z M 864,542 C 864,691 842,800 798,868 753,935 679,969 574,969 469,969 393,935 346,866 299,797 275,689 275,542 275,399 298,292 345,221 391,149 464,113 563,113 671,113 748,148 795,217 841,286 864,395 864,542 Z"/>
<glyph unicode="n" horiz-adv-x="876" d="M 825,0 L 825,686 C 825,757 818,813 804,852 790,891 768,920 737,937 706,954 661,963 602,963 515,963 447,933 397,874 347,815 322,732 322,627 L 322,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 358,972 406,1025 461,1056 515,1087 582,1102 663,1102 782,1102 869,1073 924,1014 979,955 1006,857 1006,721 L 1006,0 Z"/>
<glyph unicode="m" horiz-adv-x="1440" d="M 768,0 L 768,686 C 768,791 754,863 725,903 696,943 645,963 570,963 493,963 433,934 388,875 343,816 321,734 321,627 L 321,0 142,0 142,851 C 142,977 140,1054 136,1082 L 306,1082 C 307,1079 307,1070 308,1055 309,1040 310,1024 311,1005 312,986 313,950 314,897 L 317,897 C 356,974 400,1027 450,1057 500,1087 561,1102 633,1102 715,1102 780,1086 828,1053 875,1020 908,968 927,897 L 930,897 C 967,970 1013,1022 1066,1054 1119,1086 1183,1102 1258,1102 1367,1102 1447,1072 1497,1013 1546,954 1571,856 1571,721 L 1571,0 1393,0 1393,686 C 1393,791 1379,863 1350,903 1321,943 1270,963 1195,963 1116,963 1055,934 1012,876 968,817 946,734 946,627 L 946,0 Z"/>
<glyph unicode="l" horiz-adv-x="170" d="M 138,0 L 138,1484 318,1484 318,0 Z"/>
<glyph unicode="k" horiz-adv-x="876" d="M 816,0 L 450,494 318,385 318,0 138,0 138,1484 318,1484 318,557 793,1082 1004,1082 565,617 1027,0 Z"/>
<glyph unicode="i" horiz-adv-x="170" d="M 137,1312 L 137,1484 317,1484 317,1312 Z M 137,0 L 137,1082 317,1082 317,0 Z"/>
<glyph unicode="h" horiz-adv-x="876" d="M 317,897 C 356,968 402,1020 457,1053 511,1086 580,1102 663,1102 780,1102 867,1073 923,1015 978,956 1006,858 1006,721 L 1006,0 825,0 825,686 C 825,762 818,819 804,856 790,893 767,920 735,937 703,954 659,963 602,963 517,963 450,934 399,875 348,816 322,737 322,638 L 322,0 142,0 142,1484 322,1484 322,1098 C 322,1057 321,1015 319,972 316,929 315,904 314,897 Z"/>
<glyph unicode="g" horiz-adv-x="932" d="M 548,-425 C 430,-425 336,-402 266,-356 196,-309 151,-243 131,-158 L 312,-132 C 324,-182 351,-221 392,-248 433,-275 486,-288 553,-288 732,-288 822,-183 822,27 L 822,201 820,201 C 786,132 739,80 680,45 621,10 551,-8 472,-8 339,-8 242,36 180,124 117,212 86,350 86,539 86,730 120,872 187,963 254,1054 355,1099 492,1099 569,1099 635,1082 692,1047 748,1012 791,962 822,897 L 824,897 C 824,917 825,952 828,1001 831,1050 833,1077 836,1082 L 1007,1082 C 1003,1046 1001,971 1001,858 L 1001,31 C 1001,-273 850,-425 548,-425 Z M 822,541 C 822,629 810,705 786,769 762,832 728,881 685,915 641,948 591,965 536,965 444,965 377,932 335,865 293,798 272,690 272,541 272,393 292,287 331,222 370,157 438,125 533,125 590,125 640,142 684,175 728,208 762,256 786,319 810,381 822,455 822,541 Z"/>
<glyph unicode="f" horiz-adv-x="537" d="M 361,951 L 361,0 181,0 181,951 29,951 29,1082 181,1082 181,1204 C 181,1303 203,1374 246,1417 289,1460 356,1482 445,1482 495,1482 537,1478 572,1470 L 572,1333 C 542,1338 515,1341 492,1341 446,1341 413,1329 392,1306 371,1283 361,1240 361,1179 L 361,1082 572,1082 572,951 Z"/>
<glyph unicode="e" horiz-adv-x="960" d="M 276,503 C 276,379 302,283 353,216 404,149 479,115 578,115 656,115 719,131 766,162 813,193 844,233 861,281 L 1019,236 C 954,65 807,-20 578,-20 418,-20 296,28 213,123 129,218 87,360 87,548 87,727 129,864 213,959 296,1054 416,1102 571,1102 889,1102 1048,910 1048,527 L 1048,503 Z M 862,641 C 852,755 823,838 775,891 727,943 658,969 568,969 481,969 412,940 361,882 310,823 282,743 278,641 Z"/>
<glyph unicode="d" horiz-adv-x="932" d="M 821,174 C 788,105 744,55 689,25 634,-5 565,-20 484,-20 347,-20 247,26 183,118 118,210 86,349 86,536 86,913 219,1102 484,1102 566,1102 634,1087 689,1057 744,1027 788,979 821,914 L 823,914 821,1035 821,1484 1001,1484 1001,223 C 1001,110 1003,36 1007,0 L 835,0 C 833,11 831,35 829,74 826,113 825,146 825,174 Z M 275,542 C 275,391 295,282 335,217 375,152 440,119 530,119 632,119 706,154 752,225 798,296 821,405 821,554 821,697 798,802 752,869 706,936 633,969 532,969 441,969 376,936 336,869 295,802 275,693 275,542 Z"/>
<glyph unicode="c" horiz-adv-x="876" d="M 275,546 C 275,402 298,295 343,226 388,157 457,122 548,122 612,122 666,139 709,174 752,209 778,262 788,334 L 970,322 C 956,218 912,135 837,73 762,11 668,-20 553,-20 402,-20 286,28 207,124 127,219 87,359 87,542 87,724 127,863 207,959 287,1054 402,1102 551,1102 662,1102 754,1073 827,1016 900,959 945,880 964,779 L 779,765 C 770,825 746,873 708,908 670,943 616,961 546,961 451,961 382,929 339,866 296,803 275,696 275,546 Z"/>
<glyph unicode="b" horiz-adv-x="904" d="M 1053,546 C 1053,169 920,-20 655,-20 573,-20 505,-5 451,25 396,54 352,102 318,168 L 316,168 C 316,147 315,116 312,74 309,31 307,7 306,0 L 132,0 C 136,36 138,110 138,223 L 138,1484 318,1484 318,1061 C 318,1018 317,967 314,908 L 318,908 C 351,977 396,1027 451,1057 506,1087 574,1102 655,1102 792,1102 892,1056 957,964 1021,872 1053,733 1053,546 Z M 864,540 C 864,691 844,800 804,865 764,930 699,963 609,963 508,963 434,928 388,859 341,790 318,680 318,529 318,387 341,282 386,215 431,147 505,113 607,113 698,113 763,147 804,214 844,281 864,389 864,540 Z"/>
<glyph unicode="a" horiz-adv-x="1045" d="M 414,-20 C 305,-20 224,9 169,66 114,123 87,202 87,302 87,414 124,500 198,560 271,620 390,652 554,656 L 797,660 797,719 C 797,807 778,870 741,908 704,946 645,965 565,965 484,965 426,951 389,924 352,897 330,853 323,793 L 135,810 C 166,1005 310,1102 569,1102 705,1102 807,1071 876,1009 945,946 979,856 979,738 L 979,272 C 979,219 986,179 1000,152 1014,125 1041,111 1080,111 1097,111 1117,113 1139,118 L 1139,6 C 1094,-5 1047,-10 1000,-10 933,-10 885,8 855,43 824,78 807,132 803,207 L 797,207 C 751,124 698,66 637,32 576,-3 501,-20 414,-20 Z M 455,115 C 521,115 580,130 631,160 682,190 723,231 753,284 782,336 797,390 797,445 L 797,534 600,530 C 515,529 451,520 408,504 364,488 330,463 307,430 284,397 272,353 272,299 272,240 288,195 320,163 351,131 396,115 455,115 Z"/>
<glyph unicode="V" horiz-adv-x="1356" d="M 782,0 L 584,0 9,1409 210,1409 600,417 684,168 768,417 1156,1409 1357,1409 Z"/>
<glyph unicode="S" horiz-adv-x="1186" d="M 1272,389 C 1272,259 1221,158 1120,87 1018,16 875,-20 690,-20 347,-20 148,99 93,338 L 278,375 C 299,290 345,228 414,189 483,149 578,129 697,129 820,129 916,150 983,193 1050,235 1083,297 1083,379 1083,425 1073,462 1052,491 1031,520 1001,543 963,562 925,581 880,596 827,609 774,622 716,635 652,650 541,675 456,699 399,724 341,749 295,776 262,807 229,837 203,872 186,913 168,954 159,1000 159,1053 159,1174 205,1267 298,1332 390,1397 522,1430 694,1430 854,1430 976,1406 1061,1357 1146,1308 1205,1224 1239,1106 L 1051,1073 C 1030,1148 991,1202 933,1236 875,1269 795,1286 692,1286 579,1286 493,1267 434,1230 375,1193 345,1137 345,1063 345,1020 357,984 380,956 403,927 436,903 479,884 522,864 609,840 738,811 781,801 825,791 868,781 911,770 952,758 991,744 1030,729 1067,712 1102,693 1136,674 1166,650 1191,622 1216,594 1236,561 1251,523 1265,485 1272,440 1272,389 Z"/>
<glyph unicode="R" horiz-adv-x="1215" d="M 1164,0 L 798,585 359,585 359,0 168,0 168,1409 831,1409 C 990,1409 1112,1374 1199,1303 1285,1232 1328,1133 1328,1006 1328,901 1298,813 1237,742 1176,671 1091,626 984,607 L 1384,0 Z M 1136,1004 C 1136,1086 1108,1149 1053,1192 997,1235 917,1256 812,1256 L 359,1256 359,736 820,736 C 921,736 999,760 1054,807 1109,854 1136,919 1136,1004 Z"/>
<glyph unicode="L" horiz-adv-x="904" d="M 168,0 L 168,1409 359,1409 359,156 1071,156 1071,0 Z"/>
<glyph unicode="I" horiz-adv-x="170" d="M 189,0 L 189,1409 380,1409 380,0 Z"/>
<glyph unicode="E" horiz-adv-x="1102" d="M 168,0 L 168,1409 1237,1409 1237,1253 359,1253 359,801 1177,801 1177,647 359,647 359,156 1278,156 1278,0 Z"/>
<glyph unicode="C" horiz-adv-x="1299" d="M 792,1274 C 636,1274 515,1224 428,1124 341,1023 298,886 298,711 298,538 343,400 434,295 524,190 646,137 800,137 997,137 1146,235 1245,430 L 1401,352 C 1343,231 1262,138 1157,75 1052,12 930,-20 791,-20 649,-20 526,10 423,69 319,128 240,212 186,322 131,431 104,561 104,711 104,936 165,1112 286,1239 407,1366 575,1430 790,1430 940,1430 1065,1401 1166,1342 1267,1283 1341,1196 1388,1081 L 1207,1021 C 1174,1103 1122,1166 1050,1209 977,1252 891,1274 792,1274 Z"/>
<glyph unicode="?" horiz-adv-x="988" d="M 1063,1032 C 1063,982 1056,937 1041,898 1026,859 1005,822 978,789 951,756 906,716 844,671 L 764,612 C 716,577 680,541 657,503 634,464 622,422 621,377 L 446,377 C 447,423 455,463 468,498 481,533 497,563 518,590 539,617 562,641 588,662 614,683 640,703 667,722 694,741 720,760 746,779 771,798 794,819 814,842 834,865 850,892 863,921 875,950 881,985 881,1024 881,1100 855,1160 804,1204 752,1248 679,1270 586,1270 493,1270 419,1247 364,1200 309,1153 277,1089 268,1008 L 84,1020 C 101,1152 153,1253 240,1324 327,1395 441,1430 584,1430 733,1430 850,1395 935,1325 1020,1254 1063,1157 1063,1032 Z M 438,0 L 438,201 633,201 633,0 Z"/>
<glyph unicode="/" horiz-adv-x="565" d="M 0,-20 L 411,1484 569,1484 162,-20 Z"/>
<glyph unicode="-" horiz-adv-x="509" d="M 91,464 L 91,624 591,624 591,464 Z"/>
<glyph unicode=")" horiz-adv-x="565" d="M 555,528 C 555,335 525,162 465,9 404,-144 311,-289 186,-424 L 12,-424 C 137,-284 229,-137 287,19 345,174 374,344 374,530 374,716 345,887 287,1042 228,1197 137,1345 12,1484 L 186,1484 C 312,1348 405,1203 465,1050 525,896 555,723 555,532 Z"/>
<glyph unicode="(" horiz-adv-x="565" d="M 127,532 C 127,725 157,898 218,1051 278,1204 371,1349 496,1484 L 670,1484 C 545,1345 454,1198 396,1042 337,886 308,715 308,530 308,345 337,175 395,20 452,-135 544,-283 670,-424 L 496,-424 C 370,-288 277,-143 217,11 157,164 127,337 127,528 Z"/>
<glyph unicode=" " horiz-adv-x="564"/>
</font>
</defs>
<defs class="TextShapeIndex">
......@@ -243,7 +243,7 @@
<g class="com.sun.star.drawing.CustomShape">
<g id="id23">
<path fill="none" stroke="rgb(0,0,0)" stroke-width="102" stroke-linejoin="round" d="M 9024,19287 L 1300,19287 1300,10270 16748,10270 16748,19287 9024,19287 Z"/>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="7576" y="11025"><tspan fill="rgb(0,0,0)" stroke="none">Owned-by</tspan></tspan></tspan></text>
<text class="TextShape"><tspan class="TextParagraph" font-family="Liberation Sans, sans-serif" font-size="635px" font-weight="400"><tspan class="TextPosition" x="6799" y="11025"><tspan fill="rgb(0,0,0)" stroke="none">Responsible-for</tspan></tspan></tspan></text>
</g>
</g>
<g class="com.sun.star.drawing.CustomShape">
......
# JSON Constellation Structure
This document defines the entire structure of the API constellation object. For reference, we provide the following examples:
* [Partial constellation structure](/Specifications/Server API/Examples/Partial Constellation.json)
* [Full constellation structure](/Specifications/Server API/Examples/Full Constellation.json)
## Constellation API Definition
The constellation structure has the following components:
* `dataType` : The type of this object. It should always be "Constellation" for constellations.
* *required for ALL commands*
* `id` : SNAC identity number for this constellation. Returned after a successful `insert` command.
* *required for the update and edit commands*
* `version` : SNAC version number for the state of this constellation.
* *required for the update command*
* `ark` : Ark identifier for this constellation.
* *required for the update command*
* `entityType` : Type of entity described, must be "person", "corporateBody", or "family".
* *required for the update command*
* `nationality` : Nationality of the entity.
* *required for the update command*
* `gender` : Gender of the entity, if applicable.
* *required for the update command*
* `language` : Human readable language name.
* *required for the update command*
* `languageCode` : 3-digit language code.
* *required for the update command*
* `script` : Human readable script name.
* *required for the update command*
* `scriptCode` : 4-digit script code.
* *required for the update command*
* `biogHists` : *note, should be singular and store only one (nrd)*
* *required for the update command*
* `existDates` : Exist dates for this entity. See the SNAC Date Structure section for date format.
* *required for the update command*
* `generalContext` : XML-formatted text from the general context tags.
* *required for the update command*
* `structureOrGenealogy` : XML-formatted text from the structure or genealogy tags.
* *required for the update command*
* `conventionDeclaration` : XML-formatted text from the convention declaration tag.
* *required for the update command*
* `mandate` : XML-formatted text from the mandate tags.
* *required for the update command*
* `otherRecordIDs` : List of URIs that also describe this identity.
* `legalStatuses` : XML-formatted text from the legal status tags.
* `sources` : List of sources for this constellation.
* Each source must be an array (surrounded by `[]`) and have the following two keys:
* `type` : Type of the source.
* `href` : URI to the source.
* `nameEntries` : List of name entries of this entity.
* `occupations` : List of occupations for this entity.
* `functions` : List of functions for this entity.
* `subjects` : List of subjects for this entity.
* `places` : List of places.
* `relations` : List of constellation relations (within SNAC).
* `resourceRelations` : List of resource relations.
*Notes: do we need language, script, and constellationLanguage/Script(Code)? We can deduce the language and script from the codes (controlled vocab), but do we need to store the language this CPF was written in?*
# Subcomponent Structures
The following are optional objects that may be included in the constellation structure above. Each object itself, if included in one of the lists above, must be completely specified.
## Name Entries
Each name Entry must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "NameEntry" for name entries.
* *required for ALL commands using a name entry*
* `id` : SNAC identity number for this name entry.
* `version` : SNAC version number for the state of this name entry.
* `original` : The original name as it was typed.
* `preferenceScore` : SNAC preference score for this name entry (0-100).
* `contributors` : List of contributors.
* `language` : Controlled vocabulary term for the language of this name entry.
* `scriptCode` : Controlled vocabulary term for this name entry's script.
* `useDates` : Use dates of this name. See the SNAC Date Structure section for date format.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Occupations
Each occupation must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "Occupation" for occupations.
* `id` : SNAC identity number for this occupation.
* `version` : SNAC version number for the state of this occupation.
* `term` : Controlled vocabulary term for this occupation.
* `vocabularySource` : Source for the controlled vocabulary.
* `dates` : Dates this person held the occupation. See the SNAC Date Structure section for date format.
* `note` : Text note about this date.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Functions
Each function must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "SNACFunction" for functions.
* `id` : SNAC identity number for this function.
* `version` : SNAC version number for the state of this function.
* `term` : Controlled vocabulary term for this function.
* `vocabularySource` : Source for the controlled vocabulary.
* `type` : EAC's localType of this function.
* `dates` : Dates this entity held the occupation. See the SNAC Date Structure section for date format.
* `note` : Text note about this function.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Places
Each place must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "Place" for place objects.
* `id` : SNAC identity number for this place.
* `version` : SNAC version number for the state of this place.
* `dates` : Dates this entity was associated with this place. See the SNAC Date Structure section for date format.
* `type` : Controlled vocabulary term type of the place.
* `role` : Role of the place, from EAC-CPF's placeRole tag.
* `entries` : List of PlaceEntry objects for this place.
* `note` : Text descriptive note about this place.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Place Entries
Each place entry must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "PlaceEntry" for place entry objects.
* `id` : SNAC identity number for this place entry.
* `version` : SNAC version number for the state of this place entry.
* `latitude` : Latitude of this place entry.
* `longitude` : Longitude of this place entry.
* `administrationCode` : Controlled vocabulary term of the administration code for this place entry.
* `countryCode` : Controlled vocabulary term of the country code for this place entry.
* `vocabularySource` : URI to the vocabulary source.
* `certaintyScore` : Certainty score for this place entry. Usually used only when this place entry is a candidate for bestMatch or maybeSame for another place entry.
* `original` : The original string defining this place entry.
* `bestMatch` : A complete place entry object that is the best match for this place entry object.
* `maybeSame` : A list of place entry objects that are match candidates for this place entry object.
* `type` : Controlled vocabulary term for the type of this place entry.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Constellation Relations
Each constellation relation must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "ConstellationRelation" for constellation relations.
* `id` : SNAC identity number for this relation.
* `version` : SNAC version number for the state of this relation.
* `sourceConstellation` : SNAC identity number for the source ("from") constellation of this relation.
* `targetConstellation` : SNAC identity number for the target ("to") constellation of this relation.
* `sourceArkID` : Ark identifier for the source constellation.
* `targetArkID` : Ark identifier for the target constellation.
* `targetEntityType` : Controlled vocabulary entity type of the target constellation.
* `type` : Controlled vocabulary for the type of the constellation relation, such as "associatedWith."
* `altType` : *This should always be ignored. It is the xlink:type from the EAC-CPF cpfRelation tag.*
* `cpfRelationType` : The cpfRelation type, from the EAC-CPF cpfRelation tag's cpfRelationType attribute.
* `content` : Text or XML content of this relation. This should be what is listed in the EAC-CPF describing the relation.
* `dates` : Dates these entities were in this relationship. See the SNAC Date Structure section for date format.
* `note` : Text note about this relation.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Resource Relations
Each resource relation must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "ResourceRelation" for resource relations.
* `id` : SNAC identity number for this relation.
* `version` : SNAC version number for the state of this relation.
* `documentType` : Controlled vocabulary term for document type of this resource.
* `linkType` : *This should always be ignored. It is the xlink:type from the EAC-CPF resourceRelation tag.*
* `entryType` : Controlled vocabulary term for the type of the resource entry, such as "archival."
* `link` : URI link to the resource.
* `role` : Controlled vocabulary term for the role this entity played in the relation, such as "authorOf."
* `content` : Text or XML content of this relation. This should be what is listed in the EAC-CPF describing the relation.
* `source` : XML source note from this resource relation.
* `note` : Text descriptive note about this relation.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
## Date Structure
Each date or date range given must be an object (surrounded by `{}`) and have the following keys:
* `dataType` : The type of this object. It should always be "SNACDate" for resource relations.
* `id` : SNAC identity number for this relation.
* `version` : SNAC version number for the state of this relation.
* `isRange` : Boolean value, `true` or `false`, stating whether this date structure defines a single date or a date range.
* `fromDate` : Machine-actionable date in the form `YYYY-MM-DD`. This is either the first date in a date range or the sole date value.
* `fromDateOriginal` : Original string for the date. This is either for the first date in a date range or the sole date value.
* `fromType` : Controlled vocabulary term for the type of date, such as "Birth." This is either for the first date in a date range or the sole date type.
* `fromBC` : Boolean value, `true` or `false`, whether the date in `fromDate` should be taken as BC/BCE (true) or AD/CE (false).
* `fromRange` : An array of fuzzy date values for the date in `fromDate`. It requires two fields:
* `notBefore` : Machine-actionable date in the form `YYYY-MM-DD` for the beginning of the fuzzy range
* `notAfter` : Machine-actionable date in the form `YYYY-MM-DD` for the end of the fuzzy range
* `toDate` : Machine-actionable date in the form `YYYY-MM-DD`. This is the second date in a date range or ignored from the structure.
* `toDateOriginal` : Original string for the date. This is for the second date in a date range or ignored from the structure.
* `toType` : Controlled vocabulary term for the type of date, such as "Birth." This is for the second date in a date range or ignored from the structure.
* `toBC` : Boolean value, `true` or `false`, whether the date in `fromDate` should be taken as BC/BCE (true) or AD/CE (false).
* `toRange` : An array of fuzzy date values for the date in `toDate`, if it is given in the structure. It requires two fields:
* `notBefore` : Machine-actionable date in the form `YYYY-MM-DD` for the beginning of the fuzzy range
* `notAfter` : Machine-actionable date in the form `YYYY-MM-DD` for the end of the fuzzy range
* `note` : Text descriptive note for this date or date range.
* `operation` : The operation ("insert", "update", or "delete") to perform on this object when updating a constellation. The value for `id` above is required for "update" or "delete".
* *required for the update command*
{
"constellation" : {
"dataType": "Constellation",
"id": null,
"version": null,
"ark": "FRAN_NP_050744",
"entityType": "corporateBody",
"otherRecordIDs": [
{
"type": "entityId",
"href": "Un seul identifiant"
}
],
"maintenanceStatus": "new",
"maintenanceAgency": "Archives nationales de France",
"maintenanceEvents": [
{
"dataType": "MaintenanceEvent",
"id": null,
"version": null,
"eventType": "created",
"eventDateTime": "2014-03-20",
"standardDateTime": null,
"agentType": "human",
"agent": "Florence CLAVAUD",
"eventDescription": "F. Clavaud, 4 mars 2014 : cr\u00e9ation"
},
{
"dataType": "MaintenanceEvent",
"id": null,
"version": null,
"eventType": "revised",
"eventDateTime": "2015-10-05",
"standardDateTime": null,
"agentType": "machine",
"agent": "cpf_norm.pl",
"eventDescription": null
}
],
"sources": [
{
"type": null,
"href": null
}
],
"legalStatuses": [
{
"term": "\u00e9tablissement public \u00e0 caract\u00e8re scientifique, culturel et professionnel",
"vocabularySource": null
}
],
"conventionDeclaration": "\n \n ",
"constellationLanguage": "Fran\u00e7ais",
"constellationLanguageCode": "fre",
"constellationScript": "",
"constellationScriptCode": "Latn",
"language": null,
"languageCode": null,
"script": null,
"scriptCode": null,
"nameEntries": [
{
"dataType": "NameEntry",
"id": null,
"version": null,
"original": "Notice Test Collectivit\u00e9",
"preferenceScore": null,
"contributors": [
{
"type": "authorizedForm",
"contributor": "ANF"
}
],
"language": "fre",
"scriptCode": "Latn",
"useDates": null
},
{
"dataType": "NameEntry",
"id": null,
"version": null,
"original": "Test Collectivit\u00e9",
"preferenceScore": null,
"contributors": [],
"language": null,
"scriptCode": null,
"useDates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2012-01-01",
"fromDateOriginal": "2012",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": "2014-03-03",
"toDateOriginal": "03\/03\/2014",
"toType": null,
"toBC": false,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
}
},
{
"dataType": "NameEntry",
"id": null,
"version": null,
"original": "Collectivit\u00e9 test",
"preferenceScore": null,
"contributors": [],
"language": null,
"scriptCode": null,
"useDates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2003-01-01",
"fromDateOriginal": "2003",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": null,
"toDateOriginal": null,
"toType": null,
"toBC": null,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
}
}
],
"occupations": [
{
"dataType": "Occupation",
"id": null,
"version": null,
"term": "archiviste",
"vocabularySource": "d699msirr1g-3naumnfaswc",
"dates": null,
"note": null
}
],
"biogHists": [
"<biogHist>\n <p>Cet \n <span style=\"underline\">organisme fictif<\/span> est cr\u00e9\u00e9 pour faire des \n <span style=\"bold\">tests aux Archives nationales<\/span>. \n <\/p>\n <p>Insertion de \n <span style=\"italic\">caract\u00e8res sp\u00e9ciaux<\/span> : \u00ab blah \u00bb \n <\/p>\n <p>Pas possible de mettre un lien hypertexte ici.<\/p>\n <p>Caract\u00e8res en exposant ?<\/p>\n <p>Liste<\/p>\n <list>\n <item>item 1<\/item>\n <item>item 2<\/item>\n <\/list>\n <citation>Information extraite de la notice des Archives nationals de France (FRAN_NP_050744)<\/citation><\/biogHist>"
],
"existDates": [
{
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2003-01-01",
"fromDateOriginal": "2003",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": null,
"toDateOriginal": null,
"toType": null,
"toBC": null,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
}
],
"existDatesNote": "\n \n ",
"relations": [
{
"dataType": "ConstellationRelation",
"id": null,
"version": null,
"sourceConstellation": null,
"targetConstellation": null,
"sourceArkID": null,
"targetArkID": null,
"targetEntityType": "CorporateBody",
"type": "hasParent",
"altType": "simple",
"cpfRelationType": "hierarchical-parent",
"content": "Service interminist\u00e9riel des archives de France",
"dates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2010-01-01",
"fromDateOriginal": "2010",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": null,
"toDateOriginal": null,
"toType": null,
"toBC": null,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
},
"note": "<descriptiveNote>\n <p>test sur un lien hi\u00e9rarchique<\/p>\n <p><span localType=\"http:\/\/socialarchive.iath.virginia.edu\/control\/term#ExtractedRecordId\">FRAN_NP_005568<\/span><\/p><\/descriptiveNote>"
},
{
"dataType": "ConstellationRelation",
"id": null,
"version": null,
"sourceConstellation": null,
"targetConstellation": null,
"sourceArkID": null,
"targetArkID": null,
"targetEntityType": "Person",
"type": "associatedWith",
"altType": "simple",
"cpfRelationType": "associative",
"content": "Rocard, Michel",
"dates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2003-01-01",
"fromDateOriginal": "2003",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": null,
"toDateOriginal": null,
"toType": null,
"toBC": null,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
},
"note": "<descriptiveNote><p><span localType=\"http:\/\/socialarchive.iath.virginia.edu\/control\/term#ExtractedRecordId\">FRAN_NP_010089<\/span><\/p><\/descriptiveNote>"
},
{
"dataType": "ConstellationRelation",
"id": null,
"version": null,
"sourceConstellation": null,
"targetConstellation": null,
"sourceArkID": null,
"targetArkID": "https:\/\/www.siv.archives-nationales.culture.gouv.fr\/siv\/rechercheconsultation\/consultation\/producteur\/consultationProducteur.action?notProdId=FRAN_NP_050744",
"targetEntityType": "CorporateBody",
"type": "sameAs",
"altType": "simple",
"cpfRelationType": null,
"content": "Notice Test Collectivit\u00e9",
"dates": null,
"note": null
},
{
"dataType": "ConstellationRelation",
"id": null,
"version": null,
"sourceConstellation": null,
"targetConstellation": null,
"sourceArkID": null,
"targetArkID": "http:\/\/isni.org\/isni\/Unseulidentifiant",
"targetEntityType": "CorporateBody",
"type": "sameAs",
"altType": "simple",
"cpfRelationType": null,
"content": "Notice Test Collectivit\u00e9",
"dates": null,
"note": null
}
],
"resourceRelations": [
{
"dataType": "ResourceRelation",
"id": null,
"version": null,
"documentType": "ArchivalResource",
"linkType": "simple",
"entryType": "archival",
"link": "https:\/\/www.siv.archives-nationales.culture.gouv.fr\/siv\/rechercheconsultation\/consultation\/ir\/consultationIR.action?irId=FRAN_IR_027886#d_1",
"role": "creatorOf",
"content": "Minist\u00e8re de l'Int\u00e9rieur. Administration d\u00e9partementale. Logement des pr\u00e9fets, sous-pr\u00e9fets, Costumes des fonctionnaires, Compatibilit\u00e9 des fonctions# Logement des pr\u00e9fets et des sous-pr\u00e9fets. #F\/2(I)\/106\/13",
"source": null,
"note": "<descriptiveNote>\n <p>cr\u00e9ateur<\/p>\n <\/descriptiveNote>"
},
{
"dataType": "ResourceRelation",
"id": null,
"version": null,
"documentType": "ArchivalResource",
"linkType": "simple",
"entryType": "archival",
"link": "https:\/\/www.siv.archives-nationales.culture.gouv.fr\/siv\/rechercheconsultation\/consultation\/ir\/consultationIR.action?irId=FRAN_IR_043100",
"role": "referencedIn",
"content": "Minutes et r\u00e9pertoires du notaire Albert Louis MOREL d'ARLEUX, 12 ao\u00fbt 1891 - d\u00e9cembre 1903 (\u00e9tude CI)",
"source": null,
"note": null
},
{
"dataType": "ResourceRelation",
"id": null,
"version": null,
"documentType": "ArchivalResource",
"linkType": "simple",
"entryType": "archival",
"link": "https:\/\/www.siv.archives-nationales.culture.gouv.fr\/siv\/rechercheconsultation\/consultation\/ir\/consultationIR.action?irId=FRAN_IR_041062",
"role": "referencedIn",
"content": "Gr\u00e2ces accord\u00e9es",
"source": null,
"note": null
}
],
"functions": [
{
"dataType": "SNACFunction",
"id": null,
"version": null,
"term": "culture",
"type": null,
"dates": null,
"vocabularySource": "d5bhviikk9--y6te63k761ib",
"note": null
}
],
"places": [
{
"dataType": "Place",
"id": null,
"version": null,
"dates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2012-01-01",
"fromDateOriginal": "2012",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": null,
"toDateOriginal": null,
"toType": null,
"toBC": null,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
},
"type": null,
"role": "Lieu g\u00e9n\u00e9ral",
"entries": [
{
"dataType": "PlaceEntry",
"id": null,
"version": null,
"latitude": null,
"longitude": null,
"administrationCode": null,
"countryCode": null,
"vocabularySource": null,
"certaintyScore": null,
"original": "Pierrefitte-sur-Seine",
"bestMatch": null,
"maybeSame": [],
"type": "nomLieu"
},
{
"dataType": "PlaceEntry",
"id": null,
"version": null,
"latitude": null,
"longitude": null,
"administrationCode": null,
"countryCode": null,
"vocabularySource": "d3ntxf5186--sga9u2l9iboc",
"certaintyScore": null,
"original": "Pierrefitte-sur-Seine (Seine-Saint-Denis)",
"bestMatch": null,
"maybeSame": [],
"type": "lieu"
}
],
"note": "\n \n "
},
{
"dataType": "Place",
"id": null,
"version": null,
"dates": {
"dataType": "SNACDate",
"id": null,
"version": null,
"fromDate": "2003-01-01",
"fromDateOriginal": "2003",
"fromType": null,
"fromBC": false,
"fromRange": {
"notBefore": null,
"notAfter": null
},
"toDate": "2012-12-31",
"toDateOriginal": "2012",
"toType": null,
"toBC": false,
"toRange": {
"notBefore": null,
"notAfter": null
},
"isRange": true,
"note": null
},
"type": null,
"role": "Lieu de Paris",
"entries": [
{
"dataType": "PlaceEntry",
"id": null,
"version": null,
"latitude": null,
"longitude": null,
"administrationCode": null,
"countryCode": null,
"vocabularySource": null,
"certaintyScore": null,
"original": "Paris, Archives nationales",
"bestMatch": null,
"maybeSame": [],
"type": "nomLieu"
},
{
"dataType": "PlaceEntry",
"id": null,
"version": null,
"latitude": null,
"longitude": null,
"administrationCode": null,
"countryCode": null,
"vocabularySource": "d3nyv8gloo-1mqax06e8pe1d",
"certaintyScore": null,
"original": "03e arrondissement",
"bestMatch": null,
"maybeSame": [],
"type": "arrondissement_actuel"
},
{
"dataType": "PlaceEntry",
"id": null,
"version": null,
"latitude": null,
"longitude": null,
"administrationCode": null,
"countryCode": null,
"vocabularySource": "d3nzaj2p6v--hrd7lqok52tn",
"certaintyScore": null,
"original": "Francs-Bourgeois (rue des)",
"bestMatch": null,
"maybeSame": [],
"type": "voie"
}
],
"note": "\n \n "
}
],
"subjects": [],
"nationality": null,
"gender": null,
"generalContext": "<generalContext>\n <p>idem<\/p>\n <\/generalContext>",
"structureOrGenealogy": "<structureOrGenealogy>\n <p>idem<\/p>\n <\/structureOrGenealogy>",
"mandate": "<mandate>\n <descriptiveNote>\n <p>M\u00eames possibilit\u00e9s que pour champ pr\u00e9c\u00e9dent<\/p>\n <\/descriptiveNote>\n <\/mandate>"
}
}
{
"constellation" : {
"dataType": "Constellation",
"id": null,
"version": null,
"ark": null,
"entityType": null,
"otherRecordIDs": [],
"maintenanceStatus": null,
"maintenanceAgency": null,
"maintenanceEvents": [],
"sources": [],
"legalStatuses": [],
"conventionDeclaration": null,
"constellationLanguage": null,
"constellationLanguageCode": null,
"constellationScript": null,
"constellationScriptCode": null,
"language": null,
"languageCode": null,
"script": null,
"scriptCode": null,
"nameEntries": [
{
"dataType": "NameEntry",
"id": null,
"version": null,
"original": "Jefferson, Thomas, 1743-1826.",
"preferenceScore": "99",
"contributors": [
{
"type": "authorizedForm",
"contributor": "VIAF"
}
],
"language": null,
"scriptCode": null,
"useDates": null
}
],
"occupations": [],
"biogHists": [],
"existDates": [],
"existDatesNote": null,
"relations": [],
"resourceRelations": [],
"functions": [],
"places": [],
"subjects": [],
"nationality": null,
"gender": null,
"generalContext": null,
"structureOrGenealogy": null,
"mandate": null
}
}
# Server API
The internal server's API is written and required to be entirely in JSON. Requests to the server will use HTTP PUT requests to a localhost port (set up as a firewalled virtualhost in Apache). This allows future scalability, including separating the intenal server onto a separate machine from the front-facing web and rest interfaces.
## Server Requests
Requests can be tested by the command line using curl, in the form:
```bash
curl -XPUT "http://shannonvm.village.virginia.edu:82" -d '{ "JSON" : "Request"}'
```
Requests should be of the form:
```json
{
"command" : "command_name",
"constellation" : {
"...":"..."
}
}
```
### Request API Definitions
* `command` : the command to issue to the server. The following commands are allowed:
* User-level Commands
* `login` - log in with the given credentials
* `user_info` - get the user information for the given user
* Constellation Management Commands
* `edit` - Edit a constellation. Read the constellation `"id"` from the given constellation object
and return all pieces of the constellation object to the client for editing. Sets the state
of the server to note that this user is editing this constellation.
* `insert` - Insert the given constellation in the database. Returns the full constellation
out of SNAC with ID and version numbers within the Constellation structure.
* `update` - Update a constellation. Read the constellation `"id"` from the given constellation
object and make the requested changes to the constellation. In an update **many** of the non-repeating portions of the constellation object are required. Also, any subcomponent given, such as nameEntry objects, must be given in full. Except for the outer constellation object, any subcomponents must either be given with all fields or left out completely. **Partial components will result in data loss.**
* `search` - Return a list of constellations matching the given constellation. Read all the data available
in the given constellation object and return a list of constellations that match (or are similar)
* `user` : the current user's information
* `token` : the current session token
* `constellation` : all available parts of the constellation over which to enact the command. Certain commands require different amounts of the constellation object to be given. The full specification for the constellation structure may be viewed [here](/Specifications/Server API/Constellation.md).
* Example: to request a constellation, the client may use the portions of the constellation that are known (`id` or `ark_id`)
{
"command" : "get",
"constellation" : {"id" : 12345}
}
## Server Responses
The Server response API has the following form:
```json
{
"timing" : 50,
"request" : {
"Note" : "Entire original request will be returned to the client."
},
"error" : {
"type" : "Type of error",
"message" : "Error message"
},
"constellation" : {
"...":"..."
}
}
```
### Response API Definitions
* `timing` : the time in milliseconds for the server to compute the response
* `request` : the client's entire request to the server, as a sub-element. This is mainly returned for the client's reference.
* `error` : an error message, if the server had a problem handling the request. This object has two subcomponents,
* `type` : the type of the error. A full list of error types are defined [here](http://shannonvm.village.virginia.edu:83).
* `message` : a detailed error message (in English prose) stating the exact nature of the problem
* `constellation` : The matching constellation for the client's query. All portions of the constellation known to the server will be returned to the client. If there are multiple constellations, this will return a list:
{
"constellation" : [
{ "...":"..." },
{ "...":"..." },
{ "...":"..." }
]
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment