[oXygen-user] XML Schema & XInclude ?

George Cristian Bina
Thu Jul 26 15:36:03 CDT 2007


Hi Timothy,

>> The sample covers both cases, the schema allows also the xi:include
>> element (in the case when XInclude processing is disabled and this is
>> needed also for content completion) and the content that replaces the
>> xi:include (the additional xml:base attribute that appears on the
>> included elements).
> 
>      Thanks for the info.  I'm not sure what that second part means; "and
> the content that replaces the xi:include".  Would you explain this a
> little more?

When some element is included than an xml:base attribute appears on that 
element pointing to the file it was included from. In the second part I 
meant that the sample schema defines the xml:base attribute. You can see 
that very easily if you run the document through an identity XSLT 
transformation, for instance:
test.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0">
     <xsl:template match="/">
         <xsl:copy-of select="."/>
     </xsl:template>
</xsl:stylesheet>

applied on
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<scopes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="test.xsd">

   <scope name="test"/>
   <include xmlns="http://www.w3.org/2001/XInclude" href="included.xml"/>
   <scope name="another scope"/>
</scopes>

included.xml
<?xml version="1.0" encoding="UTF-8"?>
<scope name="inlcudedScope">
   This is an <important>included</important> scope.
</scope>

gives (note the xml:base attribute on the included scope element)
<?xml version="1.0" encoding="UTF-8"?><scopes 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="test.xsd">

   <scope name="test"/>
   <scope name="inlcudedScope" 
xml:base="file:/C:/Documents%20and%20Settings/Administrator.SPEECH/Desktop/xincludeWithSchema/included.xml"> 

   This is an <important>included</important> scope.
</scope>
   <scope name="another scope"/>
</scopes>

>      Also, I have XInclude processing turned on.  However, the main
> document still validates even with an error in the included document.
>  Is this expected behavior? Would I have to do something like use
> XSLT to actually replace the included document in to the main
> document to do a single full validation?

Hmmm... If I edit the included.xml file and rename important as 
important2 then I get the following error:

SystemID: [...]\included.xml
Location: 5:15
Description: cvc-complex-type.2.4.a: Invalid content was found starting 
with element 'important2'. One of '{important}' is expected.
URL: http://www.w3.org/TR/xmlschema-1/#cvc-complex-type

No, you should not need to do anything than enabling the XInclude 
processing to perform a validation of the document that results after 
XIncludes are processed against an XML Schema. Note that the validation 
againt DTDs is different, in that case each document is validated 
against its DTD without expanding the XInclude elements.

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com



More information about the oXygen-user mailing list