GithubHelp home page GithubHelp logo

scieloorg / packtools Goto Github PK

View Code? Open in Web Editor NEW
11.0 17.0 22.0 55.33 MB

Python library and command-line utilities to handle SciELO PS XML files.

Home Page: http://packtools.readthedocs.org

License: BSD 2-Clause "Simplified" License

Python 91.53% Shell 0.03% XSLT 7.51% Makefile 0.05% Dockerfile 0.02% CSS 0.22% HTML 0.65%
python scielo-ps scielo-xml jats xml-schema scielo

packtools's Introduction

scielo.packtools

Python library and command-line utilities to handle SciELO PS XML files that runs on python > 3.9.

Build status

Build Status

Latest Documentation Status

Installation

packtools depends on lxml.

Python Package Index (recommended):

$ pip install packtools

or just:

pip install -r requirements.txt

Pip + git (versão de desenvolvimento):

$ pip install -e git+git://github.com/scieloorg/packtools.git#egg=packtools

Source-code:

$ git clone https://github.com/scieloorg/packtools.git
$ cd packtools
$ python setup.py install

Installation as a web application, where a graphical interface for stylechecker and an HTML previewer is provided:

$ pip install packtools[webapp]

or

pip install -r requirements.txt && pip install -r optional-requirements.txt

Tests

To run tests execute:

python setup.py test

To run a specific module of tests, type:

python setup.py test -s tests.test_htmlgenerator

Run tests with tox:

tox

Command line execute

htmlgenerator example.xml --loglevel=error --nochecks --nonetwork

It will generate the result in the same path of the .xml file.

Running the web application

Configuring the application:

environment variable default value
APP_SETTINGS packtools.webapp.config.default.ProductionConfig
$ export APP_SETTINGS=packtools.webapp.config.default.ProductionConfig
$ export FLASK_APP=packtools.webapp.app.py
$ flask run

Documentation

http://packtools.readthedocs.org/ (we need help!)

Use license

Copyright 2013 SciELO [email protected]. Licensed under the terms of the BSD license. Please see LICENSE in the source code for more information.

https://github.com/scieloorg/packtools/blob/master/LICENSE

Changelog

https://github.com/scieloorg/packtools/blob/master/HISTORY.md

packtools's People

Contributors

dependabot[bot] avatar fabiobatalha avatar gitnnolabs avatar gustavofonseca avatar jamilatta avatar jfunez avatar joffily avatar paratiuid avatar patymori avatar rafaelpezzuto avatar robertatakenaka avatar rondinelisaad avatar rossi-luciano avatar samuelveigarangel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

packtools's Issues

Installing at UBUNTU, error

I am using Ubuntu 14,

 $ lsb_release -a
 No LSB modules are available. 
 Distributor ID:    Ubuntu
 Description:   Ubuntu 14.04 LTS
 Release:   14.04
 Codename:  trusty

when I try to install with pip, some errors occur (even with sudo),

$ pip install -e git+git://github.com/scieloorg/packtools.git#egg=packtools
Obtaining packtools from git+git://github.com/scieloorg/packtools.git#egg=packtools
  Cloning git://github.com/scieloorg/packtools.git to ./src/packtools
  Running setup.py (path:/var/www/gits/src/packtools/setup.py) egg_info for package packtools
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    coverage/tracer.c:3:20: fatal error: Python.h: Arquivo ou diretório não encontrado
     #include "Python.h"
                        ^
    compilation terminated.
    warning: no previously-included files matching '*.pyc' found anywhere in distribution
    **
    ** Couldn't install with extension module, trying without it...
    ** BuildFailed: command 'x86_64-linux-gnu-gcc' failed with exit status 1
    **

    Installed /var/www/gits/src/packtools/coverage-3.7.1-py2.7.egg

    warning: no files found matching '*.txt'
    warning: no files found matching '*.ini'
    warning: no files found matching '*.cfg'
    warning: no files found matching '*.rst'
    warning: no files found matching '*.xsd' under directory 'packtools'
  Installing extra requirements: 'egg'
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/lib/python2.7/dist-packages (from packtools)
Downloading/unpacking picles.plumber (from packtools)
Cleaning up...
Exception:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 278, in run
    requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1177, in prepare_files
    url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 256, in find_requirement
    page_versions.extend(self._package_versions(page.links, req.name.lower()))
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 432, in _package_versions
    for link in self._sort_links(links):
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 422, in _sort_links
    for link in links:
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 769, in links
    for anchor in self.parsed.findall(".//a"):
