我对XML和一般的编码还很陌生。
我正在尝试使用组合在一起的模式来验证XML标记。我的元素之一利用xml:id属性。看起来像这样:$value = strip_tags($test123);
if (strcmp(trim($value),'APPROVAL')==0) {
echo 'Transaction is APPROVED!';}
else{
echo 'Transaction is DECLINED';}
。在我的模式中,我在元素声明中遵循了推荐的结构,并带有<item xml:id="MAT_10_23">
。这是完整的:
<xs:attribute name="id" type="xs:ID"/>
但是,当我尝试验证其标记时,系统提示“属性xml:id不允许出现在元素中”。我试过在架构中分别声明属性。看起来像这样:
<xs:element name="item">
<xs:complexType mixed="true">
<xs:sequence>
<xs:element name="label">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
但这不会改变任何东西。要成功验证XML标记,我需要在架构中进行哪些更改?
答案 0 :(得分:0)
当您希望属性位于XML名称空间中时,您已经在无名称空间中声明了具有本地名称id的属性。您需要:
(a)用
替换属性声明<xs:attribute ref="xml:id"/>
(b)为XML命名空间的模式添加xs:import(包含此属性的声明):
<xs:import namespace="http://www.w3.org/XML/1998/namespace"/>
您可能还需要添加一个schemaLocation
属性以提供此架构文档的副本的位置-一些架构处理器会识别名称空间并知道在哪里可以找到其定义,但是我不认为所有处理器都是如此。