OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

topicmaps-comment message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [Elist Home]


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

-------------------------- eGroups Sponsor -------------------------~-~>
eLerts
It's Easy. It's Fun. Best of All, it's Free!
http://click.egroups.com/1/9699/0/_/337252/_/976915214/
---------------------------------------------------------------------_->

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