228 lines
6.7 KiB
Markdown
228 lines
6.7 KiB
Markdown
# Class Description Quality Rule
|
|
|
|
## Rule: Write Dictionary-Style Definitions Without Repeating the Class Name
|
|
|
|
When writing class descriptions, follow these principles.
|
|
|
|
### 1. No Repetition of Class Name Components
|
|
|
|
**WRONG:**
|
|
```yaml
|
|
AcademicArchiveRecordSetType:
|
|
description: >-
|
|
A classification type for archival record sets created by academic
|
|
institutions. This class represents the record set type...
|
|
```
|
|
|
|
**CORRECT:**
|
|
```yaml
|
|
AcademicArchiveRecordSetType:
|
|
description: >-
|
|
Category for grouping documentary materials accumulated by tertiary
|
|
educational institutions during their administrative, academic, and
|
|
operational activities.
|
|
```
|
|
|
|
The description should define the concept using synonyms and related terms, not repeat words from the class name.
|
|
|
|
### 2. MIGRATE Structured Data Before Removing from Descriptions
|
|
|
|
**CRITICAL**: When a description contains structured data (examples, typical contents, alignment notes, etc.), you MUST:
|
|
|
|
1. **First check** if the structured data already exists in proper LinkML fields
|
|
2. **If NOT present**: ADD it to the appropriate structured field
|
|
3. **ONLY THEN**: Remove it from the description
|
|
|
|
**Never simply delete structured content from descriptions without preserving it elsewhere.**
|
|
|
|
**MIGRATION CHECKLIST:**
|
|
|
|
| Content Type | Target Field | Example |
|
|
|--------------|--------------|---------|
|
|
| Example instances | `examples:` | `- value: {...} description: "..."` |
|
|
| Typical contents | `keywords:` or `comments:` | List of typical materials |
|
|
| Alignment explanations | `broad_mappings`, `related_mappings` | Ontology references |
|
|
| Usage notes | `comments:` | Operational guidance |
|
|
| Provenance notes | `comments:` or `annotations:` | Historical context |
|
|
| Privacy/legal notes | `comments:` | Access restrictions |
|
|
| Definition details | Keep in description | Core semantic definition |
|
|
|
|
**WRONG - Deleting without migration:**
|
|
```yaml
|
|
# BEFORE (has rich content)
|
|
description: |
|
|
Records documenting student academic careers.
|
|
|
|
**Typical Contents**:
|
|
- Enrollment records
|
|
- Academic transcripts
|
|
- Graduation records
|
|
|
|
Subject to privacy regulations (FERPA, GDPR).
|
|
|
|
# AFTER (lost information!) - DON'T DO THIS
|
|
description: >-
|
|
Records documenting student academic careers.
|
|
```
|
|
|
|
**CORRECT - Migrate first, then clean:**
|
|
```yaml
|
|
# Step 1: Add to structured fields
|
|
description: >-
|
|
Records documenting student academic careers.
|
|
keywords:
|
|
- enrollment records
|
|
- academic transcripts
|
|
- graduation records
|
|
comments:
|
|
- Subject to privacy regulations (FERPA, GDPR, AVG)
|
|
- Access restrictions typically apply for records less than 75 years old
|
|
|
|
# Step 2: Now description is clean but no information lost
|
|
```
|
|
|
|
### 3. No Structured Data or Meta-Discussion in Descriptions
|
|
|
|
After migration, descriptions should contain only the definition. Do not include:
|
|
- Alignment explanations (use `broad_mappings`, `close_mappings`, `exact_mappings`)
|
|
- Pattern explanations (use `see_also`, `comments`)
|
|
- Usage examples (use `examples:` annotation)
|
|
- Rationale for mappings (use `comments:` or `annotations:`)
|
|
- Typical contents lists (use `keywords:` or `comments:`)
|
|
|
|
**WRONG:**
|
|
```yaml
|
|
description: >-
|
|
A type for X.
|
|
|
|
**RiC-O Alignment**: Maps to rico:RecordSetType because...
|
|
|
|
**Pattern**: This is part of a dual-class pattern with Y.
|
|
|
|
**Examples**: Administrative fonds, student records...
|
|
```
|
|
|
|
**CORRECT:**
|
|
```yaml
|
|
description: >-
|
|
Category for grouping documentary materials accumulated by tertiary
|
|
educational institutions.
|
|
|
|
broad_mappings:
|
|
- rico:RecordSetType
|
|
see_also:
|
|
- AcademicArchive
|
|
keywords:
|
|
- administrative fonds
|
|
- student records
|
|
examples:
|
|
- value: {...}
|
|
description: Administrative fonds containing governance records
|
|
```
|
|
|
|
### 4. Use Folded Block Scalar (`>-`) for Descriptions
|
|
|
|
Use `>-` (folded, strip) instead of `|` (literal) to ensure clean paragraph formatting in generated documentation.
|
|
|
|
**WRONG:**
|
|
```yaml
|
|
description: |
|
|
A type for X.
|
|
This spans multiple lines.
|
|
```
|
|
|
|
**CORRECT:**
|
|
```yaml
|
|
description: >-
|
|
A type for X. This will be formatted as a single clean paragraph
|
|
in the generated documentation.
|
|
```
|
|
|
|
### 5. Use LinkML `examples:` Annotation for Examples
|
|
|
|
Structure examples properly with `value:` and `description:` keys.
|
|
|
|
```yaml
|
|
examples:
|
|
- value:
|
|
has_type: hc:ArchiveOrganizationType
|
|
has_label: University Administrative Records
|
|
description: Administrative fonds containing governance records
|
|
```
|
|
|
|
### 6. Keywords vs Examples - Know the Difference
|
|
|
|
**CRITICAL**: Do not confuse `keywords:` with `examples:`. They serve different purposes:
|
|
|
|
| Field | Purpose | Content Type |
|
|
|-------|---------|--------------|
|
|
| `keywords:` | Search terms, topics, categories | List of strings (topics/materials) |
|
|
| `examples:` | Valid instance data demonstrations | Structured objects with `value` and `description` |
|
|
|
|
**Keywords** = Topics, material types, categories that describe what the class is about:
|
|
```yaml
|
|
keywords:
|
|
- enrollment records # type of material
|
|
- academic transcripts # type of material
|
|
- graduation records # type of material
|
|
```
|
|
|
|
**Examples** = Actual instances of the class with populated slots:
|
|
```yaml
|
|
examples:
|
|
- value:
|
|
has_type: hc:ArchiveOrganizationType
|
|
has_label: Registrar Student Records
|
|
has_note: Enrollment, transcripts, graduation records
|
|
description: Student records series from the registrar's office
|
|
```
|
|
|
|
**WRONG - Using keywords as examples:**
|
|
```yaml
|
|
# DON'T: "enrollment records" is not an instance of AcademicStudentRecordSeries
|
|
examples:
|
|
- value: enrollment records
|
|
description: Type of student record
|
|
```
|
|
|
|
**CORRECT - Keywords for topics, examples for instances:**
|
|
```yaml
|
|
keywords:
|
|
- enrollment records
|
|
- academic transcripts
|
|
- graduation records
|
|
examples:
|
|
- value:
|
|
has_type: hc:ArchiveOrganizationType
|
|
has_label: Historical Student Records
|
|
has_note: Pre-1950 student records with fewer access restrictions
|
|
description: Historical student records open for research access
|
|
```
|
|
|
|
### 7. Multiple Examples for Different Use Cases
|
|
|
|
Provide multiple examples to show different contexts or configurations:
|
|
|
|
```yaml
|
|
examples:
|
|
- value:
|
|
has_type: hc:ArchiveOrganizationType
|
|
has_label: Recent Student Records
|
|
description: Current records subject to privacy restrictions
|
|
- value:
|
|
has_type: hc:ArchiveOrganizationType
|
|
has_label: Historical Student Records
|
|
description: Records 75+ years old with fewer access restrictions
|
|
```
|
|
|
|
## Summary
|
|
|
|
| Element | Placement |
|
|
|---------|-----------|
|
|
| Definition | `description:` (concise, no repetition) |
|
|
| Ontology mappings | `exact_mappings`, `broad_mappings`, etc. |
|
|
| Related concepts | `see_also:` |
|
|
| Usage notes | `comments:` |
|
|
| Metadata | `annotations:` |
|
|
| Examples | `examples:` with `value` and `description` |
|
|
| Typical contents | `keywords:` or `comments:` |
|