NativeXML validation errors

We are moving a journal from a standalone installation of OJS 3.1.2 to a multi-journal installation on a different subdomain running 3.2.0.3. Settings and configurations have been handled manually and users have been successfully exported and imported to the new instance via the Users XML Plugin. I am now trying to move the archive of back issues using the Native XML Plugin, but encountering errors on both export and import.

When using the Native XML Plugin under the “Issues” tab, attempts at exporting certain (primarily older) issues produce the following message:

Validation errors:

Element ‘{http://pkp.sfu.ca}affiliation’: This element is not expected. Expected is ( {http://pkp.sfu.ca}givenname ).

Element ‘{http://pkp.sfu.ca}email’: This element is not expected. Expected is ( {http://pkp.sfu.ca}givenname ).

Element ‘{http://pkp.sfu.ca}submission_file’: This element is not expected. Expected is one of ( {http://pkp.sfu.ca}title, {http://pkp.sfu.ca}prefix, {http://pkp.sfu.ca}subtitle, {http://pkp.sfu.ca}abstract, {http://pkp.sfu.ca}coverage, {http://pkp.sfu.ca}type, {http://pkp.sfu.ca}source, {http://pkp.sfu.ca}rights, {http://pkp.sfu.ca}licenseUrl, {http://pkp.sfu.ca}copyrightHolder ).

Element ‘{http://pkp.sfu.ca}submission_file’: This element is not expected. Expected is one of ( {http://pkp.sfu.ca}agencies, {http://pkp.sfu.ca}disciplines, {http://pkp.sfu.ca}subjects, {http://pkp.sfu.ca}authors ).

Element ‘{http://pkp.sfu.ca}issue’: Missing child element(s). Expected is ( {http://pkp.sfu.ca}articles ).

This is then followed by a printout of the “Invalid XML” and the text “Could not convert selected objects.”

Most issues export successfully but, when importing, I can upload the files without difficulty only to receive the following error after clicking “Import”:

Validation errors:

Any advice would be appreciated, as it is not an attractive prospect to move over a decade’s worth of content item by item with QuickSubmit! Given that we are moving from one location to another within OJS 3, I am also open to suggestions on alternative approaches to moving that back catalog if something else would be more efficient than the Native XML Plugin route.

Hi @racemochridhe,

This XML format is not intended to be forwards- or backwards-compatible, and there are changes to its structure between OJS 3.1.x and 3.2.x. You’ll either need to adapt the XML yourself before importing it, or upgrade your installation to a matching version before exporting it.

Regards,
Alec Smecher
Public Knowledge Project Team

@asmecher, that makes sense of it then. Thank you. Is there a guide anywhere to the adaptations required to make the XML compatible with the 3.2.x schema?

Hi @racemochridhe,

Changes introduced with OJS 3.2 are described in the 3.2 Release Notebook – however this doesn’t describe the XML specifically. To see how an XML file needs to be adapted, you can look at the changes in the two relevant XSD files.

For plugins/importexport/native/native.xsd:

diff --git a/ojs-stable-3_1_2/plugins/importexport/native/native.xsd b/ojs-stable-3_2_1/plugins/importexport/native/native.xsd
index 311f145..2119b8e 100644
--- a/ojs-stable-3_1_2/plugins/importexport/native/native.xsd
+++ b/ojs-stable-3_2_1/plugins/importexport/native/native.xsd
@@ -3,9 +3,9 @@
 <!--
   * plugins/importexport/native/native.xsd
   *
-  * Copyright (c) 2014-2019 Simon Fraser University
-  * Copyright (c) 2003-2019 John Willinsky
-  * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
+  * Copyright (c) 2014-2020 Simon Fraser University
+  * Copyright (c) 2003-2020 John Willinsky
+  * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
   *
   * Schema describing native XML import/export elements specific to OJS
   -->
@@ -22,15 +22,6 @@
 		<complexType>
 			<complexContent>
 				<extension base="pkp:submission">
-					<sequence>
-						<element ref="pkp:issue_identification" minOccurs="0" maxOccurs="1" />
-						<element maxOccurs="1" minOccurs="0" name="pages" type="string" />
-						<element ref="pkp:citations" minOccurs="0" maxOccurs="unbounded"/>
-						<element ref="pkp:covers" minOccurs="0" maxOccurs="1" />
-					</sequence>
-					<attribute name="section_ref" type="string" use="required" />
-					<attribute name="seq" type="int" />
-					<attribute name="access_status" type="int" />
 					<attribute name="stage" use="required">
 						<simpleType>
 							<restriction base="string">
@@ -47,6 +38,28 @@
 	</element>
 	<element name="articles" substitutionGroup="pkp:submissions" />
 
+	<!-- Permit "citation" as a root element to keep the filters happy -->
+	<element name="citation" type="string" />
+
+	<element name="publication" substitutionGroup="pkp:pkppublication">
+		<complexType>
+			<complexContent>
+				<extension base="pkp:pkppublication">
+					<sequence>
+						<element ref="pkp:issue_identification" minOccurs="0" maxOccurs="1" />
+						<element maxOccurs="1" minOccurs="0" name="pages" type="string" />
+						<element ref="pkp:covers" minOccurs="0" maxOccurs="1" />
+						<element maxOccurs="1" minOccurs="0" name="issueId" type="int" />
+						<element ref="pkp:citations" minOccurs="0" maxOccurs="unbounded"/>
+					</sequence>
+					<attribute name="section_ref" type="string" use="required" />
+					<attribute name="seq" type="int" />
+					<attribute name="access_status" type="int" />
+				</extension>
+			</complexContent>
+		</complexType>
+	</element>
+
 	<!-- Configure the use of the "article_galley" representation -->
 	<element name="article_galley" substitutionGroup="pkp:representation">
 		<complexType>
@@ -128,6 +141,7 @@
 		<attribute name="published" type="int" use="optional" />
 		<attribute name="current" type="int" use="optional" />
 		<attribute name="access_status" type="int" use="optional" />
+		<attribute name="url_path" type="string" use="optional" />
 	</complexType>
 
 	<element name="issue_identification">
@@ -144,6 +158,7 @@
 	<complexType name="issue_galley">
 		<sequence>
 			<element name="label" type="string" minOccurs="1" maxOccurs="1" />
+			<element ref="pkp:id" minOccurs="0" maxOccurs="unbounded" />
 			<element ref="pkp:issue_file" minOccurs="0" maxOccurs="1" />
 		</sequence>
 		<attribute name="locale" type="string" />

…and for lib/pkp/plugins/importexport/native/pkp-native.xsd:

diff --git a/ojs-stable-3_1_2/lib/pkp/plugins/importexport/native/pkp-native.xsd b/ojs-stable-3_2_1/lib/pkp/plugins/importexport/native/pkp-native.xsd
index 78d95c2..30aa069 100644
--- a/ojs-stable-3_1_2/lib/pkp/plugins/importexport/native/pkp-native.xsd
+++ b/ojs-stable-3_2_1/lib/pkp/plugins/importexport/native/pkp-native.xsd
@@ -3,9 +3,9 @@
 <!--
   * plugins/importexport/native/pkp-native.xsd
   *
-  * Copyright (c) 2014-2019 Simon Fraser University
-  * Copyright (c) 2003-2019 John Willinsky
-  * Distributed under the GNU GPL v2. For full terms see the file docs/COPYING.
+  * Copyright (c) 2014-2020 Simon Fraser University
+  * Copyright (c) 2003-2020 John Willinsky
+  * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
   *
   * Schema describing native XML import/export elements shared across PKP applications
   -->
@@ -106,6 +106,7 @@
 					<attribute name="filetype" type="normalizedString" use="required" />
 				</complexType>
 			</element>
+			<element name="salesType" minOccurs="0" maxOccurs="1" />
 		</sequence>
 		<attribute name="id" type="normalizedString" />
 		<attribute name="stage">
@@ -149,6 +150,7 @@
 			<element name="is_default" type="boolean" />
 			<element name="show_title" type="boolean" />
 			<element name="permit_self_registration" type="boolean" />
+			<element name="permit_metadata_edit" type="boolean" />
 			<element name="name" type="pkp:localizedNode" minOccurs="0" maxOccurs="unbounded" />
 			<element name="abbrev" type="pkp:localizedNode" minOccurs="0" maxOccurs="unbounded" />
 			<element name="stage_assignments" type="string" minOccurs="1" maxOccurs="1" />
@@ -188,6 +190,8 @@
 				<attribute name="primary_contact" type="boolean" default="false" />
 				<attribute name="user_group_ref" type="pkp:user_group_ref" use="required" />
 				<attribute name="include_in_browse" type="boolean" default="true" />
+				<attribute name="seq" type="int" use="required" />
+				<attribute name="id" type="int" use="required" />
 			</extension>
 		</complexContent>
 	</complexType>
@@ -206,9 +210,25 @@
 				<element name="remote" type="pkp:remote" minOccurs="0" maxOccurs="1" />
 			</choice>
 		</sequence>
+		<attribute name="locale" type="string" use="optional" />
+		<attribute name="url_path" type="string" use="optional" />
 	</complexType>
 
 	<complexType name="submission">
+		<sequence>
+			<element ref="pkp:id" minOccurs="0" maxOccurs="unbounded" />
+
+			<!-- Metadata -->
+			<element ref="pkp:submission_file" minOccurs="0" maxOccurs="unbounded" />
+			<element ref="pkp:pkppublication" minOccurs="1" maxOccurs="unbounded" />
+		</sequence>
+		<attribute name="status" type="string" use="optional" />
+		<attribute name="current_publication_id" type="int" use="optional" />
+		<attribute name="date_submitted" type="date" use="optional" />
+		<attribute name="submission_progress" type="int" use="optional" />
+	</complexType>
+
+	<complexType name="pkppublication">
 		<sequence>
 			<element ref="pkp:id" minOccurs="0" maxOccurs="unbounded" />
 
@@ -229,7 +249,6 @@
 			<element ref="pkp:disciplines" minOccurs="0" maxOccurs="unbounded" />
 			<element ref="pkp:subjects" minOccurs="0" maxOccurs="unbounded" />
 			<element ref="pkp:authors" minOccurs="1" maxOccurs="1" />
-			<element ref="pkp:submission_file" minOccurs="0" maxOccurs="unbounded" />
 			<element ref="pkp:representation" minOccurs="0" maxOccurs="unbounded" />
 			<element ref="pkp:citations" minOccurs="0" maxOccurs="unbounded"/>
 		</sequence>
@@ -237,6 +256,10 @@
 		<attribute name="language" type="string" use="optional" />
 		<attribute name="date_submitted" type="date" use="optional" />
 		<attribute name="date_published" type="date" use="optional" />
+		<attribute name="version" type="int" use="optional" />
+		<attribute name="status" type="int" use="optional" />
+		<attribute name="primary_contact_id" type="int" use="optional" />
+		<attribute name="url_path" type="string" use="optional" />
 	</complexType>
 
 	<!-- ************
@@ -302,6 +325,8 @@
 	<!-- Permit "submission" as a root element -->
 	<element name="submission" type="pkp:submission" abstract="true" />
 
+	<element name="pkppublication" type="pkp:pkppublication" />
+
 	<!-- Controlled vocabularies -->
 	<element name="keywords">
 		<complexType>

The biggest change is related to versioning support, which was added to OJS 3.2.0. Instead of the article metadata being attached ot the <article> element, it’s now attached to the <publication> element, and each <article> can have several <publication>s.

There is a sample 3.2.1 import that’s used by our automated testing available here: https://github.com/pkp/ojs/blob/stable-3_2_1/cypress/fixtures/export-issues.xml

Regards,
Alec Smecher
Public Knowledge Project Team

Hola @asmecher,
Estaba leyendo este topic de “Native XML validation errors” y te comento mi situación ya que no he logrado migrar mi OJS, mi situación actual es que quiero importar y exportar mediante XML nativo, logro generar los archivos desde la versión 3.1.2.1 pero al querer importarlos a la versión 3.2.1.1 me manda varios errores, he estado leyendo al respecto y al parecer se deben adecuar los archivos xml para poder importarlos, entonces mis preguntas son:
1.- En especifico, que es lo que se tiene q adecuar o cambiar en el xml para que pueda importarse a la versión 3.2.1.1?
2.- Existe un transformador que haga estas adecuaciones de manera masiva?

Gracias de antemano y espero puedas apoyarme
Saludos, Regards
RicardoRJ

Hola @rrodriguez,

Sobre 1:
Los cambios son bastantes y se describen en el xsd que ha adjuntado Alec en el post previo:

Sobre 2:
No existe una herramienta automàtica para hacer estos cambios, pero se podría emplear un editor de texto capaz de leer expresiones regulares (atom, sublime…) y usar la función de buscar y cambiar.

No lo he probado pero, habiendo tantos cambios, mi estrategia sería importar en un OJS con la misma versión que el xml de origen, hacer el upgrade de ese OJS a la versión actual y luego, exportar de nuevo entre OJS con la misma versión.

Hola @marc,

Agradezco mucho tu respuesta, y en efecto es muy complicado adecuar los xml, ya logré levantar una base de datos de junio de este año, así que solo hace falta el contenido de julio a la fecha que bueno, se tendrá que ingresar a mano, pero ahora el tema que tengo es la configuración del sitio, ya que logre actualizar a la versión 3.2.1.1, tengo varios detalles de configuración como por ejemplo:
1.- En el encabezado me aparece dos veces el evento de Busqueda y un boton “Open Menu” que no logro encontrar donde se configuran.
2.- En la barra lateral tengo una imagen con un link a otro sitio y no logro hacer q se vela la imagen
3.- En el Pie de pagina tengo una imagen que tampoco logro hacer q se visualice y en la configuración no esta el botón de “upload”

Bueno, así estoy con esos detalles que se q son configuración pero a estas alturas y con tantos problemas que he tenido con esta actualización ya todo se me hace súper complicado jaja

Pero bueno, gracias por tu respuesta y pues aquí dejo esos temas igual y no soy el único al q le pasa eso y tienes algún contexto al respecto,

Saludos y gracias
Ricardo RJ

Hola Ricardo,

La verdad es que me he perdido un poco con encabezado/barra lateral/pie…
¿Puedes hacer una captura y marcar en ella el problema que tienes?

Se que no es consuelo, pero el cambio a la versión 3 ha sido un reto para todos, pero las mejoras son tantas que vale la pena.

Un saludo,
m.

Hola @marc,

Claro! gracias por tu apoyo y si, hs sido un caos desde hace algunos meses el tratar de instalar esta nueva versión, primero tuve muchos problemas con la base de datos, y bueno, logre recuperar un respaldo del mes de mayo de este año y con esa logre actualizar a la versión 3.2.1.1, pero ahora todos estos detalles de configuración ya me estan volviendo loco jajja, pero bueno, te mando las imagenes:

1.- Problema en el Header: Boton “Open Menu” y aparace dos veces y encimado “Buscar”
header

2.- En la Barra lateral tengo dos problemas, el primero es que no puedo logra que se visualice una imagen que tiene un link, y un modulo personalizado de redes sociales no logro ponerlo en la parte superior, siempre me aparece hasta abajo.

Esto quisiera q apareciera hasta arriba de la barra lateral --> barra_err2
Esta imagen esta rota pero el link si funciona --> barra_err

3.- En el pie de pagina tengo el mismo problema de la imagen, no logro hacer que se vea
pie_err

4.- Al querer configurar el pie de pagina, en la configuración del sitio, ya no aparece la opcion de Upload como estaba en las versiones anteriores y no puedo cambiar o manipular la imagen.
pie_ojs_3211 Asi esta ahora, sin la opción “Upload”

En versiones anteriores estaba asi:

Bueno, por ahora esos detalles son los que me siguen deteniendo con la configuración, espero puedas apoyarme Marc,

Saludos y muchas gracias por tu apoyo,

RicardoRJ

Son varias cosas. Si te parece, intentemos resolverlas una por una.

Empecemos por lo que a priori parece más fácil:
Casos 2 y 3 muestra una imagen rota. ¿Puedes hacer un “inspect” de dicha imagen para ver hacia dónde está yendo?

Tal vez descubramos un problema de configuración de tu OJS, o de las reglas del apache, o del dominio…

¿Tienes todo esto colgado en algún lado para echarle un ojo?

Saludos,
m.

Hola @Marc,
Si, en efecto la url estaba rota, pero no se como cambiarla para todas las revistas, tendría que editar una por una??
esto puede ser:
“Tal vez descubramos un problema de configuración de tu OJS, o de las reglas del apache, o del dominio…”
y claro, te envío el sitio desde una Ip publica para que lo veas, y bueno, ahora tengo otros temas con esto,
1.- Al añadir un modulo personalizado, con el gestor de bloques se queda guardando, y obvio nunca me deja verlo, anexo imagen,


Se queda guardando el bloque y no pasa de ahí.

2.- Al querer generar un informe desde el “Generador de Informes” - “Informe de vistas” me manda éste error: Unrecognized DAO PublishedArticleDAO!

Te comento, el sitio lo tengo colgado en un servidor que sera próximamente el que aloje los OJS públicos, por ahora solo tengo esta versión que me ah constado demasiado trabajo ponerla así como la veras,

http://200.188.19.41/revistas.inah.gob.mx/site/
Bueno, quedo en espera de tus cometarios Marc,

saludos,

Antes que nada, déjame felicitaros por el theme de vuestra revista. Me parece precioso.

Sobre los problemas, vayamos por partes: La buena práctica, para no liarnos, sería abrir un hilo para cada problema, describiendo de forma sintética y precisa cada caso.

Si te parece, dejamos este hilo para las imágenes y abres un caso para cada problema distinto? Así los hilos se combierten en base de conocimiento para todos (problema > solución) en vez de una conversación con múltiples temas y a su vez, al tratarse de un problema más pequeño, será más fácil que otras personas de la comunidad te respondan.

Sobre la imagen:

Si, en efecto la url estaba rota, pero no se como cambiarla para todas las revistas, tendría que editar una por una??

Hasta que no ubiquemos el problema no te puedo decir.

He mirado la web que enlazas y no veo ninguna imagen rota.

Puedes publicar las urls que fallaban y el equivalente que si funciona para ver que cambio hay que hacer?