AttributeError: 'Document' object has no attribute 'findall'

Traceback (most recent call last):
  File "/usr/bin/pip", line 9, in <module>
    load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()
  File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 185, in main
    return command.main(cmd_args)
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 161, in main
    text = '\n'.join(complete_log)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 67: ordinal not in range(128)

Duas tags `journal-id`, pode? E a ortografia dos ID, que tal validar?

A seguir uma pergunta e uma sugestão.

pergunta

O JATS1.0 permite mais de uma tag, mas ficou a dúvida se o SciELO não está restringindo a um ou outro. O atual pattern journal-id_type_nlm-ta_or_publisher-id, está condizente com o JATS.

A duvida é se o legislador SciELO não quis dizer outra coisa, pois não nos foi permitido usar duas tags journal-id simultaneamente.

Se houver mudança, seria para algo como <assert test="journal-id[@journal-id-type='nlm-ta' or @journal-id-type='publisher-id'] and count(journal-id)=1">.

PS: pequeno problema com o atual assert, acho que ela aceitaria uma segunda tag journal-id com journal-id-type='outraCoisa'. Poderia usar count(journal-id)&lt;=2 no assert acima para resolver.

sugestão

O tipo publisher-id é o tal "acrônimo SciELO". Parece que há uma regra sintática para o acrônimo, de modo que é interessante também incluí-la (ex. pode ter acentos? espaço? Dígitos? Hifen?)... Isso na verdade vale para a maioria dos IDs. Como estamos usando o XSD do JATS1, não dá para fazer a validação SciELO no XSD, mas dá para usar o Schematron conjugado com funções de análise de string no XPath.

A "verificação de ortografia" de strings (labels, IDs, etc.) é mais complicada com XPath-v1, mas existe como usar funções do ambiente usuário (no caso Python ou PHP), com registerFunctions. Se me passar a lista de regras, eu crio uma sugestão de biblioteca comum (que roda em Python e PHP). Provavelmente a grande parte seriam regular expressions, que podem ser padrão PCRE.

label dentro de disp-formula perde-se e não aparece na página em HTML

No PDF as equações tradicionalmente aparecem com o label numérico alinhado à direta, como ilustrado na Figura 1.

image
Figura 1. Imagem ilustrando uma equação no PDF

Essa estrutura é representada de forma valida no XML, conforme trecho destacado abaixo:

<p>Suponha que os escores das categorias de um item <italic>i</italic> são arranjados em ordem 
do menor para o maior e denotados por <italic>k</italic>=0;1;...; <italic>m<sub>i</sub></italic>, 
em que <italic>m<sub>i</sub></italic>+1 é o número de categorias do i-ésimo item. 
A probabilidade de um indivíduo <italic>j</italic> escolher uma particular categoria de resposta 
ou outra mais alta do item <italic>i</italic> pode ser dada por uma extensão do Modelo Logístico Unidimensional de 
Dois Parâmetros (MLU2) (<xref ref-type="bibr" rid="B001">ANDRADE; TAVARES; VALLE, 2000</xref>), 
conforme a <xref ref-type="disp-formula" rid="e01">Equação 1</xref>:
<disp-formula id="e01">
  <mml:math id="m1"> ... código equação suprimido para leitura ... </mml:math>
  <label>(1)</label>
</disp-formula>
</p>

Entretando o artigo no site SciELO não exibe o label (Figura 2). Ao consultar a SPS observamos que não há documentação acerca do uso de label para equações.

image
Figura 2. Equação no site SciELO sem o label.

Uma alternativa seria inserir o número da equação como sendo parte da própria equação. Entretanto seria ideal se a conversão para HTML pudesse resolver isso de forma melhor pois inserir o label na própria equação é uma solução bastante pobre.

Permitir schematron externo

