Skip to content

Commit 262f5b2

Browse files
authored
feat: add defaultCardinality configuration for relations (#383)
1 parent 424578e commit 262f5b2

File tree

5 files changed

+24
-11
lines changed

5 files changed

+24
-11
lines changed

phpstan.neon

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ parameters:
4242
array{
4343
vocabularies: array{uri: string, format: string, allTypes: ?boolean, attributes: array<string, (int|bool|null|string|string[]|string[][]|\Nette\PhpGenerator\Literal)[]|null>}[],
4444
vocabularyNamespace: string,
45-
relations: string[],
45+
relations: array{uris: string[], defaultCardinality: string},
4646
debug: boolean,
4747
apiPlatformOldAttributes: boolean,
4848
id: array{generate: boolean, generationStrategy: string, writable: boolean},

src/Schema/Generator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public function generate(array $configuration, OutputInterface $output, SymfonyS
4646
}
4747

4848
$relations = [];
49-
foreach ($configuration['relations'] as $relation) {
49+
foreach ($configuration['relations']['uris'] as $relation) {
5050
$relations[] = new \SimpleXMLElement($relation, 0, true);
5151
}
5252

src/Schema/PropertyGenerator/PropertyGenerator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public function __invoke(string $name, array $config, Class_ $class, array $cont
7171

7272
$cardinality = $propertyConfig['cardinality'] ?? false;
7373
if (!$cardinality || CardinalitiesExtractor::CARDINALITY_UNKNOWN === $cardinality) {
74-
$cardinality = $cardinalities[$propertyUri] ?? CardinalitiesExtractor::CARDINALITY_1_1;
74+
$cardinality = $cardinalities[$propertyUri] ?? $config['relations']['defaultCardinality'];
7575
}
7676

7777
$isArray = \in_array($cardinality, [

src/SchemaGeneratorConfiguration.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,17 @@ public function getConfigTreeBuilder(): TreeBuilder
9797
->end()
9898
->scalarNode('vocabularyNamespace')->defaultValue(self::SCHEMA_ORG_NAMESPACE)->info('Namespace of the vocabulary to import')->example('http://www.w3.org/ns/activitystreams#')->end()
9999
->arrayNode('relations')
100-
->info('OWL relation files containing cardinality information in the GoodRelations format')
101-
->example(self::GOOD_RELATIONS_URI)
102-
->defaultValue([self::GOOD_RELATIONS_URI])
103-
->scalarPrototype()->end()
100+
->addDefaultsIfNotSet()
101+
->info('Relations configuration')
102+
->children()
103+
->arrayNode('uris')
104+
->info('OWL relation URIs containing cardinality information in the GoodRelations format')
105+
->example(self::GOOD_RELATIONS_URI)
106+
->defaultValue([self::GOOD_RELATIONS_URI])
107+
->scalarPrototype()->end()
108+
->end()
109+
->enumNode('defaultCardinality')->defaultValue('(1..1)')->values(['(0..1)', '(0..*)', '(1..1)', '(1..*)', '(*..0)', '(*..1)', '(*..*)'])->info('The default cardinality to use when it cannot be extracted')->end()
110+
->end()
104111
->end()
105112
->booleanNode('debug')->defaultFalse()->info('Debug mode')->end()
106113
->booleanNode('apiPlatformOldAttributes')->defaultFalse()->info('Use old API Platform attributes (API Platform < 2.7)')->end()

tests/Command/DumpConfigurationTest.php

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,11 +52,17 @@ public function testDumpConfiguration(): void
5252
# Namespace of the vocabulary to import
5353
vocabularyNamespace: 'https://schema.org/' # Example: 'http://www.w3.org/ns/activitystreams#'
5454
55-
# OWL relation files containing cardinality information in the GoodRelations format
56-
relations: # Example: 'https://archive.org/services/purl/goodrelations/v1.owl'
55+
# Relations configuration
56+
relations:
5757
58-
# Default:
59-
- https://archive.org/services/purl/goodrelations/v1.owl
58+
# OWL relation URIs containing cardinality information in the GoodRelations format
59+
uris: # Example: 'https://archive.org/services/purl/goodrelations/v1.owl'
60+
61+
# Default:
62+
- https://archive.org/services/purl/goodrelations/v1.owl
63+
64+
# The default cardinality to use when it cannot be extracted
65+
defaultCardinality: (1..1) # One of "(0..1)"; "(0..*)"; "(1..1)"; "(1..*)"; "(*..0)"; "(*..1)"; "(*..*)"
6066
6167
# Debug mode
6268
debug: false

0 commit comments

Comments
 (0)