[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Subject: Re: [xtm-wg] XTM syntax issues
Daniel, I think that your solutions for issue 1): > a) allow topicRef to point to an association element > b) allow association to have a subjectIdentity subelement > c) allow association to have all the subelements that topic has, plus others map to those discussed in Montreal http://www.doctypes.org/xtm/syntax/reification-syntax.html as follows: a) <=> 6. b) <=> 5. c) <=> 1. (somewhat) However I believe that a) (or 6. ) is the selected way. This is why "id" on association is a required attribute. So you can address Association by topicRef. This is written up somewhere in the spec. Could not find exactly where, but remember reading it. :-)) Hope it makes things easier, Nikita. ----- Original Message ----- From: Daniel Rivers-Moore <daniel.rivers-moore@rivcom.com> To: <xtm-wg@egroups.com> Sent: Friday, December 15, 2000 4:17 PM Subject: RE: [xtm-wg] XTM syntax issues > Correction to the last item in the message below: > > c) Allow all the subelements of topic to occur on association > This would make the association content model into this: > <!ELEMENT association (associationSpec? , subjectIdentity? , (baseName | > occurrence )* , scope? , member+ )> > > should read as follows > > c) Allow all the subelements of topic to occur on association > This would make the association content model into this: > <!ELEMENT association (associationSpec? , InstanceOf* , subjectIdentity? , > (baseName | occurrence )* , scope? , member+ )> > > > > Daniel > > -----Original Message----- > From: Daniel Rivers-Moore [mailto:daniel.rivers-moore@rivcom.com] > Sent: 15 December 2000 18:29 > To: xtm-wg@egroups.com > Subject: [xtm-wg] XTM syntax issues > > > To illustrate and explain the issues I have with the current XTM syntax, I > shall use the following scenario. > > I want to create a topic association between John, a man, and Mary, a woman. > The association is the marriage between John and Mary. In this association, > John is Mary's husband, and Mary is John's wife. The association is based on > an association template, called "marriage", which expresses the constraint > that the husband in a marriage must be a man and the wife in a marriage must > be a woman. > > I shall build the topic map for this, and highlight problem issues as I come > upon them. > > Stage 1: Creating topics for the things I'll be dealing with: > > I create a topic for man, a topic for woman, a topic for John, who is an > instance of man, and a topic for Mary, who is an instance of woman, a topic > for the role of husband, and a topic for the role of wife. No problems so > far. Here is the resultant syntax: > > <topicMap> > <topic id="topic.man"> > <baseName> > <baseNameString>man</baseNameString> > </baseName> > </topic> > <topic id="topic.woman"> > <baseName> > <baseNameString>woman</baseNameString> > </baseName> > </topic> > <topic id="topic.John"> > <instanceOf> > <topicRef xlink:href="#topic.man"/> > </instanceOf> > <baseName> > <baseNameString>John</baseNameString> > </baseName> > </topic> > <topic id="topic.Mary"> > <instanceOf> > <topicRef xlink:href="#topic.woman"/> > </instanceOf> > <baseName> > <baseNameString>Mary</baseNameString> > </baseName> > </topic> > <topic id="topic.husband"> > <baseName> > <baseNameString>husband</baseNameString> > </baseName> > </topic> > <topic id="topic.wife"> > <baseName> > <baseNameString>wife</baseNameString> > </baseName> > </topic> > </topicMap> > > > Stage 2: Creating an association > > Now I want to create the association that is the marriage between John and > Mary. This is a topic. Its baseName will be "marriage of John and Mary". To > do this I have to create two elements, a topic to contain the baseName, and > an association to contain the members, with roleSpecs pointing to the roles > those members play. > > <topic id="topic.marriage-of-John-and-Mary"> > <baseName> > <baseNameString>marriage of John and Mary</baseNameString> > </baseName> > </topic> > <association id="association.marriage-of-John-and-Mary"> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > So far so good. But now we begin to encounter problems. > > > ISSUE 1 - Making an association and a topic element become a single node in > the graph. > > How do I say that this topic and this association are the same thing (a > single node in the graph), so that the name "marriage of John and Mary" will > apply to the association? The mechanism of subjectIdentity is the requisite > method. I'd like to put a subjectIdentity on the association and use it to > point to the topic, but the DTD does not allow a subjectIdentity subelement > on association. I can put a subjectIdentity on the topic with a topicRef to > the association, but despite the fact that an association is a topic, I'm > disallowed from doing this by the restriction that a topicRef can only point > to a topic element. > > > Solutions: > > a) allow topicRef to point to an association element > b) allow association to have a subjectIdentity subelement > c) allow association to have all the subelements that topic has, plus others > that are peculiar to them. > > Solution a) would allow this: > > <topic id="topic.marriage-of-John-and-Mary"> > <subjectIdentity> > <topicRef>#association.marriage-of-John-and-Mary</topicRef> > </subjectIdentity> > <baseName> > <baseNameString>marriage of John and Mary</baseNameString> > </baseName> > </topic> > <association id="association.marriage-of-John-and-Mary"> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > Solution b) would allow this (which is preferable because I can find the > baseName of the association by following a pointer from within the > association's subtree, rather than having to search my entire topic map for > a pointer from some topic element back to the association element in order > to find its baseName): > > <topic id="topic.marriage-of-John-and-Mary"> > <baseName> > <baseNameString>marriage of John and Mary</baseNameString> > </baseName> > </topic> > <association id="association.marriage-of-John-and-Mary"> > <subjectIdentity> > <topicRef>#topic.marriage-of-John-and-Mary</topicRef> > </subjectIdentity> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > Solution c) would allow this (which is yet more preferable because all > information about the association is in one place, can be immediately > processed, and the instance is more readable and intuitive, and less > verbose): > > <association id="association.marriage-of-John-and-Mary"> > <baseName> > <baseNameString>marriage of John and Mary</baseNameString> > </baseName> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > > > Stage 3: Deriving the association from an association template > > Now I want to state that the association that is the marriage of John and > Mary is derived from the marriage association template. > > First, I create an association that serves as a template for all marriage > associations, and which has, as members in each role, the classes of things > that can play that role in instance associations that conform to the > template. I also create a topic in order to give this association template > the baseName "marriage". > > <topic id="topic.marriage"> > <subjectIdentity> > <topicRef>#association-template.marriage</topicRef> > </subjectIdentity> > <baseName> > <baseNameString>marriage</baseNameString> > </baseName> > </topic> > <association id="association-template.marriage"> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.man"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.woman"/> > </member> > </association> > > > ISSUE 2: Stating that an association is derived from an association > template? > > How do I now relate the instance association with this template? The only > way I can to this with the current syntax is by using the instanceOf > subelement on the association. However, when my document is processed, and > the association and the topic have become a single node in the graph, this > instanceOf and any instanceOfs in the topic element will be brought > together. > > <topic id="topic.marriage-of-John-and-Mary"> > <instanceOf> > <topicRef xlink:href="#sacred-union"/> > </instanceOf> > <instanceOf> > <topicRef xlink:href="#contractual-relationship"/> > </instanceOf> > <baseName> > <baseNameString>marriage of John and Mary</baseNameString> > </baseName> > </topic> > <association id="association.marriage-of-John-and-Mary"> > <instanceOf> > <topicRef xlink:href="#association-template.marriage"/> > </instanceOf> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > Once the above elements have been merged, the resultant topic map node will > have instanceOf relationships with association-template.marriage, with > sacred-union and with contractual-relationship. Which of these is the > relevant association template? There is no way of knowing. We need a special > subelement of association for this purpose. It would be logical to call it > associationSpec. This will allow the following: > > <association id="association.marriage-of-John-and-Mary"> > <associationSpec> > <topicRef xlink:href="#association-template.marriage"/> > </associationSpec> > <member> > <roleSpec> > <topicRef xlink:href="#topic.husband"/> > </roleSpec> > <topicRef xlink:href="#topic.John"/> > </member> > <member> > <roleSpec> > <topicRef xlink:href="#topic.wife"/> > </roleSpec> > <topicRef xlink:href="#topic.Mary"/> > </member> > </association> > > Now the pointer from association.marriage-of-John-and-Mary to the marriage > template cannot be confused with any instanceOf pointers on the > topic.marriage-of-John-and-Mary after they are merged in the graph. > > > SUMMARY: > > The following DTD changes would meet my minimal concerns: > > i) Allow xlink:href attributes on topicRef elements to point to association > elements as well as topic elements. > This requires no change to the formal declarations, but only a change to the > descriptive text. > > ii) Use associationSpec instead of instanceOf as first subelement of > association > This would require the following in the DTD > > <!ELEMENT association (associationSpec? , scope? , member+ )> > <!ATTLIST association id ID #REQUIRED > > <!ELEMENT associationSpec (topicRef | subjectIndicatorRef )> > <!ATTLIST associationSpec id ID #IMPLIED > > > > > The following additional DTD change would greatly facilitate processing and > readability > > b) Allow a subjectIdentity subelement on association > This would make the association content model into this: > <!ELEMENT association (associationSpec? , subjectIdentity? , scope? , > member+ )> > > > The following additional DTD change would allow more compact and readable > XTM instance documents > > c) Allow all the subelements of topic to occur on association > This would make the association content model into this: > <!ELEMENT association (associationSpec? , subjectIdentity? , (baseName | > occurrence )* , scope? , member+ )> > > > > I hope what I have said above is sufficiently clear and concise. I'd be > happy to clarify if it is not clear, and look forward to seeing what others > think about these issues. Specifically, if others have found ways of doing > what I describe without changing the DTD, I'd love to see examples of > instances (based on the John-Mary example or otherwise) that show how > they've managed to do this. > > Best regards to all > > Daniel > > = = = = = = = = = = = = = = = = = = > Daniel Rivers-Moore > Director of New Technologies > RivCom > Tel: +44 (0) 1793 792004 > Email: daniel.rivers-moore@rivcom.com > > > > > To Post a message, send it to: xtm-wg@eGroups.com > > To Unsubscribe, send a blank message to: xtm-wg-unsubscribe@eGroups.com > > > To Post a message, send it to: xtm-wg@eGroups.com > > To Unsubscribe, send a blank message to: xtm-wg-unsubscribe@eGroups.com > > > -------------------------- eGroups Sponsor -------------------------~-~> Big News - eGroups is becoming Yahoo! Groups Click here for more details: http://click.egroups.com/1/10801/0/_/337252/_/976941593/ ---------------------------------------------------------------------_-> To Post a message, send it to: xtm-wg@eGroups.com To Unsubscribe, send a blank message to: xtm-wg-unsubscribe@eGroups.com
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]
Powered by eList eXpress LLC