Pensando que as diferentes coleções SciELO poderão apresentar regras próprias, deve ser possível indicar um schematron externo a ser executado adicionalmente às validações padrão.

Exemplo de usos:

validator = XMLValidator(xml,  extra_sch=sch)
$ stylechecker --extrasch meu_schematron.sch meu_xml.xml

Ideia para sistema de plugins

Não seria legal e útil se o style checker aceitasse plugins?

Talvez até facilitasse a implantação de novas validações pela própria equipe pois estariam desacopladas do código principal..

Esses plugins poderiam ser scripts python que tomassem o xml, os parâmetros do próprio style checker e outros* e retornassem um objeto JSON pronto para usar no output.

  • outros parâmetros poderiam vir da própria linha de comando e do arquivo de config..

O style checker poderia registrar os plugins e seus parâmetros a partir do arquivo de config...

Config plugins:

{
    "plugins": {
        "check_issn": {
            "help": "Uses the journal-id and checks if the filename starts with the expected issn.",
            "prefix": "ec", //para evitar conflitos ao registrar os parâmetros..
            "path": "/home/lpanebr/ec-stylechecker/plugins/", //if they are not on the expected folder
            "script": "ec-check-ref-citations.py",
            "parameters": [ 
                { // some structure that could be used by the parser.add_argument syntax while registering the plugin..
                    "param": "-issn",
                    "help": "Which ISSN to use? epub or ppub.",
                    "required": True
                },
            ]
        },
        "check_reference_citations": {
            "help": "Checks if all references have a corresponding xref citation.",
            "prefix": "ec", //para evitar conflitos ao registrar os parâmetros..
            "path": "/home/lpanebr/ec-stylechecker/plugins/", //if they are not on the expected folder
            "script": "ec-check-ref-citations.py",
            "parameters": null // if no param are nedded..
        },
    }
}

Enfim... Falar é fácil....

Avaliar a troca de *xslt* para *exslt* como querybinding do schematron

O packtools se apoia na libxslt como processador XSLT. A libxslt atualmente suporta apenas xslt1.0 e extensões exslt[1]. Ao utilizar exslt como querybinding para o schematron, há um ganho grande em expressividade como expressões regulares, funções matemáticas, manipulação de conjuntos, datas, string e entre outras.

Exemplo com xslt1.0:

  <pattern id="pub-date_pub_type">
    <title>
      Restrict the valid values of pub-date[@pub-type].
    </title>

    <rule context="article/front/article-meta/pub-date">
      <assert test="@pub-type = 'epub' or
                    @pub-type = 'epub-ppub' or
                    @pub-type = 'collection'">
        Element 'pub-date', attribute pub-type: Invalid value "<value-of select="@pub-type"/>".
      </assert>
    </rule>
  </pattern>

Exemplo com exslt:

  <pattern id="pub-date_pub_type">
    <title>
      Restrict the valid values of pub-date[@pub-type].
    </title>

    <rule context="article/front/article-meta/pub-date">
      <assert test="regexp:test(@pub-type, '(epub|epub-ppub|collection)')">
        Element 'pub-date', attribute pub-type: Invalid value "<value-of select="@pub-type"/>".
      </assert>
    </rule>
  </pattern>

[1]https://en.wikipedia.org/wiki/EXSLT

Elementos mínimos por tipo de referência

element-citation[@publication-type="book"]: 1) Não pode constar: article-title, 2) Pode constar: chapter-title, 3) Deve constar: source e year.
element-citation[@publication-type="journal"]: 1) Não pode constar: chapter-title, 2) Pode constar: article-title, 3) Deve constar: source e year.
element-citation[@publication-type="confproc"]: 1) Deve constar: conf-name.
element-citation[@publication-type="webpage"]: 1) Deve constar ext-link[ext-link-type="uri"] e date-in-citation[@Content-Type="access-date"].


Atualização:
A ausência dos elementos marcados como Deve constar ou a ocorrência dos marcados como Não pode constar deve resultar em erro de validação. Esse ticket é ortogonal ao scieloorg/scielo_publishing_schema#64.

Falha na identificação de *award-id*

Fragmentos:

