# configuration/constants/schema.constants.ts

> 96 lines of code and 18 definitions.

Tree: Bane's Lab Site
Language: typescript
Layer: infrastructure
Canonical: https://banes-lab.com/anatomy/tree#file-configuration-constants-schema-constants-ts
Source text: https://banes-lab.com/source/tree/configuration/constants/schema.constants.ts.txt

Listed in [configuration/constants](https://banes-lab.com/api/source/tree/configuration/constants.md), after [configuration/constants/release.constants.ts](https://banes-lab.com/source/tree/configuration/constants/release.constants.ts.md) and before [configuration/constants/search.constants.ts](https://banes-lab.com/source/tree/configuration/constants/search.constants.ts.md).

## Definitions

- `SCHEMA_CONTEXT` (lexical_declaration, line 26, exported)
- `SCHEMA_LANGUAGE` (lexical_declaration, line 27, exported)
- `ORGANIZATION_ID` (lexical_declaration, line 28, exported)
- `PERSON_ID` (lexical_declaration, line 29, exported)
- `WEBSITE_ID` (lexical_declaration, line 30, exported)
- `NUMBER_SEPARATOR` (lexical_declaration, line 32)
- `ENTERPRISE_NUMBER` (lexical_declaration, line 33)
- `VAT_ID` (lexical_declaration, line 34)
- `ENTERPRISE_SCHEME` (lexical_declaration, line 35)
- `ORGANIZATION` (lexical_declaration, line 37, exported)
- `AUTHOR` (lexical_declaration, line 63, exported)
- `PERSON` (lexical_declaration, line 70, exported)
- `DATA_CATALOG_ID` (lexical_declaration, line 82, exported)
- `DATASET_FRAGMENT` (lexical_declaration, line 83, exported)
- `DATASET_TYPE` (lexical_declaration, line 84, exported)
- `PROFILE_PAGE_TYPE` (lexical_declaration, line 85, exported)
- `DATA_CATALOG` (lexical_declaration, line 87, exported)
- `WEBSITE` (lexical_declaration, line 96, exported)

## Contained in

- [configuration/constants](https://banes-lab.com/anatomy/tree/folder-configuration-constants.md)

## Source

```typescript
import {
    ABOUT_DESCRIPTION,
    DATA_CATALOG_DESCRIPTION,
    DATA_CATALOG_NAME,
    HOME_DESCRIPTION,
    SITE_NAME,
} from "#configuration/strings/page.strings";
import { ABOUT_PAGE, HOME_PAGE } from "#core/ids/page.ids";
import { AUTHOR_GITHUB, AUTHOR_PROFILE, SITE_URL, pagePath } from "#core/assets/link.assets";
import {
    AUTHOR_HANDLE,
    COMPANY_CITY,
    COMPANY_COUNTRY,
    COMPANY_EMAIL,
    COMPANY_FOUNDED,
    COMPANY_NAME,
    COMPANY_NUMBER,
    COMPANY_OWNER,
    COMPANY_POSTAL_CODE,
    COMPANY_STAFF,
    COMPANY_STREET,
} from "#configuration/strings/company.strings";
import { BADGE_LOGO } from "#core/assets/image.assets";
import type { SchemaEntity } from "#types/schema.types";

export const SCHEMA_CONTEXT = "https://schema.org";
export const SCHEMA_LANGUAGE = "en";
export const ORGANIZATION_ID = `${SITE_URL}/#organization`;
export const PERSON_ID = `${SITE_URL}/#person`;
export const WEBSITE_ID = `${SITE_URL}/#website`;

const NUMBER_SEPARATOR = ".";
const ENTERPRISE_NUMBER = COMPANY_NUMBER.split(NUMBER_SEPARATOR).join("");
const VAT_ID = COMPANY_COUNTRY + ENTERPRISE_NUMBER;
const ENTERPRISE_SCHEME = "0208:";

export const ORGANIZATION: SchemaEntity = {
    "@id": ORGANIZATION_ID,
    "@type": "Organization",
    address: {
        "@type": "PostalAddress",
        addressCountry: COMPANY_COUNTRY,
        addressLocality: COMPANY_CITY,
        postalCode: COMPANY_POSTAL_CODE,
        streetAddress: COMPANY_STREET,
    },
    contactPoint: { "@type": "ContactPoint", email: COMPANY_EMAIL, url: SITE_URL + pagePath(HOME_PAGE) },
    description: HOME_DESCRIPTION,
    email: COMPANY_EMAIL,
    founder: { "@id": PERSON_ID },
    foundingDate: COMPANY_FOUNDED,
    iso6523Code: ENTERPRISE_SCHEME + ENTERPRISE_NUMBER,
    legalName: COMPANY_OWNER,
    logo: SITE_URL + BADGE_LOGO,
    name: COMPANY_NAME,
    numberOfEmployees: { "@type": "QuantitativeValue", value: COMPANY_STAFF },
    sameAs: [AUTHOR_GITHUB, AUTHOR_PROFILE],
    taxID: VAT_ID,
    url: SITE_URL + pagePath(HOME_PAGE),
    vatID: VAT_ID,
};

export const AUTHOR: SchemaEntity = {
    "@id": PERSON_ID,
    "@type": "Person",
    name: COMPANY_OWNER,
    url: SITE_URL + pagePath(ABOUT_PAGE),
};

export const PERSON: SchemaEntity = {
    "@id": PERSON_ID,
    "@type": "Person",
    alternateName: AUTHOR_HANDLE,
    description: ABOUT_DESCRIPTION,
    email: COMPANY_EMAIL,
    name: COMPANY_OWNER,
    sameAs: [AUTHOR_PROFILE, AUTHOR_GITHUB],
    url: SITE_URL + pagePath(ABOUT_PAGE),
    worksFor: { "@id": ORGANIZATION_ID },
};

export const DATA_CATALOG_ID = `${SITE_URL}/#catalog`;
export const DATASET_FRAGMENT = "#dataset";
export const DATASET_TYPE = "Dataset";
export const PROFILE_PAGE_TYPE = "ProfilePage";

export const DATA_CATALOG: SchemaEntity = {
    "@id": DATA_CATALOG_ID,
    "@type": "DataCatalog",
    description: DATA_CATALOG_DESCRIPTION,
    name: DATA_CATALOG_NAME,
    publisher: { "@id": ORGANIZATION_ID },
    url: SITE_URL + pagePath(HOME_PAGE),
};

export const WEBSITE: SchemaEntity = {
    "@id": WEBSITE_ID,
    "@type": "WebSite",
    description: HOME_DESCRIPTION,
    inLanguage: SCHEMA_LANGUAGE,
    name: SITE_NAME,
    publisher: { "@id": ORGANIZATION_ID },
    url: SITE_URL + pagePath(HOME_PAGE),
};
```
