查看源代码 xmerl_xsd (xmerl v2.1)
用于 XML Schema 验证的接口模块。
它处理 W3.org 的 规范,即 2004 年 10 月 28 日的 XML Schema 第二版。有关 XML Schema 的介绍,请学习 第 0 部分。
XML 结构通过 xmerl_xsd:validate/[2,3]
进行验证。
摘要
函数
从文件中读取模式处理状态。
将错误描述格式化为人类可读的字符串。
读取 XML 模式并检查其是否有效。
读取 XML 模式并检查其是否有效。
根据 XML 模式验证已解析的格式良好的 XML 元素。
将模式处理状态保存到文件中。
验证已解析的格式良好的 XML 元素 (Element
)。
类型
-type filename() :: string().
-type global_state() :: xsd_state().
验证器的全局状态。
它由 #xsd_state{}
记录表示。
允许自定义验证行为的选项。
可能的选项包括:
{tab2file,boolean()}
- 启用将抽象结构保存到文件中以进行调试。
{xsdbase,filename()}
- XSD 基本目录。
{fetch_fun,FetchFun}
- 用于获取外部资源的回调函数。
{fetch_path,PathList}
- PathList 是获取文件时要搜索的目录列表。如果所讨论的文件不在 fetch_path 中,则 URI 将用作文件名。
{state,State}
- 通过此选项,可以提供一个带有先前验证的处理信息的状态。
函数
-spec file2state(FileName :: string()) -> {ok, State} | {error, Reason} when State :: global_state(), Reason :: term().
从文件中读取模式处理状态。
从使用 state2file/[1,2]
创建的文件中读取模式状态以及已处理模式的所有信息。此文件的格式是内部的。然后可以使用该状态来验证 XML 文档。
-spec format_error(Reasons) -> io_lib:chars() when Reasons :: [Reason :: term()] | (Reason :: term()).
将错误描述格式化为人类可读的字符串。
-spec process_schema(Schema :: string()) -> _.
-spec process_schema(Schema :: string(), Options :: option_list()) -> {ok, State} | {error, Reasons} when State :: global_state(), Reasons :: [Reason :: term()] | (Reason :: term()).
读取 XML 模式并检查其是否有效。
读取引用的 XML 模式并检查其是否有效。返回带有模式信息的 global_state/0
或错误原因。错误原因可以是多个错误的列表,也可以是处理过程中遇到的单个错误。
-spec process_schemas(Schemas :: list()) -> _.
-spec process_schemas(Schemas, Options) -> {ok, State} | {error, Reasons} when Schemas :: [{NameSpace, Schema}, ...], Options :: option_list(), NameSpace :: term(), Schema :: string(), State :: global_state(), Reasons :: [Reason :: term()] | (Reason :: term()).
读取 XML 模式并检查其是否有效。
读取引用的 XML 模式并控制它们是否有效。返回带有模式信息的 global_state/0
或错误原因。错误原因可以是多个错误的列表,也可以是处理过程中遇到的单个错误。
-spec process_validate(Schema :: string(), Element :: xmerl:element()) -> _.
-spec process_validate(Schema, Element, Options) -> Result when Schema :: string(), Element :: xmerl:element(), Options :: option_list(), Result :: {ValidElement, global_state()} | {error, Reasons}, ValidElement :: xmerl:element(), Reasons :: [Reason :: term()] | (Reason :: term()).
根据 XML 模式验证已解析的格式良好的 XML 元素。
分两步进行验证。首先,它处理模式,将类型和结构信息保存在 ETS 表中,然后根据该模式验证元素。
使用示例
1>{E,_} = xmerl_scan:file("my_XML_document.xml").
2>{E2,_} = xmerl_xsd:process_validate("my_XML_Schema.xsd",E).
请注意,如果例如在 my_XML_Schema.xsd
中定义了默认值,则 E2 可能与 E 不同。
-spec state2file(State :: global_state()) -> ok | {error, Reason} when Reason :: term().
等效于 state2file(State, SchemaName)
。
SchemaName
是 State
中模式的名称。
-spec state2file(global_state(), FileName :: string()) -> ok | {error, Reason} when Reason :: term().
将模式处理状态保存到文件中。
将模式状态以及已处理模式的所有信息保存在文件中。您可以为保存的状态提供文件名。FileName 将保存,并添加 .xss
扩展名。
-spec validate(Element :: xmerl:element(), State :: global_state()) -> _.
-spec validate(Element, global_state(), Options) -> Result when Element :: xmerl:xmlElement(), Options :: option_list(), Result :: {ValidElement, global_state()} | {error, Reasons}, ValidElement :: xmerl:xmlElement(), Reasons :: [ErrorReason] | ErrorReason, ErrorReason :: term().
验证已解析的格式良好的 XML 元素 (Element
)。
调用 validate/2
或 validate/3
必须提供格式良好的已解析 XML Element :: #xmlElement{}
和一个 State,global_state/0
,其中包含来自已处理模式的必要信息。因此,validate 可以重用模式信息,因此如果需要针对同一模式进行多次验证,则可以减少时间消耗。
结果 ValidElement
是符合后模式验证信息集的有效元素。当验证器发现错误时,它会尝试继续并报告找到的所有错误的列表。在这些情况下,如果发现意外错误,可能会导致单个错误原因。
使用示例
1>{E,_} = xmerl_scan:file("my_XML_document.xml").
2>{ok,S} = xmerl_xsd:process_schema("my_XML_Schema.xsd").
3>{E2,_} = xmerl_xsd:validate(E,S).
请注意,如果例如在 my_XML_Schema.xsd
中定义了默认值,则 E2 可能与 E 不同。