首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Xjc在xmlns:xsi和xsi:noNamespaceSchemaLocation的XSD属性定义上抛出“无效属性值,而不是有效的NCName”。

Xjc在xmlns:xsi和xsi:noNamespaceSchemaLocation的XSD属性定义上抛出“无效属性值,而不是有效的NCName”。
EN

Stack Overflow用户
提问于 2015-09-15 18:50:35
回答 2查看 5.9K关注 0票数 2

我正在使用xjc创建JAXB类。我使用以下命令

代码语言:javascript
运行
复制
xjc -d src -p com.abc.proj the-types.xsd

我收到以下错误

代码语言:javascript
运行
复制
parsing a schema...
[ERROR] s4s-att-invalid-value: Invalid attribute value for 'name' in element 'attribute'. Recorded reason: cvc-datatype-valid.1.2.1: 'xmlns:xsi' is not a valid value for 'NCName'.
  line 106 of file:/C:/Port/Field/the-types.xsd

[ERROR] src-attribute.3.1: One of 'ref' or 'name' must be present in a local attribute declaration.
  line 106 of file:/C:/Port/Field/the-types.xsd

[ERROR] s4s-att-invalid-value: Invalid attribute value for 'name' in element 'attribute'. Recorded reason: cvc-datatype-valid.1.2.1: 'xsi:noNamespaceSchemaLocation' is not a valid value for 'NCName'.
  line 107 of file:/C:/Port/Field/the-types.xsd

[ERROR] src-attribute.3.1: One of 'ref' or 'name' must be present in a local attribute declaration.
  line 107 of file:/C:/Port/Field/the-types.xsd

Failed to parse a schema.

从-the es.xsd文件的**<xs:attribute name="" ..>**开始的第106行和第107行出现了错误。.xsd文件是:

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">

         <xs:element name="the-types">
               <xs:complexType>
                     <xs:sequence>
                           <xs:element name="AType" maxOccurs="unbounded">

                            ...............


                           </xs:element>
                     </xs:sequence>
                     **<xs:attribute name="xmlns:xsi" type="xs:string"></xs:attribute>
                     <xs:attribute name="xsi:noNamespaceSchemaLocation" type="xs:string"></xs:attribute>**
               </xs:complexType>
         </xs:element>
   </xs:schema>

我从链接元素“元素”中“名称”的属性值无效中了解到我们不能使用的内容:名称。但这没什么用。如何更改xsd以获得JAXB类。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-15 19:04:24

错误S4s-att-无效-值:元素“属性”中“名称”的无效属性值。记录原因: cvc-datatype-valid.1.2.1:'xmlns:xsi‘不是'NCName’的有效值。

这的确是不合法的。你似乎在尝试两件事:

  • 定义属性xmlns:xsi。这不是一个属性(虽然它看起来像一个属性)。以xmlns:开头的任何内容都是名称空间声明,并为其后面的前缀定义名称空间。
  • 定义属性xsi:noNamespaceSchemaLocation。这是为XSI保留的,不应在XSD中单独指定。当您需要此属性为无命名空间元素定义XSD的位置时,只需在要使用XSI名称空间时定义XSI命名空间即可。

你不需要声明其中任何一个。它们神奇地存在,并被所有符合标准的XSD验证器所理解。它们是保留的(虽然允许声明XSI属性,但不应该尝试,因为它可能会覆盖标准行为,但更有可能的是,它将被忽略)

错误声明它们不是NCName。这是正确的。NCName不包含冒号。这意味着,您只能定义名称的本地部分。

更新(忘记了最后一行)

但这没什么用。如何更改xsd以获得JAXB类。

确保您的XSD是有效的(通过删除这些行来修复上述两个错误),您应该会很好。您仍然可以使用这些属性,如果您这样做了,JAXB将理解它。事实上,JAXB期望并要求您这样做,除非您在验证XML时告诉它模式位于何处。

如果您想了解名称空间如何与模式设计交互,这篇关于XFront的文章是很好的读物:零、一个或多个命名空间。它将帮助您理解与XSD设计有关的命名空间概念,以及为什么只能在名称中使用NCName

票数 2
EN

Stack Overflow用户

发布于 2015-09-15 19:06:23

您试图创建的属性是不正确的。属性的名称必须是NCName (即非殖民化名称),因此不能使用您所拥有的值(更多信息请参见这里 )。看看您要定义的属性,我可以告诉您,您不需要在模式中定义这些属性。这是因为它们已经在其他模式中定义了(在本例中是XML实例模式)。因此,这些属性可以添加到XML文档中。如下所示:

代码语言:javascript
运行
复制
<the-types>
   <AType xsi:schemaLocation="location.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</the-types>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32593453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档