当前位置:网站首页>Generate XML schema from class
Generate XML schema from class
2022-07-05 18:00:00 【User 7741497】
This chapter describes how to use %XML.Schema
Enabled from XML Class generation for XML framework .
summary
To generate the same XML Multiple classes in the namespace define the complete schema of the type , Please use %XML.Schema
Build architecture , And then use %XML.Writer
Generate output for it .
Build an architecture from multiple classes
To build XML framework , Do the following :
- establish
%XML.Schema
example . - You can choose to set the properties of the instance :
- To specify a namespace for any other unassigned type , Please specify
DefaultNamespace
attribute . The default value isNULL
. - By default , Class documents for classes and their attributes are contained in the
<annotation>
In the elements . To disable this feature , Please putIncludeDocumentation
Property specified as 0.
Be careful : Must be called on AddSchemaType()
Method to set these properties .
- Of the calling instance
AddSchemaType()
Method .
method AddSchemaType(class As %String,
top As %String = "",
format As %String,
summary As %Boolean = 0,
input As %Boolean = 0,
refOnly As %Boolean = 0) as %Status
- class It's supporting xml The complete package name and class name of the class .
- top It's optional ; If specified , It will override the type name of this class .
- format Specify the format of this type . It has to be
"literal"
( Text format , Default ),"encoded"
( be used for SOAP code ),"encoded12"
( be used for SOAP 1.2 code ), or"element"
. value“element”
The same format as the text with the element at the top . - summary, If true, Will lead to InterSystems IRIS Enable xml Of
XMLSUMMARY
Parameters . If this parameter is specified , Then the schema will only contain the attributes listed by this parameter . - input, If true, Will lead to InterSystems IRIS Get input mode , Instead of output mode . in the majority of cases , The input mode and output mode are the same ; If you specify
XMLIO
Property parameters , Then they are different . - refOnly If true, Will lead to InterSystems IRIS Generate schemas only for referenced types , Instead of generating schemas for a given class and all referenced types .
This method returns a state that should be checked .
- Repeat the previous steps as needed .
- If you want to define the location of the import mode , You can call
DefineLocation()
Method .
method DefineLocation(namespace As %String, location As %String)
namespace Is the namespace used by one or more reference classes , The position is the corresponding pattern (XSD file ) Of URL Or path and file name .
You can call this method repeatedly to add locations for multiple imported schemas .
If you don't use this method , The pattern will contain a <import>
Instructions , But it will not give the position of the mode .
- Define additional
<import>
Instructions , You can callDefineExtraImports()
Method .
method DefineExtraImports(namespace As %String, ByRef imports)
namespace yes <import>
The namespace to which the directive should be added ,imports It's a multidimensional array , Form the following :
Node | Value |
---|---|
arrayname("namespace URI") | character string , Give the schema of this namespace (XSD file ) The location of . |
Generate output for schema
Create as described in the previous section %XML.Schema
After an instance of the , Please do the following to generate output :
- Of the calling instance
GetSchema()
Method takes the schema as the document object model (DOM) Node return of .
This method has only one parameter : The target namespace of the schema URI. This method returns %XML.Node
An example of , The example is in “ take XML The document is represented as DOM” Chapter one introduces .
If the schema has no namespace , Please use “”
As GetSchema()
Parameters of .
- You can choose to modify this DOM.
- To generate a schema , Do the following :
a. establish %XML.Write
Example , And you can choose to set properties ( Like indenting ).
b. You can choose to call the AddNamespace()
Methods and other methods , Add namespace declarations to <schema>
Elements .
Because the architecture may refer to simple XSD type , So call AddSchemaNamespace()
To add XML Schema namespaces are useful .
c. Use schema as a parameter , Call the writer's DocumentNode()
or Tree()
Method .
Example
A simple example
The first example shows the basic steps :
Set schemawriter=##class(%XML.Schema).%New()
// Add classes and packages ( for example )
Set status=schemawriter.AddSchemaType("Facets.Test")
// Through its URI( In this case NULL) Retrieval architecture
Set schema=schemawriter.GetSchema("")
//create writer
Set writer=##class(%XML.Writer).%New()
Set writer.Indent=1
//use writer
Do writer.DocumentNode(schema)
More complex architectural examples
Class SchemaWriter.Person Extends (%Persistent, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.myapp.com";
Property Name As %Name;
Property DOB As %Date(FORMAT = 5);
Property PatientID as %String;
Property HomeAddress as Address;
Property OtherAddress as AddressOtherNS ;
}
Address
Classes are defined in the same XML The name space (“http://www.myapp.com”
) in , and OtherAddress
Classes are defined in different XML The name space (“http://www.other.com”
) in .
Company
Classes are also defined in XML The name space “http://www.myapp.com”
in . Its definition is as follows :
Class SchemaWriter.Company Extends (%Persistent, %XML.Adaptor)
{
Parameter NAMESPACE = "http://www.myapp.com";
Property Name As %String;
Property CompanyID As %String;
Property HomeOffice As Address;
}
Be careful , No connection exists Person
and Company
Attribute relationship of class .
Namespace "http://www.myapp.com"
Generation patterns , We can use the following methods :
ClassMethod Demo()
{
Set schema=##class(%XML.Schema).%New()
Set schema.DefaultNamespace="http://www.myapp.com"
Set status=schema.AddSchemaType("SchemaWriter.Person")
Set status=schema.AddSchemaType("SchemaWriter.Company")
Do schema.DefineLocation("http://www.other.com","c:/other-schema.xsd")
Set schema=schema.GetSchema("http://www.myapp.com")
//create writer
Set writer=##class(%XML.Writer).%New()
Set writer.Indent=1
Do writer.AddSchemaNamespace()
Do writer.AddNamespace("http://www.myapp.com")
Do writer.AddNamespace("http://www.other.com")
Set status=writer.DocumentNode(schema)
If $$$ISERR(status) {Do $system.OBJ.DisplayError() Quit }
}
Output is as follows :
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:s="http://www.w3.org/2001/XMLSchema"
xmlns:s01="http://www.myapp.com"
xmlns:s02="http://www.other.com"
elementFormDefault="qualified"
targetNamespace="http://www.myapp.com">
<import namespace="http://www.other.com" schemaLocation="c:/other-schema.xsd"/>
<complexType name="Person">
<sequence>
<element minOccurs="0" name="Name" type="s:string"/>
<element minOccurs="0" name="DOB" type="s:date"/>
<element minOccurs="0" name="PatientID" type="s:string"/>
<element minOccurs="0" name="HomeAddress" type="s01:Address"/>
<element minOccurs="0" name="OtherAddress" type="s02:AddressOtherNS"/>
</sequence>
</complexType>
<complexType name="Address">
<sequence>
<element minOccurs="0" name="State">
<simpleType>
<restriction base="s:string">
<maxLength value="2"/>
</restriction>
</simpleType>
</element>
<element minOccurs="0" name="Zip">
<simpleType>
<restriction base="s:string">
<maxLength value="10"/>
</restriction>
</simpleType>
</element>
</sequence>
</complexType>
<complexType name="Company">
<sequence>
<element minOccurs="0" name="Name" type="s:string"/>
<element minOccurs="0" name="CompanyID" type="s:string"/>
<element minOccurs="0" name="HomeOffice" type="s01:Address"/>
</sequence>
</complexType>
</schema>
Please pay attention to the following points :
- Patterns include
Person
And the types of all the referenced classes , as well asCompany
And the types of all the referenced classes . <import>
The instruction importsOtherAddress
Namespace used by class ; Because we usedDefineLocation()
, So this instruction also indicates the position of the corresponding mode .- Because we're calling
DocumentNode()
I usedAddSchemaNamespace()
andAddNamespace()
, therefore<schema>
The element contains a namespace declaration , It defines prefixes for these namespaces . - If we don't use
AddSchemaNamespace()
andAddNamespace()
,<schema>
These namespace declarations will not be included , The pattern will look like this :
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
targetNamespace="http://www.myapp.com">
<import namespace="http://www.other.com" schemaLocation="c:/other-schema.xsd"/>
<complexType name="Person">
<sequence>
<element minOccurs="0" name="Name" type="s01:string" xmlns:s01="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="DOB" type="s02:date" xmlns:s02="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="PatientID" type="s03:string" xmlns:s03="http://www.w3.org/2001/XMLSchema"/>
<element minOccurs="0" name="HomeAddress" type="s04:Address" xmlns:s04="http://www.myapp.com"/>
<element minOccurs="0" name="OtherAddress" type="s05:AddressOtherNS" xmlns:s05="http://www.other.com"/>
</sequence>
</complexType>
<complexType name="Address">
<sequence>
<element minOccurs="0" name="State">
<simpleType>
<restriction base="s06:string" xmlns:s06="http://www.w3.org/2001/XMLSchema">
边栏推荐
- 最大人工岛[如何让一个连通分量的所有节点都记录总节点数?+给连通分量编号]
- This 17-year-old hacker genius cracked the first generation iPhone!
- Redis Foundation
- Huaxia Fund: sharing of practical achievements of digital transformation in the fund industry
- 基于YOLOv3的口罩佩戴检测
- Sophon Base 3.1 推出MLOps功能,为企业AI能力运营插上翅膀
- Elk log analysis system
- mybash
- Leetcode daily question: merge two ordered arrays
- Operation before or after Teamcenter message registration
猜你喜欢
PMP认证需具备哪些条件啊?费用多少啊?
Redis基础
神经网络自我认知模型
Sophon base 3.1 launched mlops function to provide wings for the operation of enterprise AI capabilities
论文阅读_中文NLP_LTP
Cmake tutorial Step2 (add Library)
Server configuration jupyter environment
Zabbix
ISPRS2022/云检测:Cloud detection with boundary nets基于边界网的云检测
Seven Devops practices to improve application performance
随机推荐
为什么阳历中平年二月是28天
Teamcenter 消息注册前操作或後操作
LeetCode笔记:Weekly Contest 300
小白入门NAS—快速搭建私有云教程系列(一)[通俗易懂]
RSE2020/云检测:基于弱监督深度学习的高分辨率遥感图像精确云检测
小林coding的内存管理章节
Redis Foundation
Why is February 28 in the Gregorian calendar
职场进阶指南:大厂人必看书籍推荐
Size_t 是无符号的
Sophon AutoCV:助力AI工业化生产,实现视觉智能感知
Action avant ou après l'enregistrement du message teamcenter
访问数据库使用redis作为mysql的缓存(redis和mysql结合)
Disabling and enabling inspections pycharm
Seven Devops practices to improve application performance
Tencent music launched its new product "quyimai", which provides music commercial copyright authorization
星环科技重磅推出数据要素流通平台Transwarp Navier,助力企业实现隐私保护下的数据安全流通与协作
Sophon CE社区版上线,免费Get轻量易用、高效智能的数据分析工具
rsync
ITK Example