italia / design-comuni-wordpress-theme

Tema Wordpress per i siti dei comuni italiani
GNU Affero General Public License v3.0
33 stars 33 forks source link

R.SI.1.1 - METATAG - codice json non valido #374

Closed mariantanase closed 1 year ago

mariantanase commented 1 year ago

Prerequisiti

Descrivi il problema

Il codice json contenuto nella pagina single-servizio.php, risulta non valido e di conseguenza anche il tool di validazione lo segnala. Come va modificato per superare la validazione in oggetto ?


{
                    "name": "<?php echo esc_js($post->post_title); ?>",
                    "serviceType": "<?php echo esc_js($categoria_servizio); ?>",
                    "serviceOperator": {
                        "name": "<?php echo esc_js($ipa); ?>"
                    },
                    <?php if ( !empty($copertura_geografica) ) : ?>
                    "areaServed": {
                        "name": "<?php echo convertToPlain($copertura_geografica); ?>"
                    },
                    <?php endif; ?>
                    "audience": {
                        "audienceType": "<?php echo convertToPlain($destinatari); ?>"
                    },
                    "availableChannel": {
                        <?php if ( !empty($canale_digitale_link) ) : ?>
                        "serviceUrl": "<?php echo esc_js($canale_digitale_link); ?>",
                        <?php endif; ?>
                        <?php if ( !empty($ufficio) ) : ?>
                        "serviceLocation": {
                            "name": "<?php echo esc_js($ufficio->post_title); ?>",
                            "address": {
                                "streetAddress": "<?php echo esc_js($indirizzo); ?>",
                                "postalCode": "<?php echo esc_js($cap); ?>"
                                <?php if ( !empty($quartiere) ) : ?>,
                                "addressLocality": "<?php echo esc_js($quartiere); ?>"
                                <?php endif; ?>
                            }
                        }
                        <?php endif; ?>
                    }
            }

Grazie

Includi link o screenshot

Screenshot 2023-10-10 at 14-26-41 Lighthouse Report

Su quale sisitema operativo stai riscontrando il problema?

Windows

Su quale browser stai riscontrando il problema?

Qualsiasi

Che versione del tema stai utilizzando?

1.7.3

enrimk commented 1 year ago

Probabilmente, è a causa dell'apostrofo nel titolo del servizio: "Carta d'identità...". Vedi: #343

mariantanase commented 1 year ago

Probabilmente, è a causa dell'apostrofo nel titolo del servizio: "Carta d'identità...". Vedi: #343

La tua pull risolverebbe il problema ? Grazie

mariantanase commented 1 year ago

Con la pull-request il json risulta valido, però ancora non passa la validazione.

Screenshot 2023-10-10 at 16-32-00 Lighthouse Report

enrimk commented 1 year ago

È che il Servizio per passare deve essere compilato per filo e per segno, in pratica basta saltare qualcosa, e ciao. Se poi manca il Luogo, si perde già la metà dei campi obbligatori. Aggiungiamoci la grana di addressLocality, e il gioco è fatto...

mariantanase commented 1 year ago

Il fatto è che tutti i campi obbligatori sono stati inseriti, non capisco il perché...

enrimk commented 1 year ago

Ma nell'html della pagina il tag ld+json è completo?

mariantanase commented 1 year ago

Sembra di si

{
                    "@context": "http://schema.org",
                    "@type": "GovernmentService",
                    "name": "Carta d'identit\u00e0 elettronica (CIE)",
                    "serviceType": "Anagrafe e stato civile",
                    "serviceOperator": {
                        "@type": "GovernmentOrganization",
                        "name": ""                    },
                                        "areaServed": {
                        "@type": "AdministrativeArea",
                        "name": "A tutto il territorio del comune"
                    },
                                        "audience": {
                        "@type": "Audience",
                        "audienceType": "La CIE può essere richiesta da tutti coloro (cittadini italiani, comunitari e non) che risultano iscritti nell'Anagrafe della Popolazione Residente del Comune o che, comunque, abbiano, in tale Comune, la loro dimora.Per i cittadini residenti in altro Comune italiano il rilascio della CIE può essere richiesto solo per sopperire a necessità derivanti da gravi e comprovati motivi che non consentono di recarsi presso il proprio Comune di residenza (Circolare Ministero dell'Interno del 05/11/1999) e solo dopo aver ricevuto, da tale Comune, il relativo nulla osta.Per richiedere il rilascio della carta d'identità a nome di un minore, questi deve essere accompagnato allo sportello comunale da chi ha la responsabilità genitoriale (genitori o tutore), muniti di valido documento di riconoscimento e, nel caso del tutore, anche della sentenza di nomina."
                    },
                    "availableChannel": {
                        "@type": "ServiceChannel",
                        "name": "Dove rivolgersi"
                          ,"serviceLocation": {
                            "name": "Ufficio Anagrafe",
                            "address": {
                                "streetAddress": "Via da qui 21",
                                "postalCode": "01234"                                                            }
                        }
                                            }
                }
