Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > "Migration" from IDREFS to an XML-Schema expression

Reply
Thread Tools

"Migration" from IDREFS to an XML-Schema expression

 
 
Rabe
Guest
Posts: n/a
 
      08-13-2004
Hi all,

here a little brain-twister (starting to spoil my weekend
if I do not find a solution ... )

What I want to do is to find a XML-Schema expression that builds
a grammar for the following XML document (fragment):

<grouping_document>
<app_list>
<app id="id1">Program 1</app>
<app id="id2">Program 2</app>
<app id="id3">Program 3</app>
<!-- etc. -->
</app_list>

<grouping app_ref="id1 id3">
<!-- stuff for the referenced apps -->
</grouping>

<grouping app_ref="id2">
<!-- stuff for the referenced apps -->
</grouping>
</grouping_document>


The <grouping_document> describes some information that may be valid for
one or more applications. So it starts with a list of application definitions
whereas the key issue is that only the listed ids are allowed to appear as
values of attribute app_ref in the element <grouping>.

A valid DTD for this is

<!DOCTYPE grouping_document [
<!ELEMENT grouping_document ( app_list, grouping+ )>

<!ELEMENT app_list (app+)>
<!ELEMENT app (#PCDATA)>
<!ATTLIST app id ID #REQUIRED>

<!-- etc. -->

<!ELEMENT grouping (grouping_element+)>
<!ATTLIST grouping app_ref IDREFS #REQUIRED>

<!-- etc. -->
]>


But how to express these ID/IDREFS expressions in suitable in XML-Schema syntax?
(I do not have a problem with the standard key/keyref expressions. Where I'm
failing is the formulation of a list of references as value of a simple attribute.)

Here's what I have tried:

<xsd:complexType name="GroupingType">
<xsd:sequence>
<xsd:element name="app_list" type="AppListType">
<xsd:key name="AppKey">
<xsd:selector xpath="app"/>
<xsd:field xpath="@id"/>
</xsd:key>
</xsd:element>
<xsd:element name="grouping" type="GroupingType"/>
</xsd:sequence>
</xsd:complexType>

<!-- etc. -->

<complexType name="GroupingType">
<sequence>
<element name="grouping_element">
<!-- etc. -->
</element>
</sequence>

<attribute name="id">
<simpleType name="AppIdList">
<list itemType="string"/>
</simpleType>
<keyref name="aref" refer="jrn:AppKey">
<field xpath="@app_id"/>
</keyref>
</attribute>
</complexType>


It's wrong, I know ...

But perhaps someone has a little tip for me?

Many thanks for your efforts!
Rabe
 
Reply With Quote
 
 
 
 
Martin Honnen
Guest
Posts: n/a
 
      08-14-2004


Rabe wrote:


> here a little brain-twister (starting to spoil my weekend
> if I do not find a solution ... )
>
> What I want to do is to find a XML-Schema expression that builds
> a grammar for the following XML document (fragment):
>
> <grouping_document>
> <app_list>
> <app id="id1">Program 1</app>
> <app id="id2">Program 2</app>
> <app id="id3">Program 3</app>
> <!-- etc. -->
> </app_list>
>
> <grouping app_ref="id1 id3">
> <!-- stuff for the referenced apps -->
> </grouping>
>
> <grouping app_ref="id2">
> <!-- stuff for the referenced apps -->
> </grouping>
> </grouping_document>
>
>
> The <grouping_document> describes some information that may be valid for
> one or more applications. So it starts with a list of application definitions
> whereas the key issue is that only the listed ids are allowed to appear as
> values of attribute app_ref in the element <grouping>.
>
> A valid DTD for this is
>
> <!DOCTYPE grouping_document [
> <!ELEMENT grouping_document ( app_list, grouping+ )>
>
> <!ELEMENT app_list (app+)>
> <!ELEMENT app (#PCDATA)>
> <!ATTLIST app id ID #REQUIRED>
>
> <!-- etc. -->
>
> <!ELEMENT grouping (grouping_element+)>
> <!ATTLIST grouping app_ref IDREFS #REQUIRED>


But a W3C XML schema allows you to define attributes of type xs:ID as
well as of type xs:IDREFS, see
http://www.w3.org/TR/xmlschema-2/#built-in-datatypes
http://www.w3.org/TR/xmlschema-2/#ID
http://www.w3.org/TR/xmlschema-2/#IDREFS
so you can simply type your attributes as you have typed them in the DTD.

--

Martin Honnen
http://JavaScript.FAQTs.com/

 
Reply With Quote
 
 
 
 
R. B.
Guest
Posts: n/a
 
      08-14-2004
Hi,

thanks for your answer, I think it would (will!) work. (I know that
these types are valid in schema definitions too but I actually didn't
have the idea to use them ... ) )

But nevertheless there must be a solution to express ID/IDREFS in schema
syntax too, don't you think so?

As far as I know ID declarations bring up the problem that they are
global all over the document. So if I have a lot of ID declarations in
different elements how can I be sure that I'm referencing always the
right type of id?

When I expand my example with a list

<resource_list>
<resource id="res_id1"/>
<resource id="res_id2"/>
<resource id="res_id3"/>
</resource_list>

I will be able to reference a pretended application "res_id1" e.g.

<grouping app_ref="id1 res_id1">
<!-- stuff for the referenced apps -->
</grouping>

which is syntactically correct but semantically nonsense ...

Hmm ...

But your tip helped me a lot - I was already thinking about changing the
structure of my instance document ...

Bye Rabe



*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
 
Reply With Quote
 
Martin Honnen
Guest
Posts: n/a
 
      08-15-2004


R. B. wrote:


> thanks for your answer, I think it would (will!) work. (I know that
> these types are valid in schema definitions too but I actually didn't
> have the idea to use them ... ) )
>
> But nevertheless there must be a solution to express ID/IDREFS in schema
> syntax too, don't you think so?


I told you to use the xs:ID and xs:IDREFS types, those are schema types,
so I am not sure why you ask for schema syntax, if you use
<xs:attribute name="id" type="xs:ID" />
then that is schema syntax and that is all I suggested to do.

--

Martin Honnen
http://JavaScript.FAQTs.com/

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
C/C++ language proposal: Change the 'case expression' from "integral constant-expression" to "integral expression" Adem C++ 42 11-04-2008 12:39 PM
C/C++ language proposal: Change the 'case expression' from "integral constant-expression" to "integral expression" Adem C Programming 45 11-04-2008 12:39 PM
Conditional validation of documents (ignoring IDREFs) zgolus@gmail.com Python 0 01-15-2007 12:39 PM
Parsers preserve order of IDs in IDREFS ? Mark XML 6 01-15-2006 09:53 PM
Dynamically changing the regular expression of Regular Expression validator VSK ASP .Net 2 08-24-2003 02:47 PM



Advertisments