<kwd-group kwd-group-type="author" xml:lang="pt"><kwd>Resinas compostas</kwd><kwd>cor</kwd><kwd>polimento dental</kwd></kwd-group><kwd-group kwd-group-type="author" xml:lang="en"><kwd>Composite resins</kwd><kwd>color</kwd><kwd>dental polishing</kwd></kwd-group><funding-group><award-group>
<funding-source id="sp1">CNPq</funding-source>
<award-id rid="sp1">16362 2010/2011</award-id>
</award-group></funding-group><counts><fig-count count="0"/><table-count count="1"/><equation-count count="0"/><ref-count count="35"/><page-count count="4"/></counts></article-meta>
<back>
<ack>
<title>ACKNOWLEDGEMENTS</title>
<p>The authors acknowledge the support of <funding-source rid="sp1">CNPq</funding-source>-PIBIC for Scientific Initiation scholarship (Process number <award-id rid="sp1">16362 2010/2011</award-id>) granted to carry out this research.</p>
</ack>
<ref-list>

Exemplos de uso da biblioteca

Documentação no formato quickstart para exemplificar a utilização da lib para a inspeção de pacotes e validação dos XMLs.

avaliar a possibilidade de permitir mais que 1 orgname em <aff>

Há algumas afiliações que apresentam mais que uma instituição em uma única <aff>. Atualmente nossa orientação é de identificar esse tipo de afiliação da seguinte forma:

...
<contrib-group>
        <contrib contrib-type="author">
          <name>
            <surname>Russo</surname>
            <given-names>Jane A.</given-names>
          </name>
          <xref rid="aff1" ref-type="aff">1</xref>
          <xref rid="aff2" ref-type="aff"/>
        </contrib>
      </contrib-group>
      <aff id="aff1">
        <label>1</label>
        <institution content-type="normalized">
Universidade Federal do Rio de Janeiro</institution>
        <institution content-type="orgname">Universidade Federal do Rio de Janeiro</institution>
        <country country="BR">Brasil</country>
        <institution content-type="original">Universidade Federal do Rio de Janeiro e Universidade do Estado do Rio de Janeiro – Brasil</institution>
      </aff>
      <aff id="aff2">
        <institution content-type="normalized">Universidade do Estado do Rio de Janeiro</institution>
        <institution content-type="orgname">Universidade do Estado do Rio de Janeiro</institution>
        <country country="BR">Brasil</country>
      </aff>
...

Porém, a meu ver seria mais simples se pudéssemos identificar dois orgnames numa mesma aff.. Exemplo:

<aff id="aff1">
        <label>1</label>
        <institution content-type="normalized">Universidade Federal do Rio de Janeiro</institution>
        <institution content-type="orgname">Universidade Federal do Rio de Janeiro</institution>
        <institution content-type="normalized">Universidade do Estado do Rio de Janeiro</institution>
        <institution content-type="orgname">Universidade do Estado do Rio de Janeiro</institution>
        <country country="BR">Brasil</country>
        <institution content-type="original">Universidade Federal do Rio de Janeiro e Universidade do Estado do Rio de Janeiro – Brasil</institution>
      </aff>

Porém, nesse caso teríamos dois orgnames e dois normalized.
Há algum impedimento para SciELO de apresentar duas tags com o valor "normalized"?

Não acusar erro para link de licença by-nc-nd

Como já tínhamos revistas com esta licença 9by-nc-nd) e só documentamos este tipo de licença by-nc-nd somente no SPS 1.2 o Style Checker não deveria acusar erro para versões anteriores (1.1).

Devemos tomar este problema como um problema na documentação desde o início e não na versão 1.1, pois a mesma deveria suportar também este tipo de licença.

Elementos obrigatórios, sem texto, não causam erros de validação.

A obrigatoriedade de elementos compreende, além da sua presença, a existência de no mínimo 1 caractere. Atualmente apenas a presença do elemento é verificada.

Atualização:

  • Resolvido para o article-id[article-id-type="doi"] [8fb9e9d]

Pontos para análise - scielo-style-1.2.sch:

