"Migration" from IDREFS to an XML-Schema expression

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Rabe

    "Migration" from IDREFS to an XML-Schema expression

    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_docum ent>
    <app_list>
    <app id="id1">Progra m 1</app>
    <app id="id2">Progra m 2</app>
    <app id="id3">Progra m 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_docume nt>


    The <grouping_docum ent> 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_docume nt [
    <!ELEMENT grouping_docume nt ( app_list, grouping+ )>

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

    <!-- etc. -->

    <!ELEMENT grouping (grouping_eleme nt+)>
    <!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:complexTyp e name="GroupingT ype">
    <xsd:sequence >
    <xsd:element name="app_list" type="AppListTy pe">
    <xsd:key name="AppKey">
    <xsd:selector xpath="app"/>
    <xsd:field xpath="@id"/>
    </xsd:key>
    </xsd:element>
    <xsd:element name="grouping" type="GroupingT ype"/>
    </xsd:sequence>
    </xsd:complexType >

    <!-- etc. -->

    <complexType name="GroupingT ype">
    <sequence>
    <element name="grouping_ element">
    <!-- etc. -->
    </element>
    </sequence>

    <attribute name="id">
    <simpleType name="AppIdList ">
    <list itemType="strin g"/>
    </simpleType>
    <keyref name="aref" refer="jrn:AppK ey">
    <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
  • Martin Honnen

    #2
    Re: &quot;Migration &quot; from IDREFS to an XML-Schema expression



    Rabe wrote:

    [color=blue]
    > 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_docum ent>
    > <app_list>
    > <app id="id1">Progra m 1</app>
    > <app id="id2">Progra m 2</app>
    > <app id="id3">Progra m 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_docume nt>
    >
    >
    > The <grouping_docum ent> 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_docume nt [
    > <!ELEMENT grouping_docume nt ( app_list, grouping+ )>
    >
    > <!ELEMENT app_list (app+)>
    > <!ELEMENT app (#PCDATA)>
    > <!ATTLIST app id ID #REQUIRED>
    >
    > <!-- etc. -->
    >
    > <!ELEMENT grouping (grouping_eleme nt+)>
    > <!ATTLIST grouping app_ref IDREFS #REQUIRED>[/color]

    But a W3C XML schema allows you to define attributes of type xs:ID as
    well as of type xs:IDREFS, see



    so you can simply type your attributes as you have typed them in the DTD.

    --

    Martin Honnen


    Comment

    • R. B.

      #3
      Re: &quot;Migration &quot; from IDREFS to an XML-Schema expression

      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_lis t>
      <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!

      Comment

      • Martin Honnen

        #4
        Re: &quot;Migration &quot; from IDREFS to an XML-Schema expression



        R. B. wrote:

        [color=blue]
        > 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?[/color]

        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


        Comment

        Working...