Copied the definition of xml:space into the IF schema. Removed the setup-xml-schema Ant ask. xml.xsd is a file under the W3C Document License and we cannot (yet?) redistribute files under such a license. git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1304524 13f79535-47bb-0310-9956-ffa450edef68tags/fop-1_1rc1old
</junit> | </junit> | ||||
</sequential> | </sequential> | ||||
</macrodef> | </macrodef> | ||||
<target name="junit-all" depends="junit-compile, junit-transcoder, junit-layout-hyphenation, setup-xml-schema" description="Runs FOP's JUnit basic tests" if="junit.present"> | |||||
<target name="junit-all" depends="junit-compile, junit-transcoder, junit-layout-hyphenation" | |||||
description="Runs FOP's JUnit basic tests" if="junit.present"> | |||||
<junit dir="${basedir}" haltonfailure="yes" fork="${junit.fork}" forkmode="once" | <junit dir="${basedir}" haltonfailure="yes" fork="${junit.fork}" forkmode="once" | ||||
errorproperty="fop.junit.error" failureproperty="fop.junit.failure"> | errorproperty="fop.junit.error" failureproperty="fop.junit.failure"> | ||||
<sysproperty key="jawa.awt.headless" value="true"/> | <sysproperty key="jawa.awt.headless" value="true"/> | ||||
<target name="junit-area-tree-xml-format" depends="junit-compile" description="Runs FOP's area tree XML format JUnit tests" if="xmlunit.present"> | <target name="junit-area-tree-xml-format" depends="junit-compile" description="Runs FOP's area tree XML format JUnit tests" if="xmlunit.present"> | ||||
<junit-run title="area tree XML format" testsuite="org.apache.fop.intermediate.AreaTreeXMLFormatTestSuite" outfile="TEST-area-tree-xml-format"/> | <junit-run title="area tree XML format" testsuite="org.apache.fop.intermediate.AreaTreeXMLFormatTestSuite" outfile="TEST-area-tree-xml-format"/> | ||||
</target> | </target> | ||||
<target name="junit-intermediate-layout" depends="junit-compile,setup-xml-schema" | |||||
if="xmlunit.present"> | |||||
<target name="junit-intermediate-layout" depends="junit-compile" if="xmlunit.present"> | |||||
<junit-run title="intermediate format from layout tests" | <junit-run title="intermediate format from layout tests" | ||||
testsuite="org.apache.fop.intermediate.LayoutIFTestSuite" | testsuite="org.apache.fop.intermediate.LayoutIFTestSuite" | ||||
outfile="TEST-intermediate-format-from-layout"/> | outfile="TEST-intermediate-format-from-layout"/> | ||||
</target> | </target> | ||||
<target name="setup-xml-schema"> | |||||
<local name="cache-dir"/> | |||||
<property name="cache-dir" value="${basedir}/.cache/junit/intermediate"/> | |||||
<mkdir dir="${cache-dir}"/> | |||||
<get src="http://www.w3.org/2001/xml.xsd" | |||||
dest="${cache-dir}/xml.xsd" | |||||
usetimestamp="true"/> | |||||
<copy file="${cache-dir}/xml.xsd" | |||||
todir="${build.dir}/test-classes/org/apache/fop/intermediate"/> | |||||
</target> | |||||
<target name="junit-intermediate-format" | |||||
depends="junit-compile,setup-xml-schema,junit-intermediate-layout" | |||||
<target name="junit-intermediate-format" depends="junit-compile,junit-intermediate-layout" | |||||
description="Runs FOP's intermediate format JUnit tests" if="xmlunit.present"> | description="Runs FOP's intermediate format JUnit tests" if="xmlunit.present"> | ||||
<junit-run title="intermediate format" | <junit-run title="intermediate format" | ||||
testsuite="org.apache.fop.intermediate.IntermediateFormatTestSuite" | testsuite="org.apache.fop.intermediate.IntermediateFormatTestSuite" |
<xs:attributeGroup name="foreignAtts"> | <xs:attributeGroup name="foreignAtts"> | ||||
<xs:anyAttribute namespace="##other" processContents="lax"/> | <xs:anyAttribute namespace="##other" processContents="lax"/> | ||||
</xs:attributeGroup> | </xs:attributeGroup> | ||||
<xs:attribute name="xmlSpace"> | |||||
<!-- | |||||
This is a copy of the definition of the xml:space attribute, from the schema for the XML | |||||
namespace. That schema can be found at http://www.w3.org/2001/xml.xsd. | |||||
Ideally we would want to re-use that schema. However, we don’t want to refer to it using an | |||||
import statement is it causes too many connections to the W3C website. Neither can we store a | |||||
local copy and ship it with FOP as its license is the W3C Document License and so far we are not | |||||
allowed to redistribute files under such a license. | |||||
See also https://issues.apache.org/jira/browse/LEGAL-111 | |||||
--> | |||||
<xs:simpleType> | |||||
<xs:restriction base="xs:NCName"> | |||||
<xs:enumeration value="default"/> | |||||
<xs:enumeration value="preserve"/> | |||||
</xs:restriction> | |||||
</xs:simpleType> | |||||
</xs:attribute> | |||||
</xs:schema> | </xs:schema> |
targetNamespace="http://xmlgraphics.apache.org/fop/intermediate" | targetNamespace="http://xmlgraphics.apache.org/fop/intermediate" | ||||
xmlns:mf="http://xmlgraphics.apache.org/fop/intermediate" | xmlns:mf="http://xmlgraphics.apache.org/fop/intermediate" | ||||
xmlns:nav="http://xmlgraphics.apache.org/fop/intermediate/document-navigation"> | xmlns:nav="http://xmlgraphics.apache.org/fop/intermediate/document-navigation"> | ||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace" | |||||
schemaLocation="xml.xsd"/> | |||||
<xs:import namespace="http://xmlgraphics.apache.org/fop/intermediate/document-navigation" | <xs:import namespace="http://xmlgraphics.apache.org/fop/intermediate/document-navigation" | ||||
schemaLocation="fop-intermediate-format-ng-nav.xsd"/> | schemaLocation="fop-intermediate-format-ng-nav.xsd"/> | ||||
<xs:import namespace="adobe:ns:meta/" schemaLocation="xmp-metadata.xsd"/> | <xs:import namespace="adobe:ns:meta/" schemaLocation="xmp-metadata.xsd"/> | ||||
<xs:element ref="mf:page" minOccurs="1" maxOccurs="unbounded"/> | <xs:element ref="mf:page" minOccurs="1" maxOccurs="unbounded"/> | ||||
</xs:sequence> | </xs:sequence> | ||||
<xs:attribute name="id" type="xs:ID"/> | <xs:attribute name="id" type="xs:ID"/> | ||||
<xs:attribute ref="xml:space"/> | |||||
<xs:attribute ref="mf:xmlSpace"/> | |||||
<xs:attributeGroup ref="mf:foreignAtts"/> | <xs:attributeGroup ref="mf:foreignAtts"/> | ||||
</xs:complexType> | </xs:complexType> | ||||
</xs:element> | </xs:element> |
<?xml version='1.0'?> | |||||
<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?> | |||||
<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace" | |||||
xmlns:xs="http://www.w3.org/2001/XMLSchema" | |||||
xmlns ="http://www.w3.org/1999/xhtml" | |||||
xml:lang="en"> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h1>About the XML namespace</h1> | |||||
<div class="bodytext"> | |||||
<p> | |||||
This schema document describes the XML namespace, in a form | |||||
suitable for import by other schema documents. | |||||
</p> | |||||
<p> | |||||
See <a href="http://www.w3.org/XML/1998/namespace.html"> | |||||
http://www.w3.org/XML/1998/namespace.html</a> and | |||||
<a href="http://www.w3.org/TR/REC-xml"> | |||||
http://www.w3.org/TR/REC-xml</a> for information | |||||
about this namespace. | |||||
</p> | |||||
<p> | |||||
Note that local names in this namespace are intended to be | |||||
defined only by the World Wide Web Consortium or its subgroups. | |||||
The names currently defined in this namespace are listed below. | |||||
They should not be used with conflicting semantics by any Working | |||||
Group, specification, or document instance. | |||||
</p> | |||||
<p> | |||||
See further below in this document for more information about <a | |||||
href="#usage">how to refer to this schema document from your own | |||||
XSD schema documents</a> and about <a href="#nsversioning">the | |||||
namespace-versioning policy governing this schema document</a>. | |||||
</p> | |||||
</div> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
<xs:attribute name="lang"> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h3>lang (as an attribute name)</h3> | |||||
<p> | |||||
denotes an attribute whose value | |||||
is a language code for the natural language of the content of | |||||
any element; its value is inherited. This name is reserved | |||||
by virtue of its definition in the XML specification.</p> | |||||
</div> | |||||
<div> | |||||
<h4>Notes</h4> | |||||
<p> | |||||
Attempting to install the relevant ISO 2- and 3-letter | |||||
codes as the enumerated possible values is probably never | |||||
going to be a realistic possibility. | |||||
</p> | |||||
<p> | |||||
See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt"> | |||||
http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a> | |||||
and the IANA language subtag registry at | |||||
<a href="http://www.iana.org/assignments/language-subtag-registry"> | |||||
http://www.iana.org/assignments/language-subtag-registry</a> | |||||
for further information. | |||||
</p> | |||||
<p> | |||||
The union allows for the 'un-declaration' of xml:lang with | |||||
the empty string. | |||||
</p> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
<xs:simpleType> | |||||
<xs:union memberTypes="xs:language"> | |||||
<xs:simpleType> | |||||
<xs:restriction base="xs:string"> | |||||
<xs:enumeration value=""/> | |||||
</xs:restriction> | |||||
</xs:simpleType> | |||||
</xs:union> | |||||
</xs:simpleType> | |||||
</xs:attribute> | |||||
<xs:attribute name="space"> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h3>space (as an attribute name)</h3> | |||||
<p> | |||||
denotes an attribute whose | |||||
value is a keyword indicating what whitespace processing | |||||
discipline is intended for the content of the element; its | |||||
value is inherited. This name is reserved by virtue of its | |||||
definition in the XML specification.</p> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
<xs:simpleType> | |||||
<xs:restriction base="xs:NCName"> | |||||
<xs:enumeration value="default"/> | |||||
<xs:enumeration value="preserve"/> | |||||
</xs:restriction> | |||||
</xs:simpleType> | |||||
</xs:attribute> | |||||
<xs:attribute name="base" type="xs:anyURI"> <xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h3>base (as an attribute name)</h3> | |||||
<p> | |||||
denotes an attribute whose value | |||||
provides a URI to be used as the base for interpreting any | |||||
relative URIs in the scope of the element on which it | |||||
appears; its value is inherited. This name is reserved | |||||
by virtue of its definition in the XML Base specification.</p> | |||||
<p> | |||||
See <a | |||||
href="http://www.w3.org/TR/xmlbase/">http://www.w3.org/TR/xmlbase/</a> | |||||
for information about this attribute. | |||||
</p> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
</xs:attribute> | |||||
<xs:attribute name="id" type="xs:ID"> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h3>id (as an attribute name)</h3> | |||||
<p> | |||||
denotes an attribute whose value | |||||
should be interpreted as if declared to be of type ID. | |||||
This name is reserved by virtue of its definition in the | |||||
xml:id specification.</p> | |||||
<p> | |||||
See <a | |||||
href="http://www.w3.org/TR/xml-id/">http://www.w3.org/TR/xml-id/</a> | |||||
for information about this attribute. | |||||
</p> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
</xs:attribute> | |||||
<xs:attributeGroup name="specialAttrs"> | |||||
<xs:attribute ref="xml:base"/> | |||||
<xs:attribute ref="xml:lang"/> | |||||
<xs:attribute ref="xml:space"/> | |||||
<xs:attribute ref="xml:id"/> | |||||
</xs:attributeGroup> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div> | |||||
<h3>Father (in any context at all)</h3> | |||||
<div class="bodytext"> | |||||
<p> | |||||
denotes Jon Bosak, the chair of | |||||
the original XML Working Group. This name is reserved by | |||||
the following decision of the W3C XML Plenary and | |||||
XML Coordination groups: | |||||
</p> | |||||
<blockquote> | |||||
<p> | |||||
In appreciation for his vision, leadership and | |||||
dedication the W3C XML Plenary on this 10th day of | |||||
February, 2000, reserves for Jon Bosak in perpetuity | |||||
the XML name "xml:Father". | |||||
</p> | |||||
</blockquote> | |||||
</div> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div xml:id="usage" id="usage"> | |||||
<h2><a name="usage">About this schema document</a></h2> | |||||
<div class="bodytext"> | |||||
<p> | |||||
This schema defines attributes and an attribute group suitable | |||||
for use by schemas wishing to allow <code>xml:base</code>, | |||||
<code>xml:lang</code>, <code>xml:space</code> or | |||||
<code>xml:id</code> attributes on elements they define. | |||||
</p> | |||||
<p> | |||||
To enable this, such a schema must import this schema for | |||||
the XML namespace, e.g. as follows: | |||||
</p> | |||||
<pre> | |||||
<schema . . .> | |||||
. . . | |||||
<import namespace="http://www.w3.org/XML/1998/namespace" | |||||
schemaLocation="http://www.w3.org/2001/xml.xsd"/> | |||||
</pre> | |||||
<p> | |||||
or | |||||
</p> | |||||
<pre> | |||||
<import namespace="http://www.w3.org/XML/1998/namespace" | |||||
schemaLocation="http://www.w3.org/2009/01/xml.xsd"/> | |||||
</pre> | |||||
<p> | |||||
Subsequently, qualified reference to any of the attributes or the | |||||
group defined below will have the desired effect, e.g. | |||||
</p> | |||||
<pre> | |||||
<type . . .> | |||||
. . . | |||||
<attributeGroup ref="xml:specialAttrs"/> | |||||
</pre> | |||||
<p> | |||||
will define a type which will schema-validate an instance element | |||||
with any of those attributes. | |||||
</p> | |||||
</div> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
<xs:annotation> | |||||
<xs:documentation> | |||||
<div id="nsversioning" xml:id="nsversioning"> | |||||
<h2><a name="nsversioning">Versioning policy for this schema document</a></h2> | |||||
<div class="bodytext"> | |||||
<p> | |||||
In keeping with the XML Schema WG's standard versioning | |||||
policy, this schema document will persist at | |||||
<a href="http://www.w3.org/2009/01/xml.xsd"> | |||||
http://www.w3.org/2009/01/xml.xsd</a>. | |||||
</p> | |||||
<p> | |||||
At the date of issue it can also be found at | |||||
<a href="http://www.w3.org/2001/xml.xsd"> | |||||
http://www.w3.org/2001/xml.xsd</a>. | |||||
</p> | |||||
<p> | |||||
The schema document at that URI may however change in the future, | |||||
in order to remain compatible with the latest version of XML | |||||
Schema itself, or with the XML namespace itself. In other words, | |||||
if the XML Schema or XML namespaces change, the version of this | |||||
document at <a href="http://www.w3.org/2001/xml.xsd"> | |||||
http://www.w3.org/2001/xml.xsd | |||||
</a> | |||||
will change accordingly; the version at | |||||
<a href="http://www.w3.org/2009/01/xml.xsd"> | |||||
http://www.w3.org/2009/01/xml.xsd | |||||
</a> | |||||
will not change. | |||||
</p> | |||||
<p> | |||||
Previous dated (and unchanging) versions of this schema | |||||
document are at: | |||||
</p> | |||||
<ul> | |||||
<li><a href="http://www.w3.org/2009/01/xml.xsd"> | |||||
http://www.w3.org/2009/01/xml.xsd</a></li> | |||||
<li><a href="http://www.w3.org/2007/08/xml.xsd"> | |||||
http://www.w3.org/2007/08/xml.xsd</a></li> | |||||
<li><a href="http://www.w3.org/2004/10/xml.xsd"> | |||||
http://www.w3.org/2004/10/xml.xsd</a></li> | |||||
<li><a href="http://www.w3.org/2001/03/xml.xsd"> | |||||
http://www.w3.org/2001/03/xml.xsd</a></li> | |||||
</ul> | |||||
</div> | |||||
</div> | |||||
</xs:documentation> | |||||
</xs:annotation> | |||||
</xs:schema> | |||||
} | } | ||||
}); | }); | ||||
sFactory.setResourceResolver(XMLSchemaResolver.getInstance()); | |||||
File ifSchemaFile = new File( | File ifSchemaFile = new File( | ||||
"src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd"); | "src/documentation/intermediate-format-ng/fop-intermediate-format-ng.xsd"); | ||||
ifSchema = sFactory.newSchema(ifSchemaFile); | ifSchema = sFactory.newSchema(ifSchemaFile); |
/* | |||||
* Licensed to the Apache Software Foundation (ASF) under one or more | |||||
* contributor license agreements. See the NOTICE file distributed with | |||||
* this work for additional information regarding copyright ownership. | |||||
* The ASF licenses this file to You under the Apache License, Version 2.0 | |||||
* (the "License"); you may not use this file except in compliance with | |||||
* the License. You may obtain a copy of the License at | |||||
* | |||||
* http://www.apache.org/licenses/LICENSE-2.0 | |||||
* | |||||
* Unless required by applicable law or agreed to in writing, software | |||||
* distributed under the License is distributed on an "AS IS" BASIS, | |||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |||||
* See the License for the specific language governing permissions and | |||||
* limitations under the License. | |||||
*/ | |||||
/* $Id$ */ | |||||
package org.apache.fop.intermediate; | |||||
import java.io.InputStream; | |||||
import java.util.MissingResourceException; | |||||
import javax.xml.XMLConstants; | |||||
import org.w3c.dom.bootstrap.DOMImplementationRegistry; | |||||
import org.w3c.dom.ls.DOMImplementationLS; | |||||
import org.w3c.dom.ls.LSInput; | |||||
import org.w3c.dom.ls.LSResourceResolver; | |||||
/** | |||||
* A resource resolver that returns a cached instance of the XML Schema, that can normally | |||||
* be found at {@linkplain http://www.w3.org/2001/xml.xsd}. This can be used to avoid | |||||
* unnecessary connection to the W3C website. | |||||
*/ | |||||
final class XMLSchemaResolver implements LSResourceResolver { | |||||
private static final String XML_SCHEMA_SYSTEM_ID = "http://www.w3.org/2001/xml.xsd"; | |||||
private static final LSInput XML_SCHEMA_INPUT; | |||||
private static final XMLSchemaResolver INSTANCE = new XMLSchemaResolver(); | |||||
private XMLSchemaResolver() { } | |||||
static { | |||||
DOMImplementationRegistry registry = getDOMImplementationRegistry(); | |||||
DOMImplementationLS impl | |||||
= (DOMImplementationLS) registry.getDOMImplementation("LS 3.0"); | |||||
XML_SCHEMA_INPUT = impl.createLSInput(); | |||||
InputStream xmlSchema = loadXMLSchema(); | |||||
XML_SCHEMA_INPUT.setByteStream(xmlSchema); | |||||
} | |||||
private static DOMImplementationRegistry getDOMImplementationRegistry() { | |||||
try { | |||||
return DOMImplementationRegistry.newInstance(); | |||||
} catch (ClassCastException e) { | |||||
throw new ExceptionInInitializerError(e); | |||||
} catch (ClassNotFoundException e) { | |||||
throw new ExceptionInInitializerError(e); | |||||
} catch (InstantiationException e) { | |||||
throw new ExceptionInInitializerError(e); | |||||
} catch (IllegalAccessException e) { | |||||
throw new ExceptionInInitializerError(e); | |||||
} | |||||
} | |||||
private static InputStream loadXMLSchema() { | |||||
String xmlSchemaResource = "xml.xsd"; | |||||
InputStream xmlSchema = XMLSchemaResolver.class.getResourceAsStream(xmlSchemaResource); | |||||
if (xmlSchema == null) { | |||||
throw new MissingResourceException("Schema for XML namespace not found." | |||||
+ " Did you run ant junit-intermediate-format?", | |||||
XMLSchemaResolver.class.getName(), xmlSchemaResource); | |||||
} | |||||
return xmlSchema; | |||||
} | |||||
public static XMLSchemaResolver getInstance() { | |||||
return INSTANCE; | |||||
} | |||||
public LSInput resolveResource(String type, String namespaceURI, String publicId, | |||||
String systemId, String baseURI) { | |||||
if (XMLConstants.XML_NS_URI.equals(namespaceURI) && XML_SCHEMA_SYSTEM_ID.equals(systemId)) { | |||||
return XML_SCHEMA_INPUT; | |||||
} else { | |||||
return null; | |||||
} | |||||
} | |||||
} |