我正在使用 JSONIX 编码和解码 XML 文件。到目前为止它运作良好。我缺少的是获得默认值和限制的可能性,例如 minOccours 和 maxOccours-Values。这在某种程度上可以通过 JSONIX 实现吗?
这些属性:
<xsd:sequence>
<xsd:element name="inflowMin" type="framework:flowType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="inflowMax" type="framework:flowType" minOccurs="0" maxOccurs="1"/>
<xsd:element name="unitOfFlowControl" type="framework:flowUnit" minOccurs="0" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="waterCosts" type="xsd:double" default="0.0"/>
<xsd:attribute name="controllable" type="xsd:boolean" default="0"/>
<xsd:attribute name="scalingOfControl" type="xsd:double" default="1.0" />
获取:
propertyInfos: [{
type: 'element',
name: 'inflowMin',
elementName: 'inflowMin',
typeInfo: ...
}, {
type: 'element',
name: 'inflowMax',
elementName: 'inflowMax',
typeInfo: ...
}, {
type: 'element',
name: 'unitOfFlowControl',
elementName: 'unitOfFlowControl',
typeInfo: 'String'
}, {
name: 'waterCosts',
typeInfo: 'Double',
attributeName: 'waterCosts',
type: 'attribute'
}, {
name: 'controllable',
typeInfo: 'Boolean',
attributeName: 'controllable',
type: 'attribute'
}, {
name: 'scalingOfControl',
typeInfo: 'Double',
attributeName: 'scalingOfControl',
type: 'attribute'
}]
}
谢谢!
最佳答案
您请求的功能现已在 Jsonix 中实现2.3.2和 Jsonix Schema Compiler 2.3.7 .
Jsonix Schema Compiler 现在在生成的映射和 JSON 模式中生成 required、minOccurs 和 maxOccurs。
这是它在映射中的样子:
{
localName: 'Items',
propertyInfos: [{
name: 'item',
minOccurs: 0,
maxOccurs: 100,
collection: true,
elementName: {
localPart: 'item'
},
typeInfo: '.Items.Item'
}]
}
在 JSON 模式中:
"Items":{
"type":"object",
"title":"Items",
"properties":{
"item":{
"title":"item",
"allOf":[
{
"type":"array",
"items":{
"$ref":"#/definitions/Items.Item"
},
"maxItems":100,
"minItems":0
}
],
"propertyType":"element",
"elementName":{
"localPart":"item",
"namespaceURI":""
}
}
},
"typeType":"classInfo",
"typeName":{
"localPart":"Items",
"namespaceURI":""
},
"propertiesOrder":[
"item"
]
}
您可以按如下方式从 Jsonix 上下文访问此元数据:
var context = new Jsonix.Context([ PO ]);
var itemsClassInfo = context.getTypeInfoByName("PO.Items");
var itemPropertyInfo = itemsClassInfo.getPropertyInfoByName("item");
test.equal(false, itemPropertyInfo.required);
test.equal(0, itemPropertyInfo.minOccurs);
test.equal(100, itemPropertyInfo.maxOccurs);
test.done();
关于javascript - JSONIX:获取属性的限制和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29256036/
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb
我有一个具有一些属性的模型:attr1、attr2和attr3。我需要在不执行回调和验证的情况下更新此属性。我找到了update_column方法,但我想同时更新三个属性。我需要这样的东西:update_columns({attr1:val1,attr2:val2,attr3:val3})代替update_column(attr1,val1)update_column(attr2,val2)update_column(attr3,val3) 最佳答案 您可以使用update_columns(attr1:val1,attr2:val2
我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问
两者都可以defsetup(options={})options.reverse_merge:size=>25,:velocity=>10end和defsetup(options={}){:size=>25,:velocity=>10}.merge(options)end在方法的参数中分配默认值。问题是:哪个更好?您更愿意使用哪一个?在性能、代码可读性或其他方面有什么不同吗?编辑:我无意中添加了bang(!)...并不是要询问nobang方法与bang方法之间的区别 最佳答案 我倾向于使用reverse_merge方法:option
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge