|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
javax.xml.validation
类 SchemaFactory
java.lang.Object javax.xml.validation.SchemaFactory
-
public abstract class SchemaFactory
- extends Object
创建 Schema
对象的工厂。验证 API 的入口点。
SchemaFactory
是一个模式编译器。它读取模式的外部表示形式并准备验证它们。
SchemaFactory
类不是线程安全的。换句话说,应用程序负责确保任意给定时刻至多只有一个线程使用 SchemaFactory
对象。鼓励实现将方法标记为 synchronized 以保护客户不至于机崩溃。
SchemaFactory
不是重入(re-entrant)方法。当正在调用某个 newSchema
方法时,应用程序不能试图以递归方式调用 newSchema
方法,甚至不能从相同线程调用该方法。
模式语言
此规范使用名称空间 URI 来指定模式语言。下表显示了此规范定义的值。
要遵守此规范,实现只需支持 W3C XML Schema 1.0 即可。但是,如果实现选择支持其他模式语言,则它必须遵守此规范中所描述的相关行为。
此处未列出的模式语言应引用它们自己的 URI 来表示它们本身。SchemaFactory
类能够在运行时定位其他模式语言的其他实现。
注意,因为 XML DTD 与解析过程有紧密联系,且对解析过程产生很大影响,因此不能将 DTD 验证定义为与解析无关的过程。出于此原因,此规范不定义 XML DTD 的语义。这并不限制实现者以他们了解的合适方式来实现它,但这里提醒用户,此接口上实现的任何 DTD 验证必然偏离 XML 1.0 中所定义的 XML DTD 语义。
值 | 语言 |
---|---|
XMLConstants.W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema ") |
W3C XML Schema 1.0 |
XMLConstants.RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0 ") |
RELAX NG 1.0 |
- 从以下版本开始:
- 1.5
构造方法摘要 | |
---|---|
protected |
SchemaFactory() 派生类的构造方法。 |
方法摘要 | |
---|---|
abstract ErrorHandler |
getErrorHandler() 获取设置为此 SchemaFactory 的当前 ErrorHandler 。 |
boolean |
getFeature(String name) 查找功能标志的值。 |
Object |
getProperty(String name) 查找属性值。 |
abstract LSResourceResolver |
getResourceResolver() 获取设置为此 SchemaFactory 的当前 LSResourceResolver 。 |
abstract boolean |
isSchemaLanguageSupported(String schemaLanguage) 此 SchemaFactory 支持指定的模式吗? |
static SchemaFactory |
newInstance(String schemaLanguage) 查找支持指定模式语言的 SchemaFactory 的实现并返回它。 |
abstract Schema |
newSchema() 创建特殊的 Schema 对象。 |
Schema |
newSchema(File schema) 解析作为模式的指定 File 并以 Schema 的形式返回它。 |
Schema |
newSchema(Source schema) 解析作为模式的指定源并以模式形式返回它。 |
abstract Schema |
newSchema(Source[] schemas) 解析作为模式的指定源(或多个源),并以模式形式返回它。 |
Schema |
newSchema(URL schema) 解析作为模式的指定 URL 并以 Schema 形式返回它。 |
abstract void |
setErrorHandler(ErrorHandler errorHandler) 设置 ErrorHandler 以接收在 newSchema 方法调用期间遇到的错误。 |
void |
setFeature(String name, boolean value) 设置功能标志的值。 |
void |
setProperty(String name, Object object) 设置属性值。 |
abstract void |
setResourceResolver(LSResourceResolver resourceResolver) 设置 LSResourceResolver 以自定义解析模式时的资源解析。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
SchemaFactory
protected SchemaFactory()
-
派生类的构造方法。
构造方法不执行动作。
派生类必须创建具有
null
ErrorHandler
和null
LSResourceResolver
的SchemaFactory
对象。
方法详细信息 |
---|
newInstance
public static final SchemaFactory newInstance(String schemaLanguage)
-
查找支持指定模式语言的
SchemaFactory
的实现并返回它。为了查找给定模式语言的
SchemaFactory
对象,此方法按照以下顺序查找以下位置,其中“类加载器”指上下文类加载器:- 如果系统属性
"javax.xml.validation.SchemaFactory:schemaLanguage"
存在(其中 schemaLanguage 是此方法的参数),则其值作为类名称来读取。该方法将试图通过使用类加载器创建此类的新实例,如果创建成功,则返回它。 - 读取
$java.home/lib/jaxp.properties
,并查找与作为系统属性的键关联的值。如果存在,则按上面的方式处理该值。 类加载器要求服务提供程序的提供程序配置文件与资源目录 META-INF/services 中的
javax.xml.validation.SchemaFactory
匹配。参见文件格式和解析规则的 JAR File Specification。每个可能的服务提供程序均要实现该方法:isSchemaLanguageSupported(String schemaLanguage)
- 以特定于实现的方式来定位平台默认的
SchemaFactory
。必须存在 W3C XML Schema 的平台默认SchemaFactory
。
如果这些都失败,将抛出
IllegalArgumentException
。疑难解答提示:
有关如何精确解析属性文件的信息,请参阅
Properties.load(java.io.InputStream)
。尤其是,冒号 ':'在属性文件中需要转义,因此要确保模式语言 URI 在其中进行正确转义。例如:http\://www.w3.org/2001/XMLSchema=org.acme.foo.XSSchemaFactory
- 如果系统属性
-
- 参数:
schemaLanguage
- 指定返回的 SchemaFactory 理解的模式语言。有关可能的值,请参阅 可用模式语言列表。- 返回:
-
新的
SchemaFactory
实例 - 抛出:
IllegalArgumentException
- 如果没有可用的模式语言实现。NullPointerException
- 如果 schemLanguage 参数为 null。
isSchemaLanguageSupported
public abstract boolean isSchemaLanguageSupported(String schemaLanguage)
-
此
SchemaFactory
支持指定的模式吗? -
- 参数:
schemaLanguage
- 指定返回的SchemaFactory
理解的模式语言。schemaLanguage
必须指定有效的模式语言。- 返回:
-
如果
SchemaFactory
支持schemaLanguage
,则返回true
,否则返回false
。 - 抛出:
NullPointerException
- 如果schemaLanguage
为null
。IllegalArgumentException
- 如果schemaLanguage.length() == 0
或schemaLanguage
未指定有效的模式语言。
getFeature
public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
-
查找功能标志的值。
功能名称是任何完全限定的 URI。
SchemaFactory
有可能识别功能名称,但暂时不能返回其值。实现者可随意选择(鼓励)创建自己的功能,方法是使用在它们自己的 URI 上构建的名称。
-
- 参数:
name
- 功能名称,它是非 null 的完全限定 URI。- 返回:
- 功能的当前值(true 或 false)。
- 抛出:
SAXNotRecognizedException
- 如果不能分配或检索功能值。SAXNotSupportedException
- 当SchemaFactory
可以识别功能名称但不能确定其此时的值时。NullPointerException
- 如果名称参数为 null。- 另请参见:
setFeature(String, boolean)
setFeature
public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
-
设置功能标志的值。
功能可用于控制
SchemaFactory
解析模式的方法,虽然SchemaFactory
无需识别任何特定的功能名称。功能名称是任何完全限定的 URI。
SchemaFactory
有可能公开功能值,但不能更改当前值。所有实现必须支持
XMLConstants.FEATURE_SECURE_PROCESSING
功能。当功能为以下情况时:true
:该实现将限制 XML 处理遵守实现限制。示例包括实体扩展限制和将使用大量资源的 XML Schema 构造。如果由于安全原因 XML 处理受到限制,则将通过调用注册的ErrorHandler.fatalError(SAXParseException exception)
来报告此情况。参见setErrorHandler(ErrorHandler errorHandler)
。false
:实现将根据 XML 规范来处理 XML,而不管可能的实现限制。
-
- 参数:
name
- 功能名称,它是非 null 的完全限定 URI。value
- 所请求的功能值(true 或 false)。- 抛出:
SAXNotRecognizedException
- 如果不能分配或检索功能值。SAXNotSupportedException
- 当SchemaFactory
可以识别功能名称,但不能设置请求的值时。NullPointerException
- 如果名称参数为 null。- 另请参见:
getFeature(String)
setProperty
public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
-
设置属性值。
属性名称是任何完全限定的 URI。
SchemaFactory
有可能识别属性名称,但不能更改当前值。SchemaFactory
无需识别设置任何特定的属性名称。 -
- 参数:
name
- 属性名称,它是非 null 的完全限定 URI。object
- 所请求的属性值。- 抛出:
SAXNotRecognizedException
- 如果不能分配或检索属性值。SAXNotSupportedException
- 当SchemaFactory
可以识别属性名称,但不能设置请求的值时。NullPointerException
- 如果名称参数为 null。
getProperty
public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
-
查找属性值。
属性名称是任何完全限定的 URI。
SchemaFactory
有可能识别属性名称,但暂时不能返回其值。SchemaFactory
无需识别任何特定的属性名称。实现者可随意选择(鼓励)创建自己的属性,方法是使用在它们自己的 URI 上构建的名称。
-
- 参数:
name
- 属性名称,它是非 null 的完全限定 URI。- 返回:
- 属性的当前值。
- 抛出:
SAXNotRecognizedException
- 如果不能分配或检索属性值。SAXNotSupportedException
- 当 XMLReader 可以识别属性名称,但不能确定其此时的值时。NullPointerException
- 如果名称参数为 null。- 另请参见:
setProperty(String, Object)
setErrorHandler
public abstract void setErrorHandler(ErrorHandler errorHandler)
-
设置
ErrorHandler
以接收在newSchema
方法调用期间遇到的错误。错误处理程序可用于自定义模式解析期间的错误处理过程。当设置
ErrorHandler
时,模式解析期间发现的错误将首先被发送到ErrorHandler
。错误处理程序通过抛出来自处理程序的
SAXException
可以立即中止模式的解析。例如,它可以将错误打印到屏幕上,并尝试通过从ErrorHandler
正常返回来继续该过程。如果从
ErrorHandler
抛出任何Throwable
(或其派生类的实例),则newSchema
方法的调用方将接收相同的Throwable
对象。SchemaFactory
未首先向ErrorHandler
报告之前,不能抛出SAXException
。甚至正在解析
Schema
期间,应用程序也可以调用此方法。当
ErrorHandler
为 null 时,实现的行为就好像设置了以下ErrorHandler
一样。class DraconianErrorHandler implements
ErrorHandler
{ public void fatalError(SAXParseException
e ) throwsSAXException
{ throw e; } public void error(SAXParseException
e ) throwsSAXException
{ throw e; } public void warning(SAXParseException
e ) throwsSAXException
{ // noop } }当创建新
SchemaFactory
对象时,此字段在初始化时被设置为 null。不 将此字段继承到从此SchemaFactory
创建的Schema
、Validator
或ValidatorHandler
。 -
- 参数:
errorHandler
- 要设置的新错误处理程序。此参数可以为 null。