AnsweredAssumed Answered

Extractor de metadatos para MS Office

Question asked by yaraiza on Nov 21, 2012
Latest reply on Jan 22, 2013 by yaraiza
Hola a la comunidad.

Después de varios días implementando un extractor de metadatos en la versión 3.4 para documentos excels 2003 y 2007, no he podido mostrar los metadatos extraídos como aspectos del modelo de contenido de Alfresco. Necesito ayuda.

Para el desarrollo del extractor consulte la siguiente pagina de la wiki:
http://wiki.alfresco.com/wiki/Metadata_Extraction

Os pongo aquí la configuración y declaración del extractor:

custom-metadata-extrators-context.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"[]>

<!– Registrar nuevo extractor de metadato personalizado de office –>
<beans>
    <bean id="extracter.CustomOpenOffice"  class="org.alfresco.sample.CustomOpenOfficeMetadataExtracter" parent="baseMetadataExtracter">
        <property name="inheritDefaultMapping">
            <value>true</value>
        </property>
        <property name="mappingProperties">
            <props>
                <prop key="namespace.prefix.cds">http://www.cds.org/model/content/1.0</prop>
                <prop key="category">cds:clasificacion</prop>
                <prop key="template">cds:plantilla</prop>
            </props>
        </property>
    </bean>
</beans>

custom-repository-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<!– Registrar el nuevo extractor de metadato personalizado de office –>
<beans>
     
      <bean id="extracter.CustomOpenOffice" class="org.alfresco.sample.CustomOpenOfficeMetadataExtracter" parent="baseMetadataExtracter" />

</beans>


CustomOpenOfficeMetadataExtracter.java
package org.alfresco.sample;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.Map;
import java.util.ArrayList;

import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.content.metadata.TikaPoweredMetadataExtracter;

import org.apache.log4j.Logger;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.tika.metadata.Metadata;

import org.apache.tika.parser.Parser;
import org.apache.tika.parser.microsoft.OfficeParser;


import org.alfresco.service.cmr.repository.ContentReader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class CustomOpenOfficeMetadataExtracter extends TikaPoweredMetadataExtracter {

   public static final String KEY_CATEGORY = "category";
   public static final String KEY_TEMPLATE = "template";   
   public static ArrayList<String> SUPPORTED_MIMETYPES= buildSupportedMimetypes(new String[] {MimetypeMap.MIMETYPE_EXCEL}, new OfficeParser());
   private static final String CUSTOM_PREFIX = "cds:";
    protected static Log logger = LogFactory.getLog(CustomOpenOfficeMetadataExtracter.class);
      
   
   public CustomOpenOfficeMetadataExtracter() {
       super(SUPPORTED_MIMETYPES);
       //logger.debug("Initializing CustomOpenOfficeMetadataExtracter logger constructor");

       // TODO Auto-generated constructor stub
      
      
   }

   @Override
   protected Parser getParser() {
      // TODO Auto-generated method stub      
      return new OfficeParser();
   }
   
   @Override
   public Map<String, Serializable> extractRaw(ContentReader reader)  {
        Map<String, Serializable> rawProperties = newRawMap();
        Metadata metadatap=new Metadata();
       
                 
        putRawValue("category", metadatap.get(Metadata.CATEGORY), rawProperties);
        putRawValue("template", metadatap.get(Metadata.TEMPLATE), rawProperties);
       
       
       
        String metadataCategory= metadatap.get(Metadata.CATEGORY);
        logger.info("\n\nPropiedad categoria:" + metadataCategory + "\n"); 
       
       
       
        String metadataTemplate= metadatap.get(Metadata.TEMPLATE);
        logger.info("\n\nPropiedad plantilla:" + metadataTemplate + "\n"); 
       
       
        logger.info("Poniendo datos?");      
        logger.info("\n\nPropiedades de vuelta:" + rawProperties.toString() + "\n");

        return rawProperties;
   }
    
      
}

A continuación pongo el modelo de contenido creado:

cdsModel.xml
<?xml version="1.0" encoding="UTF-8"?>

<model name = "cds:cdsmodel" xmlns = "http://www.alfresco.org/model/dictionary/1.0">
   <!– Metadatos opcionales del modelo personalizado –>  
   <description>Modelo personalizado</description>
   <author>Yaraiza</author>
    <version>1.0</version>
   
   <imports>
      <!– Importamos definiciones de Alfresco, concretamente el dicionario y modelo de contenido –>
      <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/>
      <!– Import Alfresco Content Domain Model Definitions –>
      <import uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
        </imports>
   
   <!– Registramos el Nuevo namespaces que se utilizara en este modelo –>   
   <namespaces>
      <namespace uri = "http://www.cds.org/model/content/1.0" prefix = "cds"/>
    </namespaces>
   
      
   <aspects>
      <!– Definicion de los aspectos personalizados del modelo –>
      <aspect name = "cds:aspectClasificacionDoc">
         <title>Clasificacion de Documentos</title>
         <properties>
            <property name = "cds:clasificacion">
               <title>Categoría</title>
               <type>d:text</type>
                </property>
            <property name = "cds:validar">
               <title>Validable</title>
               <type>d:boolean</type>
                    <default>false</default>
                </property>
            <property name = "cds:plantilla">
               <title>Plantilla</title>
               <type>d:text</type>
                </property>
         </properties>
      </aspect>
    </aspects>
</model>

cds-model-context.xml
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>

<beans>
    <!– Registro del modelo cdsModel –>  
    <bean id="extension.dictionaryBootstrap" parent="dictionaryModelBootstrap" depends-on="dictionaryBootstrap">
        <property name="models">
            <list>
                <value>org/alfresco/sample/cdsModel.xml</value>
            </list>
        </property>
    </bean>

</beans>

web-client-config-custom.xml
<alfresco-config>
    
    
   <!– Si queremos que el nuevo aspecto aparezca como opción en el wizard de reglas de contenido–>
   <config evaluator = "string-compare" condition = "Action Wizards">    
      <aspects>
         <aspect name = "cds:aspectClasificacionDoc"/>
      </aspects>     
   </config>
  
  
   <!– Para poder editar las propiedades que hemos definido en el nuevo aspect–>
   <config evaluator = "aspect-name" condition = "cds:aspectClasificacionDoc">
      <property-sheet>
         <show-property name="cds:clasificacion" displaylabelid="Categoría"/>
         <show-property name="cds:validar" displaylabelid="Validable" readonly="true"/>
         <show-property name="cds:plantilla" displaylabelid="Plantilla" readonly="true"/>         
       </property-sheet>
   </config>
  
</alfresco-config>


Estoy haciendo algo mal?

Muchas gracias de antemano

Outcomes