Question

Nous évaluons quelques technologies pour créer un référentiel de WSDLS et XSDS utilisées au sein de notre organisation. L'une des options que nous avons est d'utiliser Apache Jackrabbit , qui implémente JCR 1.0 et 2.0. Cela répond presque à nos attentes sur le téléchargement du contenu, de l'authentification et du versement. Cependant, nous envisagons également de télécharger plusieurs métadonnées (par exemple, crééeBy, lastmodifiedby, lastmodifiedtime, etc.) avec les WSDLS et XSDS au référentiel. Nous avons lu plusieurs des messages sur Stackoverflow, les spécifications JCR et les pages Wiki du site Web de Jackrabbit, mais n'ont pas bien compris - comment les métadonnées que nous téléchargeons peuvent être validées? Par exemple, si nous téléchargeons les métadonnées comme un contenu formé XML, nous souhaitons que le référentiel valide le XML contre un schéma XML. En termes d'API JCR, il existe une façon d'activer la validation de XML tout en important le contenu XML via session.importxml ?

Était-ce utile?

La solution

Vous pouvez essayer de regarder modeshape . C'est aussi une mise en œuvre de la JCR open source (licence LGPL), mais elle a la notion de ' séquenceurs 'qui dérive automatiquement des informations provenant des fichiers téléchargés et stocke ces informations comme contenu structuré (par exemple, sous-graphiques de nœuds et de propriétés) dans le référentiel, où il peut être recherché , interrogé et consulté comme tout autre contenu de référentiel. ModeDape a déjà quelques séquences, mais n'a pas encore de séquenceurs WSDL ou XSD (ils sont programmés dans la prochaine version, vers la fin de mai 2011).

Je suis le projet de projet pour modeshape, et moi aussi je l'utilise pour le stockage des fichiers WSDL et XSD (ainsi que d'autres formats de fichiers). En fait, nous utilisons des référentiels JCR pour stocker toutes sortes de métadonnées structurées.

Comme vous le mentionnez, JCR fournit un moyen d'importer du contenu, mais les fichiers XML importés sont de l'un des deux formats définis par la spécification JCR (vue système et affichage du document). Le format XML View XML utilise des éléments et des attributs spécifiques à la JCR, alors que le document affiche des éléments de carte dans des nœuds et des attributs dans les propriétés (sa réellement un peu plus nuancées). Et comme ce processus d'importation entraînera une teneur en matière de référentiel supplémentaire (nœuds et propriétés), les référentiels JCR valident cette structure à l'aide du mécanisme de type nœud de JCR.

Voici un exemple de fichier XML dans le format de la vue Document:

<?xml version="1.0" encoding="UTF-8"?>
<Hybrid xmlns:car="http://www.modeshape.org/examples/cars/1.0" 
        xmlns:jcr="http://www.jcp.org/jcr/1.0" 
        xmlns:nt="http://www.jcp.org/jcr/nt/1.0" 
        xmlns:mix="http://www.jcp.org/jcr/mix/1.0" 
        jcr:primaryType="nt:unstructured" 
        jcr:uuid="7e999653-e558-4131-8889-af1e16872f4d"
        jcr:mixinTypes="mix:referenceable">
    <Toyota_x0020_Prius jcr:primaryType="car:Car" 
          jcr:mixinTypes="mix:referenceable" 
          jcr:uuid="e92eddc1-d33a-4bd4-ae36-fe0a761b8d89" 
          car:year="2008" car:msrp="$21,500" car:mpgHighway="45" 
          car:model="Prius" car:valueRating="5" car:maker="Toyota" 
          car:mpgCity="48" car:userRating="4"/>
    <Toyota_x0020_Highlander jcr:primaryType="car:Car" 
          jcr:mixinTypes="mix:referenceable" 
          jcr:uuid="f6348fbe-a0ba-43c4-9ae5-3faff5c0f6ec" 
          car:year="2008" car:msrp="$34,200" car:mpgHighway="25" 
          car:model="Highlander" car:valueRating="5" car:maker="Toyota" 
          car:mpgCity="27" car:userRating="4"/>
</Hybrid>

Ici, "hybride" est un nœud "NT: non structuré" contenant deux nœuds de type "voiture: voiture". Le type de noeud «voiture: voiture» est défini comme suit:

[car:Car] > nt:unstructured, mix:created
  - car:maker (string)
  - car:model (string)
  - car:year (string) < '(19|20)\d{2}'  // any 4 digit number starting with '19' or '20'
  - car:msrp (string) < '[$]\d{1,3}[,]?\d{3}([.]\d{2})?'   // of the form "$X,XXX.ZZ", "$XX,XXX.ZZ" or "$XXX,XXX.ZZ" 
                                                           // where '.ZZ' is optional
  - car:userRating (long) < '[1,5]'                        // any value from 1 to 5 (inclusive)
  - car:valueRating (long) < '[1,5]'                       // any value from 1 to 5 (inclusive)
  - car:mpgCity (long) < '(0,]'                            // any value greater than 0
  - car:mpgHighway (long) < '(0,]'                         // any value greater than 0
  - car:lengthInInches (double) < '(0,]'                   // any value greater than 0
  - car:wheelbaseInInches (double) < '(0,]'                // any value greater than 0
  - car:engine (string)
  - car:alternateModels (reference)  < 'car:Car'

Si ce type de noeud est enregistré dans le référentiel JCR, cela garantira que votre structure de contenu importée est valide pour la définition de type nœud.

Si vous parlez de la validation des valeurs de contenu (par exemple, des valeurs de métadonnées, la structure des fichiers binaires, etc.), je ne suis pas au courant d'une implémentation de référentiel JCR qui peut le faire hors de la boîte. Les référentiels de la JCR sont plus généraux. Ce serait donc quelque chose que votre demande peut faire en utilisant des auditeurs d'événements JCR à observer lorsque de nouveaux fichiers XML (ou de contenu) sont en cours de téléchargement dans le référentiel, récupérant le contenu binaire qui vient de télécharger et d'utiliser autres bibliothèques pour effectuer la validation.

Enfin, vous parlez de stocker des propriétés supplémentaires sur vos fichiers téléchargés. J'ai écrit un Poste de blog Il y a quelque temps, il convient de définir et d'utiliser des types de nœud de mixin, cela avec JCR 'NT: File' NT: File 'et "NT: Dossier".

J'espère que cela aide.

Autres conseils

Comme Randall dit, l'API JCR ne fournit pas de crochets à valider le contenu pendant que vous le stockez.

Un modèle commun consiste à télécharger des données sur un emplacement intermédiaire de l'arborescence JCR, par exemple / entrant et que les observateurs JCR surveillent ces données entrantes, valident-le et déplacez-la à son emplacement final si valide.

Une autre option consiste à utiliser Apache Sling [1] qui fournit une couche d'application scriptable basée sur OSGI au-dessus d'un référentiel JCR.Avec Sling, vous pouvez intercepter des demandes de post HTTP, par exemple, pour valider les données avant de la stocker.

[1] http://sling.apache.org

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top