예제 #1
0
        public void TestConstructor()
        {
            var df = factory.NewDataField("245", '1', '0');

            Assert.AreEqual("245", df.Tag);
            Assert.AreEqual('1', df.Indicator1);
            Assert.AreEqual('0', df.Indicator2);
        }
예제 #2
0
        private IDataField ParseDataField(String tag, byte[] field)
        {
            using (var bais = new InputStream(field))
            {
                char ind1 = (char)bais.ReadByte();
                char ind2 = (char)bais.ReadByte();

                var dataField = factory.NewDataField();
                dataField.Tag        = tag;
                dataField.Indicator1 = ind1;
                dataField.Indicator2 = ind2;

                int       code;
                int       size;
                int       readByte;
                byte[]    data;
                ISubfield subfield;
                while (true)
                {
                    readByte = bais.ReadByte();
                    if (readByte < 0)
                    {
                        break;
                    }
                    switch (readByte)
                    {
                    case Constants.US:
                        code = bais.ReadByte();
                        if (code < 0)
                        {
                            throw new IOException("unexpected end of data field");
                        }
                        if (code == Constants.FT)
                        {
                            break;
                        }
                        size = GetSubfieldLength(bais);
                        data = new byte[size];
                        bais.Read(data);
                        subfield      = factory.NewSubfield();
                        subfield.Code = (char)code;
                        subfield.Data = GetDataAsString(data);
                        dataField.AddSubfield(subfield);
                        break;

                    case Constants.FT:
                        break;
                    }
                }
                return(dataField);
            }
        }
예제 #3
0
        public void TestWriteOfRecordWithIndicatorlessSubfield()
        {
            var         record   = StaticTestRecords.GetSummerlandRecord();
            MarcFactory factory  = StaticTestRecords.getFactory();
            var         badField = factory.NewDataField();

            badField.Tag = "911";
            badField.AddSubfield(factory.NewSubfield('a', "HAZMARC - INDICATORLESS FIELD DETECTED - MOPP LEVEL 4"));
            record.AddVariableField(badField);

            using (var output = new MemoryStream())
            {
                using (MarcXmlWriter writer = new MarcXmlWriter(output, true))
                {
                    writer.Write(record);
                }
            }
        }
예제 #4
0
        private void LoadRecord(XElement recordElement, ref IRecord rec)
        {
            foreach (var elem in recordElement.Elements())
            {
                switch (elem.Name.LocalName)
                {
                case LEADER:
                    rec.Leader = factory.NewLeader(elem.Value);
                    break;

                case CONTROLFIELD:
                    rec.AddVariableField(
                        factory.NewControlField(
                            elem.Attribute(TAG_ATTR).Value, elem.Value));
                    break;

                case DATAFIELD:
                    var ind1 = elem.Attribute(IND_1_ATTR) != null?elem.Attribute(IND_1_ATTR).Value : " ";

                    var ind2 = elem.Attribute(IND_2_ATTR) != null?elem.Attribute(IND_2_ATTR).Value : " ";

                    dataField = factory.NewDataField(
                        elem.Attribute(TAG_ATTR).Value,
                        string.IsNullOrEmpty(ind1) ? ' ' : ind1[0],
                        string.IsNullOrEmpty(ind2) ? ' ' : ind2[0]);

                    foreach (var subField in elem.Elements(XName.Get(SUBFIELD, Constants.MARCXML_NS_URI)).Select(a =>
                                                                                                                 factory.NewSubfield(
                                                                                                                     a.Attribute(CODE_ATTR).Value[0],
                                                                                                                     a.Value)))
                    {
                        dataField.AddSubfield(subField);
                    }
                    rec.AddVariableField(dataField);
                    break;

                default:
                    break;
                }
            }
        }
예제 #5
0
        private static IRecord MakeSummerlandRecord()
        {
            var sumland = factory.NewRecord("00714cam a2200205 a 4500");

            sumland.AddVariableField(factory.NewControlField("001", "12883376"));
            sumland.AddVariableField(factory.NewControlField("005", "20030616111422.0"));
            sumland.AddVariableField(factory.NewControlField("008", "020805s2002    nyu    j      000 1 eng  "));
            sumland.AddVariableField(factory.NewDataField("020", ' ', ' ', "a", "0786808772"));
            sumland.AddVariableField(factory.NewDataField("020", ' ', ' ', "a", "0786816155 (pbk.)"));
            sumland.AddVariableField(factory.NewDataField("040", ' ', ' ', "a", "DLC", "c", "DLC", "d", "DLC"));
            sumland.AddVariableField(factory.NewDataField("100", '1', ' ', "a", "Chabon, Michael."));
            sumland.AddVariableField(factory.NewDataField("245", '1', '0', "a", "Summerland /", "c", "Michael Chabon."));
            sumland.AddVariableField(factory.NewDataField("250", ' ', ' ', "a", "1st ed."));
            sumland.AddVariableField(factory.NewDataField("260", ' ', ' ', "a", "New York :", "b", "Miramax Books/Hyperion Books for Children,", "c", "c2002."));
            sumland.AddVariableField(factory.NewDataField("300", ' ', ' ', "a", "500 p. ;", "c", "22 cm."));
            sumland.AddVariableField(factory.NewDataField("520", ' ', ' ', "a", "Ethan Feld, the worst baseball player in the history of the game, finds himself recruited by a 100-year-old scout to help a band of fairies triumph over an ancient enemy."));
            sumland.AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Fantasy."));
            sumland.AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Baseball", "v", "Fiction."));
            sumland.AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Magic", "v", "Fiction."));
            return(sumland);
        }
