Skip to content

Commit 398e1c1

Browse files
authored
Merge pull request #84 from stopfstedt/add_registry_number_list_and_registry_number
Updates MeSH parser for 2025 release.
2 parents 5c485ad + 84e1aca commit 398e1c1

File tree

6 files changed

+31
-24
lines changed

6 files changed

+31
-24
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
This PHP code library provides tools for extracting [Medical Subject Headings](https://www.nlm.nih.gov/mesh/meshhome.html)
44
(MeSH) descriptors and associated data from a given XML file into an object representation.
55

6-
It expects its input to be compliant with the 2023 or 2024 [MeSH DTDs](https://www.nlm.nih.gov/databases/download/mesh.html).
6+
It expects its input to be compliant with the 2024 or 2025 [MeSH DTDs](https://www.nlm.nih.gov/databases/download/mesh.html).
77

88
## Installation
99

src/Ilios/MeSH/Model/Concept.php

+12-12
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ class Concept extends Reference
1414

1515
protected ?string $casn1Name = null;
1616

17-
protected ?string $registryNumber = null;
18-
1917
protected ?string $scopeNote = null;
2018

2119
protected ?string $translatorsEnglishScopeNote = null;
@@ -28,6 +26,8 @@ class Concept extends Reference
2826

2927
protected array $terms = [];
3028

29+
protected array $registryNumbers = [];
30+
3131
public function isPreferred(): bool
3232
{
3333
return $this->preferred;
@@ -48,16 +48,6 @@ public function setCasn1Name(?string $casn1Name): void
4848
$this->casn1Name = $casn1Name;
4949
}
5050

51-
public function getRegistryNumber(): ?string
52-
{
53-
return $this->registryNumber;
54-
}
55-
56-
public function setRegistryNumber(?string $registryNumber): void
57-
{
58-
$this->registryNumber = $registryNumber;
59-
}
60-
6151
public function getScopeNote(): ?string
6252
{
6353
return $this->scopeNote;
@@ -117,4 +107,14 @@ public function addTerm(Term $term): void
117107
{
118108
$this->terms[] = $term;
119109
}
110+
111+
public function getRegistryNumbers(): array
112+
{
113+
return $this->registryNumbers;
114+
}
115+
116+
public function addRegistryNumber(string $registryNumber): void
117+
{
118+
$this->registryNumbers[] = $registryNumber;
119+
}
120120
}

src/Ilios/MeSH/Parser.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -270,7 +270,7 @@ public function parse(string $uri): DescriptorSet
270270
break;
271271
case self::REGISTRY_NUMBER:
272272
$number = $this->getNodeContents($reader);
273-
$currentConcept->setRegistryNumber($number);
273+
$currentConcept->addRegistryNumber($number);
274274
break;
275275
case self::RELATED_REGISTRY_NUMBER:
276276
$number = $this->getNodeContents($reader);

tests/Ilios/MeSH/Model/ConceptTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ public function testGetSetCasn1Name(): void
4444
$this->basicSetTest($this->object, 'casn1Name', 'string', true);
4545
}
4646

47-
public function testGetSetRegistryNumber(): void
47+
public function testAddGetRegistryNumbers(): void
4848
{
49-
$this->basicSetTest($this->object, 'registryNumber', 'string', true);
49+
$this->addTextToListTest($this->object, 'registryNumber');
5050
}
5151

5252
public function testGetSetScopeNote(): void

tests/Ilios/MeSH/ParserTest.php

+10-5
Original file line numberDiff line numberDiff line change
@@ -165,14 +165,19 @@ public function testParse(): void
165165
$this->assertTrue($concept->isPreferred());
166166
$this->assertEquals('M0000001', $concept->getUi());
167167
$this->assertEquals('a casn1 name', $concept->getCasn1Name());
168-
$this->assertEquals('00000AAAAA', $concept->getRegistryNumber());
168+
169+
$registryNumbers = $concept->getRegistryNumbers();
170+
$this->assertEquals(2, count($registryNumbers));
171+
$this->assertEquals('00000AAAAA', $registryNumbers[0]);
172+
$this->assertEquals('11111BBBBB', $registryNumbers[1]);
173+
169174
$this->assertEquals('a scope note', $concept->getScopeNote());
170175
$this->assertEquals('something in English.', $concept->getTranslatorsEnglishScopeNote());
171176
$this->assertEquals('i got nothing', $concept->getTranslatorsScopeNote());
172177

173-
$registryNumbers = $concept->getRelatedRegistryNumbers();
174-
$this->assertEquals(1, count($registryNumbers));
175-
$this->assertEquals('a related registry number', $registryNumbers[0]);
178+
$relatedRegistryNumbers = $concept->getRelatedRegistryNumbers();
179+
$this->assertEquals(1, count($relatedRegistryNumbers));
180+
$this->assertEquals('a related registry number', $relatedRegistryNumbers[0]);
176181

177182
$relations = $concept->getConceptRelations();
178183
$this->assertEquals(1, count($relations));
@@ -202,7 +207,7 @@ public function testParse(): void
202207
$this->assertFalse($concept->isPreferred());
203208
$this->assertEquals('M0000002', $concept->getUi());
204209
$this->assertEquals('another concept', $concept->getName());
205-
$this->assertEquals('0', $concept->getRegistryNumber());
210+
$this->assertCount(0, $concept->getRegistryNumbers());
206211

207212
$relations = $concept->getConceptRelations();
208213
$this->assertEquals(1, count($relations));

tests/Ilios/MeSH/desc.xml

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
Fake MeSH descriptors set, for testing purposes.
44
It contains all possible elements defined by the schema.
55
-->
6-
<!DOCTYPE DescriptorRecordSet SYSTEM "https://www.nlm.nih.gov/databases/dtd/nlmdescriptorrecordset_20240101.dtd">
6+
<!DOCTYPE DescriptorRecordSet SYSTEM "https://www.nlm.nih.gov/databases/dtd/nlmdescriptorrecordset_20250101.dtd">
77
<DescriptorRecordSet LanguageCode="eng">
88
<DescriptorRecord DescriptorClass="1">
99
<DescriptorUI>D000000</DescriptorUI>
@@ -133,7 +133,10 @@ It contains all possible elements defined by the schema.
133133
<String>a concept</String>
134134
</ConceptName>
135135
<CASN1Name>a casn1 name</CASN1Name>
136-
<RegistryNumber>00000AAAAA</RegistryNumber>
136+
<RegistryNumberList>
137+
<RegistryNumber>00000AAAAA</RegistryNumber>
138+
<RegistryNumber>11111BBBBB</RegistryNumber>
139+
</RegistryNumberList>
137140
<ScopeNote>a scope note</ScopeNote>
138141
<TranslatorsEnglishScopeNote>something in English.</TranslatorsEnglishScopeNote>
139142
<TranslatorsScopeNote>i got nothing</TranslatorsScopeNote>
@@ -170,7 +173,6 @@ It contains all possible elements defined by the schema.
170173
<ConceptName>
171174
<String>another concept</String>
172175
</ConceptName>
173-
<RegistryNumber>0</RegistryNumber>
174176
<ConceptRelationList>
175177
<ConceptRelation RelationName="NRW">
176178
<Concept1UI>M0000002</Concept1UI>

0 commit comments

Comments
 (0)