XML Schema:具有仅包含文本的属性的元素?
Posted
技术标签:
【中文标题】XML Schema:具有仅包含文本的属性的元素?【英文标题】:XML Schema: Element with attributes containing only text? 【发布时间】:2010-09-27 10:56:16 【问题描述】:我很难找到这个。如何在 XML 模式文件中为 XML 定义一个元素,如下所示:
<option value="test">sometext</option>
我不知道如何定义一个类型为xs:string
并且还具有属性的元素。
这是我目前所得到的:
<xs:element name="option">
<xs:complexType>
<xs:attribute name="value" type="xs:string" />
</xs:complexType>
</xs:element>
【问题讨论】:
【参考方案1】:试试
<xs:element name="option" type="AttrElement" />
<xs:complexType name="AttrElement">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" type="xs:string">
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
【讨论】:
我在尝试您的代码时遇到以下异常 - org.xml.sax.SAXParseException: src-resolve: 无法将名称“AttrElement”解析为 (n)“类型定义”组件。为什么会这样? 如果是这样,可能是因为您的架构文档有一个目标命名空间,您需要使用前缀名称来指向该类型。 (如果前缀tns
绑定到架构文档的目标命名空间,您将使用type="tns:AttrElement"
来引用类型。)
@Ashwin 您可能需要使用类型命名空间引用类型(type="tns:AtrElement"
如果 XSD 的默认命名空间是 xs 而不是文档的 targetNamespace。通常在这种情况下定义 tns
并使用。【参考方案2】:
... 或内联等效项:
<xs:element name="option">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="value" type="xs:string" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
【讨论】:
我发现在complexType
中定义simpleContent
真的很不直观。但话又说回来,它是 XSD,似乎没有什么是真正直观的。还是谢谢! :-)
这将在 IntelliJ (V12.1.3) 中为我显示一个错误:value 属性是“不允许的”。使用 complexContent 而不是 simpleContent 修复了它。
@CrBruno 最好为此打开一个专门的 SO 问题。随意在 cmets 中链接到它(并指向这个讨论)【参考方案3】:
我知道它不一样,但它对我有用:
<xsd:element name="option">
<xsd:complexType mixed="true">
<xsd:attribute name="value" use="optional" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
【讨论】:
以上是关于XML Schema:具有仅包含文本的属性的元素?的主要内容,如果未能解决你的问题,请参考以下文章