예제 #6
0
        static StaticTestRecords()
        {
            factory   = MarcFactory.Instance;
            chabon[0] = factory.NewRecord("00759cam a2200229 a 4500");
            chabon[0].AddVariableField(factory.NewControlField("001", "11939876"));
            chabon[0].AddVariableField(factory.NewControlField("005", "20041229190604.0"));
            chabon[0].AddVariableField(factory.NewControlField("008", "000313s2000    nyu           000 1 eng  "));
            chabon[0].AddVariableField(factory.NewDataField("020", ' ', ' ', "a", "0679450041 (acid-free paper)"));
            chabon[0].AddVariableField(factory.NewDataField("040", ' ', ' ', "a", "DLC", "c", "DLC", "d", "DLC"));
            chabon[0].AddVariableField(factory.NewDataField("100", '1', ' ', "a", "Chabon, Michael."));
            chabon[0].AddVariableField(factory.NewDataField("245", '1', '4', "a", "The amazing adventures of Kavalier and Clay :", "b", "a novel /", "c", "Michael Chabon."));
            chabon[0].AddVariableField(factory.NewDataField("260", ' ', ' ', "a", "New York :", "b", "Random House,", "c", "c2000."));
            chabon[0].AddVariableField(factory.NewDataField("300", ' ', ' ', "a", "639 p. ;", "c", "25 cm."));
            chabon[0].AddVariableField(factory.NewDataField("650", ' ', '0', "a", "Comic books, strips, etc.", "x", "Authorship", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("650", ' ', '0', "a", "Heroes in mass media", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("650", ' ', '0', "a", "Czech Americans", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("651", ' ', '0', "a", "New York (N.Y.)", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("650", ' ', '0', "a", "Young men", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("650", ' ', '0', "a", "Cartoonists", "v", "Fiction."));
            chabon[0].AddVariableField(factory.NewDataField("655", ' ', '7', "a", "Humorous stories.", "2", "gsafd"));
            chabon[0].AddVariableField(factory.NewDataField("655", ' ', '7', "a", "Bildungsromane.", "2", "gsafd"));

            chabon[1] = factory.NewRecord("00714cam a2200205 a 4500");
            chabon[1].AddVariableField(factory.NewControlField("001", "12883376"));
            chabon[1].AddVariableField(factory.NewControlField("005", "20030616111422.0"));
            chabon[1].AddVariableField(factory.NewControlField("008", "020805s2002    nyu    j      000 1 eng  "));
            chabon[1].AddVariableField(factory.NewDataField("020", ' ', ' ', "a", "0786808772"));
            chabon[1].AddVariableField(factory.NewDataField("020", ' ', ' ', "a", "0786816155 (pbk.)"));
            chabon[1].AddVariableField(factory.NewDataField("040", ' ', ' ', "a", "DLC", "c", "DLC", "d", "DLC"));
            chabon[1].AddVariableField(factory.NewDataField("100", '1', ' ', "a", "Chabon, Michael."));
            chabon[1].AddVariableField(factory.NewDataField("245", '1', '0', "a", "Summerland /", "c", "Michael Chabon."));
            chabon[1].AddVariableField(factory.NewDataField("250", ' ', ' ', "a", "1st ed."));
            chabon[1].AddVariableField(factory.NewDataField("260", ' ', ' ', "a", "New York :", "b", "Miramax Books/Hyperion Books for Children,", "c", "c2002."));
            chabon[1].AddVariableField(factory.NewDataField("300", ' ', ' ', "a", "500 p. ;", "c", "22 cm."));
            chabon[1].AddVariableField(factory.NewDataField("520", ' ', ' ', "a", "Ethan Feld, the worst baseball player in the history of the game, finds himself recruited by a 100-year-old scout to help a band of fairies triumph over an ancient enemy."));
            chabon[1].AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Fantasy."));
            chabon[1].AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Baseball", "v", "Fiction."));
            chabon[1].AddVariableField(factory.NewDataField("650", ' ', '1', "a", "Magic", "v", "Fiction."));

            summerland[0] = MakeSummerlandRecord();
        }