[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: [topicmaps-comment] Re: [topicmapmail] XML Schema for XTM DTD
I tried my hand at creating an XML Schema for XTM too, and ended up with a somewhat different structure. Just for fun I am including it below. I believe it has got everything except the xml:base attribute, which I left off for now because I did not get around to creating a separate little schema for it, which you have to do because it is in another namespace. In this version, I tried to avoid duplication. Most constructions that appear more than once, I turned into model groups. Any element like instanceOf which contains one of those groups but also has an id (and possibly other attributes), I made a type for, and the type uses the model group. I used model groups partly because I like them, but also there is at least one case where the same sequence of elements is used (in different places) with and without a wrapper element. The use without the wrapper just uses the model group (otherwise it would have to use an anonymous complex type), for the other one I created a named complex type. This approach has, I think, eliminated all duplication while keeping the schema simple and reasonably understandable. This design probably would not fall out of an automatic translation of an RNG schema, and although I favor having a normative RNG schema, I have to admit that more people will probably be served (at least for several years) by an XML Schema version, whether normative or not. I made the schema for xlink attributes define just the subset of xlink xtm uses - href and type (fixed at "simple"). Here is the xlink schema first and then the main schema. <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="qualified"> <xs:attribute name="href" type="xs:anyURI"/> <xs:attribute name="type" fixed="simple"/> </xs:schema> ================================================== <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="http://www.topicmaps.org/xtm/1.0/" xmlns:xtm="http://www.topicmaps.org/xtm/1.0/" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:import namespace="http://www.w3.org/1999/xlink" schemaLocation="xlink4.xsd"/> <xs:element name="topicMap"> <xs:complexType> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="topic"> <xs:complexType> <xs:sequence> <xs:element name="instanceOf" type="xtm:instanceOfType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="subjectIdentity" minOccurs="0"> <xs:complexType> <xs:sequence> <xs:element name="resourceRef" type="xtm:XLinkType" minOccurs="0"/> <xs:group ref="xtm:addressableSubject.grp" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:choice minOccurs="0" maxOccurs="unbounded"> <xs:element name="baseName"> <xs:complexType> <xs:sequence> <xs:element name="scope" type="xtm:scopeType" minOccurs="0"/> <xs:element name="baseNameString"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:element name="variant" type="xtm:variantType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:element name="occurrence"> <xs:complexType> <xs:sequence> <xs:element name="instanceOf" type="xtm:instanceOfType" minOccurs="0"/> <xs:element name="scope" type="xtm:scopeType" minOccurs="0"/> <xs:group ref="xtm:resource.grp"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> </xs:choice> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:element name="association"> <xs:complexType> <xs:sequence> <xs:element name="instanceOf" type="xtm:instanceOfType" minOccurs="0"/> <xs:element name="scope" type="xtm:scopeType" minOccurs="0"/> <xs:element name="member" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="roleSpec" minOccurs="0"> <xs:complexType> <xs:group ref="xtm:addressableSubject.grp"/> </xs:complexType> </xs:element> <xs:group ref="xtm:addressableResource.grp" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:element name="mergeMap"> <xs:complexType> <xs:group ref="xtm:addressableResource.grp" minOccurs="0" maxOccurs="unbounded"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> </xs:choice> <xs:attribute name="id" type="xs:ID"/> <!--xs:attribute ref="xml:base" type="xs:string"/--> </xs:complexType> </xs:element> <xs:group name="addressableResource.grp"> <xs:choice> <xs:element name="topicRef" type="xtm:XLinkType"/> <xs:element name="resourceRef" type="xtm:XLinkType"/> <xs:element name="subjectIndicatorRef" type="xtm:XLinkType"/> </xs:choice> </xs:group> <xs:group name="addressableSubject.grp"> <xs:choice> <xs:element name="topicRef" type="xtm:XLinkType"/> <xs:element name="subjectIndicatorRef" type="xtm:XLinkType"/> </xs:choice> </xs:group> <xs:group name="resource.grp"> <xs:choice> <xs:element name="resourceRef" type="xtm:XLinkType"/> <xs:element name="resourceData"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:ID"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:choice> </xs:group> <xs:complexType name="instanceOfType"> <xs:group ref="xtm:addressableSubject.grp"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> <xs:complexType name="scopeType"> <xs:group ref="xtm:addressableResource.grp" maxOccurs="unbounded"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> <xs:complexType name="variantType"> <xs:sequence> <xs:element name="parameters"> <xs:complexType> <xs:group ref="xtm:addressableSubject.grp" maxOccurs="unbounded"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:element name="variantName" minOccurs="0"> <xs:complexType> <xs:group ref="xtm:resource.grp"/> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> </xs:element> <xs:element name="variant" type="xtm:variantType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="id" type="xs:ID"/> </xs:complexType> <xs:complexType name="XLinkType"> <xs:attribute name="id" type="xs:ID"/> <xs:attribute ref="xlink:href"/> <xs:attribute ref="xlink:type"/> </xs:complexType> </xs:schema>
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC