سؤال

أحتاج إلى تطبيق القيود في ملف XML كبير ، مثل هذا:

<library>
    <book>
        <bookAuthor ID="1" nameAlias="PeerBR jr"/>
    </book>
    <book>
        <bookAuthor ID="1"/>
    </book>
</library>
<authorCatalogue>
    <author ID="1" name="PeerBr"/>
</authorCatalogue>

أحتاج إلى معرف كل Bookauthor للإشارة إلى مؤلف صالح.

أجد "XPath المقيد" خرقاء للغاية للعمل معه ، ولكن ربما يطل على شيء ما. هل أنا محق في تحديد القيد بهذه الطريقة:

<xs:keyref name="bookAuthor" refer="author">
    <xs:selector xpath="library/book/bookauthor"/>
    <xs:field xpath="@ID"/>
</xs:keyref>        
<xs:key name="author">
    <xs:selector xpath="authorCatalogue/author"/>
    <xs:field xpath="@ID"/>
</xs:key>

إنه يعمل ، لكن ملفي متداخل في الواقع ، لذلك يصبح فوضويًا حقًا. بالإضافة إلى أنني يجب أن أكتب قيدًا جديدًا لـ "Library/Book/Coauthor". لا يوجد شيء أكثر أناقة يمكنني فعله؟ ألا يمكنني اختصار المحدد؟

هل يمكنني تقييد تطبيق القيد ("bookauthor [amealias])؟

شكرا مقدما لمساعدتكم.

هل كانت مفيدة؟

المحلول

وجدت الجواب في "مخطط XML" لأوريلي. لا بأس أن يكون:

  • المسارات النسبية مع عنصر الطفل
  • مساحات الأسماء
  • جميع العناصر ("*")
  • أي عنصر طفل (".//bookauthor" في حالتي سيفعل الخدعة)

ليس من المقبول تضمين أي شيء خيالي ، مثل:

  • عنصر الوالدين
  • اختبارات ([amealias] ، لذلك لا توجد طريقة لتطبيق القيد فقط على العقد مع سمة namealias)
  • المسارات المطلقة

آمل أن يساعد هذا شخص ما يتعثر في هذه القضية لاحقًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top