claeis / ilivalidator

INTERLIS validator
14 stars 21 forks source link

Multiple attribute tag not detected #351

Open ltzur opened 2 years ago

ltzur commented 2 years ago

Folgende Sequenz aus einer Transferdatei wird nicht beanstandet:

Units.ili BS_Basis_KGDM_V1_0_LV95

Die korrekte Codierung wäre:

Units.ili BS_Basis_KGDM_V1_0_LV95

Hinweis: Wenn man das ganze Repository mit dem Compiler prüft wird der Fehler in der .log-Datei aufgeführt.

«ilimodels.xml:108:28:cvc-complex-type.2.4.d: Ungültiger Content wurde beginnend mit Element 'value' gefunden. An dieser Stelle wird kein untergeordnetes Element erwartet.»

edigonzales commented 2 years ago
<IliRepository09.ModelName_>
  <value>Units.ili</value>
  <value>BS_Basis_KGDM_V1_0_LV95</value>
</IliRepository09.ModelName_>
<IliRepository09.ModelName_>
  <value>Units.ili</value>
</IliRepository09.ModelName_>
<IliRepository09.ModelName_>
  <value>BS_Basis_KGDM_V1_0_LV95</value>
</IliRepository09.ModelName_>

Das unterschiedliche Verhalten rührt daher, dass bei --check-repo-ilis gegen das XML-Schema geprüft wird: https://github.com/claeis/ili2c/blob/5807305be7818bf22277ee50164a2b7f50dfc08d/src/main/java/ch/interlis/ili2c/CheckReposIlis.java#L93

Warum weiss ich nicht. Vermutung: Die Funktionalität gab es vor ilivalidator (z.B. https://github.com/claeis/ili2c/commit/3e6df821c793fce077914c13d59e1f88754d428c#diff-4d51d7b150b25ad699eddeabf22900047eb68b40d416a0a3118f3133017ace39 von 2015)

edigonzales commented 2 years ago

@Itzur Wobei im konkreten Fall auch der Modellname Units.ili falsch ist, oder? Sollte doch nur Units sein.

ltzur commented 2 years ago

@edigonzales Du hast natürlich recht mit dem XML-Schema, aber dieser Sachverhalt könnte auch bei "normalen" Transferdaten auftauchen und sollte vom ilivalidator reklamiert werden.

Zu units.ili: Ja, das ist definitiv falsch (semantisch aber nicht syntaktisch). Damit meine ich, dass gemäss Modell IliRepository09-20120220.ili der Eintrag einfach als TEXT definiert ist, somit ist Units.ili syntaktisch korrekt, wenn man aber den Kommentar zu diesem Attribut liest, muss es einem Eintrag im IMPORTS- und/oder TRANSLATION OF-Statement des Modells entsprechen und dort sind dann definitiv nur noch echte INTERLIS-Namen (bestehend aus Buchstaben, Ziffern und Unterstriche) erlaubt.