コード例 #1
0
ファイル: DataProvider.cs プロジェクト: BEXIS2/OAI-PMH-Module
 private static XElement[] GetListRecords(List <RecordQueryResult> records, bool isAbout)
 {
     return((from rec in records
             select new XElement("record",
                                 MlEncode.HeaderItem(rec.Header, Properties.granularity),
                                 MlEncode.Metadata(rec.Metadata, Properties.granularity),
                                 isAbout ? MlEncode.About(rec.About, Properties.granularity) : null
                                 )).ToArray());
 }
コード例 #2
0
ファイル: DataProvider.cs プロジェクト: BEXIS2/OAI-PMH-Module
        public static XDocument GetRecord(string identifier, string metadataPrefix, List <XElement> errorList, bool?loadAbout, Tenant tenant = null)
        {
            List <XElement> errors = errorList;

            bool isIdentifier = !String.IsNullOrEmpty(identifier);

            if (!isIdentifier)
            {
                errors.Add(MlErrors.badIdentifierArgument);
            }

            bool isPrefixOk = !String.IsNullOrEmpty(metadataPrefix);

            if (!isPrefixOk)
            {
                errors.Add(MlErrors.badMetadataArgument);
            }
            else if (FormatList.Prefix2Int(metadataPrefix) == 0)
            {
                errors.Add(MlErrors.cannotDisseminateFormat);
                isPrefixOk = false;
            }

            bool isAbout = loadAbout.HasValue ? loadAbout.Value : Properties.loadAbout;

            RecordQueryResult record = null;

            if (isIdentifier && isPrefixOk)
            {
                OAIHelper helper = new OAIHelper();

                long   datasetId = helper.ConvertToId(identifier);
                Header header    = helper.GetHeader(datasetId);

                if (header == null)
                {
                    errors.Add(MlErrors.idDoesNotExist);
                }
                else
                {
                    record = new RecordQueryResult(header, helper.GetMetadata(datasetId, metadataPrefix));

                    // ToDo Check About in the documentaion of oai-pmh
                    record.About = null;

                    if (record == null || record.Metadata == null)
                    {
                        errors.Add(MlErrors.cannotDisseminateRecordFormat);
                    }
                }
            }

            XElement request = new XElement("request",
                                            new XAttribute("verb", "GetRecord"),
                                            isIdentifier ? new XAttribute("identifier", identifier) : null,
                                            isPrefixOk ? new XAttribute("metadataPrefix", metadataPrefix) : null,
                                            Properties.baseURL);

            if (errors.Count > 0)
            {
                errors.Insert(0, request); /* add request on the first position, that it will be diplayed before errors */
                return(CreateXml(errors.ToArray()));
            }

            XElement theRecord = new XElement("GetRecord",
                                              new XElement("record",
                                                           MlEncode.HeaderItem(record.Header, Properties.granularity),
                                                           MlEncode.Metadata(record.Metadata, Properties.granularity)),
                                              isAbout ? MlEncode.About(record.About, Properties.granularity) : null);

            return(CreateXml(new XElement[] { request, theRecord }));
        }