chore: optional descriptors for language and species

This commit is contained in:
Lewis Wynne 2026-03-23 23:59:40 +00:00
parent f52a6c5b68
commit 8b73535396
4 changed files with 9 additions and 9 deletions

View file

@ -7,7 +7,7 @@
<xs:element name="language" maxOccurs="unbounded"> <xs:element name="language" maxOccurs="unbounded">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element name="description" type="xs:string" /> <xs:element name="description" type="xs:string" minOccurs="0" />
</xs:sequence> </xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" /> <xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" />

View file

@ -4,7 +4,7 @@
<xs:element name="species"> <xs:element name="species">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element name="description" type="xs:string" /> <xs:element name="description" type="xs:string" minOccurs="0" />
<xs:element name="languages" type="refList" /> <xs:element name="languages" type="refList" />
<xs:element name="citizenships" type="refList" /> <xs:element name="citizenships" type="refList" />
<xs:element name="subspecies" minOccurs="0"> <xs:element name="subspecies" minOccurs="0">
@ -13,7 +13,7 @@
<xs:element name="entry" maxOccurs="unbounded"> <xs:element name="entry" maxOccurs="unbounded">
<xs:complexType> <xs:complexType>
<xs:sequence> <xs:sequence>
<xs:element name="description" type="xs:string" /> <xs:element name="description" type="xs:string" minOccurs="0" />
</xs:sequence> </xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" /> <xs:attribute name="id" type="xs:string" use="required" />
<xs:attribute name="name" type="xs:string" use="required" /> <xs:attribute name="name" type="xs:string" use="required" />

View file

@ -21,14 +21,14 @@ export function parseSpecies(xml: string): SpeciesData {
return { return {
id: root['@_id'], id: root['@_id'],
name: root['@_name'], name: root['@_name'],
description: root.description.trim(), description: root.description?.trim(),
subspeciesLabel: root['@_subspeciesLabel'], subspeciesLabel: root['@_subspeciesLabel'],
languages: extractRefs(root.languages), languages: extractRefs(root.languages),
citizenships: extractRefs(root.citizenships), citizenships: extractRefs(root.citizenships),
subspecies: subspecies.map((e: any) => ({ subspecies: subspecies.map((e: any) => ({
id: e['@_id'], id: e['@_id'],
name: e['@_name'], name: e['@_name'],
description: e.description.trim() description: e.description?.trim()
})) }))
}; };
} }
@ -47,7 +47,7 @@ export function parseLanguages(xml: string): LanguageData[] {
return root.language.map((l: any) => ({ return root.language.map((l: any) => ({
id: l['@_id'], id: l['@_id'],
name: l['@_name'], name: l['@_name'],
description: l.description.trim() description: l.description?.trim()
})); }));
} }

View file

@ -1,9 +1,9 @@
export interface SpeciesData { export interface SpeciesData {
id: string; id: string;
name: string; name: string;
description: string; description?: string;
subspeciesLabel: string; subspeciesLabel: string;
subspecies: { id: string; name: string; description: string }[]; subspecies: { id: string; name: string; description?: string }[];
languages: string[]; languages: string[];
citizenships: string[]; citizenships: string[];
} }
@ -17,5 +17,5 @@ export interface CitizenshipData {
export interface LanguageData { export interface LanguageData {
id: string; id: string;
name: string; name: string;
description: string; description?: string;
} }