ما هو مسموح في XPaths المقيدة (القيود)؟
-
30-09-2019 - |
سؤال
أحتاج إلى تطبيق القيود في ملف 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)
- المسارات المطلقة
آمل أن يساعد هذا شخص ما يتعثر في هذه القضية لاحقًا.
لا تنتمي إلى StackOverflow