[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: RNC -- where to find newbie help?
You don't have to do anything special to have content depend on attribute. If the allowed content for an element <foo> depends on the value of an attribute t, then just write a pattern for each possible value of t and combine them with choice. element foo { (attribute t { "x" }, element x { empty }) | (attribute t { "y" }, element y { empty }) } Bruce D'Arcus wrote: > > BTW, here's what I want to post, in case it's easier to just forward it. > > Bruce > ======= > > I hope you don't mind newbie questions. I am trying to design at least > the beginning framework of a schema for bibliographic data. However, I > am new both to xml design (and I'm an academic; not a software > developer!), and to Relax NG. As such, the questions here will mix more > general issues of data design with more specific issues of RNG, and RNC > syntax. > > (If you want to jump to my most basic question in this rather long > message, it's marked with ***) > > What I need: > > I am working with a few people -- Peter Flynn among them -- who are > trying put together a DTD/Schema-independent bibliographic formatting > engine; in essence a turbo-charged XML version of BibTeX for the 21st > century. > > The logic of this system is based on the new MODS XML Schema from the > Library of Congress, though it is agnostic about input data. The data > model of MODS is ideal as a basis because it focuses not on concrete > classifications like articles or books, but rather on the structure of > bibliographic data. Here you focus not on "articles" or "book > chapters", but rather on parts that are linked to containers, etc. This > makes it much more flexible than existing bibliographic data models like > BibTeX, etc. > > While this is great for a formatter and for archiving purposes, it does > present difficulties for data entry in XML editors. To wit, I want to > write an input schema in RNC that civilizes the structural logic of > MODS. I have chosen RNC because it is simpler for me than even DTDs but > leaves lots of room to grow as I learn, and because of Trang. > > Anyway, I am thinking of a sample record like this: > > <bibentry type="article" id="Doe1999a"> > <name role="author"> > <givenName>John</givenName> > <familyName>Doe</familyName> > </name> > <titles> > <title>A Title</title> > <subtitle>A Subtitle</subtitle> > </titles> > <originInfo> > <date year="1999" month="6"/> > </originInfo> > <in type="periodical" genre="journal"> > <titles> > <title>A journal</title> > </titles> > <part> > <volume>3</volume> > <issue>4</issue> > <pages> > <start>23</start> > <end>54</end> > </pages> > </part> > </in> > </bibentry> > > So I'd have top-level elements like titles, names, originInfo, in (with > type attributes that distinguish between monographs and serials), etc. > > They'd then be plugged together something like: > > Article = element article { > Name*, Titles, originInfo, In.Periodical > } > > Chapter = element chapter { > Name*, Titles, originInfo, In.Monograph > } > > Book = element book { > Name*, Titles, originInfo > ) > > Note: the above isn't right because I think the types should be defined > in an attribute within a bibentry element. However, I'm not sure how to > do this. > > *** > So, question 1: can I have the mix of elements be dependent on the type > attribute in the bibentry element? If yes, how? > Finally, I need to build in extensibility such that new "types" can be > added by different users that -- and this is key -- preserve the > structural logic of MODS so data is portable and transformation > reliable. The type attribute here thus becomes in essence a named > proxy. (MODS has no concept of such typing, and this is a good thing, > but it probably makes data entry more difficult.) > > Anyway, here's the skeleton of where I'm at, with places of confusion > indicated with the ???: > > ============ BEGIN ================ > > start = Biblio > > Biblio = element biblio { Bibentry+ } > > # Below I need to say "the mix of elements in bibentry depends on the > # type attribute value. (The ext... thing is to allow future extension, > BTW.) > > Bibentry = element bibentry { ??? } |ext.Bibentry > > # So in the following two examples (there will be a long list) I want to > define which > # pieces to include when the type attribute is equal to name on the > left. Does this make > # sense?? > > Article = ??? > > Book = ??? > > ################################### > > Titles = element titles > > Names = element names > > OriginInfo = element originInfo > > # Below I (think) I need to distinguish between "in" containers that > # are monographs (books) and those that are serials (journals). > # > # Note: this presents some issues because in the example record > # above I am using specific element names like volume that will > # be contained in this element. However, MODS just uses generic > # element names for these data and codes the type in an attribute. > # This might be more flexible. Below I use this approach. > > In = element in { Name*, Titles, OriginInfo, Part } > > Part = element part {Single*, Range*} > > # an alternative for the above is something like: > # part {Volume?, Issue?, Section?, Paragraph?, Pages?} > > #################################### > > # Here's where I want the extension that allows additional named types > # to be added. I've no idea how best to do this though, and I've no > idea how > # or whether this extension mechanism ought to extend to the "in" element > # as well. > > ext.Bibentry = notAllowed > > ============= END ================= > > Help and suggestions much appreciated. Am I even on the right track here? > > Bruce > >
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]