当前位置:网站首页>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">
边栏推荐
- Use QT designer interface class to create two interfaces, and switch from interface 1 to interface 2 by pressing the key
- QT控制台打印输出
- 2022新版PMP考试有哪些变化?
- Abnormal recovery of virtual machine Oracle -- Xi Fenfei
- Size_ T is unsigned
- Is it safe to open an account online? What is the general interest rate of securities financing?
- Zabbix
- 提高應用程序性能的7個DevOps實踐
- 毫无章法系列
- Isprs2022 / Cloud Detection: Cloud Detection with Boundary nets Boundary Networks Based Cloud Detection
猜你喜欢
Isprs2022 / Cloud Detection: Cloud Detection with Boundary nets Boundary Networks Based Cloud Detection
隐私计算助力数据的安全流通与共享
Neural network self cognition model
Thesis reading_ Medical NLP model_ EMBERT
Sophon CE社区版上线,免费Get轻量易用、高效智能的数据分析工具
nacos -分布式事务-Seata** linux安装jdk ,mysql5.7启动nacos配置ideal 调用接口配合 (保姆级细节教程)
7 pratiques devops pour améliorer la performance des applications
To solve the problem of "double click PDF file, pop up", please install Evernote program
PMP认证需具备哪些条件啊?费用多少啊?
论文阅读_医疗NLP模型_ EMBERT
随机推荐
Cmake tutorial Step4 (installation and testing)
GFS分布式文件系统
热通孔的有效放置如何改善PCB设计中的热管理?
Disabling and enabling inspections pycharm
开户复杂吗?网上开户安全么?
南京大学:新时代数字化人才培养方案探讨
How to save the trained neural network model (pytorch version)
flask接口响应中的中文乱码(unicode)处理
[JMeter] advanced writing method of JMeter script: all variables, parameters (parameters can be configured by Jenkins), functions, etc. in the interface automation script realize the complete business
Leetcode daily question: the first unique character in the string
较文心损失一点点性能提升很多
毫无章法系列
在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?
Zabbix
Accuracy of BigDecimal Division
多线程(一) 进程与线程
提高應用程序性能的7個DevOps實踐
ISPRS2022/雲檢測:Cloud detection with boundary nets基於邊界網的雲檢測
Zabbix
求解为啥all(())是True, 而any(())是FALSE?