As mensagens de erro podem ser difíceis de entender, principalmente por
demandarem algum conhecimento na notação utilizada para expressar a gramática
do XML. Recomendo ler sobre EBNF - Extended Backus-Naur Form -, vou deixar links
no final[1][2].
O primeiro passo para entender a notação, é identificar alguns símbolos. Os
principais para a correta interpretação da documentação da JATS e das mensagens
de erro produzidas pelo stylechecker são:
- ``?``: o símbolo, ou grupo de símbolos entre parênteses, imediatamente anterior é opcional, i.e., ocorre zero ou uma vez.
- ``*``: o símbolo, ou grupo de símbolos entre parênteses, imediatamente anterior pode ocorrer zero ou mais vezes.
- ``+``: o símbolo, ou grupo de símbolos entre parênteses, imediatamente anterior pode ocorrer uma ou mais vezes.
- ``()``: representa um grupo.
- ``|``: representa o conetivo lógico "OU" exclusivo[4].
Vamos pegar como exemplo a referência para o elemento ``
<date>``[3]. A seção
Expanded Content Model diz o seguinte:
(((day?, month?) | season)?, year)Para facilitar a visualização, vamos separar as expressões por quebra de linha
e alguma indentação:
(
((day?, month?) | season)?,
year
)Melhorou? Vamos lá.. a regra toda está entre parênteses, o que significa que
trata-se de um grupo. Esse grupo é composto por 2 elementos:
((day?, month?) | season)? e
year, sendo o primeiro opcional (repare
no caractere ``
?``) e o segundo obrigatório. Até agora sabemos que o
elemento ``
<date>`` é composto minimamente pelo elemento ``
<year>``.
Agora vamos analisar o primeiro elemento:
((day?, month?) | season)? Sabemos que trata-se de um grupo que pode ocorrer zero ou uma vez, composto por
outro grupo que pode conter os elementos ``
<day>``, zero ou uma vez, e
``
<month>``, também zero ou uma vez, **
ou** o elemento ``
<season>`` uma vez.
São exemplos válidos:
1.
<date>
<year>1808</year>
</date>
2.
<date>
<day>22</day>
<month>01</month>
<year>1808</year>
</date>
3.
<date>
<season>Jan-Mar</season>
<year>1808</year>
</date>
Agora vamos pegar uns exemplos de estruturas inválidas para analisarmos as
mensagens de erro:
1. A estrutura abaixo produz a seguinte mensagem: ``
"Element date content does not follow the DTD, expecting (((day? , month?) | season)? , year), got (day season year)"``.
<date>
<day>22</day>
<season>Jan-Mar</season>
<year>1808</year>
</date>
A mensagem diz que o conteúdo do elemento ``
date`` não segue a DTD, pois
espera uma estrutura e recebeu uma diferente. A graça é que ambas as estruturas,
a esperada e a recebida, são exibidas na mensagem de erro usando a notação
que expliquei logo acima. Vou dar mais um exemplo.
2. A estrutura produz a seguinte mensagem: ``
"Element date content does not follow the DTD, expecting (((day? , month?) | season)? , year), got (month day year)"``.
<date>
<month>01</month>
<day>22</day>
<year>1808</year>
</date>
Isso mesmo, a ordem em que os elementos são dispostos é importante. O elemento
``
<day>``, quando presente, deve preceder o elemento ``
<month>``. Ok, mais um exemplo.
3. A mensagem é: ``
"Element date content does not follow the DTD, expecting (((day? , month?) | season)? , year), got (day month year CDATA)"``.
<date>
<month>01</month>
<day>22</day>
<year>1808</year>
.
</date>
CDATA significa
character data, ou seja, um caractere qualquer. No exemplo
acima, o caractere "ponto" está invalidando a estrutura.
Espero ter ajudado.
[1]
https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form[2]
http://www.garshol.priv.no/download/text/bnf.html[3]
http://jats.nlm.nih.gov/publishing/tag-library/1.0/n-v5a0.html[4]
https://pt.wikipedia.org/wiki/Disjun%C3%A7%C3%A3o_exclusivaAbraço,
-Gustavo