From: Egon W. <ego...@gm...> - 2007-09-25 14:53:58
|
Hi, On 9/25/07, Rajarshi Guha <rg...@in...> wrote: > I'm working on a DTD for pharmacophore description files. The > description file would be of the form Please forget DTD, go for RelaxNG or XML Schema. I would suggest the former, which is closer in syntax to DTDs. > <pharmacophore label="5HT1 receptor"> > <group label="H" description="Hydrophobic groups">SMARTS</group> > <group label="D" description="Hydrogen bond donor">SMARTS</group> > <group label="P" description="Positive groups">SMARTS</group> > <constraint type="distance" units="???" groupRef="H D">1.234</ > constraint> > <constraint type="distance" units="???" groupRef="H P">3.456</ > constraint> > </pharmacophore> > > My DTD would look like > > <!ELEMENT pharmacophore (group, constraint)+> > <!ATTLIST pharmacophore label CDATA #REQUIRED> > > <!ELEMENT group (#CDATA)> > <!ATTLIST group > label CDATA #REQUIRED > description CDATA #IMPLIED> > > <!ELEMENT constraint (#PCDATA)> > <!ATTLIST constraint > type (distance | angle | torsion) "distance" > units PCDATA #REQUIRED > groupRefs CDATA #REQUIRED> You need to add a root element, to hold more than one pcore in one file... > A few questions > > * Can I use an arbitrary namespace? Would it be possible to make this > part of the BO and then use a BO namespace such as http:// > www.blueobelisk.org/dtd/pharmacophore.dtd? DTDs do not support namespaces. > * How should I specify units? Do I need to import another DTD for that? Another reason not to use DTD... DTD does not have an easy way to reuse other specifications. > * In the constraint element I used groupRefs in the same way that the > bond element in CML uses atomRefs. However what I'd like to have is > to be able to use groupRefs as subelements of constraint, rather than > attributes and also enforce cardinality of groupRefs based on the > type of the constraint. So for example I'd like to be able to write a > distance constraint element as > > <constraint type="distance" units="???" value="1.234"> > <groupRef id="H" /> > <groupRef id="P" /> > </constraint> > > but an angle constraint would be > > <constraint type="angle" units="???" value="34"> > <groupRef id="H" /> > <groupRef id="P" /> > <groupRef id="D" /> > </constraint> Because the list of possible constraints is limited, I would go for: <angleConstraint>, <distanceConstraint> etc > More over , how does one indicate that the value of the id attribute > must be a valid group (i.e., there must be a group element that has a > label equal to the id of the groupRef)? You cannot do that with any of the above, but Schematron allows you to define such rules. Egon -- ---- http://chem-bla-ics.blogspot.com/ |