Merge "Validate further XML files"
This commit is contained in:
commit
89d91f2d2a
@ -70,10 +70,11 @@ KNOWN_AUDIENCE_VALUES = ["enduser",
|
||||
"installer",
|
||||
"webpage"]
|
||||
|
||||
BASE_RNG = os.path.join(os.path.dirname(__file__), 'resources')
|
||||
BASE_RNG = os.path.join(os.path.dirname(__file__), 'resources/')
|
||||
RACKBOOK_RNG = os.path.join(BASE_RNG, 'rackbook.rng')
|
||||
DOCBOOKXI_RNG = os.path.join(BASE_RNG, 'docbookxi.rng')
|
||||
WADL_RNG = os.path.join(BASE_RNG, 'wadl.rng')
|
||||
WADL_XSD = os.path.join(BASE_RNG, 'wadl.xsd')
|
||||
|
||||
|
||||
# NOTE(berendt): check_output as provided in Python 2.7.5 to make script
|
||||
@ -110,9 +111,15 @@ def get_schema(is_api_site=False):
|
||||
|
||||
def get_wadl_schema():
|
||||
"""Return the Wadl schema."""
|
||||
url = WADL_RNG
|
||||
relaxng_doc = etree.parse(url, base_url=BASE_RNG)
|
||||
return etree.RelaxNG(relaxng_doc)
|
||||
# NOTE(jaegerandi): We could use the RelaxNG instead
|
||||
# like follows but this gives quite some errors at the
|
||||
# moment, so only validate using the XMLSchema
|
||||
#url = WADL_RNG
|
||||
#relaxng_doc = etree.parse(url, base_url=BASE_RNG)
|
||||
#return etree.RelaxNG(relaxng_doc)
|
||||
url = WADL_XSD
|
||||
schema = etree.parse(url, base_url=BASE_RNG)
|
||||
return etree.XMLSchema(schema)
|
||||
|
||||
|
||||
def validation_failed(schema, doc):
|
||||
@ -446,14 +453,15 @@ def is_xml(filename):
|
||||
return filename.endswith('.xml') and not filename.endswith('/pom.xml')
|
||||
|
||||
|
||||
def is_xml_wadl(filename):
|
||||
"""Returns true if file ends a valid .xml or .wadl file.
|
||||
def is_xml_like(filename):
|
||||
"""Returns true if file is in some XML format we handle
|
||||
|
||||
Skips pom.xml files as well since those are not handled.
|
||||
"""
|
||||
|
||||
return (filename.endswith(('.xml', '.wadl')) and
|
||||
not filename.endswith('/pom.xml'))
|
||||
return (filename.endswith(('.xml', '.xsd', '.xsl', '.wadl',
|
||||
'.xjb')) and
|
||||
not filename.endswith('pom.xml'))
|
||||
|
||||
|
||||
def is_wadl(filename):
|
||||
@ -476,24 +484,28 @@ def validate_individual_files(files_to_check, rootdir, exceptions, verbose,
|
||||
no_failed = 0
|
||||
|
||||
if check_syntax and check_niceness:
|
||||
print("Checking syntax and niceness of xml and wadl files...")
|
||||
print("Checking syntax and niceness of XML files...")
|
||||
elif check_syntax:
|
||||
print("Checking syntax of xml and wadl files...")
|
||||
print("Checking syntax of XML files...")
|
||||
elif check_niceness:
|
||||
print("Checking niceness of xml and wadl files...")
|
||||
print("Checking niceness of XML files...")
|
||||
|
||||
for f in files_to_check:
|
||||
base_f = os.path.basename(f)
|
||||
if (base_f == "pom.xml" or
|
||||
base_f in exceptions):
|
||||
continue
|
||||
# Files ending with ".xml" in subdirectories of
|
||||
# wadls and samples files are not docbook files.
|
||||
# We cannot validate with a schema for these
|
||||
if (is_api_site and ("wadls" in f or "samples" in f)):
|
||||
validate_schema = False
|
||||
else:
|
||||
validate_schema = True
|
||||
validate_schema = True
|
||||
if is_api_site:
|
||||
# Files ending with ".xml" in subdirectories of
|
||||
# wadls and samples files are not docbook files.
|
||||
if (f.endswith('.xml') and
|
||||
("wadls" in f or "samples" in f)):
|
||||
validate_schema = False
|
||||
# Right now we can only validate docbook .xml
|
||||
# and .wadl files with a schema
|
||||
elif not f.endswith(('.wadl', '.xml')):
|
||||
validate_schema = False
|
||||
|
||||
if (is_api_site and is_wadl(f)):
|
||||
any_failures = validate_one_file(wadl_schema, rootdir, f,
|
||||
@ -512,12 +524,12 @@ def validate_individual_files(files_to_check, rootdir, exceptions, verbose,
|
||||
no_validated = no_validated + 1
|
||||
|
||||
if no_failed > 0:
|
||||
print("Check failed, validated %d xml/wadl files with %d failures.\n"
|
||||
print("Check failed, validated %d XML files with %d failures.\n"
|
||||
% (no_validated, no_failed))
|
||||
if not ignore_errors:
|
||||
sys.exit(1)
|
||||
else:
|
||||
print("Check passed, validated %d xml/wadl files.\n" % no_validated)
|
||||
print("Check passed, validated %d XML files.\n" % no_validated)
|
||||
|
||||
|
||||
def validate_modified_files(rootdir, exceptions, verbose,
|
||||
@ -529,7 +541,7 @@ def validate_modified_files(rootdir, exceptions, verbose,
|
||||
# or Type changed
|
||||
modified_files = get_modified_files(rootdir, "--diff-filter=ACMRT")
|
||||
|
||||
modified_files = filter(is_xml_wadl, modified_files)
|
||||
modified_files = filter(is_xml_like, modified_files)
|
||||
|
||||
validate_individual_files(modified_files, rootdir, exceptions,
|
||||
verbose,
|
||||
@ -557,9 +569,8 @@ def validate_all_files(rootdir, exceptions, verbose,
|
||||
|
||||
for f in files:
|
||||
# Ignore maven files, which are called pom.xml
|
||||
if (f.endswith(('.xml', '.wadl')) and
|
||||
f != 'pom.xml' and
|
||||
f not in exceptions):
|
||||
if (is_xml_like(f) and
|
||||
f not in exceptions):
|
||||
path = os.path.abspath(os.path.join(root, f))
|
||||
files_to_check.append(path)
|
||||
|
||||
|
@ -3,3 +3,5 @@ These files are copied from the following locations:
|
||||
* extensions.rng: clouddocs-maven-plugin
|
||||
* rackbook.rng: clouddocs-maven-plugin
|
||||
* wadl.rng: clouddocs-maven-plugin
|
||||
* wadl.xsd: http://docs.rackspace.com/rackbook/wadl.xsd
|
||||
* xml.xsd: http://docs.rackspace.com/rackbook/xml.xsd
|
||||
|
263
os_doc_tools/resources/wadl.xsd
Normal file
263
os_doc_tools/resources/wadl.xsd
Normal file
@ -0,0 +1,263 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://wadl.dev.java.net/2009/02"
|
||||
xmlns:tns="http://wadl.dev.java.net/2009/02"
|
||||
xmlns:xml="http://www.w3.org/XML/1998/namespace"
|
||||
elementFormDefault="qualified">
|
||||
|
||||
<xs:import namespace="http://www.w3.org/XML/1998/namespace"
|
||||
schemaLocation="xml.xsd"/>
|
||||
|
||||
<xs:element name="application">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:grammars" minOccurs="0"/>
|
||||
<xs:element ref="tns:resources" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element ref="tns:resource_type"/>
|
||||
<xs:element ref="tns:method"/>
|
||||
<xs:element ref="tns:representation"/>
|
||||
<xs:element ref="tns:param"/>
|
||||
</xs:choice>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="doc">
|
||||
<xs:complexType mixed="true">
|
||||
<xs:sequence>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="title" type="xs:string"/>
|
||||
<xs:attribute ref="xml:lang"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="grammars">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element minOccurs="0" maxOccurs="unbounded" ref="tns:include"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="resources">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:resource" maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="base" type="xs:anyURI"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="resource">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element ref="tns:method"/>
|
||||
<xs:element ref="tns:resource"/>
|
||||
</xs:choice>
|
||||
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
||||
processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:attribute name="type" type="tns:resource_type_list"/>
|
||||
<xs:attribute name="queryType" type="xs:string"
|
||||
default="application/x-www-form-urlencoded"/>
|
||||
<xs:attribute name="path" type="xs:string"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name="resource_type_list">
|
||||
<xs:list itemType="xs:anyURI"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:element name="resource_type">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||
<xs:element ref="tns:method"/>
|
||||
<xs:element ref="tns:resource"/>
|
||||
</xs:choice>
|
||||
<xs:any minOccurs="0" maxOccurs="unbounded" namespace="##other"
|
||||
processContents="lax"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="method">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:request" minOccurs="0"/>
|
||||
<xs:element ref="tns:response" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:attribute name="name" type="tns:Method"/>
|
||||
<xs:attribute name="href" type="xs:anyURI"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name="Method">
|
||||
<xs:union memberTypes="tns:HTTPMethods xs:NMTOKEN"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="HTTPMethods">
|
||||
<xs:restriction base="xs:NMTOKEN">
|
||||
<xs:enumeration value="GET"/>
|
||||
<xs:enumeration value="POST"/>
|
||||
<xs:enumeration value="PUT"/>
|
||||
<xs:enumeration value="HEAD"/>
|
||||
<xs:enumeration value="DELETE"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:element name="include">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="href" type="xs:anyURI"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="request">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:representation" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="response">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:representation" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="status" type="tns:statusCodeList"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name="uriList">
|
||||
<xs:list itemType="xs:anyURI"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:element name="representation">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:param" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:attribute name="element" type="xs:QName"/>
|
||||
<xs:attribute name="mediaType" type="xs:string"/>
|
||||
<xs:attribute name="href" type="xs:anyURI"/>
|
||||
<xs:attribute name="profile" type="tns:uriList"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:simpleType name="statusCodeList">
|
||||
<xs:list itemType="xs:unsignedInt"/>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:simpleType name="ParamStyle">
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:enumeration value="plain"/>
|
||||
<xs:enumeration value="query"/>
|
||||
<xs:enumeration value="matrix"/>
|
||||
<xs:enumeration value="header"/>
|
||||
<xs:enumeration value="template"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
|
||||
<xs:element name="param">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:option" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:element ref="tns:link" minOccurs="0"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="href" type="xs:anyURI"/>
|
||||
<xs:attribute name="name" type="xs:NMTOKEN"/>
|
||||
<xs:attribute name="style" type="tns:ParamStyle"/>
|
||||
<xs:attribute name="id" type="xs:ID"/>
|
||||
<xs:attribute name="type" type="xs:QName" default="xs:string"/>
|
||||
<xs:attribute name="default" type="xs:string"/>
|
||||
<xs:attribute name="required" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="repeating" type="xs:boolean" default="false"/>
|
||||
<xs:attribute name="fixed" type="xs:string"/>
|
||||
<xs:attribute name="path" type="xs:string"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="option">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="value" type="xs:string" use="required"/>
|
||||
<xs:attribute name="mediaType" type="xs:string"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
<xs:element name="link">
|
||||
<xs:complexType>
|
||||
<xs:sequence>
|
||||
<xs:element ref="tns:doc" minOccurs="0" maxOccurs="unbounded"/>
|
||||
<xs:any namespace="##other" processContents="lax" minOccurs="0"
|
||||
maxOccurs="unbounded"/>
|
||||
</xs:sequence>
|
||||
<xs:attribute name="resource_type" type="xs:anyURI"/>
|
||||
<xs:attribute name="rel" type="xs:token"/>
|
||||
<xs:attribute name="rev" type="xs:token"/>
|
||||
<xs:anyAttribute namespace="##other" processContents="lax"/>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
</xs:schema>
|
287
os_doc_tools/resources/xml.xsd
Normal file
287
os_doc_tools/resources/xml.xsd
Normal file
@ -0,0 +1,287 @@
|
||||
<?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>
|
||||
|
Loading…
Reference in New Issue
Block a user