fabricius4 commented 1 year ago

nella creazione di un servizio che punta all'esterno per accesso tramite spid, il valutatore rimanda un JSON non valido. Non ci sono apostrofi ecc...ma rimane l'errore. Questo è bloccante ai fini dell'asseverazione oppure solo i metatag dei campi obbligatori? Avete suggerimenti su quale e come risolvere in ogni caso questo problema?

enrimk commented 1 year ago

@fabricius4 Vero: se c'è serviceUrl ma manca serviceLocation, il json non è valido. C'è questa virgola di troppo. La PR di cui sopra dovrebbe risolvere anche quello, comunque.


La morale forse è che anche il JSON, come l'XML, non è quasi mai una buona idea formarlo con i template di PHP. La via più sicura sarebbe probabilmente fare una bella _dci_jsonservizio(), in cui tutto viene passato attraverso json_encode() in un colpo solo.

enrimk commented 1 year ago

@mariantanase

"serviceOperator": {
                        "@type": "GovernmentOrganization",
                        "name": ""

Il nome del fornitore è in bianco. A quanto pare ciò per il validatore è un peccato mortale, esce subito inorridito e si rifiuta di considerare tutto il resto...

danimog commented 1 year ago

@enrimk @mariantanase per eludere il controllo di serviceOperator.name io ho compilato il campo (non obbligatorio) Codice dell'Ente erogatore (IPA) nei vari servizi. ma errori su audience.name e areaServed non sono riuscito a toglierli, idee?

il json è dato come corretto.

versione 1.7.3 del tema wordpress versione 2.7.2 del validatore

enrimk commented 1 year ago

Sì, infatti è quello, codice IPA, il campo che viene usato per il fornitore. Campo che fra parentesi si chiama in modo un po' fuorviante, è più un "nome" che un "codice". Sul fatto che non sia obbligatorio, ma necessario alla validazione... avevo anche pensato di metterci un default sensato, ma poi l'ho tolto, perché mi è venuto in mente che forse, da qualche parte nel vasto mondo, dopotutto possano esistere anche servizi senza fornitore identificato, e da non validare, e che questo sia effettivamente stato considerato per questa scelta. Magari però una nota sul campo IPA, a backoffice, circa il suo ruolo nell'asseverazione, sarebbe utile.

I nomi sono audience.audienceType per "A chi è rivolto" (="destinatari"), e areaServed.name per "copertura_geografica". Questo, anche secondo la documentazione. Il validatore cerca proprietà diverse?

enrimk commented 1 year ago

Il validatore cerca proprietà diverse?

In effetti... Non conosco jsonschema e metatagAudit.ts non contiene tutta la procedura, ma questa cosa qui insospettisce parecchio.

fabricius4 commented 1 year ago

si perchè anche se passa come JSON valido rimane questo audience.name come errore. Sto provando una cosa e nel caso aggiorno

danimog commented 1 year ago

@enrimk in effetti.. qui dà come required: ["name"] ma nel json di single-servizio.php il riferimento a name non c'è..

"audience": { "audienceType": "<?php echo convertToPlain($destinatari); ?>",

ovviamente mettendo un attributo name "fake" tipo

"audience": { "audienceType": "<?php echo convertToPlain($destinatari); ?>", "name":"all" },

il validatore passa con il 100%....

enrimk commented 1 year ago

Bisogna riconoscere che almeno per il validatore, il team dimostra una certa prontezza. È arrivata una PR.

fabricius4 commented 1 year ago

Sì, infatti è quello, codice IPA, il campo che viene usato per il fornitore. Campo che fra parentesi si chiama in modo un po' fuorviante, è più un "nome" che un "codice". Sul fatto che non sia obbligatorio, ma necessario alla validazione... avevo anche pensato di metterci un default sensato, ma poi l'ho tolto, perché mi è venuto in mente che forse, da qualche parte nel vasto mondo, dopotutto possano esistere anche servizi senza fornitore identificato, e da non validare, e che questo sia effettivamente stato considerato per questa scelta. Magari però una nota sul campo IPA, a backoffice, circa il suo ruolo nell'asseverazione, sarebbe utile.

I nomi sono audience.audienceType per "A chi è rivolto" (="destinatari"), e areaServed.name per "copertura_geografica". Questo, anche secondo la documentazione. Il validatore cerca proprietà diverse?

invece questo: availableChannel.serviceLocation.address.addressLocality a cosa corrisponde?

danimog commented 1 year ago

invece questo: availableChannel.serviceLocation.address.addressLocality a cosa corrisponde?

dovrebbe corrispondere al campo del back office "Copertura geografica"

enrimk commented 1 year ago

invece questo: availableChannel.serviceLocation.address.addressLocality a cosa corrisponde?

A... (rullo di tamburi)... a quartiere! ...Del Luogo, della Sede principale, del primo degli Uffici (canale fisico), del Servizio. [^1] Eh già... 😶

[^1]: A questo punto mi sembra sempre di sentire cantare Branduardi in sottofondo...

enrimk commented 1 year ago

al campo del back office "Copertura geografica"

Altri problemi, qua. Ma almeno non coinvolgono la validazione, solo la "semantica".

Infatti, nello schema di riferimento del json, il campo areaServed è un type AdministrativeArea. Che, per schema.org, sembra si riferisca a qualcosa di più ufficiale e giurisdizionalmente definito di "le zone coperte da ZTL", come nell'esempio a backoffice.

Inoltre, areaServed.name viene da Copertura geografica, che in anagrafica è un campo multiriga, e con un editor richtext. Ciò non corrisponde molto alla proprietà AdministrativeArea::name - che è vero che tecnicamente è indicata solo come Text, apparentemente senza espliciti vincoli di lunghezza o formato, ma non so se è previsto che contenga addirittura dei capoversi, o della formattazione. Sarebbe allora più appropriato AdministrativeArea::description per un oggetto del genere. [^1]

[^1]: E vedo che può infatti essere un TextObject, a differenza di name.

tomasdimaio commented 1 year ago

@enrimk in effetti.. qui dà come required: ["name"] ma nel json di single-servizio.php il riferimento a name non c'è..

"audience": { "audienceType": "<?php echo convertToPlain($destinatari); ?>",

ovviamente mettendo un attributo name "fake" tipo

"audience": { "audienceType": "<?php echo convertToPlain($destinatari); ?>", "name":"all" },

il validatore passa con il 100%....

ciao ho fatto la modifica che proponi ma il validatore mi da sempre zero con la seguente dicitura:

Risultato In almeno una delle schede servizio analizzate meno del 50% dei metatag richiesti sono presenti e corretti. |   |   Pagine nelle quali meno del 50% dei metatag richiesti sono presenti e corretti: | JSON valido | Metatag non presenti o errati  

enrimk commented 1 year ago

ovviamente mettendo un attributo name "fake" tipo "audience": { "audienceType": "...", "name":"all" },

ciao ho fatto la modifica che proponi ma il validatore mi da sempre zero con la seguente dicitura:

NB @tomasdimaio: quello di @danimog non era una proposta, era un test - e solo un test di uno specifico bug del validatore.

Il tuo problema può essere diverso: anche se quel particolare tag ora si valida, può benissimo essere che in uno dei servizi manchino dati, abbastanza per non soddisfare il validatore (che è piuttosto severo).

Tra parentesi, nel frattempo nell'ultima versione del validatore quel bug di audience è stato corretto.

tomasdimaio commented 1 year ago

Salve scusatemi ma non riesco proprio ad uscire da questo problema, nonostante compili tutti campi , così come detto in precedenza, il validatore mi da ancora il js non valido, ma soprattutto non mi segnala quali sono i metatag non presenti image

danimog commented 1 year ago

ciao @tomasdimaio i dati nella pagina del servizio li hai compilati tutti? prova in particolare a compilare il campo "copertura geografica". a me aveva bloccato quello la validità del json. Guardando difatti il tuo codice html si vede che nel codice dello script application/ld+json il valore seguente è vuoto: "areaServed": { "name": "" },

enrimk commented 1 year ago

@tomasdimaio ...E soprattutto: hai applicato la #343 ? Negli indirizzi dei tuoi luoghi c'è un a-capo, rende invalido il JSON.

fabricius4 commented 1 year ago

Salve scusatemi ma non riesco proprio ad uscire da questo problema, nonostante compili tutti campi , così come detto in precedenza, il validatore mi da ancora il js non valido, ma soprattutto non mi segnala quali sono i metatag non presenti image

prova a compilare il campo Uffici (canale fisico), dovrebbe essere questo che vincola la validità

enrimk commented 1 year ago

@zetareticoli Perché l'issue non è più un bug?