260:Element 'journal-meta': Missing element journal-id with journal-id-type="publisher-id".
274:Element 'journal-title-group': Missing element journal-title.
277:Element 'journal-title-group': Missing element abbrev-journal-title with abbrev-type="publisher".
285:Element 'journal-meta': Missing element publisher.
301:Element 'article-meta': Missing elements fpage or elocation-id.
309:Element 'journal-meta': Missing element issn with pub-type=("epub" or "ppub").
326:Element 'article-meta': Missing element article-id with pub-id-type="doi".
485:Element 'article-meta': Missing element volume.
503:Element 'article-meta': Missing element issue.
592:Element 'sec': Missing element title.
719:Element 'caption': Missing element title.
1352:Element 'fn': Missing element funding-statement.

StyleChecker apresenta erro em page-count quando há <elocation-id>

Verificamos que o StyleChecker apresenta o seguinte erro ao validar arquivos que apresentam paginação eletrônica:

"message": "Element 'counts': Missing element or wrong value in page-count."

Em <page-count> inserimos o total de páginas do arquivo. Veja:

<article-meta>
    [...]
 <volume>37</volume>
      <issue>1</issue>
      <elocation-id>1303</elocation-id>

      [...]

      <counts>
        <fig-count count="6"/>
        <table-count count="0"/>
        <equation-count count="8"/>
        <ref-count count="21"/>
        <page-count count="6"/>
      </counts>
    </article-meta>

Verificar a possibilidade de validar o total de páginas mesmo quando há paginação eletrônica.

[branch html-generator] CSS padrão para HTML gerados

A fim de entregar a funcionalidade de pré-visualização dos HTMLs, o packtools deve oferecer uma CSS padrão que deverá ser relacionada dinamicamente aos arquivos HTML gerados pelo utilitário de linha de comando htmlgenerator.

Bug na validação de *article-categories/subj-group*

<article-categories>
  <subj-group>
    <subject>
      AGRICULTURE, DAIRY & ANIMAL SCIENCE
    </subject>
    <subject>
      ORNITHOLOGY
    </subject>
  </subj-group>
</article-categories>

Para o caso acima, o stylechecker identifica os error:

Element 'article-categories': Missing element subj-group with subj-group-type="heading".
Element 'article-categories': Many elements subj-group with subj-group-type="heading".  #ERRADO!

Anotações de erros como comentários

Atualmente as anotações de erros são realizadas com elementos HTML <SPS-ERROR>Mensagem</SPS-ERROR>, no caso de elementos presentes e não raíz, caso contrário é criado adicionado um comentário no formato <!-- SPS-ERROR: Mensagem -->.

O problema é que essas regras causam confusão e dificuldade de visualização dentro do XML, portanto todos os erros devem ser reportados como comentários (conforme descrito acima).

[FIXED] styleschecker não disponível após instalação Ubuntu 12.04

Após instalar as dependências dev com sudo apt-get install libxml2-dev libxslt1-dev python-dev pude realizar a instalação bem sucedida. Entretanto o comando stylechecker não estava disponível no terminal.

Descobri pelo output da instalação que o comando havia sido instalado em $HOME/.local/bin/

Como esse PATH não é default do Ubuntu o comando não estava disponível.

Após incluir $HOME/.local/bin/ no meu PATH o comando ficou disponível.

Talvez seja interessante colocar uma OBS no readme enquanto o installer não fizer isso direito.

Consolidação das regras de tabelas

Gustavo,

Em 14 de março enviei um resumo das decisões do SciELO na lista XML, a respeito de tabelas,
https://groups.google.com/forum/#!topic/scielo-xml/uWWvrHL7RbQ
o resumo foi orientado a XPath, para facil "tradução" para XSLT ou Schematron.
Abaixo a tradução, aproveitando o seu pattern xhtml-table. Coloquei nos comentários o texto da lista de cada item e sua assert/report correspondente.

