Вы можете попробовать посмотреть ModeShape .Это также реализация JCR с открытым исходным кодом (лицензированная LGPL), но она имеет понятие « sequencers », которое автоматически извлекает информацию из загруженных файлов и сохраняет эту информацию в виде структурированного контента (например, подграфов узлов исвойства) в хранилище, где его можно искать, запрашивать и получать к нему доступ, как и к любому другому содержимому хранилища.ModeShape уже имеет довольно много последовательностей, но еще не имеет секвенсоров WSDL или XSD (они должны появиться в следующем выпуске, примерно в конце мая 2011 года).
Я руководитель проектадля ModeShape, и я тоже использую его для хранения файлов WSDL и XSD (а также других форматов файлов).Фактически, мы используем репозитории JCR для хранения всех видов структурированных метаданных.
Как вы упомянули, JCR предоставляет способ импорта контента, но импортируемые файлы XML имеют один из двух определенных форматов.по спецификации JCR (системный вид и вид документа).В формате System View XML используются специфичные для JCR элементы и атрибуты, а в представлении документа элементы отображаются в узлы, а атрибуты - в свойства (на самом деле это немного более детально).И поскольку этот процесс импорта приведет к дополнительному содержимому репозитория (узлам и свойствам), репозитории JCR действительно проверяют эту структуру, используя механизм типов узлов JCR.
Вот пример файла XML в формате Document View:
<?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>
Здесь «гибрид» - это узел «nt: неструктурированный», который содержит два узла типа «автомобиль: автомобиль».Тип узла 'car: Car' определяется следующим образом:
[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'
Если этот тип узла зарегистрирован в репозитории JCR, он будет гарантировать, что ваша импортированная структура контента действительна в соответствии с определением типа узла.
Если вы говорите о проверке значений содержимого (например, значений метаданных, структуры двоичных файлов и т. Д.), Мне неизвестно о какой-либо реализации репозитория JCR, которая может сделать это «из коробки».Репозитории JCR имеют более общее назначение, поэтому это может быть сделано вашим приложением, используя прослушиватели событий JCR для наблюдения за загрузкой новых файлов (или содержимого) XML в репозиторий, извлечения только что загруженного двоичного содержимого и использованиядругие библиотеки для выполнения проверки.
Наконец, вы говорите о хранении дополнительных свойств в загруженных файлах.Некоторое время назад я написал сообщение в блоге , в котором говорится о том, как определить и использовать типы узлов mixin, сделать это с помощью узлов JCR 'nt: file' и 'nt: folder'.
Hopeэто помогает.