لماذا فشل اختبار XML الخاص بي مع مخطط XSD بسيط للغاية؟
-
26-09-2019 - |
سؤال
أنا مبتدئ قليلاً في مخطط XML. سأكون ممتنًا إذا ساعدني أحدهم في فهم سبب عدم التحقق من صحة XML الخاصة بي مع المخطط:
ها هو مخططي:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/testSchema" xmlns="http://www.example.org/testSchema">
<xs:element name="Employee">
<xs:complexType>
<xs:sequence>
<xs:element name="Name">
<xs:complexType>
<xs:sequence>
<xs:element name="FirstName" />
<xs:element name="LastName" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
ها هو اختبار XML الخاص بي:
<?xml version="1.0" encoding="UTF-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
أحصل على خطأ يتبع بواسطة Eclipse XML Editor/Deveritor:
cvc-complex-type.2.4.a: Invalid content was found starting with element 'Name'. One of '{Name}' is expected.
لم أستطع أن أفهم ما هو الخطأ في هذا المخطط أو XML الخاص بي.
المحلول
كل ما عليك فعله هو إضافة elementFormDefault = "مؤهل" وستكون على ما يرام. لفهم هذا السلوك ، اقرأ "هل أنت مؤهل؟" الجزء @ http://msdn.microsoft.com/en-us/library/ms950796.aspx
نصائح أخرى
فقط أضف elementFormDefault = "المؤهلة" إلى مخطط attribues.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/testSchema"
elementFormDefault="qualified"
xmlns="http://www.example.org/testSchema">
وسيعمل الأصلي الخاص بك
<?xml version="1.0" encoding="utf-8"?>
<Employee xmlns="http://www.example.org/testSchema">
<Name>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Name>
</Employee>
يبدو أنك تفشل في تحديد كيفية التحقق من صحة FirstName
و LastName
عناصر؛ إعطاء المواصفات العناصر لهؤلاء type="xsd:string"
(أين xsd
يجب تعيينها إلى مساحة اسم بيانات مخطط XML ، بالطبع) وينبغي أن يكون كل شيء على ما يرام.
لكنك أفضل حالًا في عدم تعشيش تلك العناصر عميقة جدًا. ضعهم جميعًا على نفس المستوى والاستخدام ref="Name"
لربطهم جميعًا معًا بدلاً من ذلك ؛ يجعل مخططك أكثر مرونة وقابلة للاستخدام.