Resta conferir se minha interpretação da discussão da lista foi correta, e se a regra da época continua vigente... Usei os "reports" para traduzir mais precisamente o texto, mas restaria transformar em asserts equivalentes.

  <pattern id="xhtml-table">
    <title>
      Tables should be fully tagged. tr elements are not supposed to be declared
      upon the toplevel.
    </title>

    <rule context="//table">
       <report test="tbody or thead">O.K.</report> 
       <report test="not(tr)">Ok, sem tr</report> 

      <assert test="not(tr)">
        Element 'table': unexpected child 'tr'.
      </assert>

      <!-- não pode ter  thead//td , só  thead//th -->
      <assert test="not(thead//td)">
        Element 'thead': unexpected child 'td'.
      </assert>

      <!-- não pode ter  tbody//th -->
      <assert test="not(tbody//th)">
        Element 'tbody': unexpected child 'th'.
      </assert>

      <!-- pode com propriedade "font-weight=normal". -->
       <report test="thead//th/@style[contains(.,'font-weight=normal')]">Style Ok</report> 

      <!-- pode thead//th/@valign com "left" -->
       <report test="thead//th[@valign='left']">valign Ok</report>

      <!-- não pode thead//th/@valign com "center" -->
       <assert test="not(thead//th[@valign='center'])">valign center redundant</assert> 


      <!-- pode mais de um  thead -->
       <report test="count(thead)&gt;1">mais de um thead Ok</report> 

      <!-- pode mais de um  tbody -->
       <report test="count(thead)&gt;1">mais de um thead Ok</report> 

      <!-- pode ter  thead/@style -->
       <report test="thead/@style">pode ter  thead com style</report> 
      <!-- pode ter  tbody/@style -->
       <report test="tbody/@style">pode ter  tbody com style</report> 

      <!-- pode ter  table/@width -->
       <report test="@width">pode ter  width</report> 

      <!-- pode  td/@style  com propriedades "background-color", "border-bottom" e/ou "border-color". -->
       <assert test="not( .//td[not(@style) or contains(@style,'background-color')  or contains(@style,'border-bottom')  or contains(@style,'border-color')] )">
            style attribute of 'td' only having "background-color", "border-bottom" and/or "border-color"
       </assert> 

      <!-- pode bigodes -->
       <report test=".//td/hr  or  .//th/hr">ok bigodes</report> 

      <!-- obrigatório table[@frame='hsides' and @rules='groups']  (não pode tag table sem esses atributos). -->
      <!-- obrigatório table/colgroup  e  table/colgroup/col  -->
        <!-- obrigatório table/thead  (mesmo que vazia, sem tr nem th) -->
        <!-- obrigatório table/tbody  (e não pode ser vazio) -->

        <assert test="not(.[@frame='hsides' and @rules='groups' and colgroup and colgroup/col and thead and tbody])">
           table need attributes and colgroup and col and thead and tbody
        </assert> 

    <!-- ... obrigatório table/tbody  (e não pode ser vazio) -->
        <assert test="not(count(./tbody/*) &gt; 1)">need not empty tbody</assert> 

    </rule>
  </pattern>

<xref> de autor e <label> de afiliações devem estar em <sup>

Verifiquei que o previewer não apresenta nenhuma formatação para os <xref>de autores (ex.: <xref ref-type="aff" rid="aff1">1</xref>) e quando há mais que um <xref>de autor, o programa mantém os números juntos, dando a impressão de que é um único número em vez de dois. Veja:

xrefs-previewer

Notei também que o programa apresenta como link um elemento "fechado": <xref ref-type="corresp" rid="con1"/>. Informo que elementos "fechados" não devem aparecer no previewer.

Obs: <xref>do tipo "aff" e "bibr" devem ser apresentadas em sup

http://docs.scielo.org/projects/scielo-publishing-schema/pt_BR/1.3-branch/tagset.html#xref

Remover o módulo *packtools.xray*

Esse módulo foi desenvolvido pensando na manipulação de pacotes zip de artigos individuais, e não há perspectiva de uso no futuro próximo, portanto deve ser removido da biblioteca.

Bug na validação de page-count do Style Checker

Oi Gente,

Alguns periódicos usam as páginas do Editorial prefixadas (exemplo: E1) e isso gera erro na validação do /article/front/article-meta/counts/page-count pois fpage e lpage não são inteiros.[1]

O erro está na linha 455.

A solução (para PREFIXOS) seria considerar apenas os números à direita dos elementos <fpage>E1</fpage> e <lpage>E1</lpage>.

hmmmm... temos também os SUFIXOS... embora mais raros. Talvez a solução mais genérica seja capturar apenas o número mesmo, descartando eventuais prefixos e sufixos:

 [^\d]*(\d+)[^\d]*

O trecho relevante do XML:

  <front>
    <article-meta>
[...]
      <pub-date pub-type="epub-ppub">
        <season>Jan-Feb</season>
        <year>2015</year>
      </pub-date>
      <volume>25</volume>
      <issue>1</issue>
      <fpage>E1</fpage>
      <lpage>E1</lpage>
      <counts>
        <fig-count count="0"/>
        <table-count count="0"/>
        <equation-count count="0"/>
        <ref-count count="0"/>
        <page-count count="1"/>
      </counts>
    </article-meta>
  </front>

[1] Exemplo de saída com erro Element 'counts': Missing element or wrong value in page-count.
image

Sugestão para --annotated

Oi gente,

Penso que seria legal se o --annotated, ao invés de gerar um arquivo anotado, criasse um novo bloco no JSON com a linha do comentário e a linha seguinte do XML, como no Exemplo de saída abaixo.

Isso seria útil na minha opinião, pois na maioria das vezes basta bater o olho para saber onde está o problema!

Ah, quanto a gerar um arquivo anotado poderia ser usando o clássico parâmetro -o OUTPUT_FILE

Exemplo de saída:

"sps_errors": [
    "Element 'article-title': Unexpected attribute xml:lang.",
    "Element 'aff', attribute id: Integer value is required after the prefix 'aff'."
],
"sps_annotations": [
    "<!--SPS-ERROR: Element 'article-title': Unexpected attribute xml:lang.-->
        <article-title xml:lang="pt">Editorial</article-title>",
    "<!--SPS-ERROR: Element 'aff', attribute id: Integer value is required after the prefix 'aff'.-->
          <aff id="aff1_en">"
]

Nota: pela syntax highlight já deu pra ver que as aspas duplas no XML podem dar algum trabalho... hehehe

Qualquer elemento *ref* deve possuir *mixed-citation* e *element-citation*

Para ambas as versões da especificação SPS atualmente suportadas (1.1 e 1.2), a presença desses elementos é obrigatória para todo elemento ref.

ps.: A documentação não deixa explícita a obrigatoriedade do elemento mixed-citation, embora na prática a equipe de QA assuma a restrição.

Elementos que não devem constar em determinados tipos de referência.

Book
<article-title>, <conf-date>, <conf-loc>, <conf-name>, <conf-num>, <conf-sponsor>, <conf-theme>, <conference>; *<patent>;

Journal
<chapter-title>, <conf-date>, <conf-loc>, <conf-name>, <conf-num>, <conf-sponsor>, <conf-theme>, <conference>; *<patent>;

Thesis
<article-title>, <conf-date>, <conf-loc>, <conf-name>, <conf-num>, <conf-sponsor>, <conf-theme>, <conference>; *<patent>;

Conference
<article-title>; <chapter-title>; <patent>;

Webpage
<article-title>, <chapter-title>

http://www.ncbi.nlm.nih.gov/pmc/pmcdoc/tagging-guidelines/citations/v3/toc.html

Avaliar possibilidade de outra codificação para <, > e &

Bom dia,

Atualmente a SPS exige que as seguintes codificações para os 3 caracteres abaixo:

  • &lt; para <
  • &gt; para >
  • &amp; para &

Gostaria de solicitar que por favor avaliassem a possibilidade de aceitar também as codificações abaixo:

  • &#x003C; para <
  • &#x003E; para >
  • &#x0026; para &

Creio que ambas são seguras, resultam em HTML válido e podem co-existir..

obrigado,

Luciano

Previewer não apresenta todos os dados iniciais do documento

Verifiquei que o htmlgenerator não apresenta os seguintes dados:

  • Seção (identificada em <subject>);
  • Afiliações (em <aff> : utilizar conteúdo de <institution content-type="original">);
  • Resumos (identificados em <abstract> e <trans-abstract>);
  • DOI se repete;

Notei ainda que foi criado um campo "About the authors e um "Authors notes", entretanto há apenas a informação de correspondência. Evitar apresentar determinados campos quando não há dado;
O mesmo ocorre para informação de financiamento.

Exemplo:

previewer

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.