RE: including external xml files in an instance and validating ac ross the files

Thanks for your quick help Jeni.  

I took your wrapper file DTD idea and was able to add a DTD to my
invoice.xml file that references the partlist.xml file, but unfortunately I
cannot validate the invoice.xml document if I add the KEY-KEYREF
relationship that I described.  I get the following error:  "Undefined key
values for keyref identity constraint 'Item-PartNumber-KeyRef' - the values
refered to by the field selector must match existing unique/key values."
This seems to indicate that my XML validation engine (XML Spy 4.2) does not
dereference external entity references before validation.  I checked this by
pasting in the actual xml instead of referencing it and the error went away.
Is it standard for all validation engines to not dereference, or dependent
on the engine?

Thanks again,

--Rolf Russell





-----Original Message-----
From: Jeni Tennison [mailto:jeni@jenitennison.com]
Sent: Monday, February 04, 2002 5:21 AM
To: Rolf Russell
Cc: 'xmlschema-dev@w3.org'
Subject: Re: including external xml files in an instance and validating
across the files


Hi Rolf,

> To explain my question it is probably best to give an example of the
> situation. Lets say that I have 2 types of xml documents: a
> partlist.xml including partnumber, description and other details,
> and an invoice.xml with a list of items including partnumber,
> quantity and cost. My company has 1 partlist.xml file but many
> invoice.xml files. I have defined xml schemas that validate each
> type of document independently, but would also like to validate the
> partnumbers across files (ie. make sure each partnumber in an
> invoice corresponds to a partnumber in my partlist). The best way
> seems to be to 'include' the partlist schema in the invoice schema
> and use KEY - KEYREF. My question is how do I then include/import
> the partlist.xml document in an invoice.xml document? I want to keep
> the files separate because of the many to 1 relationship.

One option would be to generate a wrapper file that defined entities
that pointed to the various smaller files:

<!DOCTYPE wrapper [
<!ENTITY invoice SYSTEM 'invoice.xml'>
<!ENTITY partlist SYSTEM 'partlist.xml'>
]>
<wrapper>
  &invoice;
  &partlist;
</wrapper>

You would have to define one of these wrapper files for each of the
invoices.

Or you could generate the same document with a simple XSLT stylesheet
applied to the particular invoice.xml document that you wanted to
check:

<wrapper xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xsl:version="1.0">
  <xsl:copy-of select="/" />
  <xsl:copy-of select="document('partlist.xml')" />
</wrapper>

You could then validate the resulting wrapper document with your
combined schema.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Received on Thursday, 7 February 2002 16:45:01 UTC