我有以下复杂类型:
<xs:complexType name="ValuePropertyType">
<xs:complexContent>
<xs:extension base="xs:anyType">
<xs:attribute name="recordCount" type="xs:positiveInteger"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
是否允许简单的文字内容?像:
<my:values>
2007-04-01T00:00:00.000-06:00,30.4,28.8,155.8,1055.32,55,haze
2007-04-01T00:00:10.000-06:00,30.4,28.8,155.8,1055.4,59,haze
</my:values>
我认为确实如此,但在XML Schema规范中找到规范性引用非常困难。
我也问,因为JAXB XJC在这里生成以下属性:
@XmlAnyElement
protected List<Element> any;
仅期望元素。我认为它也应该允许文本。
更新
Xerces,Eclipse(无论它在下面使用什么),Stylus Studio和Oxygen对this example验证this schema。具体来说,这是问题的complex type:
<xs:complexType name="DataValuePropertyType">
<xs:annotation>
<xs:documentation>Use to point or include data values inline</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="xs:anyType">
<xs:attribute name="recordCount" type="xs:positiveInteger"/>
<xs:attributeGroup ref="gml:AssociationAttributeGroup"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
答案 0 :(得分:3)
complexContent
的复杂类型不允许将文本内容作为子项,除非声明为mixed="true"
。如果你将它混合在一起,那么它允许任意文本节点混合在内容模型允许的任何元素之间,你可以将文本限制为特定类型(除非你使用simpleContent
,但那不会和#39; t根本不允许使用子元素。
答案 1 :(得分:2)
在XML Schema规范中找到规范性引用非常......很难
我想在现场为您提供此类参考,而不是指向规范的链接。
因此,如果base
的{{1}}属性值为xs:extension
,则在限制之前允许所有内容作为其内容。规范确实含糊不清,很好的参考是
[...] anyType ,它允许任何子项和/或字符数据内容以及任何属性,只要它是格式良好的XML。
Walmsley,Priscilla。确定的XML模式。 Charles F. Goldfarb最终XML系列。 Prentice Hall:2012。P 97。
anyType 是允许任何内容的通用复杂类型;任何属性,任何子元素,任何文本内容。
Walmsley,Priscilla。确定的XML模式。 Charles F. Goldfarb最终XML系列。 Prentice Hall:2012。P 203。
然后,关于模式设计的注释:将复杂类型定义为xs:anyType
的扩展会导致松散(即不是非常严格)的XML模式文档。实际上,这意味着根据生成的模式有效的文档集远远大于必要的 - 并且模式不会对文档中的结构进行细粒度控制。
像
这样的XML Schemaxs:anyType
甚至不要求扩展正文中明确定义的属性确实出现在输入文档中,因为它们缺少<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attributeGroup name="AssociationAttributeGroup">
<xs:attribute name="id" type="xs:ID"/>
</xs:attributeGroup>
<xs:element name="item" type="DataValuePropertyType"/>
<xs:complexType name="DataValuePropertyType">
<xs:annotation>
<xs:documentation>Use to point or include data values inline</xs:documentation>
</xs:annotation>
<xs:complexContent>
<xs:extension base="xs:anyType">
<xs:attribute name="recordCount" type="xs:positiveInteger"/>
<xs:attributeGroup ref="AssociationAttributeGroup"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>
属性,其默认值为use
。
答案 2 :(得分:1)
形式定义可以在XML Schema规范的第1部分中找到,§2.2.1.1XML Schema 1.0,XML Schema 1.1和§3.4.7XML Schema 1.0,XML Schema 1.1 。根据版本的不同,措辞有点不同,但最后它是相似的。
在版本1.1中更清楚的是anyType
是混合内容,因此它同时允许文本内容和标签。
由于您的complexContent
是此混合内容的扩展名,因此它也是一种混合内容类型。
anyType
提供扩展似乎有点奇怪,因为它已经允许任何内容,以及任何属性。在规范中,如果你看§3.4.7,就会提到派生方法是限制。
答案 3 :(得分:0)
JAXB处理anyType
的基本原理可以在JAXB(JSR-22)规范的6.3.3节中找到,并引用如下:
6.3.3xsd:anyType
xsd:anyType is the root of the type definition hierarchy for a schema. All
complex type definitions in a schema implicitly derive from xsd:anyType.
Given that the JAXB 2.0 architecture does not define a common base class for
all JAXB class bindings of complex type definitions, the only possible binding
property base type binding for xsd:anyType is to java.lang.Object.
This binding enables all possible type and element substitutions for an element
of type xsd:anyType.
CODE EXAMPLE 6-1 Binding of element with type xsd:anyType
<xs:element name="anyContent/> <!--@type defaults to xs:anyType-->
<xs:complexType name="base">
<xs:sequence>
<xs:element ref="anyContent/>
<xs:element name="anyContentAgain" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>
public class Base {
void setAnyContent(Object obj);
Object getAnyContent();
void setAnyContentAgain(Object obj);
Object getAnyContentAgain();
}
A schema author defines an element to be of type xs:anyType to defer
constraining an element to a particular type to the xml document author.
Through the use of xsi:type attribute or element substitution, an xml
document author provides constraints for an element defined as xs:anyType.
The JAXB unmarshaller is able to unmarshal a schema defined xsd:anyType
element that has been constrained within the xml document to an easy to access
JAXB mapped class. However, when the xml document does not constrain the
xs:anyType element, JAXB unmarshals the unconstrained content to an
element node instance of a supported DOM API.
Type substitution is covered in more detail in Section 6.7.4.1 and 6.7.4.2.
Element substitution is covered in more detail in Section 6.7.5.